PHP / XHTML. Должен ли я поместить все в эхо-теги? - PullRequest
2 голосов
/ 18 мая 2010

Быстрый вопрос, связанный с разработкой PHP, я, кажется, все больше и больше задумываюсь об этом, когда занимаюсь разработкой более сложных сайтов. В основном говорят, что у нас есть базовая папка входящих сообщений PHP / XHTML (система обмена сообщениями). Я выполняю проверки сверху (проверьте, вошел ли пользователь, проверьте, есть ли у пользователя правильные разрешения и т. Д.). Затем используйте функцию 'header (' location: www.abc.com) ', если аутентификация не удалась. Вопрос в том, могу ли я написать оставшуюся часть входящего кода в огромном блоке else или просто использовать стандартный html. Я где-то читал о том, что плохо ставить какой-либо код после использования функции 'header'.

Ответы [ 4 ]

4 голосов
/ 18 мая 2010

Просто следуйте за своим заголовком с

exit();

Чем это не будет проблемой.

см. Третий пример здесь

Кроме того, вам не нужно такое большое эхо, вы можете также выводить html, если хотите:

<?php
  //php stuff
  if(test){
?>

   html here

<?php
  }
  else{
?>

   other html

<?php
  }
?>
1 голос
/ 18 мая 2010

Я где-то читал о том, что плохо ставить какой-либо код после использования функции 'header'.

Это не совсем так, потому что запрещено отправлять вывод (HTML или необработанный вывод) в браузер, прежде чем отправлять заголовок. Когда вы отправляете вывод перед отправкой заголовка, вы получаете сообщение об ошибке «Заголовок уже отправлен».

После функции заголовка остальные не будут выполнены, поэтому возврат или выход не требуется.

На вопрос, нужно ли вам помещать все в структуру if / else: это также не требуется, единственное, что вам нужно сделать, - это базовая проверка, если кто-то вошел в систему, а если нет, вы выполните перенаправление используя функцию заголовка. Нет необходимости в обширной структуре if / else.

1 голос
/ 18 мая 2010

После перенаправления заголовка вы ставите жирный «возврат» или «выход», чтобы ваш сценарий завершился там, а затем закрываете if. Тогда вы можете спокойно писать код, как обычно.

Это неправда, что вы не должны ставить что-либо после вызова header (). Однако вы должны помнить, что если вы выводите что-либо до вызова заголовка, сценарий завершится ошибкой. Есть заголовки, которые требуют от вас кода, например, заголовок Content-type. Однако после заголовка перенаправления вы всегда должны вызывать метод exit (), если браузер не подчиняется инструкции.

1 голос
/ 18 мая 2010

Причина, по которой вы читаете, плохая, состоит в том, что у клиентов нет для соблюдения заголовка Location: abc - поэтому, если вы продолжите отправлять им данные, они могут просто показать их, возможно, делая возможным отслеживание на данных ваших пользователей.

Что вы можете сделать, это после того, как вы отправите заголовок Location: abc, вы просто выйдете из сценария, например:

if(!$user->is_authenticated()) {
    header("Location: abc");
    exit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...