Отправляет email-рассылки с помощью сервиса Sendsay

PHP 5: Новые возможности.

  Все выпуски  

Введение в PEAR.


Информационный Канал Subscribe.Ru

PHP 5: Новые возможности.

The Pterodactyl

Copyright 2005 Pterodactyl's School

29.12.2005

История переиздания
Издание 1.01 29.12.2005
Добавлена сноска о порядке компонентов в директиве include_path.
Издание 1.00 29.12.2005
Первоначальная версия.

Аннотация

Рассказано, что такое PEAR; кратко изложена его концепция PEAR; сделан обзор способов установки и основных принципов использования; приведен практический пример реализации системы авторизации при помощи пакета PEAR::Auth.


PEAR - это сокращение от "PHP Extension and Application Repository" (Хранилище расширений и приложений PHP[1]).

Подсказка

Произносится это слово точно так же, как и английское слово "груша" (pear). Прослушать правильное произношение можно здесь.

Главной задачей PEAR является собирание воедино PHP кода, который может быть повторно использован разработчиками в своих проектах для решения часто встречающихся задач (например, авторизации, доступа к базам данных, отправки электронной почты и пр.). В этом отношении PEAR является аналогом CPAN (Perl).

Разработка PEAR стартовала в 1999 году; начиная с версии 4.3 (2003) PEAR включается в официальную поставку PHP. Таким образом, PEAR не является чем-то новым применительно к PHP 5. Тем не менее, PEAR заслуживает определенного внимания по ряду изложенных ниже причин:

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

Система пакетов (packages) является основой концепции PEAR. Каждый пакет представляет собой отдельный проект и состоит из серии файлов, объединенных в одном архиве. Сходные по своей направленности пакеты объединены в одинаковые категории (см. Приложение A, Категории пакетов PEAR). Существует четко организованная иерархия категорий и входящих в них пакетов.

Сердцевиной PEAR является одноименный пакет, который содержит "ядерные" (core) классы: PEAR, PEAR_Error и т. д. Этот пакет безусловно необходим для работы всех остальных пакетов[2] и поэтому всегда включается в набор, входящий в состав официальной поставки PHP.

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

Замечание

Шесть пакетов, особо тщательно разработанных в соответствии с принятыми стандартами, лучше других протестированных, а потому более надежных и стабильных, ранее выделялись в особую группу (см. Приложение C, PHP Foundation Classes (PFC)). Однако, в настоящее время ее название, судя по всему, изъято с английской версии официального сайта PEAR, а один из пакетов, phpUnit, более не включается в состав официальных поставок PHP.

В конечном итоге, установка PEAR сводится к созданию доступной для включения (т. е. указанной в директиве include_path) системы каталогов и файлов, структура которой определена содержимым установленных пакетов.

Например, пакеты PEAR установлены в каталог /usr/share/pear/. Тогда в нем появятся следующие файлы: PEAR.php (/usr/share/pear/PEAR.php) - в результате установки пакета PEAR; DB.php (/usr/share/pear/DB.php) - в результате установки пакета DB; Mail.php (/usr/share/pear/Mail.php) - в результате установки пакета Mail; Archive/Tar.php (/usr/share/pear/Archive/Tar.php) - в результате установки пакета Archive_Tar и т. д. А директива include_path в php.ini может иметь следующий вид:

include_path = ".:/usr/share/pear"

Обычно пакеты PEAR устанавливаются сразу после установки самого PHP при помощи входящего в поставку пакетного менеджера. По умолчанию устанавливается сравнительно небольшой набор пакетов (см. Приложение B, Пакеты, входящие в состав официальной поставки PHP 5.0.4), который впоследствии, используя тот же пакетный менеджер, может быть изменен (расширен, сокращен, обновлен). Установленные таким образом пакеты доступны для всех сайтов, размещенных на данном сервере.

Подсказка

Узнать, установлены ли пакеты PEAR на используемом Вами сервере, можно при помощи функции phpinfo(). Если установлены, то среди конфигурационных опций будет и --with-pear, например:

'--with-pear=/usr/share/pear'

Другой способ установки - непосредственно на сайт - удобен тем, что не требует прав администратора. Так можно легко дополнить серверный набор недостающими пакетами либо даже установить пакеты по умолчанию, если по какой-то причине они вообще не установлены на сервере или необходимо пользоваться более новыми версиями установленных на сервере пакетов[3].

Такая установка может быть осуществлена посредством пакетного менеджера (удаленно - через SSH или FTP) либо вручную. Необходимо убедиться (особенно, при ручной установке), что директива include_path включает в себя и локальный путь к пакетам PEAR. Перекрыть глобальную установку в некоторых случаях можно в файле .htaccess (Пример 1, «Статическая коррекция пути к включаемым файлам»). Предполагается, что локальные пакеты установлены в каталог /var/www/public_html/pear/.

Подсказка

Представляется логичным устанавливать пакеты PEAR в каталог /pear/, находяшийся непосредственно в корневом каталоге Вашего сайта.

Если же описанный способ не работает, то всегда можно установить необходимое значение динамически, непосредственно в скрипте. Детально этот способ описан в секции «Использование PEAR».

Внимание

При ручной установке дополнительных пакетов всегда следует проверять их зависимости[2] и устанавливать все остальные необходимые пакеты, если они еще не были установлены. Зависимости (при их наличии) указаны на странице загрузки (Download) каждого пакета.

