2014-05-08 123 views
1

我正在研究一个需要发送大量HTTP请求并更新表的Web应用程序,这将阻止PHP执行。所以我虽然可能需要编写一个单独的PHP脚本并通过我的主应用程序运行它。我尝试过Exec,但程序仍在等待脚本执行。PHP - 并行处理

exec('php do_job.php'); 

我甚至试过输出重定向到一个文件PHP.Net提示:

注:如果程序开始使用此功能,以便它 继续在后台运行,程序的输出必须是 重定向到一个文件或另一个输出流。如果不这样做, 会导致PHP挂起,直到程序执行结束。

$result = exec('php do_job.php > output.txt &',$output); 

但仍然没有成功......再往下同一页我来到这个防空火炮:

$command = 'php do_job.php'; 
$shell = new COM("WScript.Shell"); 
$shell->run($command, 0, false); 

仍然没有sucess ......最后我想:

pclose(popen("start /B ". $command, "r")); 

我在这里做错了什么?

我在localhost(XAMPP-Windows)上开发我的应用程序,稍后我会在Linux主机上发布它。我最后的手段是通过CRON作业运行脚本。这是唯一的方法吗?

+0

1.“发送很多HTTP请求并更新表”< - 详细说明。 2. http://pivotallabs.com/preemptive-optimization/ – Sammitch

+0

3.使用InnoDB,它具有行级锁而不是myISAM的表级垃圾。 – Sammitch

+0

“发送很多HTTP请求并更新表” - >我有一堆用户ID,我需要为每个ID调用一个API来获取信息,然后更新我的表。这些API调用将需要时间,而不是节省... –

回答

2

通过在命令结尾添加&,您可以在后台运行任何命令。在这里,我将o/p重定向到/ dev/null以避免挂起(对于Linux)。

exec('php do_job.php > /dev/null &'); 

如果你想看到命令的o/p,你可以将它重定向到一个文件。

exec('php do_job.php > full_path_to_file &'); 
+1

除OP是在Windows上。 – lafor

+1

我不认为这可以在Windows上运行:exec('php do_job.php> output.txt &'); –

+0

@ Ali.BI已在Windows中检查并为我工作.. – Harikrishnan