phpDocumentorをインストールしたときのメモ
お仕事で、開発環境にphpDocumentorを入れようとしたのですが、苦戦したのでメモメモ。
phpDocumentorとは?
簡単に言うと、phpソースを読み込んでクラスや関数をドキュメント化したhtmlを生成してくれるツール
インストール
まずはこちらから最新版(09/02/02現在 phpDocumentor 1.4.2)を取得
いつものように展開するのですが、その前に、ここでポイント。
用意されているドキュメント生成方法は3つ(phpdoc.org:インストール方法より)あります。
pear
コマンドライン
ブラウザ
私の場合、pearは、開発環境が外部と通信できないためNG。ブラウザは、分かりやすいけど、毎回手動で更新になるというのであまりよろしくない。そこで、クーロンで自動実行できるコマンドラインを選択しました。
コマンドラインによるインストール
まずはtarファイルを展開して、リネームします。あ、リネームは個人的に気になるからするだけですw
$tar xvzf PhpDocumentor-1.4.2.tgz
$mv PhpDocumentor-1.4.2 PhpDocumentor
$cd PhpDocumentor
PhpDocumentorディレクトリ内にphpdocファイルがあるので、それに実行権限を加えます。
$chmod 755 phpdoc
で、あとはこいつを実行するだけなのですが、こいつがくせものでした。
まず、いくつかオプションがあります。
$./phpdoc -t (targetDir) -d (parseDir)
オプションの説明ですが、
-t : ターゲットディレクトリ。ドキュメントを生成するディレクトリを指定
-d : パースディレクトリ。解析をするディレクトリを指定
例えばこんな感じ
$./phpdoc -t /target/phpdoc -d /parse/inc
で、いざ実行してみると、どうやら途中エラーで止まっているようです。
・・・って言いたかったのですが、いざこのエントリーを書きながら実行してみると、通りました。(うはっ
なんじゃそりゃ・・・
まー、でもこのphpdoc自体の作りが面白いので簡単に解説しておきます。
phpdocの動き
一言で言うと、phpdoc は『shとphpが一つになったファイル』 です。(こんなの初めて><
上半分がshで下半分がphpという構成です。
ではどうやって動作するのか?
まずは、以下のように実行しているので、shとして動作します。
$./phpdoc -t /target/phpdoc -d /parse/inc
そしてちょうどshの終わりにexitしているため、エラーにはなりません。そこで終了するので、phpを描いてようが、秘め事を書いていようが、関係ないのですね。
そして、shの途中で、execコマンドで phpで自分自身ををたたきます。
記述はこんな感じ
exec $PHP -C -q -d output_buffering=1 "$0" "$@"
$PHPにphpコマンドの絶対パスが入ってます。$0 は自分自身のスクリプトの名前。 $@は全引数リストということで、execコマンドを約すとこんな感じ
/usr/local/bin/php -C -q -d output_buffer=1 ./phpdoc -t /target/phpdoc -d /parse/inc
これが実行されています。いろんなオプションがあって分かりにくいですが、今度はphpdocファイルがphpスクリプトとして動作しているわけです。
では、phpとして実行した場合に、上半分で書かれたshソースはphpによってどう処理されるのか?
それを、こいつが一発で解決しています。
ob_end_clean();
ぎゃー、こんなの使ったことねぇ><
関数自体はなんとなく知ってたけど、こんな使い方があったなんて。。。
いやー、書き方が良いか悪いかは別として、こんなテクニックもあるんですね。。。。
どういう利点があるんでしょうか?使いこなすのが難しそうです。
–09/02/03 追記–
生成されたhtmlの文字コードの問題があったので追記。
生成されたhtmlの文字コードがiso-8859-1なので環境に合わせて修正が必要です。今回は利用しているテンプレートがデフォルトであったため、PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/default/templates ディレクトリにある以下のファイルを修正します。
blank.tpl
header.tpl
index.tpl
top_frame.tpl
これらのcharsetを「iso-8859-1」→「Shift-JIS」に変更し、再度phpdocを実行すると、文字コードが修正されたhtmlが生成されます。
また、毎回あの長いコマンドをたたくのは面倒なので、一つのshファイルにまとめておきました。
ファイル名を updatePHPDoc.sh として
#!/bin/sh
phpdoc -t /target/phpdoc -d /parse/inc
とします。これでコマンドが
$sh updatePHPDoc.sh
となりスッキリしました。
–09/02/03 追記おわり–
当初のお話
実は、当初エラーが出ていた部分は、sh側で
FAILED: Bad environment variable $PHP (set to “/usr/local/bin/php”)
というエラーがでていたので、上記でも書きましたexecを約したコマンド
/usr/local/bin/php -C -q -d output_buffer=1 ./phpdoc -t /target/phpdoc -d /parse/inc
をソース内に加えて強引に実行してましたw
で、この話をしようかと思ったら、エラー出ないでやがる!w
まー、shのお勉強にはなったので、よしとするかー
Tags: [php](/tag/php), [phpDocumentor](/tag/phpdocumentor), [sh](/tag/sh)
« [「しりとる」微妙にバージョンアップ](/161/shiritoru_ajax)
[オレオレライフログを作る](/189/orelifelog_requirement) »
[画像未復旧: similar.png](http://blog.playispeace.com/img/similar.png) 関連ありそうなエントリー