0

我正在使用下面提到的代码来下载图像。

$image_url='http://www.abcd.com/I_298f02_4766792.jpg';

$doc_root= $_SERVER['DOCUMENT_ROOT'];
$image_upload_path = $doc_root . '/';
$image_name2 = 'img-' . time() . '.jpg';

$destination  = $image_upload_path . $image_name2;

$data = file_get_contents($image_url);
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);

上述代码在开发环境中运行良好,可以从任何网站下载图像。该代码也适用于实时站点,以从除一个站点之外的其他站点下载图像。

图像似乎已下载,但每当我尝试使用任何图像查看器打开图像时,都会显示一条错误消息,如下所示。

无法加载图像“img-65456465.jpg”。解释 JPEG 图像文件时出错(不是 JPEG 文件:以 0x3c 0x21 开头)

我也检查了错误日志,但没有发现问题。我不明白为什么它的图像下载功能仅适用于该特定网站。

注意:1)我检查了该网站中托管的原始图像类型仅为 JPEG。

编辑: 当我尝试使用浏览器查看下载的图像时,我发现了下面提到的错误。

图片“ http://www.my-live-site.com/folder/img-65456465.jpg ”无法显示,因为它包含错误。

根据建议,我提供原始网站链接。 网站: http ://www.funnyjunk.com/ 图片:来自本网站的任何图片链接。例如http://static.fjcdn.com/pictures/The+smarterest.+Wow+a+description+I+could+say+anything+I_298f02_4766792.jpg

对此的任何帮助将不胜感激。

4

4 回答 4

1

如果您将 fopen() 更改为:

$file = fopen($destination, "wb+"); // binary writing

让我知道。

编辑

这是可以工作的代码:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 0);

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
        "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:23.0) Gecko/20100101 Firefox/23.0\r\n" . 
    "Referer: http://www.funnyjunk.com\r\n"
  )
);

$image_url = 'http://static.fjcdn.com/pictures/The+smarterest.+Wow+a+description+I+could+say+anything+I_298f02_4766792.jpg';

$doc_root= $_SERVER['DOCUMENT_ROOT'];
$image_upload_path = $doc_root . '/';
$image_name2 = 'img-' . time() . '.jpg';

$destination  = $image_upload_path . $image_name2;

$data = file_get_contents($image_url, false, stream_context_create($opts));
//$file = fopen($destination, "w+");
//fputs($file, $data);
//fclose($file);
header("Content-type: image/jpeg");
echo $data;
?>

stream_context_create()与原始站点的引荐来源网址就可以了。

于 2013-09-20T06:26:35.880 回答
0

嘿,只要打开你的网址

http://static.fjcdn.com/pictures/The+smarterest.+Wow+a+description+I+could+say+anything+I_298f02_4766792.jpg

并刷新此页面。您将重定向到其他页面我认为这是问题图像已被保护。

于 2013-09-20T07:22:40.097 回答
0

您提供的链接在下载时不是图像。当您在浏览器中打开图像 URL 时,您将被重定向到包含该图像的 HTML 页面。当我在这张图片上运行文件命令时,这一点得到了证实,它告诉我这是一个 HTML 文本文档。

piNAS:~#: file The+smarterest.+Wow+a+description+I+could+say+anything+I_298f02_4766792.jpg
The+smarterest.+Wow+a+description+I+could+say+anything+I_298f02_4766792.jpg: HTML document text

它可能设置为无法直接链接图像,然后将您重定向到 HTML 页面。

于 2013-09-20T07:17:17.680 回答
0

你的代码很好,我已经用一个新的 url 测试过,工作正常试试这个代码

<?php
$image_url='http://blog.svnlabs.com/wp-content/uploads/2012/06/PHP-DOWNLOAD-FILES-BY-URL.png';

$doc_root= $_SERVER['DOCUMENT_ROOT'];
echo $doc_root;
$image_upload_path = $doc_root . '/';
$image_name2 = 'img-' . time() . '.jpg';

$destination  = $image_upload_path . $image_name2;

$data = file_get_contents($image_url);
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
echo $file;
?>
于 2013-09-20T06:28:58.007 回答