Реферат: Метафизика вопроса


1. ВВЕДЕНИЕ В PHP

Метафизика вопроса

Итак, грамотно верстать странички, размещать и грамотно форматировать информацию на них, и делать к ним гибко модифицируемое оформление, вы уже умеете. Тем не менее, что называется, глядя в интернет, можно заметить, что статических страниц там хоть и много, но самое интересное из представленного, явно навевает мысль, что вряд ли эти все эти вещи хранятся в виде статических html-страничек.

Если задуматься над тем, как это сделано, то сразу становится понятно, что каким-то образом эти страницы, полностью или частично, должны генерироваться динамически. Причём, вряд ли это делается на клиентской стороне – просто по логике, большая часть этих процессов генерации просто обязаны происходить на веб-сервере.

Если начать логически рассуждать дальше, то также можно сделать предположение, что вряд ли этой генерацией обычно занимается некое универсальное средство - должна быть какая-то специализированная технология, оптимизированная именно под генерацию динамических html-страниц web-сервером.

На деле, конечно, окажется, что использование универсальных средств для вот такой динамической генерации html-страниц в контексте web-сервера тоже имеет место, и во многих случаях даже является оправданным. А, кроме того, специальных технологий, предназначенных для этой цели, тоже существует несколько. Тем не менее, средством, вполне заслуженно получившим наибольшее распространение, однозначно является PHP. Именно его изучением мы и займёмся в рамках данного учебного курса.

Немного о терминологии. Часто можно услышать в разговоре такое сочетание, как «PHP-скрипт». Как его понимать, и отличается ли «PHP-скрипт» от «программы на PHP»? Ответ: однозначное нет. PHP до сих пор является исключительно интерпретируемым языком, то есть в момент работы программы обрабатывается непосредственно файл, содержащий исходный код (исключения возможны, но о них отдельно и гораздо позже). То есть, всякая программа, написанная на PHP, является интерпретируемой, то есть, в принципе, может быть названа «скриптом».

^ Откуда что взялось

Что же такое это самое «пи-эйч-пи», а то и просто «пэ-хп-пэ», о котором мы собираемся разговаривать? Что умеет, и откуда взялось? Вначале – немного об истории.

Официальная версия гласит, что PHP, как язык программирования, был создан программистом Расмусом Лердорфом с целью сделать его домашнюю страничку в Интернете более интерактивной, более привлекательной для посетителей, а также, как формулируют некоторые источники, «чтобы иметь представление о тех людях, которые посещают его сайт и знакомятся с его резюме». Осенью 1994 года господин Лердорф разработал базовый синтаксис и создал первый интерпретатор своего языка, дав и языку, и программе, его интерпретировавшей, название Personal Home Page Tools - т. е. РНР. В той самой ранней версии, интерпретатор мог обрабатывать лишь несколько основных команд, однако начало было положено.

Примечательно, что интерпретатор сам был написан на интерпретируемом языке Perl, предназначенном, в общем, для тех же целей. Мотивацией для написания было крайнее неудобство синтаксиса Perl – те, кто знаком с языком Perl будут иметь возможность оценить, что данная разработка, несомненно, имела смысл.

В следующем, 1995 году господин Лердорф доработал интерпретатор, объединив его со своей же программой Form Interpretator, позволявшей обрабатывать html-формы. Кроме того, сама программа была переписана на языке C, и, хотя сама по себе осталась интерпретатором, позволила производить выполнение программ гораздо быстрее. Также, это позволило встраивать интерпретатор PHP непосредственно в web-сервер Apache.

По утверждениям самого автора, неожиданно для него самого, пользователи сервера, где располагался сайт с первой версией PНР, попросили себе такой же инструмент, и он довольно быстро перерос в самостоятельный проект. Именно от варианта 1995 года пошёл отсчёт версий нынешнего PHP.

В том же 1995 году функциональность интерпретатора была дополнена ключевыми, с нашей точки зрения, возможностями взаимодействия с серверными базами данных, а также работы с графическими изображениями. Благодаря этому, например, появилась возможность автоматически создавать gif-файлы с кнопками-счётчиками посещений, и тому подобные приятные вещи. Вторая версия, содержавшая уже вот такие, расширенные, возможности, вышла к конце всё того же 1995 года.

