Как PHP интерпретатор генерирует страницу?

12 3
Dmitriy_2014
На сайте с 01.07.2014
Offline
276
1160

Наверное, наивный вопрос, но скажите, как PHP интерпретатор генерирует страницу, он обрабатывает сначала весь скрипт и создает готовую страницу, которую отдает браузеру или как-то по частям это делает?

Допустим у меня много php файлов в шаблоне, то он сначала все обработает и создаст готовую страницу или он по частям это делает и отдает браузеру кусками?

Извиняюсь за наивный вопрос.

nezabor
На сайте с 19.07.2010
Offline
152
#1

Dmitriy_2014, все зависит от того как вы генерируете страницу.

php выдает результат на каждый return(echo, print, ...)

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

---------- Добавлено 29.05.2018 в 22:14 ----------

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

Чудес не бывает...
S
На сайте с 13.10.2014
Offline
171
#2

PHP - это не интерпретатор, как многие думают, а компилятор. Документ компилируется, линкуется и хранится в бинарном виде,

если исходник меняется (хэш и/или дата обновления) то происходит перекомпиляция / пересборка бинарника, а после этого уже исполнение.

т.о. крайне не рекомендуется писать велосипеды вида

$code = '<?php print "hello world"; ';
file_put_contents ('myFile.php',$code);
include "myFile.php";

Ну а дальше уже как все обычные компиляторы

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

M
На сайте с 17.09.2016
Offline
124
#3

silicoid, А разработчики то вкурсе, что у них не интепритатор а компилятор ?)

http://php.net/manual/ru/preface.php

У Вас очень интересная теория работы php :) про пересборку/линковку

S
На сайте с 30.09.2016
Offline
469
#4
silicoid:
PHP - это не интерпретатор, как многие думают, а компилятор.

Самое интересное, что так думают практически все. Кроме silicoidа. Ну не совсем так, правда. На самом деле, PHP - это не интерпретатор и не компилятор. Это язык программирования. А интерпретатор у него Zend.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
ME
На сайте с 03.07.2017
Offline
66
#5
silicoid:
PHP - это не интерпретатор, как многие думают, а компилятор. Документ компилируется, линкуется и хранится в бинарном виде,
если исходник меняется (хэш и/или дата обновления) то происходит перекомпиляция / пересборка бинарника, а после этого уже исполнение.

т.о. крайне не рекомендуется писать велосипеды вида

$code = '<?php print "hello world"; ';
file_put_contents ('myFile.php',$code);
include "myFile.php";


Ну а дальше уже как все обычные компиляторы

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

Вы не правы.

PHP - это язык програмимрования. Интерпретатор у него, как говорили выше Zend. Перекомпиляция, как вы ее называете, происходит каждый раз если не установлен opcache.

Касательно вопроса ТС - страница может собираться частями, если отдаете ее по ходу выполнения частями (используя несколько раз echo, print и т.д.) и если не включена буферизация. Вобщем все зависит от вашей реализации.

S
На сайте с 13.10.2014
Offline
171
#6

Mobiaaa, Интерпретатор производит проверку постоянно, на лету. Компилятор - один раз, собирая из того, что наваял программист что-то, удобоваримое для машинной обработки.

Официально, PHP называется "интерпретатор компилирующего типа" см вики

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

---------- Добавлено 30.05.2018 в 14:48 ----------

MkrtElion, я поправлю. Перекомпиляция происходит постоянно, если php установлен как CGI

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

M
На сайте с 17.09.2016
Offline
124
#7

логично, что при работе как CGI опкеш не работает

Ибо процесс умирает после работы, вместе с байткодом

Dmitriy_2014
На сайте с 01.07.2014
Offline
276
#8

Спасибо за ответы, но теперь мне еще хуже стало это понять, я наивно думал, что он PHP движок считывает скрипт целиком все имеющиеся файлы все где есть php код, генерирует обычную HTML страницу полностью подготавливая её и отдает её целиком браузеру по запросу клиента…

nezabor
На сайте с 19.07.2010
Offline
152
#9

Dmitriy_2014, вы вообще с какой целью интересовались?

наверное у вас есть проблема и вы решили зайти к ней с огорода

M
На сайте с 17.09.2016
Offline
124
#10

Dmitriy_2014, По умолчанию всё так и есть

Скрипт выполняется, а потом всё одним "рывком" отдаётся в браузер

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий