enter code here
以前,以下功能可以保存某个" $ url"到" $ saveto"工作正常。不知何故,当我试图抓住这个域名图片时,即http://pic.pimg.tw/ellenitn/4a439fc4b1c2e.jpg
它再也无法工作了(它在2天前工作,现在它停止工作,保存的图像全部为0kb)
function grab_image($url,$saveto)
{
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$raw=curl_exec($ch);
curl_close ($ch);
if(file_exists($saveto)){
unlink($saveto);
}
$fp = fopen($saveto,'x');
$var = fwrite($fp, $raw);
fclose($fp);
return $var;
}
我可以知道如何调试这个吗?我尝试过file_get_contents(),但它也无法正常工作,代码错误 - > php_network_getaddresses:getaddrinfo failed:名称或服务未知。
编辑:
当我使用时:
print_r(curl_getinfo($ch));
我收到了这些信息:
Array (
[url] => http://pic.pimg.tw/ellenitn/4a439fc4b1c2e.jpg
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => 0
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array ( )
[primary_ip] =>
[redirect_url] =>
)
答案 0 :(得分:0)
给定的网址会返回“未知主机”错误。
从您的代码中,您没有进行任何错误处理。假设如下:
你需要抓住以上所有内容,以确保在开始将某些内容保存到文件之前确实至少得到了你想要的内容。
从你的尝试开始:
我已经尝试了file_get_contents(),但它也无法正常工作,代码 错误 - > php_network_getaddresses:getaddrinfo failed:名称或服务 不知道。
您已收到正确的错误消息。 file_get_contents()
将为您提供处理此类错误所需的一切控制权。
答案 1 :(得分:0)
1:下载文件并使用file_put_contents()保存
<?php
$url = 'http://pic.pimg.tw/ellenitn/4a439fc4b1c2e.jpg;
$savepath = '/local/path/to/4a439fc4b1c2e.jpg'; //make sure you have write permissions on "/local/path/to/"
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$data = curl_exec($ch);
curl_close($ch);
file_put_contents($savepath, $data);
?>
2:使用cURL直接下载到文件流
<?php
$url = 'http://pic.pimg.tw/ellenitn/4a439fc4b1c2e.jpg';
$savepath = '/local/path/to/4a439fc4b1c2e.jpg';
$fp = fopen($savepath, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);
?>