Permission denied

php.ini

XHTMLを使うには/etc/php.iniのshort_open_tagがOnになっているので、これをOffにする必要がある。また、display_errorも既定でOffになっているので運用を開始するまでの間は一時的にOnにしておく。

SELinux

PHPでアクセスカウンタを作っていたのだが、r+やwなどの書き込みモードでfopenしようとするとうまく実行されなかった。"failed to open stream: Permission denied"となってファイルにアクセスできない。もちろんパーミッションや所有権などは何度も確認したのだが……。
半日ほど考えた結果、もしかしてと思い

# setenforce 0

としてSELinuxをPermissiveにしてやると案の定正常に実行された……。
というわけで、ファイルの入出力を行うディレクトリ/ファイルに適切なタイプラベルを付与する必要がある。
既定のドキュメントルートであった/var/www以下のタイプラベルはhttpd_sys_content_tになっていたので、

# chcon -R -h -t httpd_sys_content_t ./
# setenforce 1

これでファイルに書き込みできた。
ところで、SELinuxApacheに関する定義にさらに書き込みやスクリプトの実行を制御するタイプラベル(httpd_sys_script_rw_t, httpd_sys_script_exec_t)が用意されているところをみると、本当はこれだけでPHPの実行や書き込みができてはまずいような気もするが……たまにPHP自体が実行されずに403になったり実行されてもfopen()でWarningになったりfputs()で書き込めなくなったりPermissiveにしてもEnforcingのような動きをすることもあるのが不安。いっそdisableにした方がいいのか……。