【发布时间】:2012-05-09 18:40:19
【问题描述】:
我正在尝试使用 curl 和 php 下载 gzip 文件并将其保存在指定位置。下面是我正在使用的代码,但每次它都保存一个空文件,尽管它正在下载的 gzip 文件是正确的
$file_zip = 'abc.gz'
$fp = fopen("$file_zip", "w");
$request = curl_init();
$headers = array('Content-type: application/x-gzip','Connection: Close');
curl_setopt($request, CURLOPT_URL, $url);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_TIMEOUT, 0);
curl_setopt($request, CURLOPT_CONNECTTIMEOUT,0);
curl_setopt($request, CURLOPT_HTTPHEADER,$headers);
curl_setopt($request, CURLOPT_FAILONERROR, true);
curl_setopt($request, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($request, CURLOPT_AUTOREFERER, true);
curl_setopt($request, CURLOPT_BINARYTRANSFER,true);
curl_setopt($request, CURLOPT_FILE, $fp);
$zipFile = curl_exec($request);
【问题讨论】:
-
你用过
copy()吗?使用 cURL 有什么特殊原因吗? -
实际上,实际文件是在我的主控制器的某个临时位置生成的(其 url 以 curl url 形式给出),这个特定的 php 脚本将其拾取并最终将其上传到外部ftp 服务器。
-
好的,如果你不使用任何标题怎么办?喜欢
$headers = 0;? -
returntransfer 和 file 有点矛盾。 “将请求的 url 返回到 php 脚本”,还有“不,将其写入文件”。检查 $zipfile 是否包含实际的 zip 数据(例如
echo strlen($zipFile). -
我不知道,我没有尝试,但发送“Connection-Close”标头可能会在获得结果之前关闭连接,这可能会导致文件为空。