При этом следует учитывать, что универсальная зависимость всех пакетов от "ядерного" пакета PEAR обычно не упоминается.

Подробнее об установке PEAR.

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

Путь к установденным пакетам PEAR всегда должен быть прописан в директиве include_path, иначе не будут реализованы существующие зависимости[2]. И, если путь к пакетам, установленным на сервере, обычно прописывается автоматически[4], то о локальных пакетах (установленных на сайте) придется позаботиться самостоятельно.

Проще всего добавить локальный путь к глобальному значению директивы include_path в файле .htaccess, как это было показано в секции «Установка PEAR»; однако, этот способ имеет два существенных недостатка:

  1. работает только в том случае, если PHP установлен как модуль Apache;
  2. перестанет работать при изменении глобального значения include_path.

Альтернативным способом, лишенным указанных недостатков, является включение в начало каждого скрипта, использующего PEAR, специального фрагмента кода (Пример 2, «Динамическая коррекция пути к включаемым файлам»). При необходимости значение переменной $PEAR_PATH_LOCAL следует заменить.

Подсказка

Обратите внимание на использование стандартной предустановленной константы PATH_SEPARATOR. Это позволяет сделать код независимым от операционной системы[5], избегая, таким образом, неожиданных сбоев и необходимости вносить правки при переносе сайта на сервер, работающий под другой операционной системой. Особенно удобно, если, например, отладка скриптов производится на компьютере, работающем под управлением Windows, а финальная версия сайта расположена на сервере, работающем под управлением Linux.

Использование переменной $_SERVER['DOCUMENT_ROOT'] также направлено на достижение независимости скрипта, ведь на разных серверах путь к корневому каталогу сайта может быть различен.

Надежнее всего включать файлы PEAR при помощи выражения require_once (Пример 3, «Включение файлов PEAR в скрипт»). Если возможная ошибка при попытке включения файла не столь критична и не препятствует дальнейшему выполнению скрипта, допустимо использовать менее строгое выражение include_once.

Внимание

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

В качестве параметра используется относительный путь к требуемому файлу (начиная от главного каталога, куда был установлен PEAR, и который содержится в директиве include_path).

Обычно новые объекты создаются посредством оператора new[6] (Пример 4, «Создание нового объекта»).

Подсказка

В примерах из документации по PEAR часто встречается использование ссылки (&) при присвоении созданного объекта, например:

$menu =& new HTML_Menu;

Объясняется это тем, что в прежних версиях PHP при обычном присвоении объекта переменной ($menu = new HTML_Menu;) создавалась новая его копия. Таким образом, объект, созданный оператором new и присвоенный затем переменной $menu, на самом деле оказывался не одним и тем же - это были две отдельные, хоть и идентичные по содержанию, копии. В лучшем случае это приводило к нерациональному расходованию памяти; в худшем - к непредсказуемым результатам.

В PHP 5 этот недостаток устранен, поэтому необходимость в использовании ссылки при присвоении отпала.

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

Приходилось ли Вам когда-нибудь разрабатывать систему авторизации? Сколько времени у Вас на это ушло? Сколько строк кода понадобилось? Сколько из них придется изменить, чтобы, например, перейти от MySQL к PostgreSQL? Уверены ли Вы в отсутствии "дыр" в готовом продукте? Насколько хорошо поймете свой собственный код, вернувшись к нему сейчас?

Пакет PEAR::Auth позволяет решить эту задачу быстро, легко, просто и надежно (Пример 5, «Авторизация с использованием пакета PEAR::Auth»). При необходимости с такой же простотой можно осуществлять добавление нового пользователя, смену пароля, завершать сеанс (logout), использовать свою собственную форму для ввода имени пользователя и пароля, хранить имена пользователей и пароли в другом контейнере (например, в обычном файле) и т. д.

Посмотреть этот код в действии можно здесь.

Подсказка

Пакет PEAR::Auth не входит в состав пакетов, устанавливаемых по умолчанию, поэтому перед использованием его придется установить дополнительно.

Процедура 1. Установка пакета PEAR::Auth на сайт

  1. Скачайте и разархивируйте пакет.

    1. На странице загрузки выберите последнюю версию пакета. Если ее статус отличается от стабильного (stable), возможно, имеет смысл загрузить последнюю стабильную версию.

    2. Для распаковки воспользуйтесь любым архиватором, поддерживающим формат .tgz (tar + gzip).

  2. Закачайте следующие файлы на свой сайт в каталог /pear/.

    1. Файл Auth.php.

    2. Весь каталог Auth целиком.

Created with DocBook Created with Libxslt



[1] "PEAR Справочное руководство", впрочем, предлагает несколько иной вариант перевода: "Репозиторий приложений и модулей PHP".

[2] Потребность в другом пакете называется зависимостью (dependence).

[3] В последнем случае для использования более новых версий путь к локальному каталогу с файлами PEAR должен быть указан в директиве include_path до пути к серверным файлам.

[4] Убедиться в этом можно, сравнив значения конфигурационной опции --with-pear и директивы include_path, выводимых функцией phpinfo().

[5] Windows использует в качеcтве разделителя путей точку с запятой, а Linux - двоеточие.

[6] Методы factory() и singleton() здесь рассматривать не будем.

С последней версией этой и других статей Вы можете ознакомиться на сайте рассылки [http://pterodactyl.l2p.net/php5/].


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: inet.webbuild.php5whatsnew
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное