タグのアーカイブ: development (RSS)

phpのマニュアルを検索したい?アドレスバーに入力しよう(ブラウザ不問)

php.net/の後ろにキーワードを続けて入力するだけだぜ

例)
php.net/htmlspecialchars
php.net/PDO
php.net/splice

コード書きをするとブログ書く時間が全く無い

この数週間ひさしぶりにphpでコーディングをしてたら、さっぱりブログを書く時間がなくなりました
PHPUnitで単体テストしまくりなので、時間が出来たら使い方記事でも書こうかと思ったけど、http://phpunit.de/がしょっちゅー繋がらなくなりますな・・・

PDOがPDOExceptionを投げてくれない件

PHP5だからってことでせっかくPDOを使ってるのに、全然PDOExceptionを投げてくれない!
errorCode()とかerrorInfo()なんてメソッドつかってたら、結局pgsql関数使ってるときと一緒じゃん!
と嘆いていたのは僕ですが、
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
てやっとけばいいみたい。
@see PDO->setAttribute()

これで

PDO のエラーコードは、SQL-92 の SQLSTATE エラーコード文字列に 標準化されています。 ネイティブのコードを適切な SQLSTATE コードに変換するのは、個々の PDO ドライバの仕事となります。

こういう恩恵をたっぷり受けることができる!(ホント?)

蕎麦屋について

最近語られなくなった気がするので蕎麦屋について書いておきます

そばの出前の注文を受けた後の催促の電話に対して、その人の分のそばを茹でながら「さっき出ましたから、もうすぐ着くと思います」というのがネタ元

ソフトウェア開発の現場ではこれらを応用し
・「プログラムは出来てるんですが、ちょっとお見せする環境を整えるのに時間がかかるのでもうしばらくまってください」と言いつつプログラムを書きはじめる
・「プログラマはメールで送った言ってるんですが、届いてないですか?添付ファイルが大きすぎたのかもしれませんね。今はちょっとつかまらないので、また後で連絡します」と言いつつ書かせる
などといったことが日常的に行われているのかもしれません

テンプレートシステムはデフォルトでエスケープするべきじゃなかろうか?

mixiに機能要望の投票とトラッキングがついたらしいので、個人ごとにタイムゾーン設定できるようにってのに投票しました。
# 現時点で評価は 良い94/悪い4 なんだけど、いつになったら検討されるのかさっぱり謎です。

で、他にどんな面白い要望があるんだろうかとブラウズしたりして、ふと実装済のところを見てみると、XSS脆弱性の修正が並んでる・・・
しかも、「mixi機能要望におけるXSSの問題を根本的に修正してほしい」なんてのを筆頭に、最近リリースされてる機能にも平気でXSS脆弱性があった模様。

いまどきリリースされるwebアプリでも、XSS脆弱性はゴロゴロしてるのね。
まあ、そこらのサンプルコードや入門書にXSS脆弱性やSQLインジェクションがゴロゴロしてるのは知ってましたが、mixiでリリースされてるアプリケーションでも未だにゴロゴロしてるとは、ちょっとびっくりです。

mixiのシステムはおいといて、ふと思ったのが「テンプレートシステムはデフォルトでエスケープするべきじゃなかろうか?」ってこと。

DBなどに入力値をそのまま持っておく設計(極めてフツーだけど)のwebアプリケーションだと、たとえばsmartyなら、HTMLを保存しているもの以外の全ての変数表示項目で{$hogehoge|escape}として、エスケープする必要があります。
「ちゃんとエスケープしろよ」といっちゃえばそれまでなのですが、テンプレートってのはwebデザイナーさんもいじることがあるわけで、webデザイナーさんがescapeを忘れちゃったり間違えて取っちゃったりする可能性ってのは十分あるわけです。

このあたりの危うさを考慮すると、テンプレートシステムではデフォルトでエスケープするほうが安全だし、コードの量も減るでしょうね。

<noscript>の使い方

ひさしぶりにhtmlを書いてて思ったのでメモ

<noscript>の使い方のダメな例

タグリファレンスによく載ってる典型的なダメな例(笑)

<script>
// きっと、エラーまみれのロクにデバッグされてないscriptがずらずらと書いてある
// ひょっとしてコピペの繰り返しで、何やってるのかよくわかってないんじゃない?
</script>
<noscript>このページはJavaScriptを使用しています</noscript>

え?なんでダメかって?
noscript はスクリプトに対応していない環境のために代替となる内容を表示するための要素だからですよ。
「このページはJavaScriptを使用しています」
じゃ、代替にならないじゃないですか(笑)

<noscript>の正しい使い方の例

selectリストでページの表示内容を切り替えることができるgetメソッドを使用したformの中で考えてみよう

<select … onchange=”submit();”>
<options>…</options>…
</select>
<noscript>
<input type=”submit” value=”表示を切り替える” />
</noscript>

<script>に対応する形にはならなかったけど、自動的にsubmitするjavascriptの力に対して、見事に代替機能になってるでしょ?

おまけ

scriptが動かないブラウザのために、noscriptの中で代替となる同等の機能を用意するか、別の手段を用意するべきです。
もし、scriptが動かなくてもアクセシビリティに支障がないのなら、noscriptは用意する必要がないでしょう。

PHP-gettext(wordpressに入ってたヤツ)

すごくひさしぶりにPHPのプログラムをまとめて書くことになり、PHPでgettextを使うってのを、いい機会なので調べてみました。

gettextエクステンション無しで直接MOファイルを読み込むPHP-gettextライブラリ

このサイトでも使っているWordpressというブログアプリケーションでは、gettextのMO filesを読み込むのにPHP-gettextというライブラリが使われています。

このライブラリをつかった場合の特徴としては、直接MOファイルを読むライブラリなので・・・

  • –with-gettextつきでコンパイルしてないPHPでもMOファイルを読み込むことができる
  • もちろん、LOCALEを使わなくてもgettextの恩恵を受けることができる
  • 当然、あの深いディレクトリ構造(BASE/${locale}/LC_MESSAGES/${domain}.mo)と戯れなくてすむ

Wordpressのソースの中から、PHP-gettextの成果物でありwp-includes/の下にあるgettext.phpstreams.phpをincludeしているwp-l10n.php
を読めば、使い方はすぐにわかると思います。
このwp-l10n.phpでは、_()ではなく__()_e()という関数を用意しています。アンダースコア1個の関数を定義しようとすると、gettextエクステンションが組み込まれたPHPでコケてしまうので、素直にこの方法に従っておくのが吉ですね。

PHPでgettextしたい!って人のための参考リンク

ジョエル・オン・ソフトウェア

Joel Spolsky氏のサイトJoel on Software日本語版もあり)で発表された記事を元にした本

仕様書がないシステム開発でデスマーチしてる人はまず、「やさしい機能仕様 – パート 1: なぜわざわざ書く必要があるのか?」をみてみましょう

ところで、こーいういい本の(非SE出身の)営業向けのモノってないですかね?

phpなweb開発者はストロング読め

MLや雑誌などで活躍されてるかなだまさかつさんのおさかなラボ(kaede.to)
php使うweb開発者は読むべし!です

# 何故か今日まで存在に気がつかなかったのですがものすごくお勧め

selenium

メモメモ

Selenium
http://selenium.thoughtworks.com/index.html

webアプリケーションテストツール seleniumがヤバすぎる
http://d.hatena.ne.jp/secondlife/20050525/1116947520

続きを読む »