shell_exec解压缩文件大小限制

时间:2012-12-16 06:40:29

标签: php linux curl shell-exec

我正在使用以下代码从包含1,000多张图片的其他服务器下载zip文件。源zip文件正在下载并创建/复制到我的服务器,但代码似乎在此时停止。来自if else下面的echo输出甚至不显示。

我最初将CURLOPT_TIMEOUT设置为240,但这还不够长。我会得到卷曲超时错误。由于zip文件接近100MB,我认为它需要大约15分钟才能完成。所以我将CURLOPT_TIMEOUT设置为1200,因为源zip大小每天都会有所不同。

知道它为何停止工作吗?是否有需要更改的设置?

$source_photos_file = 'source_photos_file.zip';
$curl = curl_init();
$destination_photos_file = fopen($_SERVER['DOCUMENT_ROOT'].'/files/photos.zip', 'w');

curl_setopt($curl, CURLOPT_URL, FTP_URL.$source_photos_file); #input
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 1200);
curl_setopt($curl, CURLOPT_FILE, $destination_photos_file); #output

if (curl_exec($curl) === false)
{
    echo '<p>Curl error: ' . curl_error($curl). ' - error # '.curl_errno($curl).'</p>';
}
else
{
    echo '<p>Done without any errors</p>';
}

curl_close($curl);
fclose($destination_photos_file);

$photos_unzip_result = shell_exec('unzip -P password '.$_SERVER['DOCUMENT_ROOT'].'/files/photos.zip -d '.$_SERVER['DOCUMENT_ROOT'].'/files/pics_test/');

1 个答案:

答案 0 :(得分:2)

仔细看看你在这里做了什么。在基本故障排除旁边,如最高级别的错误记录和跟踪错误日志,请查看您实际执行的操作:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    

你明确告诉curl返回下载,这意味着它被复制到内存中。禁用该选项,尤其是在您已经指定了输出文件时。

我不能说这是否能解决您的问题,但我希望这会有所帮助。做正确的错误记录提供具体的错误信息,如通知,警告和错误。