2013-04-03 7 views
1

Я пытаюсь создать php-загрузчик изображений, и до сих пор все идет именно так, как я хочу. Проблема, с которой я столкнулась, - это, вероятно, какая-то безопасность сервера, к которому я пытаюсь получить доступ. Так, например, этот url покажет вам изображение, которое я хочу загрузить с моего сервера.Доступ к изображению с другого сервера

Но если я попытаюсь хотя бы отобразить это изображение с этим URL-адресом на моем сайте, он просто не появится. Я не могу показать URL-адрес моего веб-сайта, но это просто простой тег <img />.

Есть ли способ обойти это или я должен просто прекратить?

P.S только для того, чтобы это стало ясно, что мой код не ошибается. Я могу загрузить любое количество изображений с других сайтов, которые я пробовал до сих пор. И не спрашивайте меня о коде, так как даже <img src="url_here.jpg" /> не работает, поэтому бессмысленно смотреть на PHP-код.

+2

Был ли я прав, предполагая, что у вас нет контроля над этим другим сервером и вытягиваете изображения без разрешения? Вероятно, у них есть некоторые средства защиты от пиявок. – j08691

+0

@ j08691 Да Вы правы – Linas

ответ

2

Да, это не появилось, потому что другой сервер предотвращает горячую ссылку изображений.

Типичный пример будет

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

раствора.

  • Загрузите изображение с помощью завиток
  • Сохранить в CDN
  • Затем отображать его на своем сайте

Докажи из Cencept

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

Выход

enter image description here

+0

Не могли бы вы объяснить о cdn? – Linas

+0

CDN IS [Network Delivery Netword] (http://en.wikipedia.org/wiki/Content_delivery_network) и многие из них доступны, а не сервер, изображение прямо с вашего сервера – Baba

+0

Ну, ваше предложение помогло, вам пришлось установить завиток на моем сервере, но он работает сейчас, спасибо. – Linas

Смежные вопросы