Ubuntu9.0.4でzfコマンド試してみた

遅ればせながらzfコマンド使ってスキャフォルディングってみようと思い立ち、以下のサイトを参考にさせて頂きました。

RADツールによるPHPアプリケーション速効開発 - Zend_ToolとZend_Application - (1/4):CodeZine(コードジン)
lllnorikolll@online » Zend_Tool_Framework – zfコマンドをMacOS10.5Leopardで使えるようにする

環境

OS: Ubuntu 9.0.4
PHP: 5.3.0
ZendFramework: 1.8.4

MacOS-LeopardのVirtualBox3.0.2上に構築したUbuntuで試してみました。

準備

もう参考サイトに書いてある通りなのですが、

% which php
/usr/local/bin/php

% cd /usr/local/bin/
% svn co http://framework.zend.com/svn/framework/standard/trunk/bin/

等として、必要なスクリプトを取ってきます。
この後、チェックアウトしたファイルの場所を変更し、zf.sh を zf にリネーム。

/usr/local/bin/ 配下に以下のファイルがあればOKです。

zf
zf.php

次に、インクルードパスが通ってるか確認。
今回ZendFrameworkの本体は、/usr/local/lib/php/Zend/ 配下に置いてあるので、

% php -i | grep include_path
include_path => .:/usr/local/lib/php => .:/usr/local/lib/php

でOK。(Zend/ はスクリプト内で指定してある)

実行

% zf show version

等打って、様子拝見。

ところが…

Warning: include_once(/usr/local/lib/php/Mail): failed to open stream: No such file or directory in /usr/local/lib/php/Zend/Tool/Framework/Loader/Abstract.php on line 90

とか、ズラズラーとWarningが嵐のように。
しかしwarningの後は、何事もなかったかのように

Zend Framework Version: 1.8.4

等と表示され、コマンド自体成功してるぽい。

なので、ソースをちょっと見てみる。
Zend/Tool/Framework/Loader/Abstract.php on line 90 を見ると、
include_once() があって、これがWarningの原因。

とりあえず周辺も見てみたが、どうもライブラリの中のファイルツリーを全部include_onceしてみる作り?のようだ。(詳しく追ってません)
で、ディレクトリも構わずinclude_onceしようとしてるからWarning出てる気がする。

なんでこうなってるのか、コメントを和訳してみても今一わからなかったので、とりあえず該当のinclude_once() に 必殺 @(エラー抑制子) を与えてやった。(バッドノウハウ?…とりあえずの暫定処置)

ひとまずこれでzfコマンドはおとなしくなってくれたので、スキャフォルディングってみる。

スキャフォルディング、そして戸惑い

% cd /var/www
% sudo zf create project zf_rad_sample
Creating project at /var/www/zf_rad_sample

これでスケルトンができてる。

構成は参考サイトに書いてある通りなんだけど、引っかかるのが、view内の記述にショートタグが使われてる事。
生成されるviewスクリプトはindex.phtmlとerror.phtmlなんだけど、error.phtml内を見ると、

<? if ('development' == APPLICATION_ENV): ?>

こんな感じに。
規約はどこにいったのでしょう?
http://framework.zend.com/manual/ja/coding-standard.coding-style.html#coding-standard.coding-style.php-code-demarcation
ここにバッチリ書いてあるんだけど、公式ライブラリで生成されるスクリプトがこれってどうなんですかね?

さらにUbuntuに惑わされる

さて、とりあえず上の様にして作成されたプロジェクトを使っていくので、ドキュメントルートを設定せねばなりません。

現在、/var/www がドキュメントルートなので、/var/www/zf_rad_sample/public に変更してやる必要があります。

httpd.confを編集しようと思い、開いてみてびっくり。というか、前回php5.3.0をビルドした時からそうだったのですが、httpd.confの中身がほぼ空。

うーむ、なんでこれで動いているんだろうと思いつつ、

DocumentRoot "/var/www/zf_rad_sample/public"

httpd.conf内に追記してapache再起動。
phpinfoで確認したが、ドキュメントルート変わってない。


ひとしきり悶絶した後、原因が判明。

UbuntuDebian系のディストリビューションで、RedHat系とは様々な設定が異なるとの事。
httpd.confに関しても、実は上位の設定ファイルとして「apache2.conf」というファイルがあり、基本設定はそこに書いてあるらしい。

つまりapache2.confの設定で、変更したい箇所だけhttpd.confに書けば上書きされるという事みたい。

そして上書き用の設定ファイルはhttpd.confだけじゃなく、ホストの設定は

sites-available/

というディレクトリの中にある。
この中に、defaultという設定ファイルがあったので開くと、VirtualHostの設定が書かれていた。
ここのDocumentRootを書き換える事でようやく動きました。


そのほか

php.iniをいくら書き換えても反映しない、等、色々なイベントがありましたが、なんとか動作。

(phpinfoで見る Configuration File (php.ini) Path 項目に値があっても、Loaded Configuration File がNoneになっており読み込めてなかったのが原因。
httpd.conf内にPHPIniDirディレクティヴを設定する事で解決。
更にCLIの方は、

php -i | grep Configuration File

で表示されているパスの階層に、php-cli.ini という名前でファイルを置いてやればcli用にカスタマイズされた物を読み込ませる事ができた)


という事で、TODO: スケルトンが生成したソースを読む。