РНР - интерпретатор
В прошлых уроках:
Программируем на PHP - Введение
PHP - Запросы от браузера к серверу
PHP - Как работает сервер
Однако цель нашего курса как раз таки изучить динамически-генерируемый контент. То есть страницы создаются в момент обращения клиента к серверу и отправляются ему как будто они уже были такие у сервера.
Таким образом реализованы многие интернет ресурсы - форумы, интернет-магазины, социальные сети и многие другие ресурсы в Интернете.
Способы генерации динамического содержимого на сервере
Вместо того, чтобы возвращать статический файл (например, картинку или html-страницу), можно сделать так, чтобы при запросе файла определенного формата, допустим зададим ему расширение .cgi
запускалась бы специальная программа, эта программа генерирует файл, который в свою очередь возвращается клиенту. Такие программы - помощники часто хранятся в папке cgi-bin сайта, однако это вовсе не обязательно. Можно придумать любое название для папки, и просто внести его в настройки сервера.
Когда серверу будет приходить запрос с указанным форматом файла - напримерhttp://thesite.ru/pagescript.cgi
, то сервер (а он сегда помнит заданные ему настройки конфигурации), поймет, что расширение .cgi призывает его запустить скрипт из папки cgi-bin которая в папке сайта thesite.ru. Когда эта программа запустится, она прочитает некоторые данные переданные от сервера, и некоторые общие (переменные среды). Затем программа в соответствии с запрограммированным в ней алгоритмом сгенерирует контент и отдаст его серверу (очень часто это текстовый контент, хотя может быть и двоичный файл с чем то интересным. Например с картинкой, музыкой или вирусом :p ).
Сервер получив от данной cgi - программы данные, отдает их клиенту. Как будто бы это статический файл.Node.js - данный вид скриптов применяется для создания отдельных самостоятельных серверов. То есть эта технология не связывается с сервером и может работать самостоятельно (хотя часто их используют в паре, например Node.js для организации чата на WebSocket, а сервер nginx отдает статические страницы с JavaScript - кодом, подключающемуся к этому чату (точнее к вебсокету) и соответственно отображающему сообщения. То есть получается два разных сервера отвечающих по разным протоколам, и зарегистрированных на разных портах в серверной операционной системе.
Но пользователь этого не замечает. Для него - это все просто чат.PHP - по своей сути он немного напоминает CGI однако, разработчики старались сделать этот инструмент для создания динамических страниц максимально удобным для разработчиков и в то же время эффективным. Его основное отличие от скриптов в CGI, что файлы PHP не нужно хранить в отдельной папке. Более того, код - php можно встраивать в разметку HTML. Здесь главное не забыть поменять формат файла с .html на .php и естественно настроить сервер на работу с интерпретатором PHP. На самом деле на большинстве Linux-серверов это делается копипастом пары строчек, например с хабра, а на нашем денвере для виндовса и так все настроено. Поэтому на настройках сегодня зацикливаться не буду. Сегодня главное понять разницу между этими всеми делами.
Как обрабатывается PHP файл на сервере
Когда клиент посылает запрос на сервер, помимо описанных в предыдущем уроке действий, сервер часто настраивают так, что он реагирует на расширения файлов. Поэтому сервер знает - если у него запросили файл с расширением .php - значит, он его не просто отдает клиенту (браузеру), а предварительно его передает на обработку программе PHP - интерпретатору.
PHP - интерпретатор на серверном компьютере работает как отдельная программа, просто сервер знает путь к ней в файловой системе и умеет передавать ей файлы с форматом .php.
Сам PHP интерпретатор делает вот что:
a) Он читает содержимое файла .php переданного ему от сервера и ищет там
<?php
- эта строчка служит ему указанием, что пора приниматься за обработку кода. Если он затем находит строчку ?>
он перестает обрабатывать считываемые данные как код. Все, что за пределами <?php ... ?>
(HTML-теги и текст) PHP-интерпретатор возвращает серверу так как есть. Например:
<!DOCTYPE html>
<html lang="ru">
<head>
<title><?php echo "Заголовок из скрипта"; ?></title>
...
Видимо такое удобство и послужило популяризации PHP.
Кстати открывающий и закрывающий тег могут иметь короткий вид: <? ... ?>
Правда предварительно нужно настроить в php.ini данное свойство.
PHP-интерпретатор выполняет заданные в скрипте инструкции и подставляет полученные в результате их работы данные. Точнее он их отправляет туда-же куда и html-теги с текстом вне <?php ... ?>
таким образом лоя самого сервера предыдущий заголовок страницы мало чем отличается от статической страницы. Всю работу взял на себя интерпретатор. Для сервера, после того как ему ее возвратил интерпретатор страница выглядит без всяких PHP-инструкций:
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Заголовок из скрипта</title>
...
Затем сервер возвращает клиентскому браузеру эту страницу как будто она у него была всю жизнь такая)) А браузер ее отрисовывает на мониторе как обычно, обращая внимания на теги, форматирования. Однако никакого PHP-шного кода в ней уже нет в помине.
После этого сервер продолжает ждать запросы от разных клиентов в сети, а о всем вышеописанном забывает, иногда оставляет на память лог-запись в специальном файле сервера. Серверу можно затем будет напомнить, что вы уже к нему заходили с помощью cookie - их мы вскоре рассмотрим. Но суть такова, что никакой связи между запросами клиентов, сервер не видит.
Привет!
Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.
Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧
Спасибо)