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

上記のコードは、開発環境で正常に機能し、任意の Web サイトから画像をダウンロードできます。このコードはライブ サイトでも機能し、1 つのサイトを除く他の Web サイトから画像をダウンロードします。

画像はダウンロードされたようですが、画像ビューアを使用して画像を開こうとすると、以下のエラー メッセージが表示されます。

画像 'img-65456465.jpg' を読み込めませんでした。JPEG 画像ファイルの解釈中にエラーが発生しました (JPEG ファイルではありません: 0x3c 0x21 で始まります)

エラーログも確認しましたが問題ありませんでした。その画像ダウンロード機能がその特定の Web サイトでのみ機能しない理由がわかりません。

注: 1) その Web サイトでホストされている元の画像の種類が JPEG のみであることを確認しました。

EDIT: ブラウザを使用してダウンロードした画像を表示しようとすると、以下のエラーが見つかりました。

画像「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

あなたが提供したリンクは、ダウンロード時の画像ではありません。ブラウザで画像の URL を開くと、画像を含む HTML ページにリダイレクトされます。これは、この画像に対して file コマンドを実行すると確認され、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を開いて

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

このページを更新してください。別のページにリダイレクトされますが、これは問題の画像が保護されているためだと思います。

于 2013-09-20T07:22:40.097 に答える