【发布时间】:2015-06-12 16:49:08
【问题描述】:
我正在做一个系统,其中我的一个站点转到另一个站点以获取文档。 在第一个站点上,我使用 Curl 请求获取所需文件: 我正在使用Download file from URL using CURL 的解决方案:
function collect_file($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, "http://example.com");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
return($result);
}
function write_to_file($text,$new_filename){
$fp = fopen($new_filename, 'w');
fwrite($fp, $text);
fclose($fp);
}
$curlUrl = 'http://site2.com/file-depository/14R4NP8JkoIHwIyjnexSUmyJibdpHs5ZpFs3NLFCxcs54kNhHj';
$new_file_name = "testfile-new.png";
$temp_file_contents = collect_file($curlUrl);
write_to_file($temp_file_contents,$new_file_name);
我正在测试下载图像。如果我在 $curlUrl 中使用直接 URL,例如 http://site2.com/file-depository/image.png 它就完美了。
我正在做的是然后解析 URL http://site2.com/file-depository/14R4NP8JkoIHwIyjnexSUmyJibdpHs5ZpFs3NLFCxcs54kNhHj 并根据数据库检查以匹配请求的文档,一旦有匹配的文档,我需要将此文档提供给 Curl 响应。 我尝试了很多方法来读取文件,但每次我在另一端得到一个文件,但它的大小只有 1kb(预期为 45),当试图打开它时,我得到一个错误未知文件类型等。
在第二个站点上,一旦 URL 得到验证,这里就是我所拥有的:
$file = readfile('some-image.png');
echo $file;
我猜有一部分属于文件的信息丢失但无法弄清楚,任何指针不胜感激!
【问题讨论】:
-
您的 write_to_file 是多余的...只需使用
file_put_contents()。您是否尝试将“png”文件加载到文本编辑器中以查看真正写出的内容?您的代码甚至都没有意识到可能出现问题的可能性,而在处理外部资源时,这正是错误的做法。 -
我已将此处发布的代码减少到最少,以使其尽可能简单易读,并且我仅在此阶段进行测试,随后将进行错误处理...