Tag : PHP
1 - 7 of 47
PHP系メモ:PDO関連
LoggixのデータベースドライバをネイティブObject Oriented SQLiteドライバからPDOドライバに移行しようかと考え中。これは将来的な汎用性やSQLite3対応も見込んで。(SQLite3はPDOドライバでしか動かない)
まーこのように書けば簡単にみえるが実際に移植するのは大変な大作業。根っこの部分だけに、ほとんど「作り直し」的な状態になる。
とりあえずPDO関連をピックアップ。
- The PHP 5 Data Object (PDO) Abstraction Layer and Oracle
- PDO: PHP Data Objects: OSCON 2008 - O'Reilly Conferences, July 21 - 25, 2008, Portland, Oregon
- PHP Tutorials Examples Introduction to PHP PDO
- SQLite Tutorial - SQLite with PHP 5 / SQL
- Js::TecNote -- J's Technical Note on Weblog --
- PDO(PHP Data Objects)とは : PHPとSQLite rakutoネット
- CakePHPがSQLite3に対応しにくい理由 - CPA-LABテクニカル
- SQLite3 - mikeo_410
- DB2 Database for Linux, UNIX, and Windows
Web技術系メモ:Webスキルのサイト「NETTUTS」
良いサイトを見つけたのでクリップ。
Web技術に関するスキルを紹介しているサイト。デザインも良いし、内容も洗練されていて良い。
その中で気になるエントリーをピックアップ。
Ubuntuでサーバー+OS Xクライアント関連
PHPオブジェクト指向関連
ちなみに「ASAP(エイサップ)」とは「As Soon As Possible」の略語。
PHPフレームワーク関連
PHP系メモ:テンプレートエンジンの話
技術評論社のサイト「gihyo.jp」にて、「連載:ZendFrameworkで作る『イマドキ』のWebアプリケーション」の連載が始まった。
その中で「フレームワークとテンプレートエンジン」という項目があり、
最近のフレームワークの傾向としては,テンプレートエンジンが用意されていないものが増えてきています。ZendFrameworkも独自のテンプレートエンジンを持たないフレームワークとしてリリースされました。PHPの場合,次のサンプルコードのように言語自体がテンプレートエンジンのようなものであり,出力バッファが組み込まれていることもあり,テンプレートシステムの必要性が低いからです。 ZendFrameworkで作る『イマドキ』のWebアプリケーション:第0回 PHPのWeb開発フレームワーク|gihyo.jp … 技術評論社
ということが書かれていた。
私はずっと以前からSmartyを代表とする「肥大化した独自記述採用のテンプレートエンジン」を批判してきた。PHP系雑誌やサイトで「Smarty、Smarty」とやたら取り上げられるのに嫌悪していた。まあ、「アンチSmarty」である。
関連:
この技術評論社のサイトで言及されている「テンプレートエンジン」と、ZendFrameworkや私がLoggixで採用している「テンプレートエンジン」とは本質が全く違う。前者は「独自記述言語」であり、テンプレートエンジンをフレームワーク化しようと肥大化していったものである。対してZend_Viewなどのクラスによるテンプレートエンジンは、PHPの記述をそのまま(X)HTMLに埋め込み、PHP標準の機能を使って(X)HTMLをブラウザに出力する前に処理結果などを埋め込んでバッファリングし最終的に纏めて出力する、という仕様である。もちろん私は断然後者派。
技術評論社のこのような知名度の高い方のレビューでも取り上げられるようになり、ようやくその方向性が正しいことが明確になってきた気がする。
PHP系メモ:KinoWiki関連
Loggix Projectで使っていたKinoWiki(KinoWiki.net)は2009年1月現在クローズしてあるのだが、ローカルでは継続して使用している。主な使用目的はLoggixのバグトラックと開発メモ。
ChangeLogはemacsのChangLogモードを使ってみているが、KinoWikiの掲示板プラグインをChangeLogで使えないかどうか考え中。
KinoWikiは開発が止まっているせいか、情報が極端に少ない。設計が奇麗でコードも美しくてカスタマイズがしやすいからもっと普及してもいいと思うんだけどなぁ。
最近チェックしたカスタマイズ参考サイト:
PHP系メモ:XdebugのWebフロントエンド「webgrind」
先日xdebugのフロントエンドツール「kcachegrind」の導入方法を書いたが、(↓)
このxdebugのWebフロントエンドツールである「webgrind」なるものをGoogle Codeで発見、早速導入してみた。(↓)
- webgrind - Google Code
- Webgrind - Xdebug Web Frontend | VT's Tech Blog
- WebGrind: web-based frontend for XDebug PHP profiling
上記画像は実際にxdebugのログを解析させた状態のものだが、一見して分かるように、非常によく出来ている。ソースを除いてみたが、非常にコンパクトに書かれていて、ファイルの構成もシンプルだが理にかなって整理されていて素晴らしい。
グラフにする機能など、トータル的な機能の豊富さはデスクトップアプリケーションであるkcachegrindに軍配があがるが、どの処理がコストがかかっているかをリスト形式で並べ替えてソート出来るなど、必要十分な機能は備わっているのでサッと見たい場合にはこちらのほうが気軽で良い気もする。
PHP系メモ:UbuntuでのXdebugとKcachegrindの導入
xdebugの入手先
環境
- OS:Ubuntu Linux 8.04LTS
- PHP:XAMPP 1.6.6 (PHP5.2.5)
1. STEP1:ビルドツールをインストール
Ubuntu 8.04ではそのままではXdebugをコンパイル出来ないので、ビルドツールをインストールする。
$ apt-get install php5-dev
2. STEP2:ダウンロード&ビルドする
$ wget http://xdebug.org/link.php?url=xdebug203 $ tar -xzf xdebug-2.0.3.tgz $ cd xdebug-2.0.3 $ phpize $ ./configure --enable-xdebug --with-php-config=/usr/bin/php-config $ make $ sudo cp modules/xdebug.so /opt/lampp/lib/php/extensions/no-debug-non-zts-20060613
3. STEP3:php.iniを編集
「/opt/lampp/etc/php.ini」をテキストエディタ(例えばgeditなど)で開き、以下の設定を一番下にコピペする。
[xdebug] zend_extension=/opt/lampp/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so xdebug.profiler_enable=1 xdebug.profiler_output_dir=/tmp
出力を時刻と関連付けたい場合は、さらに以下を追記する。
xdebug.profiler_output_name = timestamp
4. STEP4:XAMPPを再起動。
$ sudo /opt/lampp/lampp restart
でXAMPPを再起動。「http://localhost/xampp/」のメニューから「phpinfo()」をクリックし、xdebugが有効になっているかどうかチェックする。
インストールまわりでの参考資料:
- Introducing xdebug (←ここが結構参考になった)
- Documentation for: Xdebug 2 » Feature: Installation
- Xdebugを導入してみる - JavaのStackTraceが欲しい!
- Vmware:UbuntuでWebサーバを構築する
- Xdebug: Installation
解析ツールのインストール
Xdebugをインストールすると、PHPアプリケーションがブラウザからアクセスされるとログファイルが「/tmp」ディレクトリに「cachegrind.out.xxxxxx」などのようなファイル名で保存される。
このログファイルを見やすくビジュアル化して解析するには、[[KCacheGrind>http://kcachegrind.sourceforge.net/cgi-bin/show.cgi/KcacheGrindIndex]] が必要。Ubuntu 8.04の場合、「アプリケーション」→「追加と削除」から「全ての利用可能なアプリケーション」を選択→「kcachegrind」で検索し、インストールする。(↓)
インストール後は、「アプリケーション」→「プログラミング」から選択出来るになる。
その「プログラミング」メニュー項目にあるKCachegrindのアイコンをクリックして立ち上げて、以下のようにログファイルを読み込むとグラフィカルに解析情報を表示してくれる。
使い方などの参考資料
- PHP アプリケーションを高速に、より高速に、最高速にする、第 2 回: PHP アプリケーションをプロファイリングして遅いコードを発見し、診断し、高速化する
- Squash bugs in PHP applications with Xdebug
- Debugging PHP applications with xdebug
- PHPをより高速化するプロファイリングツールあれこれ
- 【PHPウォッチ】第11回 PHP4/PHP5にバグ修正版,高機能デバッグ・ツールXdebug登場
- Xdebug + WinCacheGrind での簡単 PHP プロファイリング
- Profiling PHP with XDebug and kCacheGrind (PDFプレゼン資料)
- the definitive Xdebug tutorial (チュートリアルPDF資料)


先日「JAM LOG : PHP系メモ:PDO関連」でLoggixのデータベースドライバをネイティブドライバからPDO[1]に移行しようかと考えている話を書いたが、重い腰を上げて着手した。
PDOにして何が嬉しいのかというと、
等々である。特にSQLiteに特化したBlogエンジン、というコンセプトで開発し始めたLoggixなので、新しいSQLiteにも積極的に対応して行きたい、ってのが一番の動機。
で、この一週間は忙しくて時間があまり取れない中、少しずつ合間をみて根っこのコアエンジンからテコ入れを始めた。これまでネイティブドライバベッタリで書いてしまっていたので書き直す部分が沢山出てきた。移行プランとしては、
という流れで。
取りかかって一番最初にぶつかった問題がセッションデータをデータベース内で管理する機能の移植。元々特殊な書き方で力技的に実装した機能だったのでなかなか上手くいかなかったが、汎用性のあるクラスをオープンソースで配布されているのを発見。
それでもそのままでは動かないので、これを改造して使う事にした。色々実験していてようやくセッション機能が動きだした。いやー嬉しい。根っこの部分が上手く移植出来たのであとは少しずつ地道な作業をやっていくだけ。頑張ろう。
余談だが、今回から開発環境をこれまでのメインのOS XとLinux(Ubuntu)に加え、Windows XPでも行う事にした。開発環境としては、Windows用に移植されたXAMPP for Winとgeditを使い始めた。これがなかなか好感触で、Linux上と全く変わらない。また、OS XやLinuxなどのUNIX系環境上だけでは見えないWindows上での不具合も見つかるので、Win環境も積極的に使って行こうと思っている。
PHP Data Objectの略。参考:PDO とは, PDOでサクサクDB開発:CodeZine ↩