我检查了SO并且也用谷歌搜索但没有找到任何方法来解决我的问题。
我想下载一个带有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();
$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,当我执行这个时,我得到一个更大的文件。如果我的文件是16米的大小,当我运行代码时,它需要很多时间,当我手动停止它时,它是146MB的大小。我做错了什么?
答案 0 :(得分:0)
我不相信您尝试访问的文件类型会对代码的工作方式产生很大影响。
首先,当设置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);
虽然我会在提交任何内容之前亲自测试错误(除非这是个人一次性使用)。