К концу 1997 года РНР использовался более чем на пятидесяти тысячах сайтов.
Web-мастера быстро оценили достоинства нового языка web-программирования, такие как легкость освоения и богатство возможностей, и вскоре использовавшиеся до него традиционные Perl и С стали сдавать свои позиции.

Так как исходный код интерпретатора был открытым, а сам интерпретатор бесплатным, то энтузиасты стали заниматься его доработкой, и летом 1998 года появился на свет РНРЗ - детище Зеева Сураски и Энди Гутманса. РНР 3 был переписан "с нуля", так как его авторы сочли код предыдущих версий недостаточно эффективным. Кроме того, РНР З стал весьма легко расширяемым продуктом. Любой, создавший на основе определенных стандартов модуль расширения РНР, мог конечными усилиями этот модуль интегрировать с программными файлами РНР.

Уже к концу 1999 года число сайтов, построенных на основе РНР, перевалило за миллион. Весьма важным достоинством данного средства также явилось то, что программы интерпретации команд РНР, были созданы практически для всех операционных систем, от Windows до Unix и Linux. Таким образом, PHP стал кроссплатформенным средством, хотя ещё не так давно считалось, что PHP работает в связке только с сервером Apache, и, как правило, лишь под платформами семейства Unix.

Используемая в основном до сих пор четвёртая версия интерпретатора PHP была создана в 2000 году компанией Zend Technologies (по сути, это был проект тех же самых людей, что и PHP 3, только они к тому времени уже были не талантливыми программистами, а руководителями основанной ими фирмы). РНР 4 был дополнен множеством новых функций, но, несмотря на то, что стал разрабатываться фирмой, остался бесплатным и свободнораспространяемым продуктом.

В 2004 году была выпущена пятая версия PHP. Несмотря на огромное количество дополнений, связанных как со структурами языка (например, расширением возможностей объектно-ориентированного программирования), так и общей оптимизацией работы интерпретатора, за прошедшие 2 года PHP 5 не смог вытеснить четвёртую версию.

Поскольку, в плане синтаксиса, основные отличия лежат в области классов и объектов, большая часть того, что мы будем рассматривать, с одинаковым успехом относится к обеим версиям. Там, где между двумя актуальными ныне версиями есть разница, мы будем это особо оговаривать.

Кстати, как это часто бывает с программами, которые изначально не являются коммерческим продуктом, где-то по ходу развития оказалось, что уже PHP расшифровывается, как «PHP: Hypertext Preprocessor». Что говорит, в первую очередь, о том, что желающие как-либо расшифровать PHP по определению занимаются ерундой. PHP – он и есть PHP, замечательная вещь, и расшифровывать его незачем.

В завершение разговора об истории развития продукта следует сказать, что не так давно фирма Zend объявила, что ведёт разработку коммерческой версии PHP, которая будет компилируемой, а не интерпретируемой. Данная перспектива выглядит весьма заманчивой, с тех точек зрения, что, во-первых, это позволит сильно повысить эффективность выполнения сервером программ на PHP, и, во-вторых, позволит разработчикам создавать и устанавливать заказчикам свои системы, разработанные на PHP, не предоставляя им исходных кодов. Главное, чтобы параллельно с этим, сохранилась и бесплатная интерпретируемая ветвь продукта.

^ Назначение и возможности

Теперь расскажем немного более детально о назначении и возможностях.

В общем, РНР способен делать все, что делают другие CGI программы. Тут необходимо оговориться: нельзя однозначно сказать, что PHP является CGI-программой, поскольку это зависит от того, как он установлен на web-сервере. То есть, действуя абсолютно аналогичным, с точки зрения пользователя сайта, образом, PHP может быть как CGI-программой, так и модулем расширения web-сервера. Чуть дальше мы вернёмся к рассмотрению этих вопросов.

