В этой статье подробно объясняется основной механизм работы PHP, включая работу содержимого PHP, а также на примерах объясняется весь жизненный цикл PHP от запуска до остановки.
Введение
Мы никогда не запускали процесс, связанный с PHP, вручную, он запускается при запуске Apache. PHP подключается к Apache через модуль mod_php5.so (в частности, SAPI, интерфейс программирования серверных приложений,
имеет в общей сложности три модуля): ядро, механизм Zend и уровень расширения; ядро PHP используется для обработки запросов, файловых потоков, обработки ошибок и других связанных операций; механизм Zend (ZE) используется для преобразования исходных файлов в машинный язык и последующего запуска его на виртуальной машине; Уровень расширения — это набор функций, библиотек и потоков, которые PHP использует для выполнения определенных операций. Например, расширение mysql нам нужно для подключения к базе данных MySQL; когда ZE выполняет программу, может потребоваться подключение к нескольким расширениям. В это время ZE передает управление расширению и возвращает его после обработки конкретной задачи. ;
наконец, ZE возвращает результаты выполнения программы ядру PHP, которое затем передает результаты на уровень SAPI и, наконец, выводит их в браузер.
Не так-то простовникнуть во
внутреннюю работу реальности. Вышеупомянутый процесс — это всего лишь упрощенная версия, давайте копнем немного глубже, чтобы увидеть, что еще происходит за кулисами.
◆После запуска Apache также запускается интерпретатор PHP;
◆Процесс запуска PHP состоит из двух этапов:
Первым шагом является инициализация некоторых переменных среды, которые будут действовать на протяжении всего жизненного цикла SAPI;
Второй шаг — создать некоторые настройки переменных, специфичные только для текущего запроса.
первый шаг при запуске PHP
? Каковы первый и второй шаги? Не волнуйтесь, дальше мы обсудим это подробно. Давайте сначала рассмотрим первый и самый важный шаг. Следует помнить, что первый шаг операции происходит до поступления каких-либо запросов.
После запуска Apache запускается и интерпретатор PHP;
PHP вызывает метод MINIT каждого расширения, тем самым переводя эти расширения в доступное состояние; Посмотрите, какие расширения открываются в файле php.ini; MINIT означает «инициализация модуля». Каждый модуль определяет набор функций, библиотек классов и т. д. для обработки других запросов.
Типичный метод MINIT выглядит следующим образом:
PHP_MINIT_FUNCTION(extension_name){
/* Инициализируем функции, классы и т. д. */
}
PHP начинает второй шаг.
Когда происходит запрос страницы, уровень SAPI передает управление на уровень PHP. Таким образом, PHP устанавливает переменные среды, необходимые для ответа на этот запрос. В то же время он также создает таблицу переменных для хранения имен переменных и значений, сгенерированных во время выполнения.
PHP вызывает метод RINIT каждого модуля, который представляет собой «инициализацию запроса». Классическим примером является RINIT модуля Session. Если модуль Session включен в php.ini, переменная $_SESSION будет инициализирована, и соответствующее содержимое будет считано при вызове метода RINIT
; рассматриваться как Процесс подготовки запускается автоматически между выполнением программы.
Типичный метод RINIT выглядит следующим образом:
PHP_RINIT_FUNCTION(имя_расширения) {
/* Инициализация переменных сеанса, предварительное заполнение переменных, переопределение глобальных переменных и т. д. */
}
Первый этап завершения работы PHP
аналогичен запуску PHP. Выключение PHP также разделено на два этапа:
как только страница будет выполнена (независимо от того, достигнет ли она конца файла или будет завершена с помощью функции выхода или смерти), запустится PHP. процесс очистки. Он будет последовательно вызывать метод RSHUTDOWN каждого модуля.
RSHUTDOWN используется для очистки таблицы символов, созданной во время работы программы, то есть для вызова функции unset для каждой переменной.
Типичный метод RSHUTDOWN выглядит следующим образом:
PHP_RSHUTDOWN_FUNCTION(имя_расширения) {
/* Выполняем управление памятью, сбрасываем все переменные, использованные в последнем вызове PHP и т. д. */
}
второго шага завершения работы PHP
все запросы обработаны и SAPI готов к завершению работы. PHP начинает выполнять второй шаг:
PHP вызывает метод MSHUTDOWN каждого расширения. Это последняя возможность для каждого модуля. освободить память.
Типичный метод RSHUTDOWN выглядит следующим образом:
PHP_MSHUTDOWN_FUNCTION(имя_расширения) {
/* Свободные обработчики, постоянная память и т. д. */
}
Таким образом, весь жизненный цикл PHP завершен. Следует отметить, что «запуск первого шага» и «закрытие второго шага» будут выполняться только при отсутствии запроса от сервера.