blogPHPでWEB+DBシステムの開発をやっています。先日ご案内したCakePHP本がいよいよ登場します。タイトルは「CakePHPガイドブック」です。ベタな名前ですが、あえて奇をてらわず、定番となる本になって欲しい!という執筆陣の思いが詰まっています。カバーもシンプルなデザインになっているのでオフィスに置いて頂いても違和感無いかと思います。10月末頃には書店に並ぶそうです。見かけたら一度手に取って頂ければ嬉しいです。私自身も初めての書籍なのでとても楽しみです。5分24秒PHPソースからドキュメントを生成する主要な3ツールを試してみました。どのツールもそれほど深くは調べていないのでインストール+アルファ程度の設定変更で試しています。環境はCentOS4.4+PHP5.2.3です。phpDocumentorPHPでできたツールです。pearコマンドでインストールできることもあって、PHPのドキュメントジェネレータとして人気があります。インストールpearコマンドでインストールできます。phpdocumentorドキュメント生成phpdocコマンドで生成します。ドキュメントを生成するだけなら設定ファイルの変更は不要です。PHPDocに代わるAPIドキュメント自動生成ツールDoxygenC++でできたツールです。DoxygenはC/C++、Javaをはじめ様々な言語についてドキュメントを生成することができます。どちらかと言うと、C/C++、Java、Pythonがメインのツールですが、PHPでも十分なドキュメントを生成することができます。インストールCentOS4用はRPMがあるのでyumコマンドでインストールできます。DoxygenただRPMは1.3.9ですので、最新版(1.5.3)がよければソースからインストールします。installドキュメント生成まず設定ファイルを生成します。-gで生成する設定ファイルのファイル名を指定します。ファイル名を指定しなければDoxyfileという設定ファイルがカレントディレクトリに生成されます。[config]次に設定ファイルを編集します。下記は最低限変更した方が良いと思う項目です。NOドキュメント生成コマンドを実行するとドキュメントが生成されます。Doxyfile[参考サイト]Doxygen[本家]Doxygen[日本語訳]PHPXRefPerlでできたツールです。phpDocumentorやDoxygenとは少し毛色が異なり、クラス図などは表示されません。上記2ツールはクラス構造などをドキュメント化しますが、PHPXRefはソースコード自体をドキュメント化するのを目的としています。Utilityから最新版ソース(0.7)をダウンロードして展開するだけでokです。設定ファイルを編集します。展開したディレクトリ内にあるphpxref.cfgが設定ファイルになります。ドキュメント出力ディレクトリ(省略すればカレントディレクトリに出力)OUTPUT=docドキュメント生成コマンドを実行するとドキュメントが生成されます。出力サンプルCakePHP1.1.17.5612のソースを各ツールで出力してみました。phpDocumentorDoxygenPHPXRefクラス構造を確認するならDoxygenが、ファイル構造を確認するならPHPXRefが良さそうです。Doxygenにはクセがあるようで、PEARパッケージのようにファイル名とクラス名が異なる場合は上手く生成ができませんでした。AdSenseにモバイル版が登場しました。通常のAdSenseではJavaScriptを使って広告を表示するのですが、携帯ではJavaScriptが使えないので、PHPやPerlなどサーバ側で実行する言語で記述します。AdSenceサイトではPHP/Perl/JSP/ASPのコードが用意されており、モバイル向けAdSense設定を行うとそれぞれのコードが表示されます。IDや広告フォーマット、HTTPリクエスト(HTTP_USER_AGENT等)などを専用変数に設定して、最後にリモートにあるPHPコードをrequire()しているだけです。コードを見て気になる点があったのでメモしておきます。$_SERVERにキーが無いことを想定していない$_SERVER[‘HTTPS’]や$_SERVER[‘HTTP_REFERER’]など値が存在しない可能性があるものをそのまま参照しています。index」が発生します。[対応策]isset()やempty()で連想配列にキーが存在するかどうかを確認します。単純に回避するなら[@]をつけてエラーメッセージの出力を抑制する方法もあります。require()でリモートスクリプトをインクルードPHP5.2.3でコードを実行したところ、以下のメッセージが表示されました。17これはallow_url_includeディレクティブがoffになっているために発生します。allow_url_includeはPHP5.2.0からは追加されたもので、これがoffになっているとリモートにあるスクリプトをinclude()やrequire()でインクルードすることができません。allow_url_includeはデフォルトはoffとなっているので、そのままだとこのコードは動作しません。対応策としては3通りの方法があります。allow_url_includeをonにするallow_url_includeをonにすればこのコードは動作します。このディレクティブはセキュリティリスク(RFI等)を回避するためにoffにされているものなので、できればこの方法は取らない方が良いです。allow_url_includeはphp.iniやhttpd.confでのみ設定が可能なので、共用サーバなどでは設定が変更できないかもしれません。file_get_contents()でリモートスクリプトを読むfile_get_contents()でリモートスクリプトを読み込む方法です。file_get_contents()は単にファイルを読み込んでその内容を返すだけなので、allow_url_includeの影響は受けません。あとは読み込んだスクリプトをeval()で実行しようと思いました。eval()でエラーが発生しました。「<&php」「&>」が引っかかっているようです。対応しても良いのですが、これはこのまま放置。リモートスクリプトをローカルに置くrequire()で読み込んでいるスクリプトをローカルに置いてしまいます。require()でローカルのファイルをインクルードするようにします。すればallow_url_includeの設定に関わらずスクリプトを実行できます。ちなみにリモートスクリプトは以下のようになっています。errorが発生してスクリプトの実行が止まってしまいます。include()は読込ができなくてもWarningが出るのみです。広告は最悪表示されなくとも問題無いので、include()(もしくは@include())を使った方がより良いでしょう。allow_url_fopenをonにしておく最後に大事なこと。どのような対策を取るにせよallow_url_fopenはonである必要があります。これはリモートスクリプト自体がfopen()でリモートファイルを読みに行っているためです。allow_url_includeをonにしたところでallow_url_fopenがoffだとリモートファイルのインクルードは動作しません。allow_url_fopenはデフォルトではonになっているので問題無いかと思いますが、上手く動作しない場合はご確認を。AdSenseのPHPでの使用法について見てきました。各言語用にコードが用意されているのは素晴らしいことなのですが、つまづきそうな点が幾つかあるので注意が必要です。あとデザインですが、シングル広告でもかなり画面幅を取ります。控えめなパターンがあると嬉しいです。