1

私はphpの「画像ダウンローダー」を作ろうとしていますが、これまでのところすべてが思い通りに進んでいます。私が直面している問題は、おそらくアクセスしようとしているサーバーの何らかのセキュリティです。たとえば、このURLは、サーバーでダウンロードしたい画像を表示します。

しかし、少なくともその画像を自分のウェブサイトにその URL で表示しようとすると、表示されません。私のウェブサイトの URL を表示することはできませんが、それは単純な<img />タグに他なりません。

これを回避する方法はありますか、それともやめるべきですか?

PS私のコードが間違っていないことを明確にするために、これまでに試した他のWebサイトから任意の量の画像をダウンロードできます. また、機能しないのでコードを尋ねないでください<img src="url_here.jpg" />。phpコードを見るのは無意味です。

4

1 に答える 1

2

はい、他のサーバーが画像のホットリンクを妨げているため、表示されません。

典型的な例は

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yande.re/.*$ [NC]
RewriteRule \.(gif|jpg|js|css)$ - [F]

ソリューション。

  • curl で画像を読み込む
  • CDN に保存する
  • 次に、サイトに表示します

プルーフ・オブ・セセプト

$url = 'https://yande.re/sample/2f7b6c5d87d90f173769d999e60861c8/yande.re%20250521%20sample.jpg';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31");
curl_setopt($ch, CURLOPT_REFERER, "https://yande.re");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec($ch);
curl_close($ch);

// $data is file data
$post   = array('image' => base64_encode($data), 'key' => "YOUR_API_KEY_ITS_FREE");
$timeout = 30;
$curl    = curl_init();

curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.json');
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
$json = curl_exec($curl);
curl_close ($curl);

$json = json_decode($json);
printf("<img src\"%s\" / >",$json->upload->links->small_square);

出力

ここに画像の説明を入力

于 2013-04-03T16:47:11.337 に答える