无法使用 Curl 正确下载 PHP 中的远程图像文件

Unable to correctly download remote image file in PHP with Curl

我正在尝试使用 Curl 下载远程图像,它下载了一个文件,但是当我尝试在我的 mac 上打开该图像时 - 我收到一条 'could not be opened' 消息。

我可以看到文件名和扩展名完好无损,但是不知何故它没有保存得很好,因为文件大小是 177 字节,但我预计文件大小约为 3kb。

谁能告诉我这是为什么?远程站点是否以某种方式阻止我下载文件?我在其他网站上尝试过使用相同的代码和其他一些图片,效果很好吗??

    $url = 'http://www.fifaindex.com/static/FIFA16/images/crest/256/light/21.png';
    $saveto = '21.png';

    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    $raw = curl_exec($ch);
    curl_close ($ch);
    if(file_exists($saveto)){
        unlink($saveto);
    }
    $fp = fopen($saveto,'x');
    fwrite($fp, $raw);
    fclose($fp);

您尝试从中获取图像的网站可能添加了一些限制,因此如果从域外调用图像将不会被提供。

要解决这个问题,您可以在 CURL 选项中指定引荐来源网址,将其设置为您要从中获取图像的网站的 url。

你的情况

curl_setopt($ch, CURLOPT_REFERER, "http://www.fifaindex.com");

我自己在我的本地服务器上试了一下,成功了。