PHP备份脚本超时

时间:2011-05-10 08:32:57

标签: php backup

我有一个备份脚本,用于将网站的所有文件备份到zip文件(使用类似于this question的答案的脚本)。但是,对于大型网站,脚本会在完成之前超时。

有什么办法可以延长脚本运行的时间长度吗?这些网站在共享的Windows服务器上运行,因此我无法访问php.ini文件。

7 个答案:

答案 0 :(得分:14)

如果您在共享服务器环境中,并且您无权访问php.ini文件,或者您希望基于每个站点设置php参数,则可以使用.htaccess文件(在Apache Web服务器上运行时)。

例如,要更改max_execution_time值,您只需编辑.htaccess(位于您网站的根目录,通常可通过FTP访问),然后添加以下行:

php_value max_execution_time 300

其中300是您希望设置php脚本的最长执行时间的秒数。

在php文件中使用ini_set函数还有另一种方法

例如。要将执行时间设置为5秒,您可以使用

ini_set('max_execution_time', 300); //300 seconds = 5 minutes

如果您需要进一步澄清,请与我们联系。

答案 1 :(得分:12)

设置时间限制,但可能仍受php.ini设置的限制

参数或者set_time_limit(0);

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

答案 2 :(得分:11)

简单地说;不要发出HTTP请求来启动PHP脚本。您正在设置的边界已设置,因为您正在使用HTTP请求,这意味着您可能会超时。更好的解决方案是使用“ cronjob ”或Microsoft称之为“计划任务”的方式实现此目的。大多数托管服务提供商将允许您在设定的时间运行此类任务。通过从命令行调用脚本,您不必再担心超时,但您仍有可能遇到内存问题。

如果您有一个不错的托管服务提供商,为什么它不提供每日备份开始? :)

答案 3 :(得分:6)

您可以在脚本的开头使用以下内容:

<?php
if(!ini_get('safe_mode')){ 
        set_time_limit(0); //0 in seconds. So you set unlimited time
}
?>

在脚本结束时使用flush()函数告诉PHP发送它生成的内容。

希望这能解决你的问题。

答案 4 :(得分:3)

脚本是否显示“超出xx秒的最长执行时间”错误消息,或者是否显示空白页?如果是这样,ignore_user_abort可能就是你要找的东西。如果与浏览器的通信丢失,它会告诉php不要停止脚本执行,这可能会保护您免受通信中涉及的其他超时机制的影响。

基本上,我会在您的脚本开头执行此操作:

set_time_limit(0);
ignore_user_abort(true);

根据Berry Langerak的建议,您不应该使用HTTP调用来运行备份。一个cronjob是你应该使用的。与set_time_limit(0)一起,它可以永远运行。

在共享托管环境中,可能不允许更改max_execution_time指令,并且您可能无法访问任何类型的命令行,我担心没有简单(干净)解决您的问题,最简单的解决方案通常是使用主机提供的备份解决方案(如果有的话)。

答案 5 :(得分:2)

尝试功能:

set_time_limit(300);

在Windows上,您的webhost可能会通过在您的网络服务器的根目录中上传php.ini文件来覆盖设置。如果是这样,请上传包含以下内容的php.ini文件:

max_execution_time = 300

要检查设置是否有效,请执行phpinfo()并检查本地值以获取max_execution_time。

答案 6 :(得分:1)

选项1:要求托管公司将备份放在php可访问的地方,这样php文件就可以重定向备份。

选项2:将备份脚本分成多个部分,也许使用一些ajax连续几次调用脚本,给用户一个很好的进度条,并将一个zip的脚本调用结果与php和提供下载。