0

我正在使用 cronjob 在共享服务器上运行一个非常非常慢的 PHP 脚本。(该脚本执行一些 HTTP 请求,这些请求会不时在服务器上暂停其执行……它在大约 15-20 秒内完成执行。)

问题是 cronjob 不时终止,共享服务器的帮助台告诉我它不应该连续运行超过 5 秒。

所以我想(在开始认真的优化任务之前)执行脚本并在脚本继续运行时立即返回。直到现在我想到了两种方法:

  1. Cronjob 不会等待 PHP 脚本完成其工作。
  2. Cronjob 将执行一个虚拟 PHP 脚本,该脚本将调用主 PHP 脚本并立即返回,而无需等待第二个脚本返回。

我已经在网上阅读了这两个选项,尤其是在这个网站上,并没有找到真正有效的东西:如果第一个脚本立即完成,multi_curl 不会做任何事情......

提前致谢。


使用我刚刚提出的可能解决方案进行编辑:

header("Content-Length: 0");
header("Connection: close");
flush();

$mainUrl = 'mySecondScript.php';

$active= null;
$mch = curl_multi_init();  
$ch1 = curl_init($mainUrl);
curl_setopt($ch1, CURLOPT_HEADER, 0);

curl_multi_add_handle($mch, $ch1);  
$resultCurl = curl_multi_exec($mch, $active);  

do {
$resultCurl = curl_multi_exec($mch, $active);
} while ($resultCurl == CURLM_CALL_MULTI_PERFORM);

它可能类似于您在此处或网络上其他任何地方可能熟悉的代码 - 但如果我像其他人为我编写的那样使用它,它将无法工作 - 只能这样!

4

1 回答 1

1

如果在您的主机上运行的用户 PHP 具有执行权限,您可以使用shell_exec和 & 使其运行后台进程,因此在您的 PHP 文件中是这样的:shell_exec('/path/to/php /path/to/file >/dev/null 2>&1 &')

于 2012-12-14T16:38:59.523 回答