注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

让PHP启动多个脚本同进运行的解决方案(PHP模似多线程)  

2011-03-15 17:17:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

我们只知PHP本身是不支持多线程,但是有时候我们又需要这样的功能,比如:同时启动多个脚本执行任务。那怎么办?

其实,我们可以借助于操作系统的多进程的并发执行能力,以及WEB 服务器的多线程能力(进程与线程的区别请查阅相关资料)来解决。

 

方案一 操作系统的多进程的并发执行能力

/启动发送脚本
foreach($tasks as $task){
    $campaign_id = $v['id'];
    $cmd = "php do_task.php task_id=$task";
    launch($cmd);
    echo "Campaign ID $campaign_id launched \n.....";
}

//在do_task.php中做具体的任务
/**
 * 执行任务
 *
 * @return unknown
 */
function launch($cmd){
    
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
         return pclose(popen("start /b " . $cmd, 'r')); //windows中启动进程格式
    } else {
          return pclose(popen($cmd . " > /dev/null &", 'r')); //Linux中启动进程格式
    }
}

不过,注意官网上的说明:

resourcepopen ( string$command , string$mode )

打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。

返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets()fgetss()fwrite()

如果出错返回 FALSE

Note:

如果需要双向支持,使用 proc_open()。()相关的还有:pcntl_fork()等

另注:关于window 'start' 命令参看:http://www.sniperx.info/2010/windows-xp-dos-start.html

 

方案二 WEB 服务器的多线程能力

         1 使用fsockopen() 或者stream_socket_client()函数打开一个socket链接,参看:

http://fc-lamp.blog.163.com/blog/static/1745666872010391220921/

         2 通过HTML(在HTML中的IMG,<script  src="XXX"></script>,Ifream等) 或者JS来请求实现。


  评论这张
 
阅读(349)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017