Как работает PHP?
Для начала, для запуска PHP вы не можете просто так открыть в браузере файл
с расширением file.php
и увидеть результат работы (вам потребуется
интерпретатор PHP).
Многие при этом ошибочно полагают что для работы PHP требуется сервер (Apache, nginx, проч.) и БД (MySQL, PostgreSQL, SQLite, проч.).
Чтобы понять в целом почему это не так следует понять как именно работает PHP.
Ввод и вывод
Основой любой программы (не только на PHP) является ввод и вывод. Для начала, вам потребуются знания только о выводе.
Note Для полноты информации, всего потоков данных у каждой программы три, больше чем просто "ввод" и "вывод":
STDIN
- Данные на вход.STDOUT
- Данные на выход.STDERR
- Ошибки. Обычно они отправляются туда же, куда и вывод, но это > можно изменить.
Для того, чтобы просто что-то вывести вам достаточно написать простую программу:
<?php
echo 'Hello World!';
Вывод в терминал
Для вывода результата выполнения этой программы в терминал (консоль) достаточно
будет написать в терминале (где file.php
- это название файла с программой
выше) команду ниже и нажать Enter
:
php file.php
Note Для открытия окна терминала следует щёлкнуть правой кнопкой мыши по свободному месту в проводнике и затем по пункту меню "Открыть в Терминале"
Сразу после запуска программы вы получите результат её выполнения, в терминал
(т.е. в поток вывода) будет выведена фраза Hello World
:
Вывод в браузер
Всё тоже самое мы можем сделать не только в терминале! Теперь наша задача вывести результат выполнения программы в браузер.
Если мы просто откроем файл браузером, что ничего работать не будет, мы увидим там исходный код программы, а не результат её выполнения. Чтобы программа автоматически выполнялась при открытии страницы существуют несколько видов программ. Здесь и далее мы будем называть их "сервером".
Note Это не совсем так, так как в общем понимании задачи HTTP-сервера ограничены тем, чтобы корректно обработать HTTP запрос от браузера и передать его обработчику. Таким обработчиком может быть ещё одна внешняя программа, например
php-fpm
(PHP FCGI Process Manager или менеджер процессов PHP), а может быть дополнение/модуль для самого сервера, вродеmod_php
для сервераApache
.Так как настройка всей этой связки требует определённых знаний, то существуют специальные "сборки", где всё это собрано и сконфигурировано за вас, например Open Server, WAMP и множество других.
Warning Пожалуйста, если вы уже знакомы с работой PHP и используете Denwer, то удалите и забудьте о нём. Последняя версия этой программы вышла в 2013ом году, а это почти 10 лет назад и устарела примерно так же, как ламповые телевизоры и CD-приводы в компьтере.
Для того, чтобы запустить сервер для разработки можно воспользоваться уже знакомым способом. Открыть терминал и набрать следующую команду:
php -S 127.0.0.1:80
После того, как вы нажмёте Enter
, то вы увидите примерно следующий результат:
E:\Projects\test>php -S 127.0.0.1:80
[Mon Jan 16 14:27:04 2023] PHP 8.2.1 Development Server (http://127.0.0.1:80) started
Note Флаг
-S
означает, что нам следует запустить сервер PHP. Значение127.0.0.1
указывает IP-адрес нашего сервера (127.0.0.1
является псевдонимом дляlocalhost
), а значение80
указывает на порт сервера (80
является зарегестрированным портом для протоколаhttp
. А дляhttps
, например, используется порт443
).
Note Подробнее о работе встроенного сервера можно прочитать в официальной документации.
Эта информация означает, что наш сервер запустился и работает. Теперь вы можете
открыть браузер и ввести туда адрес http://localhost/test.php
(или
http://127.0.0.1:80/test.php
, что означает одно и тоже).
В результате вы увидите всё ровно тоже самое, что и ранее видели в терминале:
Итоги
В результате, классическая схема работы PHP следующая:
-
Пользователь -> Браузер
: Пользователь заходит на сайт в браузере. -
Браузер -> Сервер
: Браузер отправляет HTTP-запрос на сервер. -
Сервер -> PHP
: Сервер обрабатывает запрос и передаёт его на выполнение в программу на PHP. -
PHP -> Результат
: PHP выполняет код и выводит результат работы.
Ну и результат работы по такому же прнципу попадает обратно к пользователю:
-
Результат -> Сервер
: PHP отправляет результат работы обратно серверу. -
Сервер -> Браузер
: Сервер формирует HTTP-ответ и отправляет его в браузер. -
Браузер -> Пользователь
: Браузер получает ответ и обрабатывает его (например, рисует красивую страничку из переданного HTML).
Если вы вдумчиво прочитали и осознали этот список выше, то вы сразу же получите ответ на на главный вопрос жизни, вселенной и всего такого: Когда пользователь получил красивую страничу - PHP уже завершил свою работу и отдал этот самый результат.
А это значит, что:
- PHP не может получить информацию о том, где находится курсор мыши.
- PHP не может получить информацию о том, какой размер окна в браузере у пользователя.
- PHP не может работать в браузере с событиями нажатия кнопок на клавиатуре.
- ...и так далее.
Когда интерфейс HTML страницы уже нарисовался - PHP уже выполнил свою работу и "нарисовал" этот интерфейс, дальше работает уже браузер. Всё дальнейшее взаимодействие с пользователем (например события) уже происходят именно в нём.
Если же вам всё же требуется как-то обработать событие, например форму "логина" - следует отправить новый запрос с данными о логине, чтобы PHP сформировал новый ответ.