Для понимания назначения и возможностей PHP, нам необходимо рассмотреть, что же происходит, когда интернет-браузер пользователя запрашивает у web-сервера «а подай-ка мне (по протоколу http, естественно) файл вот такой-то .php». А происходит следующее: web-сервер, получив запрос, находит у себя требуемый файл, по расширению (которое обязательно прописывается в его, web-сервера, конфигурациях) распознаёт, что указанный файл, перед отправкой запросившему, должен быть обработан модулем PHP. Из этой логики, кстати, следует определение PHP, как препроцессора для текстовых файлов. Файл подаётся на вход программе-интерпретатору PHP, результатом обработки которого должен явиться, что называется, в «чистом» виде, тот самый html-файл, с которого мы начинали разговор. То есть, без фрагментов программного кода, который должен отработать на сервере.

Таким образом, можно сказать, что главным результатом действия программы на PHP должен являться выходной поток, представляющий собой документ html. Исключения из этого, опять же, бывают, о них в своё время мы поговорим, но пока ими можно пренебречь.

Здесь необходимое примечание: об html-документе в данном случае речь идёт условно, то есть, в выходном потоке запросто могут быть фрагменты скриптов, но скриптов, которые должны выполняться на клиентской стороне, web-браузером. Собственно, точно так же, как формируется программой на PHP html-код, может её формироваться и код, например, на Java-Script, включаемый в html-код документа, отправляемого web-сервером запросившему его пользователю. И наоборот, может генерироваться, и отправляться в браузер пользователя, и простой текстовый файл. Но, поскольку именно так происходит в большинстве случаев, будет считать, что в результате работы PHP-скрипта, мы получаем html-код.

Теперь, когда мы рассмотрели схему функционирования PHP в общем, вернёмся к возможностям. Итак, что мы можем сделать в программе, помимо того, что сформировать сложным образом оформленный и отформатированный в виде html выходной поток?

во-первых, можем собрать и обработать данные, пришедшие вместе с запросом на страничку – отправленные, например, из заполненной html-формы. Причём, данная обработка может быть достаточно сложно организованной, если мы того захотим.

во-вторых, можем произвольным образом работать с файловой системой, то есть, если web-серверу хватит на это прав, можем создавать, копировать, удалять, читать, писать, загружать файлы на сервере. Значительную часть этих операций можем делать и с каталогами.

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

в-четвёртых, мы имеем возможность поднимать информацию из различных серверных баз данных, а также – изменять при необходимости эту информацию.

в-пятых, можем работать с сессиями, параметрами «cookies», а также различными параметрами web-сервера.

в-шестых, мы имеем в своём распоряжении очень мощные и разнообразные механизмы для обработки строк – включая различные действия с регулярными выражениями.

в-седьмых, мы можем различным образом обрабатывать документы XML, а также различные его приложения.

в-восьмых, если нам это зачем-либо понадобится, можем пользоваться всеми механизмами IP-сокетов.

…и так далее, и так далее, и так далее…

В общем, по сути дела, главное, чего мы не можем сделать в PHP, это напрямую выдать сообщение пользователю. Впрочем, не можем мы этого сделать и в любой серверной программе, вне зависимости от того, на каком языке она написана.

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

^ Установка и проверка

Как уже говорилось, PHP может быть установлен в контекст различных web-серверов, которые, в свою очередь, работают под различными операционными системами. Тем не менее, наиболее часто вам придётся сталкиваться с установкой PHP в сервер Apache, причём, скорее всего, работающего в системе Windows.

Это можно с уверенностью заявить на том основании, что, во-первых, вашим, как web-разработчика, рабочим местом, будет, с наибольшей вероятностью, компьютер именно под управлением Windows, и чаще всего настраивать web-сервер вам придётся именно свой, локальный. На реальном web-сервере, работающем на Linux, или чём-то другом из семейства Юниксов, настраивать систему, скорее всего, будет профессиональный администратор, хотя, если вдруг это придётся делать вам же, то вы с удивлением обнаружите, что установка PHP в контекст сервера Apache там, практически, ничем не отличается – по крайней мере, в одном из вариантов.

Во-вторых, почему именно Apache, а не IIS? Вот здесь ответ простой: он и проще, и надёжнее, и гораздо экономичнее в плане отношения к вычислительным ресурсам, и, что в наше время становится актуально, бесплатен, и не требует никаких лицензий. В конце концов, если вам, в силу каких-нибудь обстоятельств непреодолимой силы (например, требований менеджера) захочется поставить PHP под IIS, вы, несомненно, сможете это сделать, воспользовавшись документацией.

