Mar*_*rco 5 php max command-line-interface execution-time
我是数据库的唯一管理员.我想运行一次性脚本,基本上需要大约3800个扫描图像(它将增长到10万)并使用PHP exec()函数为每个图像创建几个缩略图来执行外部程序imagemagick来创建那些缩略图.
我创建了脚本,启动它,一切都完美无缺!一切都在我的本地开发服务器上完成.该脚本大约需要11分钟来创建数千个缩略图.这是每隔一年运行一次的操作,因此后果很少.
到现在为止还挺好.这是我遇到问题的时候.
我在本地开发服务器上所做的一切,我在实时服务器上进行测试.我有hostgator的共享主机帐户.在共享主机上运行我的11分钟长脚本会给出错误"超过30秒的最大执行时间...".我做了我的研究,尝试了这篇文章中的许多解决方案(增加php的最大执行时间),只是为了意识到我无法改变共享主机上脚本的最大执行时间.
我被卡住了.所以,我的问题是这里显而易见的解决方案是什么.
我正在考虑为每200张图像启动脚本,自动刷新页面并为接下来的200张图像再次运行脚本,依此类推,直到没有更多图像为止.这样我就可以确定我的共享主机上允许的最长执行时间是30秒.它看起来像是一个解决方案,但我不确定这是否是否定,如果我将遇到更大的问题,太多的负面影响..
这是明显的解决方案吗?有人遇到同样的问题吗?你们有什么建议的?
谢谢
假设您确实有理由批量重新创建缩略图,而不是像建议的那样在每次上传图像时执行此操作,我会像您一样完成 - 使用自我刷新的脚本 - 除了我不会设置修复图像数量.
相反,我会在每个图像之后拥有脚本时间,并在达到25秒时停止:
$stop = time() + 25;
while (time() < $stop) {
...find image to process, process it.
if (finished()) {
die("OK");
}
}
// Redirect to next batch of images
die(Header('Location: ....'));
Run Code Online (Sandbox Code Playgroud)
然而,就请与您的ISP,因为你的脚本可以任意视为服务的滥用,也可能被误认为是攻击.此外,询问是否有一天的首选时间进行此类维护.
另一种做同样事情的方法是,每当有人点击主页时,脚本就会运行非常少量的图像(可能只有一个).这具有使脚本的额外负载模仿服务器上的实际负载,避免令人尴尬的尖峰或神秘的非零基本负载的效果.您确实需要找到一种永远不会从并行运行的脚本的不同实例中选择相同图像的方法(当我不得不这样做时,我在数据库中设置了一个标志).
| 归档时间: |
|
| 查看次数: |
628 次 |
| 最近记录: |