我有一个PHP脚本,我调用它来运行MySQL数据库备份到.sql文件,TAR / GZip它们并通过电子邮件发送给我。其中一个数据库由与提供Web服务器的提供商不同的提供商托管。一切都托管在Linux / Unix上。当我运行此命令时:
$results = exec("mysqldump -h $dbhost -u $dbuser -p$dbpass $dbname > $backupfile", $output, $retval);
(仅供参考,我也尝试过使用system(),passthru()和shell_exec()。)
我的浏览器加载页面15-20秒,然后停止而不进行处理。当我使用FTP客户端查看服务器时,我可以看到几秒钟后显示生成的文件,然后构建文件大小,直到备份数据库。因此,创建了备份文件,但脚本在压缩文件并发送给我之前停止工作。
我已经检查了PHP中的max_execution_time
变量并将其设置为30秒(比页面停止工作所需的时间更长)并将set_time_limit
值设置为200秒。
任何人都知道这里发生了什么?
答案 0 :(得分:1)
您是共享主机还是这些自己的服务器?如果前者您的托管服务提供商可能已将最大执行时间设置为15-20secs并将其设置为无法覆盖(我对1& 1和这些类型的脚本存在此问题)。
答案 1 :(得分:1)
使用phpinfo()调用重新检查与执行时相关的参数......也许这就是Paolo所写的内容。
答案 2 :(得分:1)
也可能是在一段时间不活动后放弃的(反向)代理。虽然这是一个很长的镜头,但无论如何....尝试
// test A
$start = time();
sleep(20);
$stop = time();
echo $start, ' ', $stop;
和
// test B
for($i=0; $i<20; $i++) {
sleep(1);
echo time(), "\n";
}
如果第一次超时而第二次没有,我会称之为证据而非证据。
答案 3 :(得分:1)
也许提供商已经设置了超出php.ini设置的其他资源限制。 尝试
<?php passthru('ulimit -a');
如果命令可用,则应打印资源列表及其限制,例如
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 4095
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 4095
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
也许您发现的设置比共享服务器上的限制更多。
答案 4 :(得分:0)
另一方面,mysqldump -Q
几乎总是一个好主意