что означает верхняя часть страницы в php-файле

  • Я читал где-то, что ob_start() должно быть в верхней части страницы. в то время как
  • где-то я прочитал, что session_start() следует разместить в верхней части страницы.
  • где-то я читаю header() должен быть помещен в начало страницы.
  • где-то я прочитал include() или require() должен быть помещен в начало страницы.

im запутался, что должно быть написано сверху и в каком порядке они помещены? и что значит на вершине ??? это

  • до <html> или
  • после <html> или до <head> или
  • после <head>

скажите, пожалуйста, что такое реальный порядок всех этих функций

подобно тому, как мы должны положить ob_end_flush (); и другую функцию в нижней части страницы после <html> или после </body> и каков порядок функций, которые появляются в нижней части страницы

Чтобы понять ценность написанных вами заявлений, вам необходимо иметь некоторое базовое понимание операций упомянутых вами функций. Я попытаюсь сломать их здесь.

Начнем с вызовов session_start() и header() :
Первая функция делает именно то, что подразумевает название; он начинает сеанс.

Из-за отсутствия состояния протокола HTTP нет необходимости в механизме, который может запоминать состояние между запросами страницы. Это может быть достигнуто с помощью сеансов. Хотя сеансы, в первые дни PHP, где иногда распространяются путем передачи идентификатора сеанса в ссылках ( someurl?sessionId=someSessionHash ), это, в настоящее время, считается плохой практикой.

В настоящее время сеансы преимущественно отслеживаются с помощью файла cookie (в ранние дни они широко используются также, не поймите меня неправильно). Этот сеансовый файл cookie (который, вопреки распространенному мнению, является не более чем обычным файлом cookie с просто идентификатором сеанса в нем, который (обычно) просто истекает после закрытия браузера) отправляется вместе с браузером с каждым последующим запросом страницы , И вот здесь улов: cookie отправляется как заголовок ответа (что означает перед фактическим телом), например:

 // I've left out a lot of other headers for brevity HTTP/1.x 200 OK Date: Sun, 31 Jan 2010 09:37:35 GMT Cookie: SESSION=DRwHHwAAACpes38Ql6LlhGr2t70df // here is your Cookie header // after all response headers come the actual content: // the response body, for instance: <html> <head> </head> <body> </body> </html> 

Теперь, поскольку заголовки ответов должны быть отправлены перед телом ответа, вам нужно поместить вызов session_start() и header() прежде чем будет выведено содержимое тела. Вот почему: если вы выведете любой контент тела ответа (может быть чем-то простым, как символ пробела) перед вызовом session_start() или header() , PHP автоматически выведет заголовки ответов. Это связано с тем, что ответ HTTP должен иметь заголовки ответов, отправленные сначала перед телом ответа. И именно это часто приводит к печально известному Warning: headers already sent предупреждение в PHP. Другими словами; как только PHP отправил заголовки, потому что он также должен был отправить данные тела, он больше не может добавлять заголовки.

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

ob_flush , ob_flush и т. д.:
В настройке по умолчанию PHP обычно выводит что-нибудь сразу. Поэтому, если вы выводите содержимое тела ответа, заголовки автоматически отправляются первыми.
Но PHP предлагает механизмы вывода буферизации. Это семейство функций ob_* . С ob_start вы скажете PHP, чтобы начать буферизацию. И с ob_flush вы скажете PHP, чтобы ob_flush буфер; другими словами, выводить текущее содержимое буфера на стандартный вывод.

С помощью этих механизмов буферизации вы можете добавлять заголовки в ответ, после того, как вы выведете данные тела, потому что вы еще не отправили данные тела, вы просто забуферили его, чтобы позже вывести вызов ob_flush или ob_end_flush и что У вас есть.

Имейте в виду, что использование функций ob_* более чем часто является запахом кода. Другими словами (и именно поэтому важно делать определенные вещи наверху), тогда он используется для плохого дизайна. Кто-то забыл правильно настроить порядок операций и прибегает к буферизации вывода, чтобы обойти эту header и session драму.

Сказав все это, вы можете легко понять, почему вывод html и / или другого содержимого тела должен быть последним. Кроме того, я настоятельно рекомендую вам разделить PHP-код от выходного кода. Потому что его гораздо легче читать и понимать. И хороший способ начать делать это, когда фактический html приходит после основного блока кода <?php ?> . Но есть и другие способы, выходящие за рамки этого вопроса.

Затем, наконец, о include и require вызовов. Как правило, их можно найти в верхней части ваших php-файлов. Он прекрасно сохраняет эти звонки в одном месте. Но имейте в виду, что если один из этих файлов выводит что-либо перед вызовом session_start() или header() без использования буферизации вывода, вы снова закручиваетесь.

«Верх страницы» означает перед любым выходом. «Нижняя часть страницы» означает после выхода.

Это просто означает, что перед любым другим персонажем, где «другое» означает «не PHP-код».

Весь код между <?php и ?> Не отправляется в браузер, поэтому он не учитывается. Таким образом, обычно «верх страницы» означает перед началом тега <html> . Будьте осторожны, потому что, если у вас есть пустая строка или даже одно одиночное пробелы перед этим тегом (или даже до тега открытия PHP), это считается выходным.