$_SERVER['HTTP_REFERER']

Я делаю ссылку на отчет о проблеме на своем веб-сайте и хочу, чтобы он отправил мне по электронной почте последний адрес, на котором они были, прежде чем щелкнуть ссылку отчета. Я знаю/думаю, что вы используете $_SERVER['HTTP_REFERER'], но я не знаю, как поместить это в почтовый код? Итак, как бы вы написали, что вот мой почтовый код без него.

Mail("[email protected]", "Subject", "Message");
echo "Report Sent";

person Max Gee    schedule 07.10.2012    source источник
comment
рефералы ненадежны. многие браузеры не включают его по соображениям конфиденциальности, а другие включают поддельные / поддельные.   -  person Marc B    schedule 07.10.2012
comment
@MarcB Знаете ли вы, как я могу тогда получить что-то, что сработает?   -  person Max Gee    schedule 07.10.2012
comment
С этим ничего не сделаешь... Ты все еще можешь использовать это, но в каком-то случае у тебя ничего не будет.   -  person poudigne    schedule 07.10.2012
comment
вставьте адрес страницы в URL-адрес, который вы передаете репортеру о проблемах, например. http://example.com/problem.php?url=http://example.com/page_you_are_on.php   -  person Marc B    schedule 07.10.2012
comment
@MarcB Куда мне его вставить для этого?   -  person Max Gee    schedule 07.10.2012


Ответы (2)


Сообщение должно быть переменной, в которую вы можете поместить информацию:

$message = "Error report: <p>Last site visited: {$_SERVER['HTTP_REFERER']}</p>....";

mail("[email protected]", "Subject", $message);

Обратите внимание, что бит HTTP_REFERER помещается в {} в строке. Это для того, чтобы заставить его экстраполировать значение (мне не нравится конкатенация строк).

Также обратите внимание, что, как было сказано выше, нет никакой гарантии, что REFERER будет иметь правильное значение или какое-либо значение вообще.

person Major Productions    schedule 07.10.2012
comment
Как бы сообщить об этом, не используя стиль ссылки? - person Max Gee; 07.10.2012
comment
Вы можете отправить значение в PHP асинхронно, используя JavaScript. JS имеет текущее значение местоположения / URL-адреса в document.URL - person Major Productions; 07.10.2012
comment
Вам нужен адрес ТЕКУЩЕГО URL-адреса, по которому они находятся, когда нажимают кнопку отчета, или ПРЕДЫДУЩИЙ URL-адрес? Если бы они нашли страницу из Google, хотели бы вы ее зафиксировать? - person Major Productions; 07.10.2012
comment
Что я пытаюсь сделать, так это то, что если кто-то обнаружит ошибку на моем веб-сайте, я бы хотел, чтобы они щелкнули ссылку, чтобы сообщить о проблеме, а затем он отправил бы мне адрес последней части веб-сайта, на котором они были, когда они нажали на эту ссылку. - person Max Gee; 07.10.2012
comment
Я предполагаю, что это будет ТЕКУЩИЙ адрес - person Max Gee; 07.10.2012
comment
В этом случае я рекомендую другой дизайн. Вам не гарантируется, что пользователь сообщит об ошибке сразу после ее обнаружения. Для обнаруживаемых системных ошибок (например, невозможность подключения к базе данных) ошибка должна быть зарегистрирована и автоматически отправлена ​​​​вам за кулисами. Для чего-то, о чем пользователь должен сообщить, попросите его заполнить форму, которая запрашивает URL-адрес и описание проблемы. - person Major Productions; 07.10.2012
comment
Хорошо, спасибо, вы знаете, какие браузеры не поддерживают REFFER, потому что он работает именно так, как предполагается в Safari и Google Chrome на данный момент? - person Max Gee; 07.10.2012
comment
Я не. Это одна из тех вещей, которая шанс быть отсутствующей/поддельной/неправильной, поэтому ее не рекомендуется использовать для критически важных функций. Вам решать, насколько критична отчетность об ошибках. - person Major Productions; 07.10.2012
comment
Без проблем. Надеюсь, я был действительно полезен. ;) - person Major Productions; 07.10.2012
comment
У анонимных прокси часто есть возможность убрать рефералов. - person Barmar; 07.10.2012

Помимо всего того, что было сказано о http-реферерах, которые можно перехватить, анонимных прокси-серверах и так далее, использование HTTP_REFERER не является хорошим стандартом программирования.

Вместо этого, если у вас есть, например:

http://www.example.com/application/client.php

Где пользователи могут нажать на

http://www.example.com/application/report_problem.php

Просто передайте строку "...client.php" в обработчик проблемы отчета "...report_problem.php", который вы создадите.

Легко передать ссылку «исходной» страницы на «report_problem» и сделать это следующим образом:

<?php
    // pages where you will append the "problem link"

    // $this_page holds an "url encoded" version of the request uri ( e.g. /application/client.php )
    $this_page = rawurlencode ( $_SERVER["REQUEST_URI"] );
?>
<a href="report_problem.php?originating_page=<?=$this_page;?>">Report problem</a>

Затем в коде «report_problem.php»:

<?php
     // report_problem.php

     $originating_page = ( array_key_exists ( 'originating_page', $_GET ) && ! empty ( $_GET['originating_page'] ) ? rawurldecode ( $_GET['originating_page'] ) : null;

     if ( ! empty ( $originating_page ) ) {
              $message = 'Error report: <p>Last site visited: ' . $originating_page . '</p>....';
              mail("[email protected]", "Subject", $message);
     }
     else mail("[email protected]", "Subject", "Problem from unkown page");
 ?>
person Maurizio    schedule 01.04.2014