2010-11-04 110 views
1

我的php脚本创建图像的缩略图。有时,当它处理大量图像时,由于服务器上的时间限制,脚本必须运行很长时间并在60秒后结束。超时后重复php脚本

我可以告诉脚本在59sek后超时,然后重复吗?

我需要一些想法。

编辑: 我不认为我的虚拟主机可以让我改变的max_execution_time

+0

我认为你不能改变服务器的时间限制吗? – 2010-11-04 15:09:47

回答

0

耶如上建议使用set_time_limit这将增加sript执行超时。

如果您正在循环处理多个文件,那么在您将文件处理到预计的持续时间之前,每次都会执行set_time_limit。也就是说,如果假定一个文件采取最大执行处理使用set_time_limit(60)

2

我无法相信这就是我的回答之前..

loopMe.php:

<meta http-equiv="refresh" content="65;url=loopMe.php"> 
<?php 

    /* code that is timing out here */ 

?> 

你最好的打赌虽然可能是看像set_time_limit()像其他人所建议的。

重要提示:此循环将永不结束。但是,只要脚本成功结束,您就可以拥有一个会话变量,例如$_SESSION['stopLoop']。在打印元刷新行之前,您可以检查它的值。

+0

+1是目前最实用的答案,值得认真考虑:纯粹由PHP驱动的解决方案将更难以实施! – 2010-11-04 15:21:29

+0

用于在脚本实际完成时设置标志的+1。那么你显然可以展示你的成功信息和其他任何东西。 – 2010-11-04 15:54:05

1

如果您不想修改代码,请使用set_time_limit(0),该值设置为没有时间限制。

set_time_limit(0) 

http://php.net/manual/en/function.set-time-limit.php

我不建议使用,虽然,如果你的系统的增长,这将花费很长的时间处理。最好重新编码,只有当您的服务器处于低流量时才能运行,并控制处理数据的时间。

例如,您可以将需要处理的数据存储在队列中,并尽可能在每个晚上的时间寡妇处理一次。

0

如果你的服务器不是用php运行在safe mode你可以使用set_time_limit($ time);其中$ time是需要执行脚本的时间,例如,您可以使用set_time_limit(240);设置4分钟的超时时间。

或者例如,您可以在脚本中找到已经过了多少时间,并在超时过期之前添加几秒钟(set_time_limit(10);),直到脚本结束。 (如果您多次致电set_time_limit(),您将添加每次通话的时间。)

使用this代码,您可以计算每个图像的经过时间和之后,将其与服务器超时进行比较。

此外,您还可以修改脚本以记录已处理的图像,并在超时的情况下继续处理同一点的任务。

您可以从服务器中的cron作业运行脚本(如果允许的话)使其定期运行。看看这个article