Статьи

Приступая к работе с PEAR — низко висящие фрукты PHP

В прошлый раз, когда вы создавали приложение с PHP, сколько времени вы потратили на слесарное дело?

«Санитарно-технические работы?!?» ты плачешь. «Я писал код, а не исправлял утечку!»

То, о чем я на самом деле говорю, так это: в вашем последнем PHP-проекте, сколько времени вы потратили на написание кода, который был сделан раньше? Вы разработали полную систему аутентификации пользователей? Сколько времени вам понадобилось, чтобы построить эту систему меню? Вы боролись за отправку HTML-писем с помощью PHP? Вы знаете — все те вещи, которые были сделаны снова и снова в PHP.

В этой статье я познакомлю вас с PEAR , который, вкратце, поможет вам не стать водопроводчиком, а сосредоточится на своевременном выполнении проектов. В меню сегодня:

  • Зачем выбирать грушу? Держите доктора подальше!
  • Краткая история: груша и путаница
  • Установка PEAR: встать и работать
  • Диспетчер пакетов: поиск путей
  • Мгновенный RSS: кормить себя с грушей
Зачем выбирать грушу?

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

PHP поставляется с множеством встроенных функций, таких как htmlentities () и strip_tags () , которые многое делают для облегчения создания веб-приложений, но по понятным причинам вы не найдете таких функций, как shopping_cart() .

Чем больше времени вы тратите на написание «слесарного кода» — материала, который может применяться ко многим веб-приложениям, — тем выше риск того, что ваш проект пропустит сроки или будет превышен бюджет.

Введите: груша . Хотя образы фруктов приходят на ум, PEAR фактически означает «Репозиторий расширений и приложений PHP» и рекламируется как «платформа и система распространения для повторно используемых компонентов PHP». Другими словами, PEAR предоставляет сантехнику, необходимую для своевременного завершения проекта.

Сделать шаг назад; Один из способов охарактеризовать исходный код — рассмотреть его с точки зрения области, к которой он применяется, как описано здесь .

PEAR в первую очередь нацелен на «домен архитектуры»: код, который может быть повторно использован во многих приложениях, но нацелен на конкретную архитектуру (а именно, веб-приложения). Большинство «пакетов», предоставляемых PEAR, решают конкретные проблемы, с которыми обычно сталкиваются разработчики веб-приложений, независимо от типа создаваемого сайта.

Например, PEAR :: Validate предоставляет библиотеку общих процедур проверки, которая помогает вам проверять что-либо от URL (очень важно, если вы хотите предотвратить использование XSS) до номеров международных банковских счетов (IBAN). Вы можете легко найти причины для повторного использования PEAR :: Validate во всех видах приложений, сэкономив при этом много усилий и избежав вероятности того, что у вашей альтернативы — регулярного выражения — есть неприятная дыра (потому что не было времени на тщательное тестирование).

Краткая история

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

Проект PEAR начался с мысли Стига Баккена (имя которого вы, вероятно, встретили в Руководстве по PHP ). Легенда гласит, что Стиг хотел создать что-то вроде CPAN в Perl (массивный репозиторий повторно используемых решений Perl) для PHP.

Работа над PEAR началась в ноябре 1999 года с начала, вероятно, наиболее широко используемого пакета PEAR , PEAR :: DB . В течение следующих трех лет вокруг PEAR росло небольшое сообщество участников, постепенно превращающее его в первый публичный релиз (1.0) в январе 2003 года.

На самом деле, «Публичный релиз» — это скорее неправильное название. Как и во многих проектах с открытым исходным кодом, разработка PEAR всегда была «общедоступной» через серверы PHP CVS, в то время как веб-сайт PEAR впервые появился в октябре 2000 года, хотя и «в стадии разработки». Это может случайно вызвать ожидания слишком рано. Разговор о «выпуске» PEAR также может быть немного запутанным; Например, PEAR :: DB был досрочно выпущен в качестве стабильного выпуска в апреле 2002 года (версия 1.2). В конце концов, PEAR — это не единый объект, а инфраструктура для распространения кода и всех библиотек (или пакетов), хранящихся в хранилище.

