从PHP调用gzip失败

时间:2015-05-17 10:59:54

标签: php gzip system

我的数据库备份脚本直到最近都运行良好。现在我发现压缩MySQLdump(一个1.3GB文件)失败了。

<?php
echo "<pre>";
echo "Current time: ".date('Y-m-d _ H-i-s')."\n";

$state = 0;
$result = system('gzip "dumpDB - 2015-05-17 _ 12-01-31.sql"', $state);

echo "Current time: ".date('Y-m-d _ H-i-s')."\n";
echo "Result: ".$result."\n";
echo "State:  ".$state."\n";
echo "</pre>";

结果

Current time: 2015-05-17 _ 12-12-40
Current time: 2015-05-17 _ 12-13-40
Result: 
State:  9

对我而言,这看起来像是超时,因为执行总是花费大约一分钟(但这可能是巧合)。很遗憾,我无法在9中找到值$state的含义。在尝试解压缩时,我收到以下消息:

gzip: dumpDB - 2015-05-17 _ 12-01-31.sql.gz: unexpected end of file

使用php -f zip.php从终端运行PHP脚本时,脚本以退出状态0结束,并且zip文件正常:

Current time: 2015-05-17 _ 13-38-22
Current time: 2015-05-17 _ 13-40-11
Result: 
State:  0

那么为什么在浏览器中运行PHP脚本时gzip会中止?

1 个答案:

答案 0 :(得分:2)

您的PHP CLI设置主要与网络服务器设置不同。 在CLI模式下,您的脚本最多可以运行300秒而不会崩溃。 但是,在浏览器中,默认超时为30秒。

您可以暂时使用

绕过此功能
ini_set('max_execution_time', 0);

在脚本的顶部。

此外,$ state变量中的值9是执行命令时返回的最后一行。 如果您按照PHP手册上的评论使用passthru可能会更好。

  

如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用passthru()函数。

PHP manual: System()