运行大型php脚本时不要超时


Run large php scripts without them timing out?

我试图在我的网站上用GD大量压缩图像,当我尝试压缩一个带有20个图像的小文件夹时,它工作得很好,但我有大约70k图像,当我使用脚本时,我得到一个超时和500个错误消息。这是代码:

$di  = new RecursiveDirectoryIterator('./image/data/');
$iter  = new RecursiveIteratorIterator($di);
$regexIter = new RegexIterator(
$iter, '/^.+'.jpg$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($regexIter as $fileInfo) {
  $img = imagecreatefromjpeg($fileInfo[0]);  
  imagejpeg($img,$fileInfo[0],
 75);
}

现在我已经搜索了这个主题,发现我可以使用:

set_time_limit(); 

所以我决定添加

set_time_limit(100000); 

但这是不工作,我仍然超时消息和没有图像被压缩

你有什么建议吗?我怎样才能高效率地完成这项工作?

完成一件大事的好方法是把它分成更多的部分。

。您将处理过的图片移动到另一个目录中,并在100张图片之后停止脚本。然后你只需要重新启动相同的脚本几次,所有的图片都完成了

要回答您的问题,增加超时时间是您应该问您的主机提供商的问题。当然,他们可能会拒绝这样做。

一个好主意是将脚本转换为从命令行运行。处理速度更快,超时时间通常要高得多。但是,它要求您在服务器上具有命令行访问权限。

最后也是首选的选项是将您的脚本转换为"链接"。由于大部分时间将用于实际的图像转换,因此我将这样做:

  • 获取所有图像及其完整路径的列表;在会话或临时表中保存
  • 开始处理列表中的每个图像,完成后将其删除
  • 在每个图像中,检查自脚本开始以来经过了多少时间,如果它接近超时,则使用附加的"offset"参数重定向到相同的脚本