使用curl_exec抓取图像不能在某个域上工作

时间:2014-04-20 08:14:54

标签: php image curl

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] =>  
)

2 个答案:

答案 0 :(得分:0)

给定的网址会返回“未知主机”错误。

从您的代码中,您没有进行任何错误处理。假设如下:

  • 服务器名称错误(如上面的网址)
  • 服务器没有响应
  • 服务器发出错误(http 50x)
  • 链接不是图片
  • 链接已消失(http 40x)

你需要抓住以上所有内容,以确保在开始将某些内容保存到文件之前确实至少得到了你想要的内容。

从你的尝试开始:

  

我已经尝试了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);
?>