Я создал некоторый PHP-код, где я собираю данные с другого сервера. Я подтвердил, что данные в порядке с кучей операторов печати, таких как:
print "<br /><br />headline: " . $user->headline ;
print "<br /><br />industry: " . $user->industry ;
Все работает отлично. Но вместо того, чтобы использовать печать для отображения содержимого, я хочу перенаправить на другой URL-адрес на другом сервере и отправить эту информацию. Поэтому я прокомментировал строки печати и вместо этого создал набор параметров запроса и использовал функцию заголовка, чтобы попытаться перенаправить, следующим образом:
$params = '?success=ok&uname=' . $_SESSION['uname'] . '&odistate=' . $_SESSION['odistate'];
$params .= '&firstName=' . $user->firstName . '&lastName=' . $user->lastName . '&headline=' . $user->headline . '&industry=' . $user->industry;
$params .= '&summary=' . $user->summary . '&publicProfleUrl=' . $user->publicProfileUrl . '&emailAddress=' . $user->emailAddress;
$params .= '&numRecommenders=' . $user->numRecommenders;
$url = 'http://www.example.org/profileInfo/' . $params;
header("location: $url");
exit;
Однако ничего не происходит. Я могу перейти на страницу, но перенаправление не происходит. Я знаю, что перед перенаправлением не должно быть источника, и я проверяю источник, и он пуст. В журнале PHP нет ошибок. Код был проверен на наличие синтаксических ошибок, и их нет.
Если я закомментирую раздел перенаправления и вместо этого использую инструкции печати, он отлично работает. Но если я прокомментирую утверждения печати и попытаюсь использовать раздел перенаправления, ничего не произойдет. Просто пустой экран.
Если я проскользнул
print $url;
непосредственно перед вызовом header(), естественно, он не будет перенаправлен, но я могу подтвердить, что URL-адрес выглядит правильно сформированным. Однако в некоторых значениях запроса есть некоторые пробелы. Может быть, он должен быть закодирован в URL, чтобы превратить пробелы в %20 или некоторые подобные проблемы?
Что может привести к тому, что перенаправление просто не произойдет?
Скопировано здесь из моего комментария выше:
позаботьтесь о urlencode()
все значения, которые вы размещаете внутри строки параметров.
используйте консоль разработки браузеров (обычно F12
) и проверьте, в чем проблема. Для этого предназначена консоль разработки.
убедитесь, что вы не случайно выбрали какой-либо контент перед установкой заголовка. Надежный способ сделать это - использовать функцию буферизации вывода phps и выбросить любой вывод, буферизированный перед вашим header()
.
Настройка заголовков не работает, если вы выставляете что-либо, даже пробел, перед установкой заголовка.
Убедитесь, что у вас нет выходных данных, таких как print
, echo
, var_dump
и других, а также убедитесь, что у вас нет пробела, разрыва строки или любых других символов до <?php
в начале файла или любого другого include()
'd или require()
' d.
Если это не так, посмотрите, правильно ли настроен заголовок, открыв страницу и инструменты разработчика в Chrome или Firefox.
Network
" инструментов разработчика и откройте свой запрос и вкладку " Headers
" Попробуйте header("location: ". $url);
вместо header("location: $url");
,
Первое решение конкатцирует содержимое вашего $url
var для перенаправления, тогда как другой перенаправляет ваш сайт на "$ url" путь, который не существует, очевидно.
$url
.
$url
в строку. Он добавляет только строку "$ url", верно?
header()
. ,