致命错误:在php中生成大量缩略图时超出了最大执行时间

时间:2010-11-08 04:33:37

标签: php linux thumbnails

我正在尝试编写一个执行以下操作的PHP脚本:

  1. 从给定目录中的存档中提取所有文件(使用exec函数实际运行7z)

  2. 列出所有图像文件(jpg,jpeg,gif,png)并将它们存储在一个数组中(再次使用exec运行“ls”并仅存储数组中的图像,我比较扩展名)

  3. 遍历数组并为每个图像:
    1. 将该图片移至唯一文件夹
    2. 在同一个唯一文件夹中生成缩略图(我使用PHP Thumbnailer
    3. 在数据库中记录新图像
  4. 对于少量图片,我会说脚本运行正常(可能会有很多改进)。

    我的问题是,经过一定数量(每次运行我的脚本时看起来是随机的)处理过的图像后,我收到致命错误:
    PHP致命错误:第217行/var/www/ims/public_html/dev/include/phpThumb/GdThumb.inc.php超过60秒的最长执行时间

    imagecopyresampled
    (
        $this->workingImage,
        $this->oldImage,
        0,
        0,
        0,
        0,
        $this->newDimensions['newWidth'],
        $this->newDimensions['newHeight'],
        $this->currentDimensions['width'],
        $this->currentDimensions['height']
    ); // <- this is line 217
    

    我希望有人能指出我超时的原因。 GD库是否有限? 我应该在我的linux服务器上安装专用软件来专门执行此任务吗?

    感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

60秒的时间限制适用于整个脚本化过程。它主要是为了防止流氓php子进程在加载的服务器上绑定apache子进程(或其他Web服务器资源)。

如果您使用php作为shell脚本语言而不是Web应用程序,我建议使用set_time_limit(0);或确保您在php cli解释器中运行脚本,该脚本会自动执行此操作。

如果您尝试执行大型批处理操作以响应Web服务器中的文档上载/表单发布,您可能希望使用某种作业服务器来卸载处理工作而不是保留Web服务器绑了很长一段时间。 Gearman就是这样一个系统。

答案 1 :(得分:0)

php限制允许脚本执行的时间。您可以使用set_time_limit

在php.ini或每个脚本的基础上增加此值

答案 2 :(得分:0)

转到您的php.ini文件,找到max_execution_time(我的约30%的位置)。将该数字更改为您想要的数字。

不要忘记输出脚本正在运行的指示符,以便您可以看到事情正在发生。此外,这往往会使我的CPU温度快速上升,这表明可能有更好的方法来做事。