Вообще, документация по установке к PHP прилагается очень объёмная, качественная, и описывающая, в частности, такие случаи, которые можно отнести к разряду совсем уж нереальных – например, что у вас будет web-сервер не Apache, не IIS, а что-то третье.

Фундаментально, существует два способа установки PHP на web-сервер: как CGI-приложение или как SAPI-модуль Apache. Функционально разницы никакой, то есть, в PHP установленном, как модуль, мы сможем с совершенно аналогичным результатом выполнять один и тот же PHP-скрипт.

Предварительно, следует заметить, что большие специалисты рекомендуют для удобства всё, что касается web-сервера, в том числе, и наш PHP, складывать в одну директорию, а директорию подключать, как виртуальный локальный диск (например, командой subst u: <путь к директории>). Предположим, что Apache у нас лежит в директории c:\Program Files\webserver\Apache, а для PHP мы отводим, соответственно, директорию c:\Program Files\webserver\php, которая, после подключения виртуальным диском стала u:\php.

Итак, вначале поставим PHP, как обработчик CGI. Как правило, «на входе» мы имеем архив, содержащий набор различных файлов. Этот архив следует распаковать в директорию, в которой, как мы постановили, будет лежать PHP. Кстати, на первом этапе из всех многочисленных файлов установочного архива, нам важны всего 3:

 php.exe — интерпретатор командной строки

 php4ts.dll — собственно ядро PHP

 php.ini-dist — конфигурационный файл, версия из дистрибутива

Если кого-то заинтересует вопрос, почему нам нужны всего 3 файла, а установочный комплект занимает от трёх до восьми мегабайт в архиве (в зависимости от версии и комплектации), то ответом будет: а потому, что в нём содержатся различные библиотеки расширений. Все эти расширения, предназначенные для поддержки XML, различных баз данных, кроме MySQL (она в PHP 4 включена в состав ядра), генерации картинок, и всего прочего, вы можете поставить позже в любой момент.

Следующим шагом предлагается скопировать файл php.ini-dist в директорию Windows, и переименовать его в php.ini.

Последующие настройки касаются только файла конфигурации Апача httpd.conf. Добавим mime-тип, соответствующий расширению программ PHP:

AddType application/x-httpd-php .php .php3 .php4 .phtml

Затем там же поставим действие (action) в соответствие указанному нами типу:



  Options ExecCGI



ScriptAlias "/_phpdir_/" "u:/php/"

Action application/x-httpd-php "/_phpdir_/php.exe"

Если делать всё совсем по правилам, то рекомендуется вставлять данный фрагмент непосредственно перед секцией Virtual Hosts, хотя в принципе, это уже не обязательно.

Теоретически, всё – теперь, если перезапустить Apache, PHP должен работать.

Тут же возникает логичный вопрос: как мы можем это проверить? Проверять рекомендуется следующим образом: создать в любом текстовом редакторе, хоть бы и notpad’е, файл test.php приблизительно следующего содержания:

<?php echo " Ceterum censeo Microsoft delendam esse"; ?>

и разместить его в корневой директории документов вашего web-сервера. После этого в строке адреса вашего любимого браузера можете набрать

localhost/test.php

Если после этого в браузере вы увидите только текст фразы



Рис.1.1. Результат работы программы на PHP в браузере

значит, PHP успешно установлен, и мы можем приступать к работе.

Если хочется увидеть что-то более основательное, можно переписать нашу простейшую программу в виде:

<?php phpinfo(); ?>

и в результате её выполнения интерпретатор сообщит нам много ценного и интересного о себе, своих настройках и модулях расширения, а заодно о web-сервере, в контексте которого работает PHP.

Теперь о том, как поставить PHP в альтернативном варианте, варианте модуля Apache. Хотя многие компетентные люди с полным правом назвали бы альтернативным наш первый вариант, по той причине, что изначально PHP всё-таки был ориентирован только под Apache, Apache работал только под unix’ами, а под unix PHP подключается по логике, очень похожей на нашу установку модулем.

Точно так же копируем файлы из установочного комплекта в директорию, которую мы отвели для файлов PHP. На этот раз нам опять нужны, как минимум, 3 файла:

