После сбора данных в PHP я просто хочу перенаправить на другую страницу, но ничего не происходит

0

Я создал некоторый 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 или некоторые подобные проблемы?

Что может привести к тому, что перенаправление просто не произойдет?

  • 1
    1. позаботьтесь о том, чтобы urlencode () помещал все значения в строку параметров. 2. используйте консоль разработки вашего браузера (обычно F12) и проверьте, в чем проблема. Вот для чего предназначена консоль разработки. 3. убедитесь, что случайно не отображают какой-либо контент перед настройкой вашего заголовка. Надежный способ сделать это - использовать функцию буферизации вывода phps и выбросить все буферизованные выходные данные перед оператором header() . ,
  • 0
    Затем я попробую urlencode () для всех значений и посмотрю, работает ли это. Я также постараюсь найти консоль разработки. Как вы можете догадаться из характера моего вопроса, я не настолько опытен в разработке PHP. И спасибо за внимание к функции буферизации вывода. Это похоже на то, что я использую в javascript на стороне сервера, чтобы очистить «буфер ответа» перед попыткой перенаправления. Это может пригодиться в будущем. Я вернусь после того, как попробую некоторые из ваших предложенных тестов. Благодарю.
Показать ещё 4 комментария
Теги:

3 ответа

0
Лучший ответ

Скопировано здесь из моего комментария выше:

  1. позаботьтесь о urlencode() все значения, которые вы размещаете внутри строки параметров.

  2. используйте консоль разработки браузеров (обычно F12) и проверьте, в чем проблема. Для этого предназначена консоль разработки.

  3. убедитесь, что вы не случайно выбрали какой-либо контент перед установкой заголовка. Надежный способ сделать это - использовать функцию буферизации вывода phps и выбросить любой вывод, буферизированный перед вашим header().

  • 0
    Как упомянуто выше, вы правы, что все значения, которые должны быть url, закодированы с помощью urlencode (). Я как бы подозревал это (как уже упоминалось в моем вопросе), но ваш ответ указал мне на правильную функцию, которую можно использовать и подтвердить, и благодаря этому я смог быстро ее исправить, и она просто работает. Поэтому я ценю время, которое вы потратили на ответ. Спасибо!
1

Настройка заголовков не работает, если вы выставляете что-либо, даже пробел, перед установкой заголовка.

Убедитесь, что у вас нет выходных данных, таких как print, echo, var_dump и других, а также убедитесь, что у вас нет пробела, разрыва строки или любых других символов до <?php в начале файла или любого другого include() 'd или require() ' d.

Если это не так, посмотрите, правильно ли настроен заголовок, открыв страницу и инструменты разработчика в Chrome или Firefox.

  • Открыть страницу
  • Открытые инструменты разработчика (ctrl + shift + j)
  • Обновите страницу
  • Перейдите в раздел " Network " инструментов разработчика и откройте свой запрос и вкладку " Headers "
  • Посмотрите, установлен ли ваш заголовок и правильно ли сформирован URL-адрес.
  • 0
    Правильно. Я понял, что ничего не может быть выведено до установки заголовка. Вот почему я упомянул, что я был осторожен, а также проверил источник «созданной» страницы, и в ней вообще ничего не было, а также нет операторов include () или require (). Но, конечно, я перепроверю. Благодарю.
  • 0
    @DougLerner Вы должны проверять не источник страницы, а заголовки ответа HTTP, см. Здесь
Показать ещё 1 комментарий
-1

Попробуйте header("location: ". $url); вместо header("location: $url"); ,

Первое решение конкатцирует содержимое вашего $url var для перенаправления, тогда как другой перенаправляет ваш сайт на "$ url" путь, который не существует, очевидно.

  • 2
    Извините, но это полная чушь. Эффект точно такой же: объединенная строка отправляется в качестве заголовка. Строка состоит из литеральной строки и значения переменной $url .
  • 0
    Ой, извините за это тогда. Однако я не понимаю. Обычно в PHP «location: $ url» не добавляет вашу переменную $url в строку. Он добавляет только строку "$ url", верно?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню