php pear что это
Php pear что это
PEAR посвящается Malin Bakken, родившейся 21 ноября 1999 года (первые строки PEAR были написаны всего за два часа до её рождения).
структурированная библиотека открытого кода, созданная для пользователей PHP;
система управления пакетами и распространения кода среди разработчиков;
стандарт написания PHP-кода (подробнее о стандарте см. здесь );
базовые классы PHP-кода (подробнее о базовых классах см. здесь ;
библиотека дополнительных модулей для PHP (The PHP Extension Code Library, PECL), подробную информацию о PECL можно узнать здесь ;
Есть два типа пакетов: пакеты исходного кода (содержат, соответственно, только исходники) и бинарные пакеты (содержат платформозависимые бинарные файлы и, возможно, их исходный код). Естественно, что установка пакетов, которые содержат код на C, из исходников требует присутствия среды для компиляции C-кода.
В PEAR существует определенное дерево пакетов, в котором каждой ветвью является часть имени пакета. Ветви разделяются по темам, их названия в именах пакетов разделяются символом подчеркивания. Например, «MP3_Id», «Archive_Tar» и «HTTP_Post».
Пакеты могут находиться в зависимости друг от друга, однако не существует какой-либо обязательной зависимости между пакетом и его «родителем» в дереве пакетов (например, «HTTP_Post» не зависит от «HTTP»).
Все пакеты PEAR регистрируются и загружаются в центральную базу данных, которая доступна на pear.php.net. Сторонние пакеты с открытыми исходниками так же могут быть зарегистрированы и загружены. Пакеты с закрытыми исходниками PEAR предназначена только для кода с открытыми исходниками.
Pear.php.net предоставляет два варианта интерфейсов к базе данных PEAR: дружественный для пользователя интерфейс (HTML) и интерфейс для машины (на данный момент это XML-RPC). Загрузка пакетов осуществляется с помощью HTTP. Также, pear.php.net выполняет и другие функции:
управление пользовательскими записями (интегрированное с сервером CVS)
управление релизами пакетов
Пакеты распространяются в виде архивов *.TAR.GZ с описанием в формате XML. Описание содержит информацию о пакете, список файлов и их предназначений, а также список зависимостей.
Повышенное качество этих пакетов означает то, что ни один пакет с уровнем ниже «stable» не будет допущен в PFC.
Универсальность означает, что пакеты не должны без особых на то причин зависеть от любого вида внешнего окружения (например, формата вывода, операционной системы, веб-сервера, SAPI и др.)
Многофункциональность пакетов означает, что их удобно использовать в других пакетах, они имеют стабильный и стандартизированный API, предпочитают использовать устоявшиеся компоненты, а также не зависят от внешней среды (версии PHP, SAPI, операционной системы и др.)
На данный момент еще нет определенного плана о том, как они будут распространяться.
Введение
Synopsis
Базовый класс PEAR предоставляет стандартную функциональность, которая может быть использована большинством классов PEAR. Обычно не требуется создавать объект этого класса, для этого используется наследование от него.
Главные особенности базового класса PEAR:
«деструкторы» объектов, срабатывающие при завершении обработки запроса
«деструкторы» PEAR
Если ваш класс ClassName наследует класс PEAR, то вы можете объявить метод _ ClassName (имя класса с префиксом в виде подчеркивания), которые будет вызван по окончанию обработки запроса. Этот метод не является деструктором в том смысле, что вы можете «удалить» объект с его помощью, это метод объекта, который вызывается при завершении работы РНР. См. пример.
Важно!
Для того, чтобы обеспечить работу деструкторов, вы должны создавать объект вашего класса с помощью оператора «=& new». Вот так: this:
Обработка ошибок в PEAR
Один из основных принципов обработки ошибок в PEAR гласит, что ошибки не должны автоматически приводить к выводу на экран пользователя, ошибки должны обрабатываться вообще без какого-либо вывода на экран, если это требуется. Это позволяет обрабатывать ошибки «вежливо», кроме того, это позволяет избежать нежелательного вывода тогда, когда вы используете не HTML, а, например, XML или WML.
Класс ошибок позволяет настроить себя так, что при возникновении ошибки (т.е. при создании экземпляра этого класса) могут выполняться различные действия. Например, вывод сообщения об ошибке, вывод сообщения и прекращение выполнения программы, вывод сообщения с помощью функции trigger_error(), вызов заранее назначенной функции или ничего из вышеперечисленного. Обычно эти параметры указываются в конструкторе PEAR_Error, но все эти параметры являются опциональными и вы можете использовать установки по умолчанию для ошибок, которые используются в классах, наследующих класс PEAR. См. примеры ошибок PEAR и документацию по PEAR_Error для более полной информации.
Примеры
Пример, приведенный ниже, показывает как использовать «деструкторы для бедных» PEAR для того, чтобы создать объект, содержимым которого является файл; объект позволяет добавлять данные в конец и записывает их при окончании обработки запроса:
Эмулируемые деструкторы PEAR
В примере используется враппер для fsockopen(), который при возникновении ошибки возвращает её код и текст в виде объекта PEAR_Error. Заметьте, что PEAR::isError() используется для того, чтобы определить является ли ошибкой возвращаемое значение.
PEAR_Error в этом примере работает в режиме, при котором ошибка просто возвращается, а её обработка ложится на плечи программиста. Это поведение является поведением по умолчанию.
В следующем примере мы покажем вам как использовать поведение по умолчанию:
PEAR error example (2)
Здесь мы сначала меняем поведение по умолчанию на PEAR_ERROR_DIE, а потом, т.к. мы не указываем режим работы в raiseError() (это должно было бы быть 3-м параметром), raiseError() использует поведение по умолчанию и прекращает выполнение скрипта при завершении fsockopen() с ошибкой.
Использование глобальных переменных
Класс PEAR использует несколько глобальных переменных для установок по умолчанию, а список объектов используется для работы «деструкторов». Все глобальные переменные, которые использует класс PEAR носят имя с префиксом _PEAR_.
Если не установлен режим по умолчанию, то этот режим будет использован. Должен быть равен PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE или PEAR_ERROR_CALLBACK.
Не меняйте значение это переменной напрямую, используйте PEAR::setErrorHandling()для этого:
Если используется режим работы PEAR_ERROR_TRIGGER, то должна иметь значение E_USER_NOTICE, E_USER_WARNING или E_USER_ERROR.
Не меняйте значение это переменной напрямую, используйте PEAR::setErrorHandling() для этого:
Если при возврате ошибки не был указан параметр options и используется режим обработки ошибок PEAR_ERROR_CALLBACK, то значение этой переменной используется как имя функции, которая будет вызвана при появлении ошибки. Это означает, что вы можете временно переключить режим обработки ошибок без повторного указания имени функции-обработчика. Может иметь ст Here is an example of how you can switch back and forth without specifying the callback function again: роковое значение с именем функции или двухэлементный массив с объектом по индексу 0 и с именем метода по индексу 1.
Еще раз повторим: не меняйте значение этой переменной напрямую, используйте PEAR::setErrorHandling() для этого:
Следующий пример показывает как можно переключаться между режимами обработки ошибок без повторного указания функции-обработчика:
PEAR – PHP Extension and Application Repository
Руководство для начинающих
Автор: Дмитрий Димандт aka Mamut
Источник: RSDN Magazine #5-2004
Опубликовано: 30.03.2005
Исправлено: 10.12.2016
Версия текста: 1.0
Что такое PEAR
PEAR расшифровывается как P HP E xtension and A pplication R epository, база расширений и приложений для PHP. Но что же это действительно значит?
Представьте, что Ваш проект использует MySQL в качестве базы данных. PHP предоставляет вам встроенные средства для работы – функции mysql_* или (начиная с версии 5.0) расширение mysqli. У вас есть десятки файлов, содержащих примерно следующий код:
В один прекрасный день ваш шеф говорит, что политика компании изменилась, и что отныне вам придется иметь дело с Oracle, PostgreSQL или (боже упаси!) MSSQL. Что Вам приходится делать? Рвать на себе волосы и биться головой об стенку. Так как количество кода неимоверно, а слепая замена mysql_* на ora_* не пойдет.
Тут вам в голову приходит, что изначально надо было бы все функции для работы с базой данных упаковать в какой-нибудь класс, выставив из него наружу только необходимое, например:
Структурированная библиотека открытого кода
Чтобы понять, что это такое, советую посмотреть список «пакетов», доступных в PEAR. Глаза разбегаются от разнообразия. Авторизация, работа с датами и временем, работа с файловой системой, базы данных, HTTP и так далее…
Код в PEAR разделен на так называемые «пакеты» (packages). Каждый из пакетов – набор классов и утилит, написанных на PHP и представляющих собой решение какой-нибудь распространенной проблемы.
Каждый пакет – детище одного или нескольких программистов, решивших облегчить жизнь самим себе, а в итоге облегчающих жизнь нам с Вами. Более того, пакеты, прошедшие тщательную проверку, включаются в дистрибутив PHP и получают название базового класса (PHP Foundation Class). Так, например, DB и HTTP являются базовыми классами PHP.
Пакеты из PEAR освобождают от необходимости написания тривиальных или часто необходимых вещей. Так как эти пакеты написаны на чистом PHP, не придется требовать от провайдера, чтобы он устанавливал какие-либо дополнительные модули на сервере, где размещен ваш сайт. И главное. Они – бесплатные.
Классы PEAR и PEAR_Error
Б о льшая, но не вся, часть пакетов в PEAR опирается на классы PEAR и PEAR_Error, определенные в пакете… PEAR.
Класс PEAR
В версиях PHP меньше 5.0, и в пакетах, еще не перешедших на 5.0, этот класс эмулирует деструкторы в наследуемых классах.
Для того чтобы эмуляция срабатывала, необходимо создавать объекты по ссылке, т.е.
Этот класс имеет метод isError($obj), определяющий, является ли тот или иной объект объектом PEAR_Error.
Класс PEAR_Error
Используется для создания стандартизированых сообщений об ошибках.
Установка
Ниже приводится последовательность шагов, необходимых для использования пакетов PEAR, на примере пакета DB. Предупреждаю сразу, предложенный ниже способ отличается от официального (http://pear.php.net/manual/ru/installation.php). Предлагаемый мною способ универсален, работает на любых конфигурациях PHP и сервера.
2. Распакуйте архив в какую-нибудь директорию.
3. Для дальнейшей работы из всей кучи файлов понадобится только PEAR.php. Если в работе понадобятся платформенно-независимые системные функции (определение текущей ОС на сервере, рекурсивный обход директорий, удаление директорий и проч.), взгляните также на файл System.php.
4. Создайте в структуре вашего сайта директорию pear/ и скопируйте PEAR.php туда. Теперь все готово к работе.
5. Рассмотрим дальнейшие действия на примере использования в проекте пакета DB, служащего для унифицированого доступа к базам данных. Зайдите на http://pear.php.net/package/DB и скачайте этот пакет.
Остановитесь и внимательно взгляните на эту страницу. Вы ее будете видеть еще не раз. Прежде, чем скачать какой-либо пакет, посмотрите на краткую информацию, которой он сопровождается.
Summary – краткое описание пакета. Обычно – емкое название, его характеризирующее.
License – лицензия, на условиях которой пакет выпускается. Несмотря на то, что пакеты в PEAR рекомендуется публиковать на условиях PHP License, некоторые пакеты выпускаются на условиях GNU Public License. На это стоит обратить внимание при работе над коммерческим проектом.
Current Release – текущая версия пакета.
Description – описание пакета.
6. Распакуйте пакет DB.
7. Скопируйте файл DB.php и поддиректорию DB/ в директорию pear/ вашего сайта.
8. Откройте файл DB.php в вашем любимом редакторе, найдите строчку require_once ‘PEAR.php’; и сотрите ее. Сохраните файл.
9. В корневом каталоге сайта создайте файл testdb.php. Структура сайта должна выглядеть примерно так:
10. В файл testdb.php впишите следующее:
11. Проверьте файл на работоспособность. Как видите – ни одной ошибки : ) Правда, это не значит, что все работает.
12. Добавьте в файл testdb.php следущий код:
Все. Теперь вы знаете, как подключить любой пакет из PEAR.
Документация
Как известно, программисты – тоже люди и ничто человеческое им не чуждо. Также им не чужда лень и патологическое нежелание писать документацию к своим творениям. Увы, авторы пакетов PEAR – не исключение, и полноценная документация к пакетам встречается нечасто.
Неужели все так плохо? – спросите вы, окидывая взглядом необъятные просторы PEAR. Нет, на самом деле все не так плохо.
Одним из условий принятия пакета в PEAR – ясный, хорошо документированый код. На основе исходников к каждому пакету автоматически генерируются описания классов и их методов, так что, как минимум, общее представление о пакете у вас все же будет. Авторы многих пакетов пишут дополнительную документацию, которая также прилагается к пакетам. Плюс, каждый пакет поставляется с примерами использования, или такие примеры можно легко найти в исходных кодах самого пакета (иногда описание классов и примеры занимают чуть ли не большую часть исходных файлов).
Собранную на текущий момент документация по PEAR можно найти по адресу http://pear.php.net/manual/index.php.
Будущее PEAR
Многие, прочитав статью и увидев упор на решения, использующие базы данных, могут махнуть на PEAR рукой, указав на появившееся в PHP5 расширение mysqli. Другие, обнаружив, что PEAR бесплатен и разрабатывается на общественных началах, также махнут на него рукой и сядут разрабатывать свою собственную систему. Третьи, решив, что главная задача PEAR – эмуляция объектной ориентации (например, эмуляция деструкторов, предлагаемая классом PEAR), махнут рукой, забудут про PEAR и перейдут на PHP5.
И те и другие, и третьи будут неправы. Появление на сцене PHP5 с новыми расширениями и улучшенной поддержкой объектно-ориентированого программирования никоим образом не влияет на PEAR, который прежде всего является базой готовых, работающих решений для очень большого спектра проблем.
И так далее. Шифрование, авторизация, работа с изображениями, а также многое другое. Достаточно взглянуть на список предлагаемых пакетов (http://pear.php.net/packages.php).
Основная задача разработчиков PEAR сейчас – стабилизация уже существующего кода и приведение всех пакетов в соответствие со стандартом (http://pear.php.net/manual/ru/standards.php). На сайте действует система отслеживания багов, где можно сообщить о найденных ошибках или предложить изменения/дополнения к существующим пакетам. Условия приема пакетов способствуют тому, что код в исходных файлах четко и ясно написан, а также документирован, что облегчает их использование. Состояние PEAR отслеживается в еженедельных публикациях на сайте разработчиков PHP – Zend Group, а «мертвые» (находящиеся в ранней стадии разработки и давно не обновляемые) пакеты удаляются из базы.
PEAR – это динамичная развивающаяся среда, предлагающая все новые и новые решения разработчикам.
Что это такое: PEAR?
структурированная библиотека открытого кода, созданная для пользователей PHP;
система управления пакетами и распространения кода среди разработчиков;
стандарт написания PHP-кода (подробнее о стандарте см. здесь);
базовые классы PHP-кода (подробнее о базовых классах см. здесь;
библиотека дополнительных модулей для PHP (The PHP Extension Code Library, PECL), подробную информацию о PECL можно узнать здесь;
Структурированная библиотека PHP-кода
Есть два типа пакетов: пакеты исходного кода (содержат, соответственно, только исходники) и бинарные пакеты (содержат платформозависимые бинарные файлы и, возможно, их исходный код). Естественно, что установка пакетов, которые содержат код на C, из исходников требует присутствия среды для компиляции C-кода.
В PEAR существует определенное дерево пакетов, в котором каждой ветвью является часть имени пакета. Ветви разделяются по темам, их названия в именах пакетов разделяются символом подчеркивания. Например, «MP3_Id», «Archive_Tar» и «HTTP_Post».
Пакеты могут находиться в зависимости друг от друга, однако не существует какой-либо обязательной зависимости между пакетом и его «родителем» в дереве пакетов (например, «HTTP_Post» не зависит от «HTTP»).
Несколько ветвей высшего уровня называются «суб-репозиториями» и выполняют специальные функции. На данный момент это: PECL, Gtk и App. Каждый из них достоин отдельной темы, поэтому за дополнительной информацией лучше обратиться в соответствующие разделы настоящей документации.
Распространение кода и управление пакетами
Все пакеты PEAR регистрируются и загружаются в центральную базу данных, которая доступна на pear.php.net. Сторонние пакеты с открытыми исходниками так же могут быть зарегистрированы и загружены. Пакеты с закрытыми исходниками PEAR предназначена только для кода с открытыми исходниками.
Pear.php.net предоставляет два варианта интерфейсов к базе данных PEAR: дружественный для пользователя интерфейс (HTML) и интерфейс для машины (на данный момент это XML-RPC). Загрузка пакетов осуществляется с помощью HTTP. Также, pear.php.net выполняет и другие функции:
управление пользовательскими записями (интегрированное с сервером CVS)
управление релизами пакетов
Пакеты распространяются в виде архивов *.TAR.GZ с описанием в формате XML. Описание содержит информацию о пакете, список файлов и их предназначений, а также список зависимостей.
Базовые классы PHP
Повышенное качество этих пакетов означает то, что ни один пакет с уровнем ниже «stable» не будет допущен в PFC.
Универсальность означает, что пакеты не должны без особых на то причин зависеть от любого вида внешнего окружения (например, формата вывода, операционной системы, веб-сервера, SAPI и др.)
Многофункциональность пакетов означает, что их удобно использовать в других пакетах, они имеют стабильный и стандартизированный API, предпочитают использовать устоявшиеся компоненты, а также не зависят от внешней среды (версии PHP, SAPI, операционной системы и др.)
Библиотека дополнительных модулей для PHP (PECL)
Пакеты Gtk
На данный момент еще нет определенного плана о том, как они будут распространяться.
Расцвет Composer и закат PEAR
[Дабы не возникло недопонимания, стоит пояснить, что автор оригинального текста — Fabien Potencier, создатель популярного PHP фреймворка Symfony — прим. пер.]
Совсем недавно, Nils Adermann, прислал мне милую открытку, в напоминание о нашей встречи три года назад на “SymfonyLive hackday” в Сан-Франциско. Nils присутствовал на конференции, т.к. за год до этого, он анонсировал, что phpBB в версии 4 перейдет на Symfony.
В то время, я серьезно интересовался темой менеджеров пакетов, ибо искал удобный способ управлять бандлами в Symfony2. Для плагинов в Symfony1 я использовал PEAR, но код был очень запутанным, ведь PEAR изначально создавался немного не для этого. Философия Бандлера из Ruby сообщества выглядела очень привлекательно, так что я начал поиски подобного пакетного менеджера. После долгих бессонных ночей, я наткнулся на libzypp, и моментально понял, что это оно! К сожалению libzypp — сложная библиотека, написанная на C, и в таком виде, совсем не подходила для Symfony.
Я смекнул, что хорошим менеджером пакетов, позволяющим пользователям легко устанавливать плагины/бандлы/моды наверняка интересуется и Nils, для phpBB, так что я завел об этом разговор на hackday в Сан-Франциско. Оказалось, что в то время, Нилс уже начал работу над Composer.
Нилс проделал потрясающую работу по переводу C кода в PHP код. Позже, присоединившийся к команде Джорди вывел все на новый уровень, взяв на себя заботы по реализации всей инфраструктуры проекта.
Так, что насчет PEAR? PEAR верой и правдой служил PHP сообществу много лет, думаю настало время, дать ему умереть.
Я использовал PEAR в качестве менеджера пакетов еще с моего первого проекта на PHP в далеком 2004-м. Я даже написал популярный сервер каналов Pirum. Но сейчас настало время двигаться дальше, и рассказать о своих планах на каналы, которыми я управляю.
13 февраля я писал в твиттере, что собираюсь перестать поддерживать свои пакеты в PEAR, т.к. Composer уже достаточно популярен. 14 февраля я решил перестать работать над Pirum.
Так как многие хотели узнать статистику канала Symfony, я залез в логи, и обнаружил, что большинство запросов идет от зависимостей PHPUnit. 20-того апреля Sebastian Bergmann открыл обсуждение о поддержке PEAR для PHPUnit. На следующий день, он опубликовал сообщение, в котором прощался с PEAR. Чуть позже, Pádraic Brady также отказался от поддержки PEAR канала для Mockery.
Кроме Symfony, в моем ведении также находятся каналы Twig, Swiftmailer и Pirum. И вот мои планы:
Заметьте, что я говорю о прекращении выпуска НОВЫХ пакетов в PEAR, и продвижении Composer как основного средства для инсталляции моих библиотек и проектов. Уже существующие пакеты, в обозримом будущем, все еще можно будет ставить через PEAR.