Конечным эффектом стало то, что у нас были разработчики, которые знали, что происходит с PEAR, и говорили об этом еще в мае 2001 года ( Введение в PEAR ), в то время как остальные из нас были несколько озадачены.

Публичный выпуск действительно означал первый стабильный выпуск PEAR Installer и Package Manager (инфраструктуры), которые действительно упрощают получение пакетов из PEAR, как мы вскоре увидим. Релиз был также приглашением для всех, чтобы дать PEAR попробовать.

Другой запутанный аспект PEAR поднимает этот вопрос: «Если PEAR действительно является хранилищем для кода PHP, почему у него есть установщик?» Все знают, из Hotscripts , что для установки приложения PHP нужно просто разархивировать и перейти, верно? Это очень верно; PHP-код, как правило, очень прост в развертывании. Но как часто вы сталкивались с сообщениями об ошибках вроде этого: «Не удалось открыть lib / someClass.php для включения» при использовании стороннего PHP-кода (поскольку PHP не смог найти someClass.php в вашем include_path)? У PEAR есть стандартный подход к предоставлению готовых компонентов PHP, который использует фиксированный путь включения. Это означает, что если вы правильно настроили PEAR, то включение, например, PEAR :: Cache_Lite всегда может быть выполнено с помощью следующего:

 require_once 'Cache/Lite.php'; 

Как насчет того, когда вы смешиваете множество внешних библиотек в свое приложение? Все ли разные стили кодирования хорошо сочетаются? Что вы делаете, когда какой-то проект с открытым исходным кодом, на который вы полагаетесь, начинает генерировать всевозможные сообщения об ошибках, благодаря обновлению PHP? Владелец все еще поддерживает это? Это не говоря уже о всех других «хитростях» PHP, таких как magic_quotes и register_globals.

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

Также есть признаки того, что, несмотря на то, что команда PEAR вдохновлена ​​Perl, команда PEAR стремится создать более интегрированную библиотеку — что-то более похожее на Java. Например, PEAR :: DB_DataObject (как вы уже видели ранее в SitePoint) предоставляет уровень персистентности базы данных, позволяя вам обрабатывать таблицы как объекты и, по большей части, забывать SQL. DB_DataObject использует PEAR :: DB для выполнения реальных вызовов вашей базы данных, что позволяет вам воспользоваться ее функциональными возможностями, независимо от того, какой механизм базы данных вы используете. Кроме того, новая система предложений пакетов PEAR (PEPr) обеспечивает скрининг на уровне того, какой код в первую очередь попадает в PEAR. Не совсем процесс сообщества Java , но шаг в правильном направлении.

Вопрос о том, как создаются пакеты PEAR, приводит к дискуссии, которая разделяет многих разработчиков PHP. Поиск по всему (возможно, на форумах SitePoint ), и вы найдете мнения о PEAR и пакетах, найденных внутри, начиная от «Это отстой!» на «Это качается!» — и охватывает все, что между. Итак, почему эти расходящиеся реакции на грушу?

PEAR, как проект, — это многое для многих. Наряду с положительными реакциями приходят замечания типа «он не сделал то, что мне нужно» и «раздутый» на общие вопросы объектно-ориентированного проектирования приложений. В некоторой степени PHP является уникальным языком, в котором нет такого понятия, как типичный кодер PHP. Он привлекает разработчиков из всех областей, от Perl-хакеров до гуру Java, от веб-дизайнеров до профессиональных программистов. Создать что-то, чтобы удовлетворить всех, невозможно. Вы найдете драгоценные камни в грушу. Чаще всего, хотя выбранный вами пакет не был «идеальным», он был достаточно хорош для проблемы, которую вы пытаетесь решить.

Там также социальный аспект. Сообщество разработчиков PEAR меняет форму. Из сравнительно небольшой группы разработчиков, которые знали друг друга и могли легко координировать свои действия, PEAR теперь привлекает гораздо больше информации от сообщества PHP в целом. Хотя это хорошо, это также приводит к боли роста. Усилия, необходимые для управления этим новым вкладом, значительны, и, к счастью, люди отдают свое свободное время, чтобы сделать это. Иногда плохой ответ на чей-то вопрос «Как я…» или недипломатическая критика пакета PEAR (чья-то тяжелая работа) в прошлом приводили к недовольству.

