skip to content



PHP, основы создания приложения.

Мне при работе случилось сталкиваться с начинающими программистами, которые изучив основы синтаксиса языка PHP бросаются в бой - начинают разрабатывать сайты (хотя корректнее будет сказать - интернет-приложения). И у большинства из них (в особенности у тех, кто раньше разрабатывал desktop-приложения) присутствует одна и та же проблема - они не понимают основных принципов, на которых строиться не только интернет-приложение на php, но и любое интернет-приложение с динамически генерируемыми страницами.

Вкратце процесс выполнения можно разбить на следующие этапы:

1) Клиент отправляет запрос серверу. Например, Василий Пупкин вводит в адресной строке браузера www.supersite.com, или приходит на сайт по ссылке, или еще каким-либо образом.

2) HTTP-сервер, который обслуживает запросы по данному домену принимает запрос на получение ресурса и пытается определить, есть ли такой ресурс в файловой системе в каталоге, который закреплен за запрошенным доменом. Если строка запроса не содержит имени файла, то сервер пытается найти один из индексных, заглавных файлов (по умолчанию это index.html или default.html, для php - index.php) Если такого ресурса нет, то сервер отправляет сообщение об ошибке 404 - страница не найдена.

3) Если такой ресурс есть, то на основании типа файла (расширения) сервер
пытается определить, каким образом нужно обработать запрос. В случае с PHP в настройках HTTP-сервера (Apache или другого) указывается, что все файлы с расширением .php или .php4 должны обрабатываться интерпретатором языка PHP.

4) HTTP-сервер вызывает интерпретатор и тот текст, который был получен от интерпретатора отдается клиенту в качестве результата запроса. При этом интерпретатор на основе PHP-программы может также сгенерировать HTTP-заголовки, которые будут отправлены клиенту после обработки запроса.

Все, после выполнения этих этапов экзепляр интерпретатора в памяти больше не существует, все значения переменных утеряны, при следующей обработке аналогичного запроса выполнение программы начнеться заново. Не расчитывайте на то, что если вы при первом вызове занесли в переменную $i значение 10, то оно же будет доступно и при втором вызове скрипта. Для сохранения значений в рамках вызовов одного пользователя существуют сессии, но это уже совсем другая история.

При этом есть несколько основных способов вызова интерпретатора.

Давным давно, когда в
стране доткомов шел золотой дождь, люди строили интернет-приложения на
основе технологии CGI - Common Gateway Interface. Основной смысл этой
технологии заключается в том, что пользовательский запрос http-сервер передает на обработку бинарному файлу или скрипту, вывод которого и являлся результатом обработки запроса. Все параметры, которые вводил пользователь передавались в качестве параметров командной строки. При этом само CGI-приложение могло быть написано на чем угодно - на C,C++, на Perl или любом языке программирования. Главное, чтобы оно отвечало требованиям CGI. Основным недостатком можно считать то, что в системе создается столько процессов, сколько запросов она сейчас обслуживает.

Server-module - технология появилась позже, в случае PHP и Apache это mod_php. При использовании этой технологии сервер при обработке запроса не создает новый процесс для запуска интерпретатора, а запускает его в контексте процесса http-сервера в виде модуля. Это позволяет значительно упростить процесс администрирования, т.к. процесс обработки php-кода выполняется с теми же привилегиями, что и httpd-сервер.

Cуществует также технология FastCGI, разработанная одной небольшой софтверной фирмой в США. Основная идея этой технологии - после обработки CGI-запроса не выгружать из памяти интерпретатор, и использовать интерпретированный и подготовленный код при повторной обработке того же запроса, предварительно сбросив состояние памяти данных. Это позволяет достичь значительного по сравнению с CGI прироста производительности, но приводит к значительному росту используемого объема памяти по мере роста объема кода приложения.

В отличие от desktop-приложения, где как правило есть одна стандартная точка входа, от которой уже в дальнейшем идет обработка пользовательских команд, интернет-приложение имеет произвольное количество точек входа - пользователь может открыть индексный файл, может обратиться к одному из адресов приложения непосредственно, минуя индексный файл, может запросить отдельные изображения, CSS-файлы, Javascript-файлы, не загружая страницу приложения целиком.

При этом HTTP-сервер позволяет разработчику назначить собственные правила перенаправления, и указать, например, что за файлом styles.css нужно обратиться к файлу styles.php. При этом содержание файла styles.php будет выполнено как PHP-код и результат будет возвращен клиенту как CSS-код. Да, скрипт PHP не обязан возвращать только HTML-код. Вы можете генерировать CSS,Javascript, графику, PDF-файлы, главное только при выводе указывать правильное значение для заголовка content-type.

Я постарался изложить все как можно проще, надеюсь, внес немного ясности.

Спасибо за внимание :)

Powered by Drupal. CrystalX theme created by Nuvio | Webdesign.