社内の開発方法標準化に取り組んでいます。

基本的にPHPでもオブジェクト指向開発&標準的なツール・ライブラリを使おうよってことで進めてるんですが穏やかに民主的に進めようとすると全然決まりませんな。

今更なにあたりまえのこと言ってんの?と思う人もいるかもしれませんが、結構多いんですよ、 「ファンクションベースで一から全部書くべきだ!」 とか 「オブジェクト指向開発は導入コストがかかりすぎる!」 といった反論に出会うことが。

そんな議論に付き合って半年ほど様子を見てきましたが、俺が責任者になったからにはそんなことを言う奴はフライス盤で右腕を切り落としてやる!

とりあえずPHPに関するところはこんな感じで行くことにします。(守らない奴はRS232Cケーブルで首を(略))

・フレームワーク(検証中)  ・Mojavi ・データベースコネクション  ・PEAR DB ・テンプレートエンジン  ・Smarty ・エラーハンドリング  ・PEAR PEAR ・O/Rマッパー  ・PEAR DB_DataObject ・Unitテスト  ・PEAR PHPUnit ・ユーザー認証(検証中)  ・PEAR LiveUser or PEAR Auth ・入力検証(検証中)  ・PEAR HTML_QuickForm ・ロギング(検証中)  ・PEAR Log or syslog ・データベース  ・MySQL4.0.20

そして2つのプロジェクトで試してみて良い感じだったのでPHPUnitによるテストファーストも必須にしました。 プロジェクトを成功させるにはこんな決めれば済むことはさっさと決めてしまって、メンバーのモチベーション管理や顧客とのコミュニケーションに時間を使いたいものです。

今後、この案が本当に通るのか、とか実際にやってみたら糞駄目で逆に左腕を切り落とされたとか、見守りつつ書いていこうと思います。PHPで開発をしている人は普通この辺の標準化をどうやって行っているか知りたいもんです。

PHP小ネタ。

PATH_SEPARATORという定数がある。これはWindowsだと””;”“、UNIXだと””:”“になっている。 何に使うかというとinclude_pathのセパレータとかに使う。

ini_set("include_path", ini_get("include_path").PATH_SEPARATOR."lib/");

IRCでariaが「Amazonで検索すると価格だけ出るようようなものができないか」という話をしていて、興味があったのでAmazonのWebサービスについて調べてみました。

PEAR XML_RPCを使ってみようと思ったんですが、よく見たらAmazonが提供するAPIはSOAPとRESTでした。AmazonのREST APIはパラメーターにxslも指定できるのでxslを用意するだけでいい感じの表示を得られるんですがやはりPHPで受け取ってパースすることに。

しかし作ろうと思ったとき何故かPEARのサイトが落ちてたのでリクエストの結果のXMLはxml関数でパースしました。(後日試したところPEAR XML_Treeは日本語文字化けした。みんな普通は何でパースしてるんだろう?)

少し面白げだったのでSmartyのキャッシュ機能とPEAR Pager_Slidingを使って価格調べ専用検索を作ってみました。

AmazonPriceSearch

Smartyのキャッシュ機能、強力でした。この場合、カテゴリー名・検索ワード・ページ番号を繋げてキャッシュIDにしてあります。キャッシュがある場合はバックエンドのWebサービスやDBにアクセスしないで表示するので相当パフォーマンスに影響あると思います。

Amazon Hacks 世界最大のショッピングサイト完全活用テクニック100選
ポール・ボシュ 篠原 稔和 ウェブ・ユーザビリティ研究会
オライリー・ジャパン (2004/04/24)
売り上げランキング: 2,320
通常24時間以内に発送します。
おすすめ度の平均: 3.2
4 Amazon を使いこなすために
5 アマゾンをもっと使いこなすための1冊
1 翻訳する価値があったかどうか疑問

来週PHPプロ・スタッフの面接があるのでかなりの確率で質問されるというWebアプリケーションのセキュリティに関して調べてみました。

■抑えておく用語

・XSS(クロスサイトスクリプティング) →フォームから入力した値がHTMLの一部として実行される場所で悪意あるスクリプトを動かしたり。具体的にはクッキーをパクッて他人のセッションを奪ったり。

・SQLインジェクション →SQL文を流し込むこと。例えばフォームの値をwhere句の条件に使う場合、入力フォームに”“1 or id = 2”“と入力したら・・・。

"update foo set cost = 100 where id = ".$_POST["id"];

・セッションハイジャック →他人のセッションを乗っ取ること。セッションIDの入ったクッキーがXSSによって盗まれたり、そのIDを使って成りすまされたり。

■対策

・GETパラメーター改竄 →GETの使用を最小限に留める。(Action=xxx的な処理の振り分けのフラグだけとか)

・HIDDEN値改竄(そしてAction値をフルパスに変更) →HIDDENを使わない。セッションにする。