Наконец, существует проблема с документацией, охватывающей как использование PEAR, так и детали пакетов, хранящихся в нем. Проще говоря, там не так много документации. И там, где существуют подробные инструкции, не удивляйтесь, если они устарели.

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

Какими бы ни были ваши предубеждения относительно PEAR (или даже если вы никогда о них не слышали), это очень ценный проект. Текущая база кода уже представляет собой сумму многих тысяч часов работы. Более того, PEAR представляет собой шанс развить сам PHP. PEAR предоставляет базовую платформу (которую вы загружаете с php.net), а также множество других непоследовательных проектов, разбросанных по Sourceforge и т. П., Что дает возможность создать единую и хорошо поддерживаемую библиотеку компонентов, которая повторно используется разработчиками PHP во всем мире, значительно сократить время разработки каждого.

Так что, если есть что-то, что вам не нравится, не сидите в стороне. Примите участие и исправьте это. В конце концов, эволюция работает лучше, чем революция!

Установка PEAR

ОК, хватит разговоров. Пришло время для некоторых действий!

Настройка PEAR и возможность извлечения пакетов из него — это двухэтапный процесс. Сначала есть установщик PEAR, затем менеджер пакетов PEAR. Работа установщика состоит исключительно в настройке диспетчера пакетов. Диспетчер пакетов — это инструмент, который вы используете для получения интересующих вас библиотек PHP (пакетов PEAR).

Давайте начнем с PEAR Installer. По сути, это всего лишь скрипт PHP, который подключается к веб-сайту PEAR и загружает целый ряд других вещей (в частности, менеджер пакетов). Чтобы запустить установщик, вы должны иметь возможность запускать PHP из командной строки. Итак, начнем там …

Командная строка PHP

Если вы работаете в Windows, откройте оболочку DOS (Windows NT / 2000 / XP: Пуск> Выполнить> cmd.exe, Windows 95/98: Пуск> Выполнить> command.exe — см. Шпаргалку командной строки Kev, если вы в любом случае).

Если вы используете Linux на своем ПК, я предполагаю, что вы знаете, как запустить оболочку. Если у вас есть хост LAMP (Linux / Apache / MySQL / PHP), когда вы запускаете сеанс ssh или telnet с сервером (если ваш хост позволяет это), вы должны перейти в командную строку (обычно это оболочка BASH для Linux). ). Извиняюсь перед пользователями Mac (есть значительная группа пользователей Mac / PHP, вы знаете), но Санта не смог оставить один в моем чулке в декабре прошлого года. Может в следующем году.

Независимо от вашей ОС, в командной строке введите:

 php -v 

В ответ вы должны увидеть некоторую информацию о версии о PHP, такую ​​как:

 PHP 4.3.4 (cli) (built: Nov 26 2003 10:46:59)  Copyright (c) 1997-2003 The PHP Group  Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies 

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

В системах на основе Windows это будет ниже вашего установочного каталога PHP, например, в подкаталоге cli:

 c:php-4.3.2-Win32cliphp.exe 

В системах на базе Linux PHP обычно находится по адресу:

 /usr/local/bin/php 

Обратите внимание, что бинарный файл php не имеет расширения «.exe» в Linux. Если вы сомневаетесь, вы можете найти его в Linux с помощью следующего:

 $ whereis php 

В противном случае попробуйте следующее (для поиска в каталоге / usr):

 $ find /usr -name php 

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

В Windows перейдите в Пуск> Панель управления> Система> Дополнительно> Переменные среды. Прокрутите список «системных переменных», пока не найдете переменную пути, выберите ее и нажмите «Изменить». Теперь, в конце «Значение переменной», добавьте путь к исполняемому файлу php, например «; c: php-4.3.2-Win32cli» (обратите внимание на точку с запятой, которая отделяет один путь от следующего). Исполняемый файл теперь на вашем пути. Если вы запустите новую командную строку (все существующие будут по-прежнему использовать старую переменную path), вы сможете набрать «php -v» и получить ожидаемый ответ.

