はじめてのPHP言語プログラミング

まだいつ発売になるか私も知りませんが「はじめてのPHP言語プログラミング」(技術評論社)というタイトルでPHP入門書を書きました。4月末から5月に書店に並ぶと思います。

Webサイト構築の為の入門書ではなくプログラミング言語の入門書、読み終わった後もリファレンスとして使える本になるように書いたつもりです。どちらかと言うと既にプログラミング言語を習得されてPHPもマスターしたい方向けかもしれません。320ページで全て説明するのは難しく、ばっさり説明を省略している部分もありますが、言語仕様の解説部分では出来るかぎり妥協しないようにしています。どんな本を書く場合も同じと思いますが「自分が欲しい」と思える書き方、内容になったと思っています。

宣伝にはまだ早すぎですが、書店で見掛けたら買ってください 🙂

PHPで巨大ファイル

PHPで巨大なファイルを取り扱うことが出来るか下調べしました。PHP内部的にPHPストリームと言う仕組でファイル等を取り扱う事が可能になっているのですが、ファイルヘのアクセスに符号付き32bit整数を使っています。このため扱えるファイルサイズが2GBに制限されています。

タイムリーな事にPHP-INTERNALメールリストでPHPストリームのコードを書いたWez氏がint64_t対応を行う旨の投稿をしていました。待っていれば2^63-1バイトまでのファイルが取り扱える様になるようです。

HTTP Response Splitting Attack: PHPの場合

ここの日記にも書いたHTTP Response Splitting Attackの対策がPHPでも取られるようです。

header(“bad-header: This is bad header\r\n but having CR/LF in a haeder is allowed by the standard in some case.”);

上記のヘッダが送られた際に\r\nを自動削除可能な設定が追加されます。ただし、\r\nがヘッダ中に現れる事は標準で認められいいますが、パッチを適用したPHPの場合は拒否&警告エラー(php.ini設定のデフォルト値になる)が発生します。もちろん「不正なユーザ入力対策は万全」というサイト向けではそのままCR/LFを送ることも可能です。次のPHPリリース時には取り込まれていると思いますが、仕様が変わっているかも知れないのでChangeLogなどで確認する必要があります。

未対策のアプリがあるサーバはエラーハンドラ(必ず作ってますよね。PHPプログラマの方!)で処理するだけです。普通にエラー処理しているPHPアプリケーションならPHP本体にパッチを当てるだけで完了です。

「まるごとPHP」

最初のセクションの部分に「まるごとPHP」著者の一人である月宮さんがツッコミを入れられてますね。ちょっと辛口のコメントです。初心者向けに記述するのは難しいですね。私も気を付けないと… (私も「まるごとPHP」にセキュリティー関係でほんの少しだけ書いています)

月宮さんの日記のコメントにも書きましたが、PHPでは明示的にリソース(DB接続・ファイル)や変数を開放する必要がほとんどありません。Webプログラムでは明示的に開放しない方が良いくらいです。例えば、DBの永続的接続を使っていない場合、システム負荷を上げるだけで役立つ事はほとんどありません。永続的な接続を利用している場合、データベース接続を切断する関数を呼ぶと役立つ事は一切無く無駄なCPUリソースを消費するだけです。