ちょっとハマったのでメモを残しておきます。
PHP の header() 関数では 第 3 引数で HTTP レスポンスコードを指定することができます。
ところが次のように第 1 引数に NULL や空文字を指定すると HTTP レスポンスコードが設定されませんでした。
header(NULL, TRUE, 404); header('', TRUE, 404);
次のようなレスポンスが返ります。
HTTP/1.1 200 OK
Date: Sun, 11 Sep 2011 02:58:13 GMT
Server: Apache/2.2.14 (Ubuntu)
404 を期待しているのに 200 になってしまいます。
次のように、何か文字列を指定すれば 404 を返してくれます。
header('xxxx', TRUE, 404);
HTTP/1.1 404 Not Found
Date: Sun, 11 Sep 2011 02:59:47 GMT
Server: Apache/2.2.14 (Ubuntu)