前回の記事では、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 のモジュールのほとんどはまだ開発中であるため、php4.05 でリリースされた pear のモジュールを以下に示します。一部の抽象クラスまたは基本クラス (Mail.php、Log.php、Cache など) に注意してください。 .php) はリストされていません。特定の機能を持つモジュールのみに焦点を当てています。以下はこれらのモジュールのリストです:
ベンチマーク/タイマーは、PHP コードの一部の実行効率をテストします。
Benchmark/Benchmark_Iterate は、ループ内で実行される関数のパフォーマンスをテストします。
キャッシュ/出力は、PHP スクリプトの出力をさまざまな方法 (ファイル、データベース、または共有メモリ) でキャッシュできます。このモジュールを使用すると、サーバーの負荷が増加する可能性があります。動的スクリプトをキャッシュして効率を向上させるには、Zend 最適化を使用することをお勧めします。このモジュールは適切ではない可能性があります。
キャッシュ/グラフィックスは、動的に出力する必要がある画像をキャッシュできます。
Console/Getopt コマンドラインパラメータ処理モジュール
CMD は、一部のシステム コマンドを実行するために使用できる仮想シェルです。
Crypt/CBC は、Perl Crypt::CBC モジュールのシミュレーションを実装します。
Crypt/HCEMD5 は Perl Crypt::HCE_MD5 モジュールの関数を実装します。
Date/Calc は日付関連の操作を実装します。
日付/人間暦変換
DB は統合された抽象的なデータベース操作層を提供し、バックエンドは複数のデータベースをサポートします。
ファイル/ファイル検索の検索
File/Passwd は、password、httppass、cvspassword などのパスワードのようなファイルを操作します
File/SearchReplace ファイル内の文字列を検索して置換します。
HTML/Form は HTML でフォームをすばやく作成できます
HTML/IT は、phplib のテンプレート関数と同様に、テンプレートのカスタマイズを実装し、ページを動的に生成しますが、シンプルで使いやすいものである必要があります。
HTML/ITXはIT向けの拡張機能を実装しており、テンプレートをより柔軟にカスタマイズし、より複雑な運用を実現できます。
HTML/Processor XML_Parserをhtmlファイルの操作に適用できるように拡張
HTTP/Compress は、Php の出力バッファリング メカニズムのラッパー クラスであり、バッファリングされたコンテンツを圧縮して保存することもできます。
Image/Remote は、イメージ全体をローカルにダウンロードすることなく、リモート システムのイメージ情報を取得できます。
Log/composite Horde は、複数のログ処理オブジェクトが同じログ イベントを取得できるようにするログ抽象クラスの拡張機能です。 Log ディレクトリの下にあるモジュールはすべて Horde プロジェクトの一部であり、それらのほとんどは抽象スーパークラスであることに注意してください。
ログ/ファイル ログ情報をファイルに書き込みます
Log/mcal は、ローカルまたはリモートのスケジュール管理ソフトウェア mcal のデータベースに情報を送信します。
Log/observer Horder の Observer のスーパークラス
Log/sql はログ情報を SQL データベースに送信します
ログ/syslog 情報を syslog に送信します
Mail/RFC822 電子メール アドレスが有効な rf822 電子メール アドレスであるかどうかを確認します
メール/sendmail sendmail を使用して手紙を送信します
メール/smtp は smtp サーバーを使用してレターを送信します
Math/Fraction はフラクタルの数学的計算を処理します。
Math/Util は最大公約数を計算します
NET/Curl は、PHP の Curl 拡張機能のオブジェクト指向ラッパーです。
NET/Dig は dig を操作して DNS 関連のクエリ操作を実行します
NET/SMTP は NET/Socket を使用して SMTP プロトコルを実装します
NET/Socket 一般的に使用されるソケット操作のパッケージ化を実装するユニバーサル Socket クラス
アラビア数字とローマ数字の数字/ローマ字変換
Payment/Verisign は Verisign ペイメント ゲートウェイとの対話を実装します。
Pear は、Pear モジュールの 2 つの基本クラス、PEAR クラスと PEARError クラスを提供します。
PEAR/インストーラ Pear インストール クラスは、Perl の CPAN モジュールと同様の機能を提供します。
PHPDoc は PHP コードから API ドキュメントを自動的に生成します
Schedule/at は Unix 上の AT デーモンと対話します。
XML/Parser は、php の xml 拡張機能に基づいた XML パーサーです。
XML/Render は、XML ドキュメントを他の形式 (html、pdf) に生成します。これは、最新の pear cvs コードにすでに html が実装されています。
XML/RPC は、php を使用して xml-rpc の抽象クラスを実装します。最新の pear cvs コードには、すでに xml/RPC/Server の実装があります。
ここで、主要なモジュールの使用方法を簡単に紹介します。より一般的に使用されるモジュールとその機能については、比較的完全で安定しており、Db、phpdoc、XML_Parser、IT、ITX などのいくつかの強力なモジュールで使用できます。
1.PEAR/インストーラー
このモジュールは、pear の他のモジュールのインストールとメンテナンスを完了します。ただし、現時点では、クエリなどのその他の機能しかありません。 Pear 自体は依存関係のチェックなどが完了していません。cpan のようなオープンなサイトはありませんが、Pear に参加する開発者の数が増え続けると、すべてがそこにあるでしょう。
使用構文: PEAR_Installer::installer($file)
$file は、インストールする必要があるモジュール ファイルです。ローカル ファイルまたは http:// または ftp などのリモート ファイルにすることができます。インストーラーは自動的にローカルにダウンロードします。通常、ファイルは gzip を使用してパッケージ化されますが、これにはパッケージが含まれている必要があります。 pacakage.xml の DTD ファイルは pear ディレクトリの下にあり、その名前は package.dtd
<?php
です。
require_once "PEAR/Installer.php";
$installer = 新しい PEAR_Installer;
//指定されたモジュールをインストールする
$result = $installer->install($package_file);
if (PEAR::isError($result)){
echo "$package_file のインストールに失敗しました!";
}それ以外 {
echo "$package_file のインストールが成功しました!";
}
?>
2.CMD
ほとんどの PHP アプリケーションは Web をベースとしているため、システム コマンドを呼び出すことはほとんどありませんが、一部の特殊なアプリケーションや必要に応じて、システム コマンドの直接呼び出しは避けるべきです。 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');
if ( $cmd->exec() ) {
エコー「成功!n」;
} エスル {
echo "エラー:" 。 $cmd->lastError;
}
?>
3.ベンチマーク/タイマーとベンチマーク/反復
これら 2 つのモジュールを使用すると、コードがどの程度効率的に実行されるかをテストできます。これはシステムのデバッグに役立つと思います。さまざまなアルゴリズムを試し、各アルゴリズムの実行にかかる時間を注意深く調べ、最適な方法を選択できます。 Benchmark/Timer は、動作中の 2 つの異なる時点間の時間差をテストします。 Benchmark/Iterate は、特定のコード (関数) を n 回実行するのに必要な時間をテストするための Timer の拡張機能です。
使用構文: Benchmark/Timer
Timer::setMarker($name) は、現在の時点を $name に設定します。
Timer::start() がテストを開始します
Timer::stop() はテストを停止します
Timer::timeElapsed($start = 'Start', $end = 'Stop') $start と $end の間の時間差を計算します。
Timer::getProfiling() は開始から停止までの経過時間を返します。
<?php
require_once "ベンチマーク/Timer.php";
$timer = 新しいベンチマーク_タイマー
$timer->start();
$timer->setMarker('マーカー 1');
$timer->stop();
$profiling = $timer->getProfiling();
?>
ベンチマーク/反復
Iterate::run()
指定された関数をループで実行します。これは可変パラメータを持つメソッドです。最初のパラメータはループ回数、2 番目のパラメータは実行される関数、3 番目以降のパラメータはテスト関数に渡されるパラメータです。
反復::get()
テストにかかった時間を返します
<?php
require_once "Benchmark/Iterate.php";
$benchmark = 新しい Benchmark_Iterate
関数 foo($string)
{
$string を出力します。」
";
}
$benchmark->run(100, 'foo', 'test');
$result = $benchmark->get();
?>
3.ファイル/検索
&glob ($pattern, $dirpath, $pattern_type='php')
$dirpath 内の $pattern に一致するディレクトリとファイルを検索し、一致するファイル名とディレクトリ名の配列を返します
&search ($pattern, $directory, $type='php')
$pattern ルールに一致するファイルを $directory で検索し、一致するファイル名の配列を返します (サブディレクトリではなくファイルのみであることに注意してください)。 $pattern は指定する検索条件で、通常は正規表現を使用します。デフォルトは php モードです。perl モードの正規表現を使用することもできます
。 search glob とは異なり、glob はサブディレクトリを再帰的に検索しませんが、search はサブディレクトリを再帰的に検索します。
<?php
require_once "ファイル/Find.php";
$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 パスワード、Apache の .htppass、CVS の pserver パスワード ファイルと同様のパスワード形式でファイルを操作します。コードの現在のバージョンから判断すると、実際にはこれらの passwd ファイルを管理するために使用することはできません (たとえば、シャドウはサポートされていません)。ただし、これを使用して同様のパスワード ファイルを作成することはできますが、もちろんセキュリティはそれほど高くありません。
使用方法:
File_Passwd($file,$lock=0)----------オブジェクトを作成します。 $file は、ファイルをロックするために flock を使用するかどうかを指定します。
addUser($user,$pass,$cvsuser)----------ユーザーを追加します。$user、$pass はそれぞれユーザー名とパスワードです。$cvsuser は cvs ユーザーの ID です。
modUser($user,$pass,$cvsuser)----------$user のパスワードを $pass に変更します。$cvsuser は cvs ユーザーの ID です
delUser($user)----------指定されたユーザー $user を削除します
verifyPassword($user,$pass)----------ユーザーのパスワードを確認します
close()----------今の変更をパスワード ファイルに保存し、パスワード ファイルを閉じて、ファイルのロックを解除します。
5.ファイル/検索置換
ファイル内の文字列を検索して置換する
方法
: File_SearchReplace($find, $replace, $files, $directories = '', $include_subdir = 1, $ignore_lines = array())は、オブジェクト
$find
を生成して設定します
検索する文字列。文字列または正規表現
$replace を
指定できます。$files
です
。
置換操作を実行するファイルを配列または「,」で区切った文字列で指定します
。
操作するディレクトリを指定します (オプション)。「,」で区切られた配列または文字列で指定します。
$include_subdir
ディレクトリ内で操作する場合、上記の操作をサブディレクトリ内で再帰的に実行するかどうかを指定します。値は 1 または 0 です。
$ignore_lines
無視するファイル行を指定します。これは配列です。この配列内の任意の文字列で始まるファイル行は無視されます。
getNumOccurences()
検索と置換が実行された回数を返します
。
最後のエラー メッセージを返す
setFind($find)
検索する文字列を設定します
setReplace($replace)
置換する文字列を設定
setFiles($files)
置換するファイルを設定します
setDirectories($directories)
置換するディレクトリを設定
setIncludeSubdir($include_subdir)
サブディレクトリの検索と置換も実行するかどうかを設定します
setIgnoreLines($ignore_lines)
「通常の」検索関数を使用する場合にのみ
setSearchFunction($search_function)
を使用します。
使用する検索関数を設定します。これは次のパラメータになります。
通常のデフォルト値。file 関数を使用してファイルの内容を読み取り、str_replace を使用してそれを 1 行ずつ置換します。
クイックは str_replace を使用してファイル全体を直接置換します
preg は preg_replace() を使用して置換します。この関数の要件を満たす正規表現を使用できます。
ereg は ereg_replace() を使用して置換します。この関数の要件を満たす正規表現を使用できます。
doSearch()
検索と置換操作を実行します
<?php
require_once "ファイル/SearchReplace.php";
require_once "File/Find"
// 現在のディレクトリを再帰的に検索します。
$find = 新しいファイル検索;
$all_php_files = $find->search("*php",".");
if ( PEAR::isError( $all_php_files ) ){
die "エラー: " . $php_files->getMessage() ."n" ;
}
if ( !count($all_php_file) ){
die "php ソース ファイルが見つかりません!n";
}
//pear の標準に準拠するために、<? の php フラグを <?php に修正します。
$replace = new File_SearchReplace('<? ','<?php ',$all_php_files);
$replace->doSearch();
if ( $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($name, $src)
addHidden($name, $value)
Display()
このフォームを表示
<?php
require_once "HTML/Form.php";
//ログインフォームを作成して表示する
$myform = 新しい HTML_Form("./login.php");
$myform->addText('ユーザー名','ユーザー名','');
$myform->addPasswd('passwd','ログインパスワード',20);
$myform->addHidden('retry','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 "メール/RFC822.php";
$rf822 = 新しいメール_RFC822;
$result=$rf822->paseAddressList('who;[email protected];[email protected]');
if ( $rf822->error ){
echo "エラー:$result";
}それ以外 {
リセット($結果);
for ($i=0; $i< count($result);$i++){
echo "電子メール:$result[$i]n";
}
}
?>
8.メール/メール送信
Sendmail は、UNIX/Linux で最も一般的に使用される MTA です。このモジュールを
使用すると、
sendmail を直接使用して、メールを送信できます。$params は、sendmail のパラメータを設定できます。 「sendmail_path」のみが有効で、レターを送信するための sendmail パス send($recipients, $headers, $body) を設定するために使用されます。 $recipients は受信者の電子メール アドレスです。これは、単一のアドレスであるか、または次の文字で区切ることができます。 RFC82 標準を満たしている限り、開くことができます。 $headers は送信するレターのヘッダーであり、配列のキーはヘッダーの名前 (件名など) であり、配列の値はヘッダーの値 (Hello! など) です。 。処理されたレターヘッドは次のようになります。 Subject:Hello! $body は、すべての MIME エンコードされた部分を含むレターの本文です。成功した場合は true を返し、それ以外の場合は PEAR_Error オブジェクトを返します
<?php
require_once "メール/sendmail.php";
$sendmail = new 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.メール/SMTP
現在、一部のサイトでは sendmail の使用が許可されていないため、PHP プログラムでメール送信機能を使用したい場合は、外部 SMTP サーバーを使用して対応する機能を完了できる必要があります。
使用法: このモジュールの使用方法は基本的に Mail::sendmail と同じです。このモジュールでは Net::SMTP モジュール Mail_smtp($params) を使用する必要があることに注意してください。
$params の有効なパラメータは次のとおりです。
「host」SMTP サーバー アドレス、デフォルトは localhost です
'port' SMTP サービス ポート、デフォルトは 25
'auth' smtp が認証検証を必要とするかどうか、デフォルトは false です
'usename' smtp 許可ユーザー名
'password' smtp 承認パスワード
send($recipients, $headers, $body)
<?php を
送信
require_once "メール/sendmail.php";
$params=array('host'=>'smtp.nightsailer.com','auth'=true,
'ユーザー名'=>'夜','パスワード'=>'123456');
$sendmail = 新しい Mail_sendmail($params);
$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>";
}
?>
10.スケジュール・日時
このモジュールは、UNIX 上の at プログラムのインターフェース
add($cmd, $timespec, $queue = false, $mail = false)
を提供します。
at コマンドを追加すると、
このメソッドは at プログラムのカスタム ジョブを生成します。
$cmd は実行するプログラムまたはスクリプトです。
$timespec はジョブの実行を開始する時刻です。形式は at で要求されるものと同じです。
$queue オプションのパラメータ。ジョブのキュー名を示します。
$mail オプションのパラメータ。ジョブ終了後に実行結果を報告する電子メールを送信するかどうかを示します。
show($queue = false)
at キューに表示されるコマンドは連想配列を返します。配列のキーはジョブ番号です。内容も配列 (実行時、キュー) です。
delete($job = false)
と一致するキュー名を持つキュー内のジョブ リストのみを返すように制限します。
指定された at ジョブを at キューから削除します。 $job は削除されるジョブ番号です。成功した場合は true を返し、それ以外の場合は false を返します
。
require_once "スケジュール/At.php";
$at = 新しい Schedule_At();
// ジョブを生成して追加する
$result = $at->add ('find / -type file -name core -exec rm -f {} ;','00:00');
if ( PEAR::is_Error($result) ) {
echo "ジョブを追加できません!n";
echo "理由: $result->getMessage() n";
出口;
}
// 現在のキューを表示します
$queue = $at->show();
if ( PEAR::isError($queue) ) {
echo "エラーが発生しました!n";
echo "理由:" 。キュー->getMessage()。
出口;
}
リセット( $queue );
while ( list($job, $cmd) = 各 $queue ){
echo "[$job]" . $cmd['runtime'] . "-" .$cmd['queue'];
エコー「n」
}
?>
上記はいくつかの PEAR モジュールの使用法です。詳細な手順については、これらのモジュールのソース ファイルを自分で確認するか、phpdoc を使用してこれらのモジュールの API ドキュメントを自動的に生成することができます。 phpdocについては次の記事で詳しく説明します。
4. リソース
PEAR CVS ここから最新の PEAR ソースコードを入手できます
ホーダープロジェクト
PHPdoc ホームページ