2010-03-17 2 views
2

У меня есть страница php, которая берет кучу параметров URL и отправляет электронное письмо. Я пытаюсь, чтобы эта страница вызывала другую веб-страницу с использованием тех же параметров URL-адреса после отправки почты. Если я сделаю следующее, будет ли мое письмо отправлено надежно? Является ли перенаправление тем, что я действительно хочу сделать?PHP Переадресация после выполнения кода


Обновление: Спасибо за советы. Как вы можете видеть по моему использованию +, я не знаю никаких php. После прочтения всех ответов до сих пор я пришел с этим:

 
Random code to send email... 

file_get_contents('http://www.othersite.com/' . $_SERVER["REQUEST_URI"]. "?". $_SERVER["QUERY_STRING"]); 

Я считаю, что это должно инициировать GET на другом сайте со всеми текущими параметрами, что это именно то, что я хочу. Таким образом, мне не нужно заниматься переадресацией. Любые проблемы с этим решением?

Обновление 2: Поскольку мой url был https, file_get_contents вызвали у меня некоторые проблемы. Есть способы обойти это, но я просто использовал заголовок для перенаправления и все хорошо работало. Всем спасибо!

+1

Re your update: Хорошо выглядит, если структура каталогов и имя страницы на удаленном сервере действительно идентичны, вплоть до названия страницы? Это трудно поверить, если это внешняя услуга, которую вы вызываете. –

ответ

3

Вопрос, поднятый в другом, отвечает, действительно ли ваш базовый подход действительно то, что вы хотите, - сначала проверьте это. Во всяком случае, если это действительно то, что вы хотите сделать (Является ли ваш целевой URL действительно идентичен тому, на которой вы находитесь?), Вы действительно можете использовать

header('Location: http://www.othersite.com/' . $_SERVER["REQUEST_URI"]); 

Просто обратите внимание на использование . для конкатенации строки вместо +, вы не можете сделать это в PHP.

Чтобы сделать это действительно правильно, вы можете использовать http_build_url для создания полного действительного URL-адреса из текущего массива GET.Код от руководства, модифицирован немного:

<?php 
echo http_build_url("http://[email protected]/pub/index.php", 
    $_GET, 
    HTTP_URL_STRIP_AUTH | HTTP_URL_JOIN_PATH | HTTP_URL_JOIN_QUERY 
); 
?> 
+0

Мне действительно пришлось использовать заголовок вместо file_get_contents, потому что мой url был https. Поэтому ваш ответ тот, который я использовал. – UmYeah

+0

'$ _SERVER [" REQUEST_URI "]' уже содержит путь и запрос URI. – Gumbo

+0

@ Gumbo приветствия, конечно. Исправленный. –

1
  • Если это одно и то же приложение, почему вы не называете одни и те же функции?
  • если вы хотите, вы можете сделать file_get_contents .. вместо перенаправления для того же эффекта.
+0

различное приложение, но спасибо за файл_get_contents. – UmYeah

1

Если вы просто хотите, чтобы поразить эту страницу почему бы не использовать file_get_contents

$data = file_get_contents('http://www.othersite.com/' . $_SERVER["REQUEST_URI"]); 
echo $data; 

на благо с этим вы не должны физически перейти на другой сайт, если вы не хотите, в равной степени, если вы контролируете скрипт на другом сайте, вы можете вернуть в HTML код true или false, который можно было бы проверить при возврате.

+0

Это не будет проходить через параметры GET вызываемому скрипту. –

2

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

Не забудьте вызвать exit() после вызова адресата заголовка.

Также оператор строки concat не является + его. (Точка).

0

Для полного соответствия (иногда Chrome не будет работать с только Адресом: заголовок)

header("HTTP/1.0 302 Found"); 
header("Status: 302"); # this is for chrome compliance 
header("Location: http://www.othersite.com/' . $_SERVER["REQUEST_URI"]); 
0

Другим вариантом является эхо HTML тега:

<meta http-equiv="Refresh" content="1;url=http://www.othersite.com/<?php echo $_SERVER['REQUEST_URI']; ?>"> 

Это позволяет установить время задержки для перенаправления (обычно 1 с), что хорошо в некоторых ситуациях, так что пользователь не путается с помощью вспышки содержимого. Вы можете отправить сообщение «Стой, пока мы перенаправляем вас» или подобное.

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