我找到了这个PECL package called threads,但是还没有发布。PHP网站上什么也没有。
发布于 2008-10-16 18:55:23
据我所知没有任何可用的东西。下一个最好的办法就是让一个脚本通过CLI执行另一个脚本,但这有点初级。这取决于你想做什么以及它有多复杂,这可能是一个选择,也可能不是。
发布于 2008-10-17 02:18:49
以下是Wilco建议的一个示例:
$cmd = 'nohup nice -n 10 /usr/bin/php -c /path/to/php.ini -f /path/to/php/file.php action=generate var1_id=23 var2_id=35 gen_id=535 > /path/to/log/file.log & echo $!';
$pid = shell_exec($cmd);
基本上,这将在命令行执行PHP脚本,但会立即返回PID,然后在后台运行。(回声$!确保除PID外不返回任何其他内容。)这允许您的PHP脚本继续或退出,如果你想。当我使用它时,我将用户重定向到另一个页面,在那里每隔5到60秒进行一次AJAX调用,以检查报告是否仍在运行。(我有一个表来存储gen_id和与之相关的用户。)check脚本运行以下内容:
exec('ps ' . $pid , $processState);
if (count($processState) < 2) {
// less than 2 rows in the ps, therefore report is complete
}
这里有一篇关于这项技术的简短文章:http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/
发布于 2008-10-16 22:30:26
您可以使用pcntl_fork()来实现类似于线程的功能。从技术上讲,它是独立的进程,所以两者之间的通信不像线程那么简单,我相信如果apache调用PHP,它就不会工作。
https://stackoverflow.com/questions/209774
复制相似问题