2016-06-15 4 views
0

Я пытался получить URL (включая параметры GET) сайта, на котором отображается мое изображение. Это связано с тем, что я хочу извлечь один параметр URL-адреса.Автоматически получать URL-адрес сайта, отображающего мое изображение?

Друг сказал мне, что она знала кого-то, кто мог бы это достичь, но я не знаю, делал ли он это с изображением. Кроме того, я не думаю, что смогу сделать это с помощью ссылки, потому что при переходе на внешние сайты появится страница с предупреждением о том, что вы перенаправляетесь на улицу, поэтому, если я положу ссылку на свою страницу и кто-то щелкнет, я получу URL-адрес реферера страницы предупреждения перенаправления. Я не могу заверить, что мой друг рассказывал правду об этом, но очень вероятно, что это правда.

Все, что я мог получить с изображением, это IP и другие элементы HTTP-заголовка, но часть referrer пуста, и я думал, что реферер содержит полный URL-адрес, о котором я говорю.

Это то, что я пробовал. Сначала IMG тег в другом месте в BBCode:

[img]http://______.com/get_image.php?i=myimage[/img] 

И на моем сайте этот скрипт в PHP, хотя любой язык, который делает работу было бы хорошо для меня:

<?php 
// Get name of image to be displayed (non-sanitized here for simplicity) 
$filename = $_GET["i"]; 

// Here I want to get the site where image is being viewed 
if (!empty($_SERVER['HTTP_REFERER'])) { 
     $visitor_url = $_SERVER['HTTP_REFERER']; 
} else { 
     $visitor_url = "none"; 
} 

// And write the referrer to a file just to test if it works 
$fp = fopen('referer.txt', 'w'); 
fwrite($fp, $visitor_url); 
fclose($fp); 

// Eventually display the image 
header('Content-Type: image/png'); 
readfile($filename . '.png'); 
?> 

Так что мой вопросы:

  1. Возможно ли получить полный URL-адрес сайта, на котором отображается мое изображение?
  2. Если нет, есть ли другой способ получить полный URL-адрес?

Благодарим вас заранее.

Примечание: У меня нет разрешения на другом сайте, где я размещаю изображение, я просто пользователь. Скажите, пожалуйста, если я что-то упустил, или я должен спросить об этом по-другому, я новичок в StackOverflow.

ответ

0

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

Похоже, что HTTP_REFERER был пустым из-за его появления с сайта HTTPS, а мой сайт был HTTP, он всегда посылал бы пустое. Я знал, что это может быть проблемой, но для меня это не имеет особого смысла, потому что HTTP_REFERER также был пуст при приходе с другого HTTP-сайта (что, я думаю, это ненормально), поэтому я думал, что ошибка была в другом месте.

Обычно HTTP_REFERER отправляется, когда он приходит и уходит в:

  1. от HTTP для HTTP
  2. с HTTPS на HTTPS
  3. от HTTP к HTTPS

Но это не отправлен, когда он прибывает и отправляется в:

  1. от HTTPS к HTTP

И в моем случае, я не знаю, почему он не был отправляется с HTTP для HTTP, который путает меня.

0

Попробуйте REMOTE_HOST вместо HTTP_REFERER:

// Here I want to get the site where image is being viewed 
if (!empty($_SERVER['REMOTE_HOST'])) { 
    $visitor_url = $_SERVER['REMOTE_HOST']; 
} else { 
    $visitor_url = "none"; 
} 

Веб-сервер, на котором вы служите изображения должны быть настроены должным образом. Если вы используете Apache, это с HostNameLookups On.

См http://php.net/manual/en/reserved.variables.server.php

+0

Я только что попробовал это. Это дает мне имя хоста пользователя, например: _ *. Red - * - * - *. Dynamicip.rima-tde.net_ (числа заменены на звездочку). –

0

Обычно браузеры посылают полную реферер со всеми компонентами URL, включая параметры запроса - $_GET Params. Если они этого не делают, тогда нет другого способа достичь этого URL-адреса при прохождении содержимого изображения.

Иногда отправка рефератора может быть заблокирована, например. в некоторой обработке пакетных URL-адресов с использованием некоторых искателей, таких как программа/скрипт или на некоторых прокси-серверах.

В PHP получающий референт делается $_SERVER['HTTP_REFERER'], потому что обычно это HTTP-заголовок из запроса, и это единственный ключ массива $_SERVER с информацией о реферере.

+0

Спасибо. Возможно, это было возможно раньше на сайте, который я пытаюсь, и теперь это невозможно, потому что они заблокировали отправку рефери, как вы сказали. –

0

Вы добавили тег .htaccess, поэтому я думаю, что вы используете веб-сервер Apache. Если вы хотите полностью предотвратить проблему, вы можете полностью отключить хотлинкинг, перейдя на один уровень ниже. Вместо управления в PHP вы можете настроить веб-сервер, чтобы он не обслуживал контент в доменах, отличных от того, на котором вы размещаете.

За дополнительной информацией обращайтесь к guide.

+0

Да, я использую Apache. То, что я хотел сделать, - это обратное: получить информацию благодаря hotlinking, более точно, что я хочу, это URL, где пользователь просматривает изображение. –

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

  • Нет связанных вопросов^_^