php - shell_exec 解压文件大小限制

标签 php linux curl shell-exec

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

我最初将 CURLOPT_TIMEOUT 设置为 240,但这还不够长。我会得到 curl 超时错误。由于 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/');

最佳答案

仔细看看您在这里实际做了什么。除了基本的故障排除(例如最高级别的错误日志记录和错误日志)之外,看看您实际做了什么:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    

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

我不能说这是否能解决您的问题,但我希望这对您有所帮助。进行适当的错误记录并提供具体的错误信息,例如通知、警告和错误。

关于php - shell_exec 解压文件大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13899198/

相关文章:

php - 如何使用 mysql 和 php 将唯一 ID 发送到数据库

java - jarsigner 错误 : java. time.DateTimeException:MonthOfYear 的无效值(有效值 1 - 12):0

Linux 模块验证失败

linux - Docker 容器作为虚拟桌面克隆

angularjs - jhipster oauth : How can i get the access_token via CURL

读取托管在 Google Drive 上的 csv 文件

php - 使用 css 路径从网站获取内容

php - 使用 CakePHP 从 MySQL 存储过程检索输出变量

php - 可变变量如何与 C++ 运算符一起工作?

javascript - 用于注册到第三方网站的脚本