logo

Без регистрации и СМС

Как работает 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 сформировал новый ответ.

Этот сайт сделан по принципу «потому что могу». Если вам что-либо не нравится — просьба присылать PR с исправлениями сюды. Сами исходники сайта тоже в свободном доступе и лежат вот тут.

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