【问题标题】:Unable to correctly download remote image file in PHP with Curl无法使用 Curl 在 PHP 中正确下载远程图像文件
【发布时间】:2016-09-30 02:21:34
【问题描述】:

我正在尝试使用 Curl 下载远程图像,但它会下载一个文件,但是当我尝试在我的 Mac 上打开该图像时 - 我收到“无法打开”消息。

我可以看到文件名和扩展名是完整的,但是由于文件大小为 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);

【问题讨论】:

  • 如果点击上面的 URL 似乎会为我加载一个 png?你没有得到足球/足球俱乐部的标志 png 吗?
  • 不,我收到 404 Not Found 错误。请使用文本编辑器检查您下载的文件的内容,看看您得到了什么。
  • 奇怪...我在文本编辑器中打开此文件,现在得到 404 Not found... 所以我认为远程站点以某种方式阻止下载文件? 404 未找到

    404 未找到


    nginx/1.4.6 (Ubuntu)
  • 嗯 .. 如果我点击图片下方的网站链接上的链接,但是当我直接访问图片网址时,它似乎没有加载 - 我要下载的图片在此页面在这里-fifaindex.com/team/21/fc-bayern这是我要远程下载的图像-有什么想法吗?

标签: php curl png fwrite fclose


【解决方案1】:

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

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

你的情况

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

我自己在本地服务器上尝试过,效果很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多