ワールドカップで盛り上がるドイツで行われたPHPのワールドカップ(嘘)「FrOSCon」での”PHP best practices”と題されたスピーチの資料が公開されました。
PHP best practices - The dos and don'ts
http://talks.php.net/show/php-best-practices/
※カーソルの左右でページ移動できます(→ 進む / ← 戻る)
おおまかな内容はこんな感じ。
一般
- typeセーフなコーディングをする
- opentagには"<?php ?>"を使う
- エラーレベルはE_STRICTにする
- Exceptionはメモリリークを起こすことがあるので注意
- デバッガを使う(Xdebugがオススメ)
- コーディング規約に従う
- ドキュメントを書く(phpDocumentor)
セキュリティ
- ユーザからの入力を信頼してはいけない
- ホワイトリストを使う
- SQLでは、入力値はエスケープする、プリペアドステートメントを使う
- ctype_*()やfilter_data()を使うと楽
- 出力はエスケープする(htmlentities())
- 不要な情報は隠す(phpinfo()をルートに置かない、display_errorsをoffに、expose_phpをoffに)
- パーミッションを適切に設定する
- magic_quotes_gpcをoffにする 場合に応じて適切なエスケープを行う
- register_globalsはoffにする
- Cookieには大事なデータを保存しない→Sessionの方が安全
パフォーマンス
- PHPの内部関数が使える場合にはそれを使う(PHPで書かれた関数より速い)
- シンプルな構文を使う(""の代わりに''、echo 'A'.'B'の代わりに echo 'A','B'、$i++の代わりに++$i)
- クラスの用途を限定する(arrayで代用できるときはそうする、必要かどうかよく考える)
- 多くのデータはキャッシュできる
- 正規表現にはereg_*()ではなくpreg_*()を使う、適切な正規表現を用いる
- コードキャッシュ(アクセラレータ)を利用する(APCなど)
- プロファイリングを行い、ボトルネックを解消する(Xdebug、APD)
- mod_gzipで出力を圧縮し、帯域を節約する
基本的な事項が多いですけど、まぁそれだけ重要ってことなんでしょうね。
プロファイリングには興味がありながらもまだきちんとやったことがないので今度試してみよっと。