我有一个备份脚本,它将网站的所有文件备份到zip文件(使用与this question类似的脚本)。但是,对于大型网站,脚本会在完成之前超时。PHP备份脚本超时
有没有什么办法可以延长脚本运行的时间长度?这些网站运行在共享的Windows服务器上,所以我无法访问php.ini文件。
我有一个备份脚本,它将网站的所有文件备份到zip文件(使用与this question类似的脚本)。但是,对于大型网站,脚本会在完成之前超时。PHP备份脚本超时
有没有什么办法可以延长脚本运行的时间长度?这些网站运行在共享的Windows服务器上,所以我无法访问php.ini文件。
简单地说,不要发起HTTP请求来启动PHP脚本。您所遇到的边界是因为您使用HTTP请求而设置的,这意味着您可以暂停。更好的解决方案是使用“cronjob”或Microsoft称之为“计划任务”来实现此目的。大多数托管服务提供商将允许您在特定时间执行此类任务。通过从命令行调用脚本,您不必再担心超时问题,但您仍然有可能遇到内存问题。
如果你有一个体面的托管服务提供商,但它为什么不提供每日备份开始? :)
托管服务提供商都需要进行每日备份;此脚本适用于客户端自己的备份副本,而无需拨动FTP – whostolemyhat 2011-05-23 15:14:22
+1这里最好的答案是,不要创建网页来进行备份。 cron或计划任务 – 2011-05-23 19:30:55
@什么;仍然,使用浏览器来请求备份脚本通常是非常糟糕的想法,这太容易出错了。致电托管服务提供商,并要求他们提供cronjobs或计划任务的可能性。 – 2011-05-24 07:18:17
设定的限制时间想到的,但仍可以通过php.ini设置限制
参数或者set_time_limit(0);
如果你是在一个共享的服务器环境,你没有访问php.ini文件,或者你要设置在每个站点为基础的PHP参数,你可以使用.htaccess
文件(在Apache网络服务器上运行时)。
例如,为了改变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
如果您需要更多说明,请让我知道。
不幸的是,这些是IIS服务器,所以htaccess文件将无法工作:( – whostolemyhat 2011-05-10 09:01:17
好吧没有probs ..谢谢你的回应。希望你已经解决了set_time_limit(0)方法建议的问题..如果不是你仍然可以尝试ini_set()方法 – 2011-05-10 09:08:45
即使有可能使用.htaccess,我也不建议使用它来为单个脚本设置配置。仅限于备份脚本而不是整个页面更改限制 – binaryLV 2011-05-11 07:10:32
您可以使用下面的脚本开始:
<?php
if(!ini_get('safe_mode')){
set_time_limit(0); //0 in seconds. So you set unlimited time
}
?>
,并在脚本的末尾使用flush()函数告诉PHP来发送它已经产生了什么。
希望这可以解决您的问题。
尝试的功能:
set_time_limit(300);
在Windows上,有轻微的可能性,你的虚拟主机提供商允许您通过设置搭在你的web服务器的根目录上传php.ini文件。如果是的话,上传包含一个php.ini文件:
max_execution_time = 300
要检查是否设置的工作,做一个phpinfo()
并检查本地价值为的max_execution_time。
是脚本给出“超出最大执行时间xx秒”的错误消息,还是显示空白页?如果是这样,ignore_user_abort可能是你要找的。它告诉php如果与浏览器的通信丢失,不会停止脚本执行,这可以保护您免受通信中涉及的其他超时机制的影响。
基本上,我会在你的脚本开始这样做:
set_time_limit(0);
ignore_user_abort(true);
此说,你不应该使用一个HTTP调用运行备份来作为建议由贝瑞Langerak。 cronjob是你应该使用的。随着set_time_limit(0)
,它可以永远运行。
在共享主机环境中,可能会禁止更改max_execution_time
指令,并且您可能无法访问任何类型的命令行,但恐怕没有简单(并且干净)的解决方案问题,最简单的解决方案通常是使用主机提供的备份解决方案(如果有的话)。
选项1:要求托管公司将备份置于某处可以通过php访问,因此php文件可以重定向备份。
选项2:将备份脚本分成多个部分,也许使用一些ajax连续调用脚本几次,给用户一个很好的进度条,并将脚本调用的结果与php中的zip结合起来并提供下载。
这里可能最好的选择是使用[shell_exec()](http://lv.php.net/manual/en/function.shell-exec.php)在后台运行它,同时也忽略超时设置。 – arma 2011-05-10 08:35:18
Plz不要忘记接受一个答案,如果它解决了你的问题。 – 2011-05-19 12:09:25
在Windows上运行PHP?这听起来像个坏主意。然后再一次,在Mac上运行IE也是如此。 – Xeoncross 2011-05-20 16:03:14