我正在编写一个php脚本,做一些后端的东西,需要每8小时左右运行一次。脚本需要一段时间才能执行。更糟糕的是,我在浏览器上试了试,在脚本终止之前,服务器的连接就被重置了。我的问题是-如果我直接运行它,即。php -a file.php作为cron作业,在执行时是否有任何内部时间限制?此脚本可能需要2-5分钟才能完成,并且无法中断。我以前从来没有这样做过,所以我不确定php在运行繁重的脚本时是否有怪癖。
发布于 2012-11-13 06:34:32
如前所述,CLI脚本在默认情况下没有时间限制。
但我也想提一下您的cron工作方法的一个替代方案:
您可以从can服务器控制下的PHP脚本派生CLI PHP脚本。我已经做过很多次了。如果您有一个执行时间较长的脚本,而该脚本必须由网站用户操作触发(例如,构建一个非常大的归档文件,并在文件完成时通过电子邮件发送下载链接),则此功能尤其有用。我通常使用popen()函数从the服务器PHP脚本派生CLI脚本。这样就可以很好地将参数传输到新的脚本实例,如下所示:
$bgproc = popen('php "/my/path/my-bckgrnd-proc.php"', 'w');
if($bgproc===false){
die('Could not open bgrnd process');
}else{
// send params through stdin pipe to bgrnd process:
$p1 = serialize($param1);
$p2 = serialize($param2);
$p3 = serialize($param3);
fwrite($bgproc, $p1 . "\n" . $p2 . "\n" . $p3 . "\n");
pclose($bgproc);
}在CLI脚本中,您将收到如下参数...
$fp = fopen('php://stdin', 'r');
$param1 = unserialize(fgets($fp));
$param2 = unserialize(fgets($fp));
$param3 = unserialize(fgets($fp));
fclose($fp);...and可以在with服务器的控制下用它们做任何需要很长时间的事情。
此技术在*nix和Windows环境中同样有效。
发布于 2012-11-13 06:15:04
不,当从命令行执行php时,php本身没有时间限制。
但也可以有其他的超时,比如连接到mysql。因此,如果您的代码中有mysql连接,请确保它处于活动状态,或者将mysql超时设置为足以运行您的代码的值。另一件事:我看到一些虚拟主机提供商在几分钟内就终止了php应用的运行。因此,请确保您的提供商不会这样做。
发布于 2012-11-13 06:16:27
默认情况下,PHP脚本在30秒后超时,这可以通过编辑PHP.ini或在脚本顶部添加以下内容来覆盖。
set_time_limit(0);这将为您的脚本设置无限的执行时间,也就是说,它永远不会结束,除非脚本完成执行,或者服务器宕机,或者文件被删除,或者出现任何致命错误。
另外,
您可以将其添加到您的脚本中,并在浏览器中打开它以启动脚本,它将运行,就像您在浏览器中打开它并保持浏览器打开一样。
ignore_user_abort();它只是在后台运行脚本。这两个都会对你有用。
ADD :从命令行Cli运行脚本时,默认超时为0。(无超时)
https://stackoverflow.com/questions/13352388
复制相似问题