php4ts.dll (собственно, ядро PHP)

php4apache.dll (модуль для Апача)

php.ini-dist (для того же, для чего и в прошлый раз)

Снова копируем php.ini в системную директорию, затем снова начинаем править httpd.conf - находим секцию "Dynamic Shared Object (DSO) Support" — её найти просто по строкам вида LoadModule ... Добавляем свою строчку:

LoadModule php4_module "путь-к-директории-php/php4apache.dll"

(в нашем случае – u:\php).

Теперь снова добавляем mime-тип

AddType application/x-httpd-php .phtml .php .php3 .php4

Если вы ранее подключили PHP как модуль CGI, то следует убрать строки, связанные с сопоставлением action для указанного типа. Ну и, собственно, всё – перезапускаем Apache, и проверяем на нашем тестовом файле, работает ли PHP.

Теперь о недостатках и преимуществах. Опыт показывает, что первый способ обычно начинает работать без проблем сразу, в то время, как второй всё-таки оказывается связан с некоторыми проблемами, особенно в случаях, если Apache установлен второй версии.

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

Кроме того, установив PHP как модуль, вы получите возможность управлять некоторыми его параметрами из файлов .htaccess, и вообще будете избавлены от достаточно длинного ряда ситуаций, которые встречаются, возможно, и достаточно редко, но при встрече действуют на нервы очень сильно. Потому, за исключением случаев, когда нужно всё поставить очень быстро, рекомендуется всё-таки, ставить PHP, как модуль Apache.

В завершении разговора об установке, необходимо сказать, что, в конце концов, существуют и классические запускаемые windows-дистрибутивы, но для общего понимания, и более уверенного решения проблем в будущем, мы посчитали нужным рассмотреть ручную установку детально.

