В предыдущей статье мы представили концепцию PEAR, правила кодирования и простые методы использования. Возможно, вы имеете предварительное представление о ней. На этот раз мы познакомим вас с функциями некоторых модулей существующей библиотеки PEAR и ее использованием.
1. Соглашение об именах Прежде чем разобраться в существующем модуле PEAR, давайте сначала разберемся с организационной классификацией PEAR и соглашением об именах. Организация модулей в PEAR аналогична CPAN. Соответствующие файлы каждого модуля размещаются в собственном каталоге категорий, а некоторые размещаются непосредственно в корневом каталоге pear (один файл). Поскольку PEAR не имеет пространства имен, такого как Java, имя вашего класса должно отражать связь между именем вашего модуля и именем родительского класса и соответствовать определенным соглашениям. Например, имя вашего модуля: «Mp3/common», а затем ваш php-файл. должен находиться по адресу: Mp3/common.php, а имя класса вашего модуля должно быть: Mp3_common. Вообще говоря, если ваш модуль улучшен из существующего модуля, рекомендуется поместить ваш модуль и существующий модуль в один и тот же каталог. Если вы разрабатываете новый класс или модуль, вы можете создать новый каталог самостоятельно или разместить их в одном каталоге для аналогичных целей. Например, если вы пишете новый модуль для обработки журналов, рекомендуется поместить его в Log/, указав, что это модуль приложения для обработки журналов, если новый модуль используется для обработки MP3, то вы можете создать A; новый каталог mp3 помещается в каталог mp3.
2. Существующие модули PEAR Поскольку большинство модулей Pear все еще находятся в стадии разработки, вот модули pear, выпущенные с php4.05. Следует отметить, что некоторые абстрактные классы или базовые классы (например, Mail.php, Log.php, Cache. .php) не указаны, мы фокусируемся только на модулях с конкретными функциями. Ниже приведен список этих модулей:
Benchmark/Timer проверяет эффективность работы части вашего PHP-кода.
Benchmark/Benchmark_Iterate проверяет производительность функции, когда она выполняется в цикле.
Cache/Output может кэшировать выходные данные вашего php-скрипта. Его можно кэшировать различными способами (в файлах, базах данных или общей памяти). Если вы используете этот модуль, это может увеличить нагрузку на сервер, если вы захотите. to pass Чтобы повысить эффективность за счет кэширования динамических скриптов, вы также можете использовать ZendOptimize. Этот модуль может не подойти.
Кэш/Графика может кэшировать изображения, необходимые для динамического вывода.
Модуль обработки параметров командной строки Console/Getopt
CMD — это виртуальная оболочка, которую можно использовать для запуска некоторых системных команд.
Crypt/CBC реализует симуляцию модуля Perl Crypt::CBC.
Crypt/HCEMD5 реализует функции модуля Perl Crypt::HCE_MD5
Date/Calc реализует операции, связанные с датой.
Преобразование даты/человеческого календаря
БД обеспечивает унифицированный и абстрактный уровень работы с базой данных, а серверная часть поддерживает несколько баз данных.
Файл/Найти поиск файла
File/Passwd управляет файлами, похожими на пароли, такими как пароль, httppass, cvspassword.
File/SearchReplace Найти и заменить строку в файле
HTML/Form позволяет быстро создавать формы в HTML.
HTML/IT реализует настройку шаблонов и динамически генерирует страницы, аналогично функции шаблона в phplib, но она должна быть простой и удобной в использовании.
HTML/ITX реализует расширенные функции для ИТ, позволяя более гибко настраивать шаблоны и выполнять более сложные операции.
Расширение HTML/процессора XML_Parser, чтобы его можно было применять к работе с html-файлами.
HTTP/Compress — это класс-оболочка для механизма буферизации вывода Php, который также может сжимать и сохранять буферизованный контент.
Image/Remote может получить информацию об изображении удаленной системы, не загружая весь образ локально.
Log/composite Horde — это расширение абстрактного класса журнала, которое позволяет нескольким объектам обработки журнала получать одно и то же событие журнала. Обратите внимание, что все модули в каталоге Log являются частью проекта Horde и большинство из них являются абстрактными суперклассами.
Журнал/файл записывает информацию журнала в файл.
Log/mcal отправляет информацию в базу данных локального или удаленного программного обеспечения для управления расписанием-mcal.
Суперкласс Observer в журнале/наблюдателе Horder
Log/sql отправляет информацию журнала в базу данных sql.
Журнал/системный журнал отправляет информацию в системный журнал
Mail/RFC822 Проверяет, является ли адрес электронной почты действительным адресом электронной почты rf822.
Mail/sendmail Используйте sendmail для отправки писем
Mail/smtp использует smtp-сервер для отправки писем
Math/Fraction выполняет математические расчеты фракталов.
Math/Util вычисляет наибольший общий делитель
NET/Curl — это объектно-ориентированная оболочка для расширения PHP Curl.
NET/Dig манипулирует dig для выполнения операций запроса, связанных с DNS.
NET/SMTP использует NET/Socket для реализации протокола SMTP.
NET/Socket универсальный класс Socket, реализующий упаковку часто используемых операций с сокетами.
Числа/римские преобразования между арабскими цифрами и римскими цифрами
Оплата/Verisign реализует взаимодействие с платежным шлюзом Verisign.
Pear предоставляет два основных класса модуля Pear: классы PEAR и PEARError.
PEAR/Installer Класс установки pear предоставляет функции, аналогичные модулю CPAN в Perl.
PHPDoc автоматически генерирует документацию API из PHP-кода.
Schedule/at взаимодействует с демоном AT в Unix.
XML/Parser — это анализатор XML, основанный на расширении XML PHP.
XML/Render генерирует XML-документы в другие форматы (html, pdf). Это всего лишь абстрактный класс. В последней версии кода pear cvs уже есть реализация html.
XML/RPC использует php для реализации абстрактного класса xml-rpc В последней версии кода pear cvs уже есть реализация xml/RPC/Server.
3. Введение в использование основных модулей. из наиболее часто используемых и их функций. Он относительно полон и стабилен и может использоваться в «практических» модулях. Несколько мощных модулей, таких как Db, phpdoc, XML_Parser, IT и ITX, будут представлены отдельно в будущих статьях.
1. ГРУША/Установщик
Этот модуль является основным модулем pear. Он завершает установку и обслуживание других модулей pear. Он аналогичен функции модуля cpan в perl, однако в настоящее время он имеет только функцию установки, такую как запрос. проверка зависимостей и т. д. не завершена. Сам Pear Открытого сайта типа cpan нет, но так как количество разработчиков, участвующих в pear, продолжает увеличиваться, все будет там.
Синтаксис использования: PEAR_Installer::installer($file)
$file — это файл модуля, который необходимо установить. Это может быть локальный файл или удаленный файл, например http:// или ftp. Программа установки автоматически загрузит его локально. Файлы обычно упаковываются с помощью gzip, который должен включать пакет. Файл DTD pacakage.xml находится в каталоге pear и имеет имя package.dtd
<?php.
require_once "PEAR/Installer.php";
$installer = новый PEAR_Installer;
//Установим указанный модуль
$result = $installer->install($package_file);
если (PEAR::isError($result)){
echo "Не удалось установить $package_file!";
}еще {
echo "Установка $package_file прошла успешно!";
}
?>
2.КМД
Хотя большинство PHP-приложений редко вызывают системные команды, поскольку эти приложения основаны на Интернете, с точки зрения эффективности работы и загрузки системы следует избегать прямых вызовов системных команд. Однако в некоторых специальных приложениях или по вашему желанию. PHP используется как инструмент оболочки, вызов существующих системных инструментов неизбежен. CMD позволяет легко выполнять ряд системных команд.
Синтаксис использования: setOption ($option, $setting)
Установите для параметра $options значение $setting
, $options является константой и может принимать следующие значения:
CMD_SHUTDOWN: выполнение команд через функцию выключения.
CMD_SHELL: укажите путь к оболочке.
CMD_OUTPUT: блокировать ли стандартный вывод команды.
CMD_NOHUP: используйте nohup для выполнения команд в фоновом режиме.
CMD_VERBOSE: вывести ошибки в стандартную
команду вывода ($command).
Добавьте команду, которую необходимо выполнить. $command может быть массивом или обычной строкой
exec().
Выполните добавленную команду
<?php
require_once "CMD.php";
$cmd = новый CMD;
$cmd->command('tar zcvf test.tar.gz ~/test');
если ($cmd->exec()) {
echo "успех!n";
} ЕСЛЕ {
эхо «Ошибка:» $cmd->lastError;
}
?>
3.Бенчмарк/Таймер и Бенчмарк/Итерация
Эти два модуля позволяют вам проверить, насколько эффективно работает ваш код, что, я считаю, полезно для отладки системы: вы можете опробовать разные алгоритмы, внимательно изучить, сколько времени требуется для работы каждого алгоритма, а затем выбрать лучший способ. Benchmark/Timer проверяет разницу во времени между двумя разными моментами времени во время работы. Benchmark/Iterate — это расширение Timer для проверки времени, необходимого для запуска определенного фрагмента кода (функции) n раз.
Синтаксис использования: Benchmark/Timer
Timer::setMarker($name) устанавливает текущую точку времени в $name.
Timer::start() начинает тестирование
Timer::stop() останавливает тестирование
Timer::timeElapsed($start = 'Start', $end = 'Stop') Вычислить разницу во времени между $start и $end.
Timer::getProfiling() возвращает время, прошедшее между запуском и остановкой.
<?php
require_once "Benchmark/Timer.php";
$timer = новый Benchmark_Timer
$timer->start();
$timer->setMarker('Маркер 1');
$timer->stop();
$profiling = $timer->getProfiling();
?>
Тестирование/итерация Iterate
::run()
Запускает указанную функцию в цикле. Это метод с переменными параметрами. Первый параметр — это количество циклов, второй параметр — это функция, которую нужно выполнить, а третий параметр и далее — это параметры, которые нужно передать в тестовую функцию.
Итерация::get()
Возвращает время, затраченное тестом
<?php
require_once "Benchmark/Iterate.php"
$benchmark = новая
функция Benchmark_Iterate foo($string);
{
напечатайте $строку».
";
}
$benchmark->run(100, 'foo', 'test');
$result = $benchmark->get();
?>
3.Файл/Найти
&glob ($pattern, $dirpath, $pattern_type='php')
Поиск каталогов и файлов, соответствующих $pattern, в $dirpath и возврат массива совпадающих имен файлов и каталогов
&search ($pattern, $directory, $type='php')
Найдите в $directory файлы, соответствующие правилам $pattern, и верните массив совпадающих имен файлов (обратите внимание, только файлы, а не подкаталоги). $pattern — это условие поиска, обычно регулярное выражение. $patten_type указывает, какой режим регулярного выражения использовать. По умолчанию используется режим php. Вы также можете указать «perl», чтобы использовать регулярное выражение режима Perl
. search В отличие от glob, glob не выполняет рекурсивный поиск в подкаталогах, тогда как search ищет в подкаталогах рекурсивно.
<?php
require_once "Файл/Find.php";
$find = новый File_Find;
//Ищем текущий каталог
$php_files = $find->glob("*php",".");
if ( PEAR::isError($php_files) ){
die "Ошибка: " $php_files->getMessage() ."n" ;
}
//Рекурсивный поиск в текущем каталоге
$all_php_files = $find->search("*php",".");
if ( PEAR::isError($all_php_files) ){
die "Ошибка: " $php_files->getMessage() ."n" ;
}
?>
4.Файл/Пароль
Работайте с файлами в формате пароля, аналогично стандартному паролю Unix, файлам паролей .htppass Apache и файлам паролей pserver cvs. Судя по текущей версии кода, его действительно нельзя использовать для обслуживания этих файлов passwd (например, тень не поддерживается). Но вы можете использовать его для создания аналогичного файла паролей, конечно, безопасность будет не очень высокой.
Как использовать:
File_Passwd($file,$lock=0)----------Создайте объект. $file — это файл passwd, с которым вы хотите работать. $lock указывает, следует ли использовать flock для блокировки файла.
addUser($user,$pass,$cvsuser) ----------Добавьте пользователя, $user, $pass — это имя пользователя и пароль соответственно, $cvsuser — это идентификатор пользователя cvs
modUser($user,$pass,$cvsuser) ----------Измените пароль $user на $pass, $cvsuser — это идентификатор пользователя cvs
delUser($user)----------Удалить указанного пользователя $user
verifyPassword($user,$pass)----------Проверка пароля пользователя
close()----------Сохраните изменения в файле паролей, закройте файл паролей и разблокируйте его.
5.Файл/ПоискЗаменить
Как
найти и заменить строки в файлах
: File_SearchReplace($find, $replace, $files, $directories = '', $include_subdir = 1, $ignore_lines = array())генерирует и устанавливает объект
$find
Искомая строка, которая может быть строкой или регулярным выражением
$replace
Заменяемая строка, которая может быть строкой или регулярным выражением
$files
Укажите, в каких файлах выполнять операцию замены: массив или строку, разделенную символами ","
$directory.
Укажите каталог для работы (необязательно), массив или строку, разделенную знаком ","
$include_subdir
При работе в каталоге указывает, следует ли выполнять описанную выше операцию рекурсивно в подкаталогах, что может иметь значение 1 или 0.
$ignore_lines
Укажите строки файла, которые следует игнорировать. Это массив. Любые строки файла, начинающиеся с любой строки в этом массиве, будут игнорироваться.
getNumOccurences()
Возвращает количество раз, когда был выполнен поиск и замена
getLastError()
Вернуть последнее сообщение об ошибке
setFind($find)
Установить строку, которую нужно найти
setReplace($replace)
Установите строку для замены
setFiles($files)
Установить файл для замены
setDirectories($directory)
Установите каталог для замены
setIncludeSubdir($include_subdir)
Укажите, следует ли также выполнять поиск и замену в подкаталогах
setIgnoreLines($ignore_lines)
setSearchFunction($search_function)
только при использовании «обычной» функции поиска.
Установите используемую функцию поиска, которая может иметь следующие параметры:
обычное значение по умолчанию, используйте функцию файла для чтения содержимого файла, а затем используйте str_replace для замены его построчно.
быстрый использует str_replace для прямой замены всего файла
preg использует preg_replace() для замены, вы можете использовать регулярные выражения, соответствующие требованиям этой функции
ereg использует ereg_replace() для замены, вы можете использовать регулярные выражения, соответствующие требованиям этой функции
делатьПоиск()
Выполните операцию поиска и замены
<?php
require_once "Файл/SearchReplace.php";
require_once "File/Find"
//Рекурсивный поиск в текущем каталоге
;
$find = новый File_Find;
$all_php_files = $find->search("*php",".");
if ( PEAR::isError($all_php_files) ){
die "Ошибка: " $php_files->getMessage() ."n" ;
}
если ( !count($all_php_file)){
die "Исходные файлы PHP НЕ найдены!n";
}
// Исправьте флаг php <? на <?php, чтобы он соответствовал стандарту pear
$replace = новый File_SearchReplace('<? ','<?php ',$all_php_files);
$replace->doSearch();
если ( $replace->getLastError() ) {
die «Произошла ошибка:» $replace->getLastError();
} еще {
echo "Всего " $replace->getNumOccurences() " было успешно заменено. n";
}
?>
6.HTML/Форма
Этот модуль позволяет быстро создать форму отправки без необходимости переписывать HTML-код.
Использование: Form::HTML_Form($action, $method = 'GET', $name = '', $target = '' )
Конструктор. этот класс имеет некоторые параметры, которые в основном такие же, как параметры формы, обычно записанные в HTML-коде. $action — это URL-адрес, который будет отправлен в форму, $name может указать имя формы, а $target — указать, следует ли открывать. новое окно и т. д.
Следующая серия методов addXXX используется для добавления соответствующих элементов управления в эту форму. Свойства элементов управления также соответствуют свойствам HTML.
addText($name, $title, $default, $size = HTML_FORM_TEXT_SIZE)
addCheckbox($name, $title, $default)
addTextarea($name, $title, $default,$width = HTML_FORM_TEXTAREA_WT, $height = HTML_FORM_TEXTAREA_HT)
addPassword($name, $title, $default, $size = HTML_FORM_PASSWD_SIZE)
addSubmit($name = "отправить", $title = "Отправить изменения")
addReset($title = "Отменить изменения")
addSelect($name, $title, $entries, $default = '', $size = 1, $blank = '', $multiple = false, $attribs = '')
addRadio($name, $title, $value, $default)
addImage($имя, $источник)
addHidden($name, $value)
Display()
Показать эту форму
<?php
require_once "HTML/Form.php";
//Создаем и отображаем форму входа
$myform = новая HTML_Form("./login.php");
$myform->addText('имя пользователя','имя пользователя','');
$myform->addPasswd('passwd','Пароль для входа',20);
$myform->addHidden('повторить','1');
$myform->addSumit('логин','логин');
$myform->Display();
?>
7.Почта/RFC822
Проверка легальности введенного адреса электронной почты – непростая задача. Вы можете попробовать использовать для проверки некоторые регулярные выражения, но это не так удобно и эффективно. Теперь, если вы хотите проверить, соответствует ли серия адресов электронной почты стандарту RFC822, и разделить их на отдельные адреса электронной почты, вы можете попробовать этот модуль, который очень прост и практичен.
Использование: конструктор класса Mail_RFC822 ($address = null, $default_domain = null, $nest_groups = null, $validate = null)
, $address — это серия адресов, которые вы хотите проверить, $default_domain указывает имя домена или имя хоста по умолчанию, $nest_groups Группировать ли выходные данные так, чтобы $validate необходимо было проверять каждый атом parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null) проверка синтаксического анализа задана. Список адресов. допустимо, возвращается разделенный список адресов. В случае возникновения ошибки возвращается сообщение об ошибке.
<?php
require_once "Mail/RFC822.php";
$rf822 = новый Mail_RFC822;
$result=$rf822->paseAddressList('who;[email protected];[email protected]');
если ($rf822->ошибка){
echo "Ошибка: $result";
}еще {
сброс ($ результат);
for ($i=0; $i< count($result);$i++){
echo "электронная почта:$result[$i]n";
}
}
?>
8.Почта/Отправить письмо
Sendmail — наиболее часто используемый MTA в unix/linux. Этот модуль позволяет использовать sendmail напрямую для отправки писем.
Использование: Конструктор класса Mail_sendmail($params)
. $params — это ассоциативный массив. В настоящее время вы можете установить параметры sendmail. Действителен только параметр sendmail_path, используемый для установки пути sendmail send($recipients, $headers, $body) для отправки писем. $recipients — это адрес электронной почты вашего получателя, который может быть одиночным или разделенным открытым списком адресов; может быть открыт, если он соответствует стандарту RFC82. $headers — это заголовок отправляемого вами письма. Это ассоциативное число. Ключ массива — это имя заголовка (например, «Тема»), а значение массива — это значение заголовка (например, «Привет!»). . Обработанный фирменный бланк будет иметь следующий вид: Тема: Здравствуйте! $body — это тело письма, включая все части, закодированные в формате MIME. В случае успеха возвращает true, в противном случае возвращает объект PEAR_Error
<?php
require_once "Mail/sendmail.php";
$sendmail = новый Mail_sendmail(array('sendmail_path=>'/usr/local/bin/sendmail'));
$header = array('Subject'=>'Hello','BCC'=>'[email protected]');
$body = 'Это тестовое сообщение от Nightsailer.com';
$result = $sendmail->send( '[email protected]' , $header, $body);
if ( PEAR::isError($result)){
echo "<h1> Ошибка отправки</h1><br>Причина: ".$result->getMessage()."<br>";
}еще {
echo "<h1>Поздравляем! Отправлено успешно!</h1><br>";
}
?>
9.Почта/смтп
Некоторые сайты в настоящее время не позволяют использовать sendmail, поэтому, если ваша программа PHP хочет использовать функцию отправки почты, она должна иметь возможность выполнить соответствующую функцию, используя внешний SMTP-сервер.
Использование: Использование этого модуля в основном такое же, как и Mail::sendmail. Следует отметить, что этот модуль требует использования модуля Net::SMTP: Mail_smtp($params)
Допустимые параметры для $params:
«хост» Адрес SMTP-сервера, по умолчанию — localhost.
'port' порт службы smtp, значение по умолчанию – 25.
'auth' Если smtp требует проверки авторизации, значение по умолчанию – false.
'usename' имя авторизованного пользователя smtp
'password' авторизованный пароль smtp
send($recipients, $headers, $body)
отправить
<?php
require_once "Mail/sendmail.php";
$params=array('host'=>'smtp.nightsailer.com','auth'=true,
'username'=>'night','password'=>'123456');
$sendmail = новый Mail_sendmail($params);
$header = array('Subject'=>'Привет','BCC'=>'[email protected]');
$body = 'Это тестовое сообщение от Nightsailer.com';
$result = $sendmail->send( '[email protected]' , $header, $body);
if ( PEAR::isError($result)){
echo "<h1> Ошибка отправки</h1><br>Причина: ".$result->getMessage()."<br>";
}еще {
echo "<h1>Поздравляем! Отправлено успешно!</h1><br>";
}
?>
10.Расписание/В
Этот модуль предоставляет интерфейс
add($cmd, $timespec, $queue = false, $mail = false)
программы at в unix.
При добавлении команды at
этот метод создаст пользовательское задание для программы at:
$cmd — это программа или скрипт, который вы хотите запустить.
$timespec — это время начала выполнения задания, формат такой же, как требуется в
Необязательный параметр $queue, указывающий имя очереди задания.
Необязательный параметр $mail, указывающий, следует ли отправлять электронное письмо с отчетом о результатах выполнения после завершения задания.
show($queue = false)
Команда, отображаемая в очереди at, возвращает ассоциативный массив. Ключом массива является номер задания. Соответствующее значение ключа также является ассоциативным массивом (время выполнения, очередь) — необязательный параметр. можно использовать его, чтобы возвращать только список заданий в очереди, имя очереди которого соответствует $queue
remove($job = false).
Удалить указанное задание at из очереди. $job — это номер удаляемого задания. В случае успеха верните true, в противном случае верните false
<?php.
require_once "Расписание/At.php";
$at = новый Schedule_At();
//Создаем и добавляем задание
$result = $at->add ('найти / -тип файла -имя ядра -exec rm -f {} ;','00:00');
если ( PEAR::is_Error($result)) {
echo "Невозможно добавить вакансию!n";
echo "Причина: $result->getMessage() n";
Выход;
}
//Отображение текущего состояния очереди
$queue = $at->show();
если ( PEAR::isError($queue) ) {
echo "Произошла ошибка!n";
echo "Причина:" . очередь->getMessage() "n";
Выход;
}
сброс ($ очередь);
while ( list($job, $cmd) = каждая $очередь ){
echo "[$job]" . $cmd['runtime'] "-" .$cmd['queue'];
эхо "n"
}
?>
Выше приведены примеры использования некоторых модулей PEAR. Для получения более подробных инструкций вам необходимо самостоятельно проверить исходные файлы этих модулей или использовать phpdoc для автоматического создания API-документов этих модулей. Что касается phpdoc, мы подробно обсудим его в следующей статье.
4. Ресурсы
PEAR CVS Вы можете получить последнюю версию исходного кода PEAR здесь.
Ходер проект
Домашняя страница PHPDoc