Если вы используете хост LAMP, они должны были настроить его для вас, но если нет, вам нужно отредактировать (или создать) файл «.profile» в домашнем каталоге вашей учетной записи, добавив следующую строку в конец файла. :

 export PATH=$PATH:/usr/local/bin 

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

Дополнительные советы и рекомендации по использованию PHP из командной строки см. В разделе « Замена сценариев Perl сценариями PHP» и «Руководство по использованию PHP из командной строки» .

Запуск программы установки PEAR

Теперь у вас есть исполняемый файл PHP в вашем системном пути, пришло время выбрать и запустить PEAR Installer. В наши дни установщик входит в состав дистрибутива PHP, поэтому возможно, что он уже установлен в вашей системе. Сценарий установщика также доступен по адресу http://pear.php.net/go-pear , и я буду использовать его, чтобы вы знали, как установить PEAR с нуля.

Пользователи Windows, зайдите на http://pear.php.net/go-pear с вашим браузером и просто «Сохранить страницу как…». Сохраните его где-нибудь в вашей системе, например:

 c:tempgo-pear.php 

Теперь введите:

 cd c:temp  php go-pear.php 

Установщик теперь запускается.

Пользователи Linux получают более легкую жизнь, им нужно только набрать:

 $ wget http://pear.php.net/go-pear -O go-pear.php  $ php go-pear.php 

В качестве альтернативы, если у вас установлен браузер текстового режима Lynx, просто введите:

 $ lynx -source http://pear.php.net/go-pear | php 

… Который загрузит и запустит Установщик.

Варианты установки

Запустив установщик, вы должны ответить на несколько вопросов о том, как вы хотите настроить менеджер пакетов PEAR. Большинство вопросов должны быть простыми (например, используете ли вы прокси-сервер — установщик общается с веб-сайтом PEAR через HTTP).

Когда дело доходит до определения структуры файла PEAR, нужно немного подумать. Если вы устанавливаете систему в своей собственной системе Linux, обычно лучше принять настройки по умолчанию (сначала войдите в систему как root). При установке в Windows или на вашем хосте LAMP рекомендуется изменить их. Это мои предпочтения, которые немного отличаются от настроек по умолчанию, которые предоставляет установщик:

  • Вариант 1 (псевдоним $prefix ): Префикс установки — это базовая папка, в которой вы можете поместить все. Хорошим выбором может быть просто c:pear в системах Windows. На LAMP вам, вероятно, лучше использовать что-то вроде /home/yourname/pear , где «yourname» — это имя пользователя, с которым вы входите в систему (то есть вы устанавливаете под своим домашним каталогом).
  • Вариант 2: Расположение двоичных файлов — когда он говорит «двоичные файлы», это фактически означает исполняемые сценарии PHP, сценарии оболочки и так далее. Версия командной строки PEAR Package Manager находится здесь (это то, что вас интересует!). Этот каталог нужно будет перейти в переменную вашего системного пути (используя ту же процедуру, что вы использовали для добавления двоичного файла php в ваш путь). Как правило, хорошим выбором может быть $prefixbin для Windows ( $prefix/bin для учетной записи LAMP).
  • Вариант 3 (псевдоним $php_dir ): PHP Code Directory — это каталог, в который будут помещены все пакеты PEAR. Его нужно будет добавить в ваш PHP include_path (подробнее об этом include_path ). Вы можете выбрать $prefixlib для Windows ( $prefix/lib — LAMP).
  • Вариант 4: Базовый каталог документации — здесь будут размещены документация и примеры, поставляемые с пакетами PEAR. Вы, вероятно, будете обращаться к этому каталогу, чтобы увидеть, как работает пакет. В вашей собственной системе разработки вы можете изменить этот каталог на тот, который находится ниже вашего корневого веб-каталога (например, c:apachehtdocspear ), чтобы вы могли быстро просматривать примеры в своем браузере. Будьте осторожны, хотя! Убедитесь, что вы не выставляете каталог миру! Более безопасным вариантом может быть $prefixdocs для Windows или $prefix/docs для учетной записи хостинга Linux.
  • Вариант 5: Каталог баз данных — некоторые пакеты PEAR используют данные, хранящиеся, скажем, в форме XML, которые будут использоваться каким-либо образом скриптами PHP, предоставляемыми пакетом (например, PEAR :: Science_Chemistry помещает описание воды в Chemical Markup Язык в данных dir, хотя чисто для тестирования). Хороший выбор, вероятно, $prefixdata для Windows (или $prefix/data для вашей учетной записи хоста LAMP).
  • Вариант 6: Test Directory — поместите здесь любые скрипты модульного тестирования, поставляемые с пакетом, обычно для выполнения под PEAR :: PHPUnit . Опять же, что-то вроде $prefixtests для Windows ( $prefix/test — LAMP).

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

