运行大型PHP脚本,没有超时?

时间:2015-08-09 19:29:45

标签: php

我正在尝试使用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); 

但这不起作用,我仍然是超时消息,没有压缩图像

您对我如何有效地执行此操作有任何建议,因为键入每个文件夹需要数周时间。

2 个答案:

答案 0 :(得分:-1)

做大工作的更好方法是在更多部分做这些。

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

答案 1 :(得分:-1)

要回答您的问题,您应该向托管服务提供商询问是否应该延长超时时间。当然,他们可能会拒绝这样做。

一个好主意是将脚本转换为从命令行运行。处理速度更快,超时通常更高,更高。但话说回来,它需要您在服务器上进行命令行访问。

最后一个选项是将您的脚本转换为“链接”。由于大部分时间都花在进行实际的图像转换上,所以我会这样做:

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