スクリプト言語PHP攻略法

5,371 views

Published on

2000年5月23日 Project Blueで行ったPHP4紹介とデモ

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,371
On SlideShare
0
From Embeds
0
Number of Embeds
37
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

スクリプト言語PHP攻略法

  1. 1. Webとデータベースの連携プログラミング ~スクリプト言語 PHP攻略法~ 日時:2000年5月23日(火曜日)18:30~21:00 会場:日本オラクル株式会社 本社 12Fセミナールーム 日本PHPユーザー会 http://www.php.gr.jp/ 廣川 類 <louis@cityfujisawa.ne.jp> <hirokawa@php.net>
  2. 2. 1.PHPの紹介2.PHP4の新機能3.Webアプリ構築の実際4.PHP国際化5.課題とまとめ6.デモ(Linux)
  3. 3. Webアプリケーション 「Webブラウザ+Webサーバー+データベース」に より3層アプリケーションを容易に実現する。 →開発が容易 Webアプリケーションに必要な機能  ユーザ入力に応じて動的にコンテンツを生成。  安定性  ユーザ入力に対する迅速な応答  開発効率・メンテナンス性に優れること。(低コスト)
  4. 4. 動的Webコンテンツの実現方法 クライアントサイドスクリプト サーバーサイドスクリプト Webブラウザ側で実行 Webサーバー側で実行 サーバーへの負荷が低い 必要な機能をクライアント長所 によらず実現できる 実現可能な機能がブラウザに CGIの場合、サーバー短所 依存する への負荷がやや高い コードがユーザに見えてしまう実装 JavaScript, VBScript Perl-CGI, PHP, ASP
  5. 5. PHPと他のソリューション Web Web O/S サーバ ミドルウエア RDBMS 従来 WinNT IIS ASP SQL-Serverこれから Linux Apache PHP PostgreSQL シェア60%PHP+Apache+PostgreSQLは現在最強の組み合わせ
  6. 6. PHP:Hypertext Preprocessor の特徴  データベース連携アプリを容易に実現可能  HTML埋込型Webスクリプト言語 HTMLとの高い親和性。→開発効率が高い。  オープンソース コミュニティによる開発。無償で使用可能。  マルチプラットホーム UNIX系(Linux等), MS-Windows等で動作  WebサーバApacheとの高い親和性 Apacheモジュールとして高速動作、低負荷  各種データベース、ライブラリと接続・使用可能
  7. 7. PHP:言語としての特徴 Perl、Java、Cに似た記述 →親しみやすく、習熟が容易 ユーザ入力(POST,GET,クッキー)を自動的に 変数に変換 デバッグが容易 →エラー行と原因が表示される。 ユーザ関数やクラスによる機能拡張が可能 →有用な機能の共有化
  8. 8. CGI版とモジュール版の違い CGI CGI 出力結果 URLリクエスト Web プロセス ブラウザ サーバー 出力結果 ロード 子プロセス起動 CGI Apache Webサーバーと別プロセスで実行 プログラム モジュール →応答時間・サーバー負荷大 URLリクエスト Apache Web ブラウザ サーバー スクリプト PHP ロード PHP 出力結果 解析・実行部 スクリプトWebサーバーと同一プロセスで実行 mod_php →応答時間・サーバー負荷小
  9. 9. PHPとデータベース/ライブラリ データベース PostgreSQL MySQL ODBC SQL Server Oracle Sybase Informix DB2 アプリケーションライブラリ FTP 正規表現 XML Image IMAP4 Java POP3 (PNG,GIF) COM LDAP PDF SMTP
  10. 10. PHPのインストール ソースコードからインストール (1) PHP Webサイト(http://www.php.net/)から入手 (2) ApacheをDSO版でコンパイル (3) Apacheモジュール版PHP(mod_php)をコンパイル バイナリからインストール  各種Linuxディストリビューションに付属  RPMファイルによる配布 AlpHa FACTORY http://alpha.or.jp/
  11. 11. PHPによるプログラミング POST,GET,クッキー変数は自 動的に変数に変換される。http://localhost/hello.php?name=Taro hello.php <html> <head><title>test page</title></head> <body> Hello, Taro <?php echo “Hello, $name”; ?> エラー発生時は該当行を表示 </body></html>
  12. 12. PHPによるWebアプリケーション Groupware Skyboard UNIUS-Lite BBS ELIAS-LX phorum Database API NeoBoard w-agora phpDB PEAR/DB PHPlib
  13. 13. PHPの普及 15,000 1995 Rasmus LerdorfによりPHP/FI開発 PHP/FI日本語Webページ,日本語ML PHP/FI 2 1996 PHP/FI日本語マニュアル作成プロジェクト PHP/FI日本語パッチ 1997 PHP3開発(新開発体制へ移行) 50,000 PHP3日本語マニュアル作成プロジェクト PHP3 1998 PHP3日本語パッチ 1999 PHP国際化プロジェクト開始 150,000 「PHP徹底攻略」出版 2000 日本PHPユーザ会設立 PHP4リリース PHP4 2,000,000
  14. 14. PHPの開発体制 Stig BakkenRasmus Lerdorf PHP Manual Norway1995年PHPを開発 FAST Search and Transfer1996年PHP/FI2を開発San Francisco, USALinuxcare Inc. Egon Schmid PHP ManualSenior Open-source Researcher Germany SIX Offene Systeme GmbHAndi Gutmans Thies ArntzenZeev Suraski Oracle module1997年PHP3を開発 Germany1999年Zendを設立 CTO of Digital CollectionsIsraelCTO of Zend Technologies Ltd. Michael Widenius MySQL module Sweden CTO of MySQL
  15. 15. 日本PHPユーザ会2000/4 Linux Conference 2000にて設立記者会見 活動内容(WG) Web 設立趣旨 http://www.php.gr.jp/ PHPユーザ相互の情報交換および メーリングリスト コミュニティの健全な発展 プロジェクト別ML ドキュメント整備 背景 マニュアル、FAQ• 高性能Webミドルウエアへのニーズ増大 セミナー・イベント• オープンソースソフトウエアの発展 無償セミナ等 国際化 国内PHPユーザの増加 PHP4の国際化等
  16. 16. 1.PHPの紹介2.PHP4の新機能3.Webアプリ構築の実際4.PHP国際化5.課題とまとめ6.デモ(Linux)
  17. 17. PHP3の構成と課題 Web Server API Modules API Browser Apache PostgreSQL RDBMS CGI MySQL Oracle PHP Engine ODBC Resource Manager LDAP PDFClass Library Function Module IMAP XML Interface PHPLIB Executer GD 正規表現 Parser 問題点 PHP Script • マルチスレッド未対応 • Native APIがApacheのみ • 大規模コードでの速度低下 •セッション管理の欠如
  18. 18. PHP4の新機能Zend Engine PHP マルチスレッド化 複数Webサーバ対応 信頼性の向上 リソース管理強化 高速化 実行時コンパイラ 大規模アプリ対応 Add-on セッション機能 Zend Compiler 言語強化(PHP3上位互換) Zend Optimizer 標準クラス(PEAR) Zend Cache MySQLクライアントライブラリ
  19. 19. PHP4の構成 Web Browser Server API Modules API ApacheZend Add-in PostgreSQL RDBMS AOL Server IIS MySQL Zend CGI Oracle Optimizer ODBC Zend Engine LDAP PDF Zend Thread Safe Cache Resource Manager IMAP XML Function Module GD Java Interface 正規表現 Zend Compiler Executer Runtime Compiler PHP Script Class Library PEAR
  20. 20. PHP4の新機能:セッション セッション機能のサポート  HTTPは状態を保存しない→セッションデータ保持が必要  PHP3ではPHPLIB等の外部ライブラリを使用  セッションIDによる管理 →クライアント側に保存: (1)クッキー、(2)GET  セッションデータ保存 (1)ファイル、(2)共有メモリ、(3)ユーザ定義(RDBMS等) session_start(); // セッションを開始 print($counter); $counter++; session_register(”counter”); // セッション変数を登録 // session_register($counter);は間違い!
  21. 21. PHP4の新機能:言語の拡張 foreach文 PHP3 PHP4 reset( $arr ); foreach( $arr as $value ) { while( list( , $value ) = each( $arr ) ) { echo "Value: $value<br>n"; echo "Value: $value<br>n"; } } ヒア・ドキュメント print <<<EOS Hello! This is a pen! EOS;
  22. 22. PHP4の新機能:リソース管理の強化 Reference Counting $a=array(1,2,3); // (1,2,3)の参照カウンタ1 $b=$a; // (1,2,3)の参照カウンタ1→2、コピーは行われない。 $a=5; // (1,2,3)の参照カウンタ2→1 $b=0; // (1,2,3)の参照カウンタ1→0(データは自動的に破棄) メモリ節約 速度向上 リソース管理自動化 while( $row = sql_get_row($result_handle)) { print query_result($row, "name"); query_free($row); PHP3では必要。 } これを行わないとスクリプト実行終了時 までメモリが開放されない。 →PHP4では自動的に開放される。
  23. 23. PHP4の新機能:ライブラリ拡張の強化 PHP4では拡張機能の組込手順が統一され,共有ライブラリ化も容易に。 組込モジュール $ cd path-to-php-4.0 # PHP4のソースディレクトリに移動 $ tar xzvf foo.tar.gz -C ext/ # アーカイブ解凍 $ ./buildconf # 構築環境設定 $ ./configure [--options] # makefile等を作成 $ make install # 構築&インストール 共有モジュール $ tar xzvf foo.tar.gz # アーカイブ解凍 $ cd foo # モジュールソースに移動 $ phpize # 構築環境設定 $ ./configure [--options] # makefile等を作成 $ make install # 構築&インストール php.ini で extension=foo.so を指定すれば起動時にロードされる。
  24. 24. PHP4の新機能:Zendアドオン Zend Optimizer スクリプトコードの最適化により大幅に高速化 現在β2版リリース中 Zend Cache コンパイル後のコードをメモリ上にキャッシュ →コンパイル、ロードの時間を節約 Zend Compiler スクリプトコードの隠蔽が可能 →企業ユーザ、商用アプリ開発者にメリット
  25. 25. ベンチマーク: PHP4 対 PHP3 PHP/Zendα版(1999/10)にて実施 10.90.80.70.6 PHP30.5 PHP40.4 PHP4/Optimizer0.30.20.1 0 Sort Database Linux box, with a 100MHz Pentium CPU and 24MB of RAM
  26. 26. ベンチマーク: PHP4 対 ASP PHP/Zendα版(1999/10)にて実施 [s]504030 ASP20 PHP4 PHP4/Optimizer10 0 Sort Mandelbrot Loop NT4.0SP4+IIS4.0 P2-233 128MB RAM (PHP+ISAPI,ASP+VBScript)
  27. 27. 1.PHPの紹介2.PHP4の新機能3.Webアプリ構築の実際4.PHP国際化5.課題とまとめ6.デモ(Linux)
  28. 28. PHPとデータベースの連携 処理の流れ $conn = sql_connect ($hostname); // 接続をオープン $result = sql_query(”select * from tablename”,$conn); // クエリーを実行 while( $row = sql_get_row ($conn,$result)){ // レコードを取得 print query_result ($row, “name”); // カラムを表示 } 持続的接続 (Persistent Connection)  同一ホスト、同一ユーザの接続がすでにオープンされている場合は、 既存の接続を用いる。 → 特にOracleのように接続負荷が大きい場合に効果的
  29. 29. PHPと標準クラスなぜクラスの標準化が必要か? 背景: PHP組込関数ではWebアプリに必要な機能を実装できない。 →ユーザ関数として作成・配布 →同一機能・複数実装による非効率、コード仕様が不統一 クラス標準化の試み  PHPlib :PHP Base Library  PEAR
  30. 30. PHPと標準クラス:PHPLIBの概要 機能  DB抽象化: DB_Sqlクラス Perm User PostgreSQL,MySQL,Oracle,ODBC,...をサポート Auth  セッション管理: Sessionクラス Session クッキーまたはGET変数を使用  認証:Authクラス DB_sql チャレンジレスポンス認証、有効時間を指定可能。 PHP  パーミッション管理:Permクラス ユーザ保有権限(管理者、一般ユーザ)毎のアクセス管理  ユーザ管理:Userクラス  テンプレート:Templateクラス 資料:PHPlibドキュメントの翻訳が進行中 http://www.php.gr.jp/php/phplib/
  31. 31. PHPと標準クラス:PHPLIBの使用例 PHPlibの認証:Basic認証との違い  Basic認証ではカスタマイズ不可:有効期限設定、入力データ項目変更  パスワードがそのままネットワーク上を流れてしまう。 →チャレンジレスポンス認証:JavaScriptによりパスワードをMD5ハッシュ化 使用例 <?php // local.inc にてサブクラスを作成しておく // セッション・認証・パーミッション機能付ページをオープン page_open( array("sess"=>"Foo_Session","auth"=>"Foo_Callenge_Auth","perm"=>"Foo_Perm")); $sess->register("counter"); // セッション変数登録 print ++$counter; if($perm->have_perm("admin")){ // 権限チェック echo "あなたは管理者権限を保有しています。"; } page_close(); // セッション・認証ページを終了 ?>
  32. 32. PHPと標準クラス:PEAR クラスの標準化 → PerlのCPAN, TeXのCTAN 機能  DB: DB抽象化クラス(MySQL,PostgreSQL,ODBC,...)  FILE: ファイル操作 使用例 DSNの指定方法: データベース種類://ユーザ名:パスワード@ホスト名/データベース <?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"; } ?>
  33. 33. PHPとXML EXPAT Apache標準、各タグに処理用のコールバック関数を定義 LIBXML GNOME標準、DOM(Document Object Model) WDDX(Web Distributed Data Exchange) 受け渡しデータ用フォーマット:シリアル化 XML/XSLT 現状では未サポートだが、将来的にサポート予定。
  34. 34. PHPとPDF PDF (Portable Document Format)  電子文書フォーマットの標準  PDF-APIにより動的にPDFを作成可能 API:PDFlib,ClibPDF  日本語に対応(PDFlib:3.0以降,ClibPDF:2.0以降)  PDFのマージには未対応  ライセンス: 非商用は無料、商用利用は有償
  35. 35. 大規模プロジェクトへの対応 小規模~中規模のアプリケーション →HTML埋込型スクリプトPHPによる効率的な開発 中規模~大規模になると...  Webサイトレベルの管理が必要。  デザイン、スクリプトの分離  テンプレートクラス  アプリケーションサーバー Midgard-Project: http://www.midgard-project.org/
  36. 36. 1.PHPの紹介2.PHP4の新機能3.Webアプリ構築の実際4.PHP国際化5.課題とまとめ6.デモ(Linux)
  37. 37. PHPと国際化:日本語使用時の問題 ①フォーム情報 ブラウザ 漢字コード不明 文字化け発生⑥ HTMLまたは画像(バイナリ) Webサーバー PHP ⑤画像 内部データ(漢字コード固定) (バイナリ) ②クエリ送信 ④データ (漢字コード固定) (漢字コード固定) ③データ イメージライブラリ RDBMS
  38. 38. PHPと国際化:機能課題 変換 engine • ブラウザにより複数の漢字コード (SJIS、EUC等)が入出力される 1.PHP3用 → 文字化け発生 2. iconv(glibc 2.x) • 関数がマルチバイト文字に未対応 • 内部コード・入出力コード自動変換 (SJIS,EUC,UTF-8,...) • マルチバイト対応文字列関数 mbstrlen($str),... • マルチバイト対応正規表現関数 mbregex(),... • 適切なメールMIMEヘッダ・ボディーのエンコード • 全文検索エンジン(Namazu )
  39. 39. 国際化版PHPによるプログラミング 設定ファイル(php.ini/php3.ini)にて設定 i18n.http_output = SJIS ; 出力コード i18n.internal_encoding = EUC-JP ; 内部コード i18n.script_encoding = auto ; PHPスクリプトのコード i18n.http_input = auto ; 入力のコード i18n.http_input_default = SJIS ; 入力コードのデフォルト値(不明な場合) Tips  画像出力時は自動変換を無効にする。 i18n_http_output("path");  GET変数で日本語を渡す際にはURLエンコードを行う。 <A href="foo.php?name=<? echo urlencode($name) ?>">リンク</A>  POSTの入力コード(shift_jis<->euc-jp)の自動認識がうまくいかない場合: hiddenパラメータでダミー文字列を指定。
  40. 40. 国際化版PHP4の現状 PHP3は既に国際化を実施。ただし、本家へのマージは未了。 コード変換関数、マルチバイト関数を拡張モジュールとして提供 ftp://night.fminn.nagano.nagano.jp/php4/ から入手。  php-4.0XXX_jstring-1.0 : 日本語コード変換、マルチバイト対応関数、メール関数  php-4.0XXX_mbregex-1.0 : マルチバイト対応正規表現  php-4.0XXX_iconv-1.0 : iconvによるコード変換:glibc-2.x  php-4.0XXX_namazu-2.0 : 全文検索エンジンNamazu 入出力コードの自動変換は未サポート PHP4ではデフォルト文字コードを指定可能 (php.iniで指定) default_charset = "euc-jp"
  41. 41. 1.PHPの紹介2.PHP4の新機能3.Webアプリ構築の実際4.PHP国際化5.課題とまとめ6.デモ(Linux)
  42. 42. PHPの未来 国際化  どうやって本家にマージするか? XML/XSLT 大規模プロジェクトへの対応  Webアプリケーションサーバー化:Midguardプロジェクト  テンプレートエンジン 標準クラスの整備:PEAR
  43. 43. 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.zugeschaut-und-mitgebaut.de/php/ 関連URL(日本語)  日本PHPユーザ会 http://www.php.gr.jp/  広川のページ http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/ メーリングリスト  日本語ML:php-jp,ユーザ会,国際化  英語ML:xxx@lists.php.net php-general,php-windows,php-i18n,php-db,php-dev,php-pear,php-kb
  44. 44. まとめ PHPの特徴  親しみやすいスクリプト言語  データベース(PostgreSQLとの)との高い親和性  Apacheモジュールによる高速実行  オープンソースによる開発 PHP4/Zendによるさらなる高機能化 PHP国際化作業は今後も課題
  45. 45. PHPに関するデモ(Linux)(1)PHP全般(2)全文検索エンジン(Namazu)(3)テンプレート:PHPlib(4)認証、許可属性:PHPlib(5)データベースとの連携(PEAR/DBの使用例)(6)PDFドキュメントの動的生成http://www.cityfujisawa.ne.jp/~louis/apps/phpfi/samples/ にてコード公開(予定)

×