Дополнительно, следует сказать, что известно немало готовых комплектов из разряда «Джентльменский набор ленивого web-разработчика», которые с одного дистрибутива позволяют поставить не только Apache с PHP, но и MySQL заодно, но пользоваться ими или нет, предлагаю каждому решить самостоятельно. Наиболее популярные наборы такого рода носят название Денвер (http://www.denwer.ru/) и Swissknife (http://swissknife.bougakov.com/).

^ Модули расширения

Теперь немного о том, почему же всё-таки непосредственно для работы PHP, хоть в том, хоть в другом варианте, нам нужны всего по три файла, а в дистрибутиве есть ещё много чего.

Основное, из прочего, что есть в дистрибутиве – различные модули расширения. Смысл данных модулей в том, что ядро PHP, содержит, конечно, много функций, но далеко не всё, что может понадобиться. Многие библиотеки функций вынесены в отдельные модули, без которых всё будет замечательно работать, пока нам не понадобится функциональность этих функций. Когда эта функциональность нам понадобится, нам придётся заняться подключением соответствующего модуля.

Как подключить модуль расширения? В принципе, достаточно просто. Самое главное условие в том, что эти самые модули расширения, находящиеся в установочном комплекте в каталоге extensions, и имеющие в внерсии для windows имена php_<личное имя>.dll, должны находиться в каталоге, который прописан в системных путях (PATH). То есть, для того, чтобы PHP смог их подключить, нужно либо каталог php/extesions прописать в списке системных путей, либо необходимые модули скопировать в какой либо прописанный каталог, например, windows/system32.

Затем, нам необходимо исправить файл конфигурации PHP. Люди, которые готовили установочный комплект, поступили очень разумно, и все присутствующие в комплекте модули, обычно уже прописаны в конфигураторе, но закомментированы. Наша задача сводится лишь к тому, чтобы найти в списке строку, содержащую подключение нужного нам модуля, и раскомментировать её. Например, для модуля расширения gd2, необходимая строка имеет вид:

extension=php_gd2.dll

После того, как мы исправили конфигуратор, если PHP у нас подключен, как модуль Apache, необходимо будет перезапустить Apache. Если PHP подключен, как обработчик CGI, это не обязательно – всё должно работать сразу с момента сохранения исправленного файла конфигурации.

Теперь немного о том, для чего какие модули нужны. Вообще, модулей там много, и значительная часть их становится нужна только в весьма экзотических ситуациях.

Так, уже упоминавшийся модуль расширения gd и дополненный функциями работы с новыми форматами gd2, служит для работы с графическими изображениями – в том смысле, что если нам надо не просто отправить картинку, а, скажем, изменить её размер, или что-то в неё дорисовать. Используя функции модуля gd, мы можем это сделать, и в нужный момент мы к этому ещё вернёмся.

Функции перекодировки строк содержатся в модуле iconv. Под перекодировкой в данном случае имеется в виду смена кодовых таблиц.

Модули mssql, oracle, sybase и ещё несколько, содержат функции для обращения скриптов к соответствующим серверам баз данных. Здесь нужно заметить, что функции для связи с MySQL встроены в состав ядра PHP.

Модуль Zlib позволяет работать из программы на РНР с архивами в формате Gzip, а модуль libswf - с Flash-презентациями, создавая и редактируя их также прямо из программы на РНР.

Чуть более сложная ситуация с использованием XML. Поддержка XML в модулях расширения PHP, конечно, есть, но по какой-то причине получается, что в разных версиях модуля domxml (входящих в различные установочные комплекты даже одинаковых версий PHP) для разбора XML-документов применяется разный набор функций.

Соответствующие модули расширения существуют для компрессии данных алгоритмом zip, доступа к функциям Win API и web-серверов, шифрования, работы с форматом pdf, и много чего еще.

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

Здесь также следует указать, что разные установочные комплекты могут нести в своём составе различный набор расширений. И, тем более, на реальных web-серверах может быть установлен различный набор расширений. Потому, если при разработке проекта вам приходится пользоваться теми или иными функциями из модулей расширения, следует заранее уточнять, подключено ли соответствующее расширение на том сервере, где будет размещаться проект, и если не подключено, то реально ли его подключить.

Напоследок следует заметить, что модули расширения PHP, при желании, могут быть по необходимости разработаны самостоятельно – все интерфейсы открыты, все описания в природе существуют. Однако, задача эта достаточно экзотична, и в рамках нашего курса мы этим заниматься не будем.



Методика разработки и тестирования

Перед тем, как заняться разработкой программ на PHP, следует поговорить о том, как такая разработка может проходить в техническом плане.

Методика написания программ для программистов, привыкших к интегрированным средам разработки, выглядит архаично. В общем случае, написание текстов программ может производиться в любом текстовом редакторе – хоть в Notepad, хоть во встроенном редакторе Far. Значительная часть разработчиков именно так и поступает.

Но, если уж мы вспомнили про Far, то следует заметить, что существует плагин к нему, который несколько повышает наглядность кода на PHP. Называется он colorer, существует в виде свободнораспространяемого архива.

Также, как вариант, может рассматриваться специальная оболочка «Zend Development Environment», которая реализована как под Windows, так и под Linux. Эта оболочка умеет некоторое количество приятных мелочей, от которых становится легче жить разработчику. Например, подсветить ключевые слова, подсказать возможные функции и методы класса, а также в реальном времени указать на наиболее простые ошибки синтаксиса, как то не закрытую скобку или отсутствующую точку с запятой. Главным недостатком данной системы является то, что она платная.

Помимо ZDE, существует целый ряд оболочек, которые просто подсвечивают синтаксис, и, возможно, позволяют делать что-то ещё из тех же приятных мелочей, например, объединять некоторое количество модулей кода в проект, и осуществлять навигацию в рамках проекта с некоторыми дополнительными удобствами. Примером такой оболочки может являться «Edit+». По сравнению с Far+Colorer производительность труда разработчика они повышают незначительно, и, как правило, тоже являются платными.

В остальном, говоря об общей методике разработки на PHP, можно сказать, что она полностью аналогична технологии создания статических html-сайтов. То есть, вначале скрипты, как правило, пишутся и тестируются на локальном web-сервере разработчика – расположен он непосредственно на его рабочем компьютере, или на сервере в его локальной сети – не столь уж важно. Важно, что разработчик имеет доступ туда «по файловой системе». После того, как скрипты доведены до работоспособного состояния, они, как структура файлов, выкладываются на реальный работающий web-сервер.

Про то, как отлаживать программы на PHP. Для того, чтобы запустить PHP-программу на выполнение, как уже говорилось, необходимо просто открыть его, как web-страничку с того сервера, где его расположили, в любом web-браузере. Если ваша программа успешно отработала, то вы увидите в браузере корректный результат работы.

На случай, если в программе содержатся ошибки, интерпретатор PHP содержит систему диагностики ошибок, и, при обнаружении ошибки, достаточно внятно сообщает, что именно ему не нравится, и в какой строке кода какого PHP-модуля это расположено.

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

Однако, например, реальные web-сервера часто настраивают так, чтобы сообщения об ошибках PHP попадали не в выходной поток, а в лог сервера. Так что, если вы запустили скрипт, а страница не сгенерировалась, но и сообщение об ошибке не показалось, ищите сообщение об ошибке в логе сервера. Вопрос «Где мне увидеть лог сервера?» должен быть задан администратору web-сервера.

Также следует отметить, что помимо ошибок, те или иные операции в программе PHP могут генерировать ещё и предупреждения различного характера, также выдаваемые, в зависимости от настройки сервера, либо в выходной поток, либо в лог. То, какие предупреждения показывать, а какие – нет, зависит также от настроек PHP, а заодно, может управляться и непосредственно из вашего PHP-скрипта. Проблематика диагностики ошибок и корректного оповещения о них пользователя непременно будет рассмотрена нами в соответствющем разделе данного курса лекций.

В случаях, когда программа не выдаёт сообщения об ошибке ни в выходной поток, ни в лог сообщений сервера, но и не выдаёт предполагаемого результата, приходится прибегать к таким методам отладки, как трассировка и отслеживание промежуточных значений переменных. Поскольку сервисных средств для этого не предусмотрено даже в специальных оболочках разработки на PHP, главным способом отладить программу является вставка в нужных местах функций вывода значений переменных, и анализа: где они принимают неверные значения, и почему.

По окончании отладки, важно не забыть убрать эти трассировочные вставки из кода.

Итак, подводя итог, процесс разработки выглядит следующим образом:

пишется код программы в текстовом редакторе;

код программы сохраняется в один из каталогов локального web-сервера;

сохранённый файл запрашивается у локального web-сервера через web-браузер;

если загрузка привела к ошибке, сообщение об ошибке анализируется, после чего все шаг повторяются;

после того, как все ошибки будут устранены, и вся требуемая функциональность реализована, вся структура файлов web-приложения, созданная на локальном web-сервере, копируется на реальный, рабочий web-сервер;

после этого переноса вся функциональность снова полностью тестируется, и только после этого приложение можно считать готовым к работе.

^ Где взять дополнительную информацию

В заключении общих разговоров о PHP, хочется сказать немного об источниках дистрибутивов PHP и документации по нему, несмотря на то, что Гугл знает всё.

Официальным сайтом проекта PHP и основным источником сведений о нём является http://www.php.net. На сайте представлены дистрибутивы различных версий РНР для различных платформ, руководства по РНР на разных языках, а, кроме того, - списки сайтов, посвященных программированию на РНР.

Несмотря на то, что «технический английский» мы все пишем в своих резюме, часто, особенно – в начале овладения какой-либо технологией, хочется, чтобы, во избежание недоразумений и разночтений, описание было на родном, великом и могучем. На этот случай у нас есть сайт "РНР по-русски" (http://php.spb.ru), где информации, конечно, гораздо меньше, но, тем не менее, очень много полезного и интересного почерпнуть можно и там. В частности, там можно найти и скачать полное руководство по PHP на русском языке.

Кое-что, написанное по-русски, можно найти и на основном php.net, но следует иметь ввиду, что локализация там весьма выборочная, и, по какой-то причине, при просмотре этих страниц, в браузере часто возникают нерешаемые проблемы с кодировкой.

Вообще, информации по PHP в интернете очень много, и имея доступ к нему постоянно, если у вас появилась необходимость сделать на PHP что-то, чего вы раньше не делали, то главное – это правильно сформулировать запрос к поисковой системе. Основная сила PHP состоят в том, что он прост идеологически, прост в освоении, и предполагает, что объём начальных знаний, составляющих базу для последующего самостоятельного освоения, в PHP невелик. Потому, лекций по нему у нас предполагается всего 10.

Практическое задание:

Установите PHP 4 в контекст web-сервера Apache, как модуль, самостоятельно, с подключением расширений curl и gd.

^ 2. СИНТАКСИС ЯЗЫКА

2.1. Основы.

В самом общем плане, можно сказать, что PHP, подобно Java, Perl и ещё некоторых, принадлежит к разряду языков, созданных на основе синтаксиса языка C. То есть, если вам ранее приходилось сталкиваться с программированием на языке C, то общий синтаксис PHP будет понятен, практически, сразу.

Хотя, общий синтаксис PHP и так довольно прост. Программный код на РНР встраивается в текст web-страницы так же, как и сценарии на JavaScript, VBScript, при помощи окаймляющих угловых скобок с вопросительными знаками и указанием языка:

<?php

...

текст программы

...

?>

Как правило, допустим и упрощённый вариант <? ... ?>

Даже если вы задали файлу расширение .php, по умолчанию этот файл всё равно рассматривается, как файл, в общем случае, текстовый, в контексте web – как файл html. Для того, чтобы включённый в файл PHP-код начал выполняться, весь этот код должен быть выделен вот такими окаймляющими скобками с вопросительными знаками. Данное положение верно, даже когда в файле больше ничего нет, то есть файл не содержит ничего, кроме PHP-кода.

Команды РНР разделяются символом точки с запятой - ";". Символ ";'' не ставится после условных операторов (if, switch) и операторов цикла (for, while и т.д.).

Составной оператор ограничивается фигурными скобками «{» и «}», после закрывающей скобки точка с запятой также не ставится.

Комментарии в код могут быть вставлены двумя основными способами. Во-первых, вставкой в код пары символов «//» - в этом случае, всё, что следует за ними до конца строки, рассматнривается интерпретатором, как комментарий, то есть – игнорируется. Во-вторых, комментарием считается любой фрагмент, выделенный открывающей парой символов «/*» и закрывающей «*/» - вне зависимости от того, находятся ли между ними переводы строки, или какие-то другие символы, в других условиях считающиеся служебными.

2.2. Переменные.

Как и в любом языке программирования, в PHP есть возможность работы с переменными. Под переменной, как обычно, понимается некая именованная сущность, которая может принимать назначаемые ей значения.

В программном коде на PHP переменные обозначаются именами, начинающимися со знака «$», например «$value». Данный принцип именования переменных может показаться странным, но на самом деле он позволяет отличать переменные при первом же взгляде на программный код.

Кроме того, данный подход позволяет очень просто и элегантно реализовать, например, ссылки на переменную по ее имени, хранящемуся в другой переменной. Вполне допустимой является конструкция

<?php

  $name = 'value';

  $value = 5;

  echo $$name;

?>

Результатом работы данного фрагмента будет вывод в выходной поток значения «5». На будущее следует заметить, что подобный подход применим и к функциям, и к классам, что позволяет создавать весьма затейливые, но, при этом, эффективные конструкции.

Имена переменных могут включать символы латинского алфавита, цифры во всех позициях имени, кроме первой после знака доллара, а также символ подчёркивания «_». Имена переменных в PHP регистрозависимы, то есть, $var и $Var будут разными переменными.

В общем случае, переменные в PHP не требуют предварительного объявления, то есть, использование переменной в программе начинается сразу с присваивания ей какого-либо значения.

Также, переменные в PHP не требуют явной типизации. То есть, в скрытом виде типы переменных всё-таки присутствуют, но явным образом этот тип нигде не указывается, и определяется лишь в зависимости от контекста использования переменной.

Вообще, можно сказать, что переменные в РНР могут быть четырех типов - число (целое или дробное), строка текста, массив и объект. Интерпретатор РНР автоматически определяет тип переменной на основании анализа ее содержимого.

Переменные в PHP также могут принимать специальные значения true и false, но говорить о том, что существует специальный логический или булев тип, нельзя. О том, как могут быть использованы данные значения, мы также поговорим специально.

Преобразования типов тоже выполняются без каких бы то ни было специальных явных действий. То есть, например, результат выражения, в котором будут задействованы одновременно переменные числового и строкового типа, будет иметь тип в зависимости от того, ч
еще рефераты
Еще работы по разное