Введение
Изначально аббревиатура РПР означала Preprocessor of Home Pages — препроцессор домашних страниц. Это язык внедряемых в HTML-страницы сценариев, исполняемых на сервере. По большей части его синтаксис заимствован из таких языков, как С, Perl, Java, и при этом добавлена масса возможностей, которых этим языкам недостает. Проще говоря, синтаксис РНР — это разумная альтернатива и строгости С, и «беспредельности» Perl. РНР наделен практически полным набором функциональности, о которой (до появления РНР) мог только мечтать web-программист. Его цель — позволить максимально быстро создавать динамически генерируемые web-страницы. С полным основанием можно заявить, что изучение и использование РНР будет выгодно как начинающим, так и профессиональным программистам. Основными конкурентами РНР являются технологии JSP (Java Server Pages и Java Scriptlets), ASP (Active Server Pages), Perl, SSI (Server Side Includes), Cold Fusion Server Pages. Рассмотрим те недостатки, которые присущи указанным технологиям. JSP — достаточно сложный для изучения и использования язык. ASP, основанный на синтаксисе VBScript (Visual Basic), имеет всего несколько десятков собственных функций и поэтому вынужден использовать СОМ-объекты; кроме того, он ориентирован исключительно на работу под Windows. Perl — язык головоломный, и его вольности затрудняют его понимание. SSI позволяет всего лишь компоновать HTML-страницу из нескольких файлов. CF — коммерческий продукт, что является его основным недостатком. Основные достоинства РНР: бесплатен; постоянно совершенствуется; работает на UNIX и Windows платформах; допускает работу с большинством СУБД; имеет широкий набор функций (более 3 тыс.); допускает объектно-ориентированное программирование; способен использовать протоколы HTTP, FTP, ШАР, SNMP, NNTP, POPS, net sockets 11 другие; позволяет выполнять все операции, что и перечисленные его конкуренты, и даже работать с файлами графики. Можно также запускать PHP-скрипты как интерпретируемые файлы и компилировать исполняемые приложения (в том числе с поддержкой графического интерфейса GTK). Если вы обнаружите, что РНР не способен на что-то (или работает не так, как вам хотелось бы), никто не будет препятствовать вам вносить в исходный код РНР (написанный на С) желаемые изменения. РНР является программным продуктом с открытым исходным кодом, и внесение в него улучшений и дополнений путем создания собственных модулей расширения всегда приветствуется. Краткая история РНР РНР изобретен Расмусом Лердорфом в конце 1994 года. Первая версия выпущена в 1995 году под именем «Инструментарий Персональных Домашних Страниц», затем она была переработана и названа PHP/FI Version 2 (FI — модуль обработки данных для форм). Также была добавлена поддержка баз д'анных mSQL. С этого момента в разработке стали принимать участие добровольцы. Статистика используемости РНР приблизительна, но, согласно исследованию, проведенному Netcraft, в начале 2001 года РНР использовался на более чем 5 300 000 сайтах по всему миру. Для сравнения: в это время число IIS серверов было примерно таким же (5 млн). Разработка интерпретатора РНР приняла форму организованного командного процесса, ядро интерпретатора разрабатывает компания Zcnd.com. При этом РНР распространяется свободно: его последнюю версию можно загрузить с сайта PHP.net. Модули РНР поставляются в комплекте с сервером Apache, в комплектах систем Linux. Версии РНР В конце 2000 года была выпущена версия РНР 4.0.4, в апреле 2001 -4.0.5, а в июне — 4.0.6. Промежуточные версии РНР можно загрузить с серверов CVS. В каждой новой версии появляются новые модули, расширяющие и улучшающие возможности РНР. Полное руководство РНР доступно на нескольких языках в шести вариантах: документация на сайте PHP.net с аннотациями (>80 Мбайт); один HTML-файл (>3 Мбайт), набор маленьких связанных HTML-страниц (несколько тысяч), UNIX man-файл, скомпилированный Windows HLP-файл (в формате chm) и документация в виде книги PDF. Издательством «Питер» выпущено две книги (одну из которых вы держите в руках), к концу года планируется издать еще две книги. Данная книга представляет собой краткий справочник, перед которым ставилась задача в наиболее сжатой и ясной форме изложить максимум самой необходимой информации. Подразумевается, что читатель знаком с программированием и web-технологиями. Все описания относятся к версиям РНР 4.0.4—4.0.6. РНР 4 сильно отличается от своих начальных версий. Основная причина, по которой в данной книге не рассматриваются предыдущие версии РПР и их различия, — это стремление избавиться от ненужной информации: зачем тратить усилия на изучение устаревшего варианта, когда можно бесплатно воспользоваться новейшим. Дополнительное ПО Для того чтобы исполнять серверные сценарии, необходим, естественно, сам web-сервер — это может быть PWS или Apache для Windows 95/98, IIS для Windows NT/2000 Server, Apache для UNIX/Linux или какой-либо другой, — а также любой браузер для просмотра результатов исполнения сценария. Но возможен и вариант запуска сценария из командной строки, с помощью CGI интерпретатора php.exe в консольном окне MS-DOS, при этом ни браузер, ни сервер не требуются. Используя библиотеку PHP-GTK, можно создавать на РНР приложения с графическим интерфейсом, применяя РНР как улучшенную альтернативу Visual Basic, но стоит отметить, что графический интерфейс имеет ярко выраженный Unix-стиль. С сайта www.deskcode. com можно загрузить компилятор РНР, генерирующий исполняемые (.ехе) файлы для Windows (приложению требуется наличие библиотеки php4ts.dll и других используемых модулей). Поскольку одной из наиболее широко используемых возможностей РНР является работа с базами данных, полезно установить сервер БД, например MySQL или любой другой (PostgreSQJL, InterBase, MS SQL). Нелишней может оказаться и установка драйверов ODBC для имеющихся баз данных. Существенную помощь окажет редактор PHP-кода. Достаточно удобна среда разработчика PHPEd, которую можно бесплатно загрузить с сайта http://www.soysal.com/PHPEd/. Знакомый всем HomeSite 4.5 (www.allaire.com) также позволяет работать с синтаксисом РНР. Полезные информационные ресурсы Как уже отмечено, большая часть информации по РНР доступна в англоязычном варианте. Если это вас не смущает, то можете воспользоваться сайтами PHPBuilder.com, PHPWizard.com, WebMonkcy (lycos.com), Zend.com, PHPClub.ru, которые содержат большой объем статей и учебных руководств по программированию. На РНР созданы даже целые web-порталы, которые можно интерактивно реконфигурировать, например PHPNuke (исходные РНР-коды можно загрузить с сайта PHPNuke.com). Хотя объем кода таких проектов достаточно велик (несколько Мбайт), наличие перед глазами подобных примеров готовых разработок способно воодушевить вас на не меньшие достижения. Для понимания некоторых разделов, возможно, потребуется воспользоваться файлами из архива RFC (Request for Comments — запросы на комментарий). Это сборник объяснений спецификаций сетевых и Интернет-технологий, состоящий из более чем 2000 файлов. Например, RFC 1180 - учебник по TCP/IP, RFC 1208 - толковый словарь сетевых терминов, RFC 821 — SMTP протокол, RFC 1939 — протокол POPS. Этот архив доступен, на множестве серверов, в том числе на rs.internic.net (официальный сервер), http://www.faqs.org/rfcs. Данная книга содержит семь частей, в каждой из которых сгруппированы главы сходной тематики. Часть 1 — «Синтаксис языка и операторы» — описывает синтаксис и использование РНР. Часть 2 — «Функции работы с данными» — рассматривает основные функции РНР, которые позволяют вам работать со встроенными типами данных: числами, массивами, строками. Часть 3 — «Файлы и сети» — описывает способы, имеющиеся в РНР для доступа к файлам, как локальным, так и удаленным; возможности использования сетевых протоколов и работу с архивированными файлами. Часть 4 — «Управляющие функции» — рассматривает управление функционированием РНР и его коммуникационными возможностями при работе с клиентом и другими приложениями. Часть 5 — «Взаимодействие с базами данных» — рассматривает схему работы с серверами и файлами БД. Часть 6 — «Графика, Flash, pdf» — описывает возможности РНР по созданию графических файлов для web: картинок, анимаций, документов. Часть 7 — «Комплексная обработка данных» — описывает дополнительные возможности РНР по сложной обработке символьных данных (XML и сходные технологии). Порядок, в котором приводятся функции, отражает логику их использования (например, работа с БД имеет определенную последовательность); функции, независимые друг от друга, расположены но мере повышения их сложности. В приложении приводится перечисление всех функций в алфавитном порядке и в порядке расположения в книге. Поскольку язык РНР и его модули расширения находятся в процессе непрерывной доработки и улучшения, используемая вами версия РНР может работать несколько отличным образом от того, как это описано в книге. Все примеры, приведенные в книге, были протестированы с РНР версий 4.0.4, 4.0.5, 4.0.6; но все же я настоятельно рекомендую читателям проверять достоверность документации, потому что даже официальное руководство во многих аспектах неполно (или иногда ошибочно) отражает реальные возможности РНР. В книгу было включено рассмотрение большей части возможностей РНР; в ней описывается 1500 функций. Тем не менее на момент выхода книги, в РНР имелось около 3000 функций. Конечно, вам едва ли придется использовать более трети всего того, что позволяет РНР; именно по этой практической причине в книге не описаны редко используемые и специфические возможности РНР: Hyperwave, ICAP, LDAP, MCAL, MCrypt, Mhash, mnoGoSearch, Scsam DB, SNMP, YAZ, YP/NIS. He забывайте также, что в дальнейшем возможности РНР будут расширены еще больше. На сайте http://www.php.net/ можно найти несколько установочных пакетов РНР. Для систем Windows предлагаются варианты: готовый пакет CGI с автоматической установкой и полный скомпилированный пакет CGI/ISAPI с дополнительными библиотеками, требующий ручной настройки. Также можно загрузить пакет исходных кодов и скомпилировать весь пакет самостоятельно. Для систем UNIX/Linux обычно приходится перекомпилировать РНР, так как версии операционных систем сильно различаются (возможно, придется дозагру-жать дополнительные библиотеки). Вопрос о том, имеет ли смысл компилировать РНР самому или стоит воспользоваться готовым пакетом, решает сам программист. Основными мотивами для собственноручной компиляции могут быть: неудовлетворительная конфигурация предлагаемого готового пакета, которую нельзя изменить с помощью редактирования файла php.ini (см. ниже), и желание поупражняться с компилированием. Для большинства web-серверов можно установить РНР либо в виде серверного модуля ISAPI, либо в виде запускаемого серверного CGI-приложения. CGI-приложение запускается сервером каждый раз, когда необходимо исполнить сценарий, а по завершении сценария РНР выгружается из памяти. ISAPI-модуль загружается один раз при запуске web-сервера и остается в памяти все время, пока работает сервер. Поэтому, чтобы после редактирования файла конфигурации php.ini изменения вступили в силу, необходимо перезапустить сервер. РНР в виде CGI-приложения не позволяет выполнять ряд функций, например использовать устойчивые подключения к серверам баз данных. Установка и компиляция РНР в UNIX, параметры компиляции Операционные системы семейства UNIX сильно различаются между собой, поэтому подробного описания в данной книге не приводится. Единственное, что роднит между собой различные UNIX-системы при компиляции РНР, — это параметры компиляции; с их помощью указывается, какие из PHP-модулей необходимо прикомпилировать к основному модулю РНР. Они приводятся ниже. Для тех параметров, которые имеют аргумент DIR, можно указать путь каталога, в котором была установлена используемая библиотека. В скобках указано значение параметра по умолчанию. Дополнительная информация по установке и конфигурированию модулей приводится в соответствующих главах. Базы данных
Ecommerce
Графика
Разнообразные параметры
Сети
Сервер
Текстово-языковые возможности
XML
Далее описываются установка и конфигурирование РНР для web-серверов в системах Windows 9x/NT, в частности:
Автор рекомендует использовать web-сервер Apache по причине того, что он работает на всех системах, и именно при его использовании РНР может проявить все свои возможности. Также РНР можно установить и для ряда других серверов (инструкции не приводятся). Windows Installshield Программа установки РНР (которую можно загрузить с сайта http:// www.php.net/) автоматически устанавливает CGI-версию РНР для Apache, IIS или PWS (и других серверов) и самостоятельно настраивает сервер. Процедура установки достаточно понятна и удобна. Общие шаги установки Эту процедуру следует проделать для всех серверов, работающих в Windows, если установка производится вручную (а не используется установщик).
Модули DLL PHP имеют префикс php_, что позволяет различать их и используемые ими библиотеки. Windows 95/98/NT и PWS/IIS 3 Рекомендуется настраивать эти серверы установкой файла php_iis_ reg.inf, pws-php4isapi.reg или pws-php4cgi.reg, входящего в дистрибутив, предварительно его отредактировав и указав реальные каталоги. В противном случае придется редактировать реестр (будьте осторожны, рекомендуется сделать копию реестра).
Пользователи us 3 могут также использовать программу конфигурирования http://www.genusa.com/iis/iiscfg.html. PWS 4 позволяет использовать Рнр в виде модуля ISAT4. Windows NT и IIS 4/5
Windows 9x/NT и Apache 1.3.x Рекомендуется ознакомиться с документацией Apache. Добавьте или измените имеющиеся (обычно они закомментированы) директивы в файле конфигурации httpd.conf (или srm.conf) для запуска версии CGI PHP.
Если необходимо запускать PHP как ISAPI-модуль сервера, необходимо скопировать файл php4ts.dll в каталог windows/system (для Windows 9х/Ме) или winnt/system32 (для Windows NT/2000). А затем добавить в файл конфигурации httpd.conf следующие строки:
Заметьте, что в Win-Apache вес обратные слеши должны писаться как прямые, например: c:/directory/file.ext вместо c:\directory\ file.ext. Что для этого требуется?
Подготовка к компиляции Установите Cygwin, запустив setup.exe. Выберите установочный каталог, например C:\cygnus. Обычно установка успешно выполняется в автоматическом режиме. Создайте каталог, в котором вы будете проводить компиляцию (например: C:\PHP-win32build). Разархивнрупте в нее пакет исходных кодов РНР. Скопируйте туда распакованный архив win32build.zip. Запустите Microsoft Visual C++, выберите пункт Options меню Tools. В диалоговой панели выберите вкладку directories. Последовательно установите для каждого пункта раскрывающегося списка: Executables, Includes и Library files соответственно каталоги: cygwin\bin, win32build\ include и win32build\lib (для добавления пункта выделите пустую строку в конце списка и введите путь). Обычно каталоги имеют следующие имена: c:\cygnus\bin, c:\php-win32build\include, c:\php-win32build\lib. Нажмите ОК. Создайте другой каталог и распакуйте туда bindlib_w32.zip. В VC++ выберите bindlib.dsw (Файл > Open Workspace). Выберите один из вариантов компиляции (Build > Set Active Configuration): отладочный (bindlib — Win32 Debug) или нет (bindlib — Win32 Release). Скомпилируйте библиотеку (Build > Rebuild All)1. Скопируйте полученный файл resolv.lib (из каталога Debug или Release), заменяя им имеющийся в дистрибутиве (в каталоге С:\ PHP-win32build\lib). Компиляция Чтобы скомпилировать CGI-всрсию РНР, откройте в VC++ проект win32\php4ts.dsw (Файл > Open Workspace). Выберите вариант компиляции (Build > Set Active Configuration), например php4ts — Win32 Release_TS. Скомпилируйте файлы php.exe и php4ts.dll (Build > Rebuild All или Build > Build php.exe). Возможно, у вас возникнет следующая ошибка: при попытке открытия в VC++ файла Tsrm.dsw будет выдано сообщение о том, что файл имеет неправильный формат или поврежден. Это происходит из-за различия в форматах текстовых файлов Unix и Windows: в Unix завершение строк помечается символом «\п>>, а в Windows двумя символами — «\г\п». Исправить это легко — откройте файл Tsrm.dsw в MS Word и сохраните его под тем же именем (в результате чего будут автоматически преобразованы символы-завершители). Подобным образом можно скомпилировать РНР в виде модуля для web-сервера Microsoft IIS или какого-либо другого (просто измените вариант компиляции). Модули расширения компилируются по отдельности (они размещаются в каталоге ext).
|