おはようございます。雨の日は髪がヘナッとなって気分が悪いbGです。 今の会社に入ってまだ1ヵ月ぐらいなんですが、一緒のチームの人が寛大なので開発方法におれのわがままを取り入れまくってもらって軽くアツイです。

わがままというのはPHPほぼ素人のおれが、「MVC意識したフレームワークを作ってそれでやりませんか」みたいなことを言ったわけです。 一回ベタでやり始めるとヘボイなりの”資産”(関数満載のincludeファイルとか)ができちゃってそれを手放さなくなって寒い方向に行きそうだったので無茶承知で言いました。 そんな暴言を許してくれるんだからその人はズバ抜けて寛大と言えましょう。

フレームというぐらいなのでまず単に枠(ファイルの配置とかの取り決め)を作ります。 そのあと以下のようなWebアプリに必要な処理を用意していきます。

・エラーの処理 ・ログの処理 ・Requestの処理 ・Templateの処理 ・Databaseの処理

PHPの場合はTemplateはSmarty、DatabaseはPEAR::DBなんぞを使うので本当に枠だけって感じになります。

一番悩むのは”DBとの繋ぎ目をどうするか”です。 コレ、普通にやってるといきなり感じると思うんですが、 「データベースって何だよ!全然OOPじゃねーじゃん!」 とか思ってしまいます。感覚的に全然違うじゃん!と思って調べてみるとそもそも

プログラム :OOP(Object Oriented Programing) データベース : DAO

で全然考え方が違うっ! 単純に例を考えると、一つの商品に対応するItemsクラスを作るとする。DBにはItemsテーブルがあるとして、ItemsクラスはItemsテーブルのカラムに対応するプロパティを持っている。 ここで1000個のItemsオブジェクトを生成するとデータベースにSQLを1000回投げることになる。そんなもんベタ書きで一回のSQLで1000個持ってくりゃいいじゃねーかって話になる。

問題はそんな単純なことじゃないかもしれないけど要するにかなり厄介らしい。PHPでもそのへんをうまくやってくれる(予定)のDB_DataObjectというのがあるがまだこなれてないらしい。PerlのClass::DBIは結構使われてるのに。 「SQLがムカつくんですよ」 と会社の人に言ったら単にSQLがわかんなくて苦労していると思われた。この辺をいきなり導入するのはちょっと無謀か・・・。UML一辺倒の風潮に警鐘、日揮情報

 そもそも、DOAの手法は、データ分析、リレーショナル・データベースの設計から実装、メンテナンスまで一貫したモデル駆動型開発として業務系システムを構築する際に活用されており、現在でも多くの開発者がこの手法を採用している。一方、オブジェクト指向言語を使うOOPは、プログラムの部品化や再利用を想定し、データとその振る舞いをカプセル化してしまう。このため、データを独立させるDOAとOOPを融合させることは不可能ではないものの、煩雑な手続きを必要とした。同社ではUML一辺倒の風潮に警鐘を鳴らす意味も込めて、「オブジェクト(O)-リレーショナル(R)マッピング」技術を実現する製品を投入し、自社で開発したアドオン製品を加えて、1つのソリューションとすることで、ソフトウェア開発の方法に新しい道を示そうとしている。

 携帯用のページを作ってみました。 携帯のブラウザじゃUTF-8表示できないみたいなんで、単にPHPでEUC-JPに変換しただけ。

携帯用ページ http://p0t.jp/mt/i.php

 PHP開発をはじめて2週間程度経過した時点での問題点などを・・・。

■いいところ

・組込み関数がそろってる ・設置が簡単(Apache設定やパーミション設定) ・配列と連想配列の書き方が同じ! ・PHPDoc!

■気になるところ

・php.iniにかなり依存 ・ライブラリがあんま枯れてない(PEAR内にも平然としょぼいバグとか) ・多重継承、オーバーロード?、複数コンストラクタが使えない

 PHPを勉強しなきゃならないので興味無い人には一生糞の役にも立たないことを書きまくります。

■PerlユーザーのためのPHP

PerlやってたんでまあPHPもそんなにかわらんだろうってことでとりあえずPerlでいうHTML::Templateみたいなもんはどれなのか探しました。(CGIモジュールはPHP自体に入ってるようなもんっぽいです) そもそも「PerlはHTMLの中に書けないからTemplate使うだけでPHPならいらねーじゃん」っつーのがあるかもしれません。おれ自身も「そんなことはないっ!MVC最高!」とか実感が持てるようになったのは結構最近の話。PHP界でそーゆーのを探すといきなりSmartyという奴が見つかりました。PHP標準テンプレート!とかどっかにかいてあったので有名なんでしょう。それ以前に相当良い名前してるところが気になる。すっごいスマーティ。

