我正在尝试编写一个执行以下操作的PHP脚本:
从给定目录中的存档中提取所有文件(使用exec函数实际运行7z)
列出所有图像文件(jpg,jpeg,gif,png)并将它们存储在一个数组中(再次使用exec运行“ls”并仅存储数组中的图像,我比较扩展名)
对于少量图片,我会说脚本运行正常(可能会有很多改进)。
我的问题是,经过一定数量(每次运行我的脚本时看起来是随机的)处理过的图像后,我收到致命错误:
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服务器上安装专用软件来专门执行此任务吗?
感谢您的帮助。
答案 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温度快速上升,这表明可能有更好的方法来做事。