图像不是使用file_get_contents下载的

时间:2013-09-20 06:14:20

标签: php file download

我使用下面提到的代码下载图片。

$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 个答案:

答案 0 :(得分: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()就可以了。

答案 1 :(得分:0)

您的代码很好我已经测试了一个新的网址正常工作尝试此代码

<?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;
?>

答案 2 :(得分: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页面。

答案 3 :(得分:0)

嘿,只需打开你的网址

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

并刷新此页面。 您将重定向到另一个页面我认为这是问题图像已受到保护。