После этого установщик попытается изменить ваш файл php.ini, если это возможно, чтобы добавить каталог библиотеки PEAR (вариант 2 выше) в ваш PHP include_path . В вашей собственной системе, с правильным разрешением, возможно, эти изменения будут правильными. Это хорошая идея, чтобы дважды проверить, что он делает, поэтому откройте ваш php.ini (обычно в c: Windows; он меняется в Linux) и убедитесь, что изменения верны. Конечно, общая учетная запись, которую предоставляет ваш хост, вероятно, не позволит вам изменить php.ini — обходной путь подходит!

Как я упоминал ранее, пакеты PEAR включены в ваш PHP-код по тому же относительному пути. Таким образом, наличие правильного include_path очень важно (изменение пакетов PEAR вручную — это не весело!).

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

 include_path = ".;c:pearlib" ; 

… в Windows. Обратите внимание на точку с запятой.

 include_path = ".:/usr/local/lib/php" ; 

… в вашей собственной системе Linux.

На общем хосте LAMP, где у вас нет доступа к изменению php.ini, лучше всего поместить файл .htaccess в корневой каталог веб-документа (предполагается, что на вашем хосте настроен Apache, разрешающий использование файлов .htaccess ), содержащий:

 php_value "include_path" ".:/home/yourname/pear/lib" 

Это должно применяться рекурсивно к подкаталогам. Если вы получаете внутренние ошибки сервера, пришло время беспокоить ваш хост — им нужно настроить Apache для вашего виртуального хоста, чтобы иметь:

 AllowOverride Options 

(«Опции» или «Все» должны сделать это.)

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

 <?php  ini_set("include_path", ".:/home/yourname/pear/lib"); 

Обратите внимание, что вы извлекаете существующий путь включения с помощью ini_get () , что означает, что вы можете использовать следующее для сохранения существующего пути включения:

 <?php  $current_path = ini_get("include_path");   // Append a new include path to the existing path  ini_set("include_path", "$current_path:/home/yourname/pear/lib"); 

Больше изменений в окружающей среде

Наконец, вам нужно внести дополнительные изменения в вашу среду.

Пользователи Windows должны найти файл вызова PEAR_ENV.reg , помещенный PEAR_ENV.reg в каталог «binaries» PEAR (вариант 2 выше). Он содержит инструкции, которые позволят вам отредактировать реестр и создать некоторые переменные среды, которые указывают на различные каталоги, которые вы указали выше, поэтому менеджер пакетов PEAR (и любой пакет, который в нем нуждается) знает, как настроить PEAR.

Те, на хосте LAMP, должны набрать:

 $ ls -l ~/.pearrc 

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

Последний шаг — добавить каталог «binaries» PEAR в системную переменную path, чтобы вы могли выполнять их из любого места в вашей структуре каталогов.

Следуя шагам, которые вы использовали для добавления двоичного файла php к указанному выше пути, пользователи Windows должны добавить следующее (в зависимости от того, где вы установили PEAR):

 ;c:pearbin 

Те, у кого есть аккаунты LAMP, должны снова отредактировать .profile, добавив:

 export PATH=/home/yourname/pear/bin:$PATH 

Обратите внимание, что $PATH идет после каталога двоичных файлов PEAR. Это всего лишь мера предосторожности, если на вашем хосте установлена ​​собственная версия PEAR; Ваша версия любых сценариев командной строки PEAR должна выполняться первой, когда вы набираете pear .

Это оно! Теперь вы можете поэкспериментировать с менеджером пакетов PEAR (обещаю, что все станет намного проще).

Другие опции

