最新PHP事情 ~新バージョンPHP4のご紹介とPHPのXML等への
応用について~
日本PHPユーザー会 http://www.php.gr.jp/
廣川 類 <[email protected]> <[email protected]>
日時:2000年7月22日(土曜日)13:50~15:10会場:大田区産業プラザ 小展示場
PHP4では…
より高機能に
セッション、OOP(クラス、Java、COM等)の強化
より安定に
リソース管理の強化:マルチスレッド対応、管理自動化
より簡単に
拡張モジュールの標準化、標準クラスの整備
PHP4の新機能
Zend Engine
複数Webサーバ対応
実行時コンパイラ
リソース管理強化
• マルチスレッド化
• 管理自動化
信頼性の向上
高速化
大規模アプリ対応
PHP
Zend Add-on 標準クラス(PEAR)
セッション機能言語強化(PHP3上位互換)
PHP4の新機能:セッション
セッション機能のサポート HTTPは状態を保存しない→セッションデータ保持が必要
PHP3ではPHPLIB等の外部ライブラリを使用
セッションIDによる管理→クライアント側に保存:(1)クッキー、(2)GET
セッションデータ保存(1)ファイル、(2)共有メモリ、(3)ユーザ定義(RDBMS等)
session_start(); // セッションを開始print($counter);$counter++;session_register(”counter”); // セッション変数を登録 // session_register($counter);は間違い!
PHP4の新機能:言語の拡張
foreach文
ヒア・ドキュメント
reset( $arr );while( list( , $value ) = each( $arr ) ) { echo "Value: $value<br>\n";}
foreach( $arr as $value ) { echo "Value: $value<br>\n";}
print <<<EOS Hello! This is a pen!EOS;
PHP3 PHP4
PHP4の新機能:外部オブジェクト
Javaのサポート:サーブレット、クラス
COM(Common Object Module)
import java.io.*;...File f = new File (filename);long size = f.length ();System.out.println (size);
$f = new Java("java.io.File",$filename);$size = $f->length ();echo "$size\n";
$word = new COM("word.application");$word->documents->add();$word->selection->typetext(”Hello!");$word->documents[1]->saveas("test.doc");$word->quit();
Java PHP4
while( $row = sql_get_row($result_handle)) { print query_result($row, "name"); query_free($row); }
PHP4の新機能:リソース管理の強化
Reference Counting リソースはポインタで管理され、コピーは行わない。
→高速化
参照されなくなったリソースは自動的に開放される。
→メモリの節約、安定性の増大
PHP3では必要。これを行わないとスクリプト実行終了時までメモリが開放されない。→PHP4では自動的に開放される。
PHP4の新機能:Zendアドオン
Zend Optimizer スクリプトコードの最適化により大幅に高速化
現在RC1版リリース中
Zend Cacheコンパイル後のコードをメモリ上にキャッシュ→コンパイル、ロードの時間を節約
Zend Compiler スクリプトコードの隠蔽が可能
→企業ユーザ、商用アプリ開発者にメリット
PHPと標準クラス
なぜクラスの標準化が必要か?
背景:
PHP組込関数ではWebアプリに必要な機能を実装できない。
→ユーザ関数として作成・配布
→同一機能・複数実装による非効率、コード仕様が不統一
クラス標準化の試み
PHPlib :PHP Base Library
PEAR
PHPと標準クラス:PHPLIBの概要
機能 DB抽象化: DB_Sqlクラス
PostgreSQL,MySQL,Oracle,ODBC,...をサポート
セッション管理: Sessionクラス
クッキーまたはGET変数を使用
認証:Authクラス チャレンジレスポンス認証、有効時間を指定可能。
パーミッション管理:Permクラス ユーザ保有権限(管理者、一般ユーザ)毎のアクセス管理
ユーザ管理:Userクラス
テンプレート:Templateクラス
資料:PHPlibドキュメント(翻訳版)http://www.php.gr.jp/php/phplib/
PHP
DB_sql
Session
Auth
Perm User
PHPと標準クラス:PEAR クラスの標準化 → PerlのCPAN, TeXのCTAN 機能
DB: DB抽象化クラス(MySQL,PostgreSQL,ODBC,...) FILE: ファイル操作
使用例
<?php // PEAR/DB サンプル$dsn = "odbc://nobody:nobody@test"; // ODBC// $dsn = "pgsql://nobody:nobody@localhost/test"; // PostgreSQL$obj = DB::connect($dsn); // データベースに接続$res = $obj->simpleQuery(“select * from product”); // クエリ実行while($row = $obj->fetchRow($res)){ // 結果を取得・表示 print join(":",$row) . "<BR>\n";}?>
DSNの指定方法: データベース種類://ユーザ名:パスワード@ホスト名/データベース
PHPとXML
SAXパーサ:EXPATApache標準、各タグに処理用のコールバック関数を定義
DOMパーサ:LIBXMLGNOME標準、DOM(Document Object Model)
XSLTパーサ(開発中)
Javaインターフェース: Saxon、Cocoon2
PHP拡張モジュール:Sablotron、Xalan/C(予定)
PHPとPDF
PDF (Portable Document Format) 電子文書フォーマットの標準
PDF-APIにより動的にPDFを作成可能
API:PDFlib,ClibPDF 日本語に対応(PDFlib:3.0以降,ClibPDF:2.0以降) PDFのマージには未対応
ライセンス: 非商用は無料、商用利用は有償
PHPとイメージ
イメージを動的に生成可能
画像フォーマット:PNG,JPEG,WBMP,XBM (,GIF) TrueTypeフォントを使用可能
イメージ情報の取得
サイズ等の基本情報の取得
EXIF情報を取得可能
Shockwave Flashファイルの動的生成
PHPとテンプレート
テンプレートの概要 HTMLテンプレートにはPHPコードを書かずにタグのみを記述
PHPスクリプトによりタグに値を代入し、代入後のHTMLを表示
複数のテンプレートクラスが既に存在
FastTemplate:Perlから移植 PHPlibのtemplateクラス
PHP4用テンプレートエンジン:作成中
$tpl = new Template(); // インスタンスを作成$tpl->set_file("mytemp","mytemp.ihtml"); // テンプレート読込$tpl->set_var("name","太郎"); // タグ"name"に値を代入$tpl->parse("output1","mytemp"); // テンプレートを処理$tpl->p("output1"); // 出力
私の名前は {name} です。
テンプレートmytemp.ihtml
私の名前は 太郎 です。
使用例
PHPに関する情報源
関連URL(英語) PHP http://www.php.net/ Zend http://www.zend.com/ PHPBuilder http://www.phpbuilder.com/ DevShed http://www.devshed.com/Server_Side/PHP/ PHP Function Table http://www. zend.com/phpfunc/
関連URL(日本語) 日本PHPユーザ会 http://www.php.gr.jp/ 広川のページ http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/
メーリングリスト 日本語ML:php-jp,ユーザ会,国際化
英語ML:[email protected] php-general,php-windows,php-i18n,php-db,php-dev,php-pear,php-kb
まとめと課題
PHP4の新機能
より高機能に:セッション、Java、COM等のサポート
より安定に:リソース管理の強化
より簡単に:拡張の簡単化、標準クラスの整備
今後の課題
PHP国際化
XML/XSLT、Templateのネーティブサポート
アプリケーションサーバー化