php Curl下载tbz文件?
我查了一下,也用谷歌搜索了一下,但没有找到解决问题的方法 我想下载一个扩展名为tbz的文件,但它给了我一个错误php Curl下载tbz文件?,php,curl,download,Php,Curl,Download,我查了一下,也用谷歌搜索了一下,但没有找到解决问题的方法 我想下载一个扩展名为tbz的文件,但它给了我一个错误 Warning: feof() expects parameter 1 to be resource, string given in D:\xampp\htdocs\test\testing.php on line ** 我正在使用curl从服务器下载此文件 set_time_limit(0); $ch = curl_init();
Warning: feof() expects parameter 1 to be resource, string given in D:\xampp\htdocs\test\testing.php on line **
我正在使用curl从服务器下载此文件
set_time_limit(0);
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $webpage_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$handler = curl_exec($ch);
$fp = fopen("adminArea/test/$file", "w+");
$contents = '';
while (!feof($handler)) {
$contents .= fread($handler, 8192);
fwrite($fp, $handler);
}
fclose($fp);
curl_close($ch);
我的文件是以MB为单位的,当我执行此操作时,我会得到一个更大的文件。如果我运行代码时文件大小为16m,则需要花费大量时间,而手动停止时文件大小为146MB。我做错了什么?我不认为您试图访问的文件类型对代码的工作方式有多大影响 首先,当设置CURLOPT_RETURNTRANSFER时,curl_exec将返回数据。 其次,feof、fread等需要一个文件句柄,而不是cURL句柄或返回的数据(这就是为什么错误消息显示您正在发送字符串) 您的代码应该是这样的:
set_time_limit(0);
$ch = curl_init();
$timeout = 0;
curl_setopt ($ch, CURLOPT_URL, $webpage_url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
file_put_contents("adminArea/test/$file", curl_exec($ch));
curl_close($ch);
尽管我会在提交任何东西之前亲自测试错误(除非这只是个人一次性使用)。谢谢您的回复。我以前也尝试过同样的代码,但这只在我的目录中创建了1KB的文件。所以我想用文件处理的方式来做。这段代码只为我创建了一个1KB的文件,而不是实际大小。我怀疑文件处理会弄乱你的文件-更有可能的是,外部服务器发送的是1KB响应,而不是你所期望的。许多可能的原因,例如,这会将用户重定向到实际文件,或者站点需要POST请求,或者站点需要某个用户代理头等。请检查此文件的内容,看看是否可以从中收集任何内容。