Это не единственный способ настроить менеджер пакетов PEAR. В частности, на хостах учетных записей LAMP уже может быть установлен PEAR (если вы наберете pear из командной строки, прежде чем делать что-либо из вышеперечисленного, вы можете увидеть страницу справки диспетчера пакетов). У вас есть опция «копилка» при установке вашего хоста, как описано здесь . Лично я предпочитаю не делать этого, потому что я фанат контроля (по крайней мере, когда дело доходит до хостинга!), Но вам может упростить жизнь, если вы доверяете своему хосту знать, что они делают с PEAR ,

Кроме того, хотя я буду рассматривать только интерфейс командной строки, у менеджера пакетов PEAR есть два других «интерфейса»: веб-интерфейс и графический интерфейс PHP-GTK. Я никогда не касался версии GTK, но веб-интерфейс может быть полезен, особенно если вы застряли на хосте, который не дает вам доступа к командной строке (* boo *, * hiss *). В PHP Kitchen есть несколько замечаний по настройке веб-интерфейса, который легко адаптировать к учетной записи общего хостинга. Убедитесь, что вы защищаете веб-интерфейс с помощью комбинации имени пользователя и пароля (файл .htaccess должен сделать это за вас)!

Диспетчер пакетов

Хорошо, у вас это далеко. Отныне это становится намного проще. Менеджер пакетов PEAR должен быть настроен и готов к работе. Для начала введите в командной строке:

 $ pear 

Должно всплыть основное использование менеджера пакетов PEAR — список возможных подкоманд, которые вы можете использовать с ним. Вы можете изменить почти все настройки, которые вы указали при установке PEAR. Введите следующее:

 $ pear config-show 

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

 $ pear config-help <optioname> 

… Вы получите краткое описание того, что означает эта опция конфигурации. Вы можете изменить свои настройки, используя:

 $ pear set <optioname> 

Еще не впечатлило? Вся эта работа для чего? Ну, как насчет этого …

 $ pear install XML_Parser  $ pear install XML_Util  $ pear install XML_Serializer 

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

 downloading XML_Serializer-0.9.1.tgz ...  ...done: 12,675 bytes  install ok: XML_Serializer 0.9.1 

Что здесь случилось? Менеджер пакетов PEAR связался с веб-сайтом PEAR, нашел последнюю версию XML_Serializer , загрузил ее и установил в библиотеку пакетов PEAR. Вы можете сразу начать использовать пакеты из ваших PHP-скриптов.

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

Менеджер пакетов PEAR предоставляет ряд механизмов для установки пакетов PEAR. Первым, который был использован выше, был XML-RPC . Он «общается» с веб-сервером PEAR и выясняет, какой выпуск следует загрузить.

Он также может извлекать и устанавливать напрямую, используя HTTP, загружая пакет почти так же, как это делает браузер. Например, если вам нужна конкретная версия HTML_QuickForm , например 3.1.1, вы можете получить ссылку на файл с домашней страницы пакета — в этом случае http://pear.php.net/get/HTML_QuickForm-3.1 .1.tgz. Затем вы можете напрямую установить его с помощью:

 $ pear install http://pear.php.net/get/HTML_QuickForm-3.1.1.tgz 

Вы также можете установить файлы, которые вы загрузили вручную, из локальной файловой системы следующим образом:

 $ pear install /home/harryf/downloads/HTML_QuickForm-3.1.1.tgz 

Это также означает, что пакет не обязательно должен быть на веб-сайте PEAR (или вообще в части PEAR), чтобы вы могли его использовать. Другие проекты, такие как ISMO Framework , публикуют выпуски, готовые для диспетчера пакетов (файлы .tgz), и их можно установить напрямую, используя тот же подход. Если у вас есть библиотека, которую вы хотели бы упростить для людей, вы можете сделать то же самое.

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

Итак, как менеджер пакетов PEAR узнает, что делать с пакетом? Если вы скачаете какую-либо версию HTML_QuickForm, например, в своем браузере и разархивируете ее, вы найдете там файл с именем package.xml . Он содержит всю информацию о том, где должен быть размещен код пакета, относительно вашей директории библиотеки PEAR. Если вы действительно мертвы в воде и не можете установить Диспетчер пакетов, вы можете вручную разархивировать пакет и правильно разместить его в пути включения, основываясь на информации в package.xml (см. Полное описание здесь ). Это последнее средство — зачем делать дополнительную работу для себя?