・XSS →POSTにhtmlspecialchars。

・セッションハイジャック →セッションIDを単純な値にしたりCookieが盗まれなければ大丈夫。PHPのデフォルト設定ならそこそこ安心?(セッション有効時間24分、セッションIDはCookieに保存、Cookieはブラウザ閉じたら削除)

・SQLインジェクション →フォーム値の地道なValidationしかない?

少し前のPHPアプリのソースを読んでいて気付いた。

PEAR DBのfetchRowメソッドは1.5.0RC1を境にDB_common(DB_pgsqlとか)からDB_resultに移ってる。

1.4.0の場合

$row = $db->fetchRow($result);

1.5.0RC1以降の場合

$row = $result->fetchRow();

1.4.0まではなんでDBコネクションのオブジェクトのメソッドがfetchRowしてたんだろう・・・。古いスクリプトを今のPEAR DBで動かしたらfetchRow()が無いって。「えぇ、えぇ、無いですよ」

BBSの次のバージョンを作ってる関係でHTML::Templateじゃなくて評判の良いTemplate-Toolkitというヤツを使ってみました。

最初 Template::Toolkit っていうモジュールかと思ってCPANで必死に検索してしまいました。単に Template だったとは・・・_| ̄|○

使ってみたらこれが(Template-Toolkitが元祖なんでしょうが)PHPのSmartyとほとんど同じ!

[% var | foo | bar %]

みたいにパイプで修飾子を繋げていくとこも一緒なのでまったく違和感無く使えました。やっぱり変数の見た目をテンプレ側の修飾子で変えるやり方は(MVC的に)理に適ってて気持ち良い。

最近何故かPerl仕事が多くてPerl熱が上がって来てます。(PHPの開発チーム所属)

やっとBlogのコメントスパムが落ち着いてきたと思ったら、UO BBSの方にunkスパムが・・・

!!最新着メロ厳選リンク。jpop・洋楽なども。がんがん行こうぜ!! http://click-no1.jp/adlink.php?adid=104458 ココをクリック!!

IP制限を付けようと思ってソースを見出したら何か気に食わなくなって全面修正しだしてしまいました。 Perlでも分かりやすく1アクション1クラスにしてControllerクラスに振り分けをさせたいんですけど、

use $class

ってできないんですな。少し調べると下記の方法で動的にクラスをロードできるらしい。

Clouder::Blogger: require, import instead of use

perl でモジュールを use しますが、時としてクラス名を動的に生成して use したい時があります。 そんなときは以下のようにします。

my $class = "Foo::Bar::$baz";
eval qq(require $class; import $class);

””::”“を””/”“にしてケツに””.pm”“をくっ付けるって何か嫌だなぁ・・・。他に方法無いものか。

「あと2時間でTSV(タブ区切りファイル)ファイルにデータを吐くお問い合わせCGIリリースして欲しいんだけど」

みんなPerl嫌がる&知りたくも無いということでPHPの開発チーム所属なのに大抵おれに仕事が来ます。

それにしてもちょうどData::Tsvとかいう自作モジュール持ってるおれって凄くない?自作モジュールなんて3つぐらいしか持ってないのに。しかもCSVじゃなくてTSVかよ!(UOBBSの時作った)

PHP usersのMLで白目剥いちゃってるような質問が!

初歩的な質問で申し訳ございませんがどなたか教えてください。

先日、ウィルススキャンを行いPHPに関していくつかの脆弱性を 検知しました。 PHPは利用していないためにサービスを停止したいのですがそのような ことは可能でしょうか? また、可能でしたらどちらで設定すればよろしいのでしょうか?

即効で突っ込みが、

参考までにどのようなウィルススキャンをご使用なさったか教えていただけるでしょうか?

おれも知りたい。

皆様

迅速なご回答ありがとうございました。

実は、サーバーは私が管理しているものではなく 検証環境を利用しているお客様の運営しているものでして・・・ もう少し具体的なヒアリングが必要でした・・・・

また、ウィルススキャンは社内の独自のスキャンを使ったもので大変 申し訳ございませんが、皆様に公開することは出来ません

かわしたっっっ!

TruStudio Japan

お待ちかね、TruStudio の最新マイルストンリリースである、1.0M2 が公開されました。

使ってみた方はぜひフォーラムに動作状況や感想などを書いていただければと思います。

EclipseのPHP開発環境プラグインのTruStudio1.0 M2がリリースされたそうです。EclipseのPHPプラグインといえば他にPHPEclipseなどがありますが、こっちはドえらい更新止まってます。 今ところおれはEclipse2.1.2、PHPEclipse、EPIC(Perlプラグイン)であとはSFTP(SSH)とCVSのプラグインを使ってます。現状でもあんまり大きな不満は無いので3がでたらかなり便利になっちゃうんじゃないの?と思ってます。