まとめ ・CGIモジュールの機能はほどPHP本体にある。 ・Template-Toolkit(Perl) = Smarty(PHP)

Smartyをインストールといっても単なるPHPのクラスなので適当なところに置いてパス通すだけです。

公式ページからダウンロード。 適当なところに解党してlibsフォルダを好きなとこにコピー 参考 – http://www1.plala.or.jp/AGL/proevo/PHP/install/smarty_2.5.0.html

$ cd /tmp
$ tar -zxvf Smarty-2.5.0.tar.gz
$ cd Smarty-2.5.0
$ mv libs /usr/local/lib/php/Smarty

Smartyへのパスをinclude_pathに追加する。 include_pathはphp.iniで設定します。 Windowsなら c:\WINNT\php.ini とかで UNIXなら /etc/php.ini とか /usr/local/lib/php.ini とかにあります。

include_path = ””.:/usr/local/lib/php:/usr/local/lib/php/Smarty/libs”” (↑UNIXの場合の設定)

Apacheを再起動してphp.iniの設定を反映。

/etc/rc.d/init.d/httpd restart

前から気になってたんですけど左のBBSの内容とかが現在のモノじゃなくてズレてくるんですよ。それって作ってる方にとっちゃ、「まあ、この仕組みだからこうなるわな」とか思いますけど、見る方には全然関係無いっつーか「これズレてね?gm(ゴミ)」で終わりなんじゃないのかと。

今まではMovableTypeのプラグインとして作ってたのをPHPのクラスに変えました。自分で作ったBBS用のMTプラグインと同じぐらいこのクラスも使い道がナイッ。

WindowsでApache1.3.xとPHP4を使うとき、 AddModuleがいっぱい書いてあるあたりの上に ClearModuleList と書いてあった場合、 AddModule mod_php4.c と改めて書かないとmod_php4が読み込まれないゾ

日本国民のうち32人ぐらいはこれでハマッてるはず。

次の会社ではPHPをやるらしいのでさっそく勉強。 適当にPHPを書いてにせマックにアップ。 とおもったら山の如くまったく動きやしない。そりゃそうだPHP入れてねーもん。サーバーからそんな感じの突っ込みが帰ってきたので入れてみました。

Apache2とPHP4 PHP本家のマニュアルによるとApache2ではPHPは正式サポートしてませんよ。・・・らしい。 勘弁してくれよ!とおもったけれど普通にPHPを入れた後httpd.confに下記を追加したら動きました。

AddType application/x-httpd-php .php .phtml AddType application/x-httpd-php-source .phps

昨日、新たにPattyにWebスペースを設定しました。 1年ぐらい前から希望者には適当にWebスペースを貸してます。 貸すと http://p0t.jp/~user/ って感じのURLになる。 一応なにができるのかっていうのをここにまとめときます > 借りてるものども

■サーバ環境 OS:Redhat Linux9 Webサーバ:Apache2系 回線:ADSL12M

■利用できるソフト等 CGI
○ SSI
○ PHP
○ ユーザー認証(.htaccess)
○ SSL(自己証明書)
○ データベース(PostgreSQL、MySQL)
希望者 メール(ユーザー名@p0t.jp)
希望者 MovableType
希望者

ソフトはそれぞれの最新版にどんどんかわってっちゃうと思ってください。 あと、このソフト入れろ!とかは要望に応じます。 Webの容量は~ギガとか使わなきゃ適当でいいです。つーかファイル置き場とかはpotmenあるのでそっちへ。 あと独自ドメイン取得とかも面白いんで相談乗ります。

 Linux+Apache+MySQL+PHPのコンボネーションズをLAMP環境とかいうらしいですが、おれのページはPostgreSQLだからLAPPかよ!それに最近CGIばっかりだからLAPCか?それともPerlだからやっぱLAPPか!?なんでキレてんのかっつーとMySQL入らねーからだよ・・・・・・・・・・・っっっ!!!カイジ風に書いても動かねぇもんはうごかねぇ!そりゃMySQLメーリングリストにも入るっつーの。