Еще одна полезная команда, о которой нужно знать, это:

 $ pear upgrade <package_name> 

Если вы уже установили пакет, вы обновитесь до последней версии. Обязательно сначала проверьте примечания к выпуску на случай, если новая версия нарушит ваш код.

Одна небольшая «ошибка», когда дело доходит до установки пакетов, — это параметр конфигурации «предпочитаемое состояние». В настоящее время это может быть установлено на «stable», «beta», «alpha», «devel» или «snapshot». Теперь представьте, что у вас есть предпочтительный параметрstag_state со значением «stable» (по умолчанию), и вы набрали:

 pear install HTML_QuickForm 

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

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

Мгновенный RSS

ОК — время положить мои деньги туда, где мой рот. Без сомнения, вы уже читали статью Кева о PHP и XML: парсинг RSS 1.0 . В нем объясняются детали создания собственного обработчика SAX для синтаксического анализа RSS 1.0 и показано, как извлечь его из канала SitePoint по адресу http://www.sitepoint.com/rss.php .

Конечно, много написано для написания всего этого кода для обработки XML. Кроме того, если вы пытаетесь получить доступ к каналу из-за прокси-сервера, вам понадобится какой-нибудь HTTP-клиент, способный понимать заголовки, которые генерирует прокси-сервер. Функция PHP fopen () не поможет вам в этом.

Благодаря PEAR вы можете значительно сократить объем работ по анализу RSS-канала. Предполагая, что вы установили XML_Serializer там, вам также нужен PEAR :: HTTP_Request . Я оставлю это вам, чтобы установить его и решить любые проблемы с зависимостями.

Как только у вас установлены необходимые пакеты, используйте этот код:

 <?php  // Include PEAR::HTTP_Request  require_once 'HTTP/Request.php';   // Include PEAR::XML_Unserializer  require_once 'XML/Unserializer.php';   // Create the HTTP_Request object, specifying the URL  $Request = & new HTTP_Request('http://www.sitepoint.com/rss.php');   // Set proxy server as necessary  // $Request->setProxy('proxy.myisp.com', '8080', 'harryf', 'secret');   // Send the request for the feed to the remote server  $ErrorCheck = $Request->sendRequest();   // Check for errors  if ( PEAR::isError($ErrorCheck) ) {    die ( "Connection problem: ".$ErrorCheck->toString() );  }   // Check we got an HTTP 200 status code (if not there's a problem)  if ( $Request->getResponseCode() != '200' ) {    die ( "Request failed: ".$Request->getResponseCode() );  }   // Get the body of the response - the XML document  $xml = $Request->getResponseBody();   // Create an instance of XML_Unserializer  $UnSerializer = &new XML_Unserializer();   // Unserialize the feed and dump the raw array  if ( $UnSerializer->unserialize($xml) ) {    $feed = $UnSerializer->getUnserializedData();    echo "<pre>";    print_r ( $feed );    echo "</pre>";  } else {    die ( "Error unserializing feed" );  }  ?> 

Из приведенного выше примера видно, что кода гораздо меньше, но мы наслаждаемся более детальной обработкой ошибок благодаря PEAR :: HTTP_Request, имеющему некоторое «понимание» протокола HTTP. Кроме того, вы сразу получаете доступ к данным в ленте RSS (не нужно думать о XML). Чтобы закончить, нужно просто пройтись по массиву $feed["item"] и отобразить каждую строку в HTML. На этот раз я не буду обсуждать детали PEAR :: HTTP_Request или XML_Serializer. Пример предназначен только для того, чтобы дать вам представление о том, как PEAR может облегчить вашу жизнь.

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

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

Заворачивать

Это должно было дать вам достаточно вкуса груша, чтобы начать!

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

У PEAR уже есть что предложить, и, безусловно, это самое большое объединенное усилие по написанию PHP. И чем больше и больше разработчиков PHP отстают от PEAR, тем лучше будет становиться.