PHPスクリプトを利用したウェブサイトを運用されている方々へ

■PHPスクリプトを利用したウェブサイトを運用されている方々へ
System9 で PHP スクリプトの実行方式が変わるため、そのままでは PHP スクリプトが正常に動作しない場合があります。
System8
Apache モジュール 方式
Apache に組み込まれた PHP 実行用モジュールが PHP スクリプトを実行する。
PHP スクリプトの実行ユーザ・グループは apache/apache
ファイルやディレクトリに対して、apache ユーザに対するゆるやかなパーミッションを設定する必要がある。
System9
CGI 方式 (mod_fcgid + suEXEC)
外部のPHP実行用プログラムが PHP スクリプトを実行する。
PHP スクリプトの実行ユーザ・グループは ウェブサイトの所有ユーザ・グループ
適切なパーミッションの設定
System9 では公開しているPHPスクリプトやディレクトリがその他のユーザから書き込み可能である必要はありません。
その他のユーザの書き込み権限を落としてください。データファイルについても出来る限り同様にしてください。
確認&設定例
-bash-4.1$ ls -l
合計 8
drwxrwxrwx. 2 someone
る
-rw-r--r--. 1 someone
drwxr-xr-x. 2 someone
-rw-rw-rw-. 1 someone
-bash-4.1$ chmod go-w
-bash-4.1$ ls -l
合計 8
drwxrwxr-x. 2 someone
-rw-r--r--. 1 someone
drwxr-xr-x. 2 someone
-rw-rw-r--. 1 someone
somegrp 4096 1月 28 18:25 2013 data
somegrp 520 1月 28 18:24 2013 index.php
somegrp 4096 1月 28 18:26 2013 lib
somegrp 1020 4月 28 18:27 2013 admin.php
data admin.php <---- 書き込み権限を落とす
somegrp
somegrp
somegrp
somegrp
4096
520
4096
1020
1月
1月
1月
4月
28
28
28
28
18:25
18:24
18:26
18:27
2013
2013
2013
2013
<---- 他人がディレクトリに書き込み可能になってい
<---- 他人がファイルに書き込み可能になっている
data
index.php
lib
admin.php
System8 の実行方式に依存した設定や動作の修正
.php以外の拡張子のファイルをPHPスクリプトファイルとして認識させている
.htaccess ファイルで .php とは異なる拡張子のファイルを php スクリプトとして実行させるように設定している場合動作しません。
動作しない設定例
# CGI ファイルや dhtml ファイルを PHP スクリプトとして実行する
AddType application/x-httpd-php .cgi .dhtml
拡張子と fcgid-script ハンドラを関連付け、mod_fcgid ラッパースクリプトを通すように変更してください。
変更例
# CGI ファイルや dhtml ファイルを PHP スクリプトとして実行する
AddHandler fcgid-script .cgi .dhtml
.htaccess ファイルで php_value ディレクティブや php_flag ディレクティブを使っている
php_value ディレクティブや php_flag ディレクティブは、System9で使うことはできません。
動作しない設定例
.htaccess
php_flag magic_quotes_gpc Off
php_value max_input_time "120"
"<IfModule mod_php5.c>"と"</IfModule>"で囲った後 、".user.ini"ファイルを作成して、php.ini 書式で設定を記述してください。
(セクションは書かなくても動作します。将来的には意味を持つかも知れないため、書くことを推奨します)
変更例
.htaccess
<IfModule mod_php5.c>
php_flag magic_quotes_gpc Off
php_value max_input_time "120"
</IfModule>
.user.ini
[PHP]
magic_quotes_gpc = Off
max_input_time = "120"
.user.ini は300秒に1回の頻度で再読込されます。すぐには反映されませんのでご注意ください。
PHP セッション機能 を使っている
PHPスクリプトでPHPセッション機能を使っている場合、次のようなエラーがログに記録され、正常に動作しません。
PHP Warning: session_start(): open(/var/lib/php/session/sess_4rgohs4pfji1bq0vqgrp2mvr4sjlrjtm, O_RDWR) failed:
Permission denied (13) in /home/WEB/<group>/<user>/public_html(_ssl)/<scriptname>.php on line <N>
PHP Warning: Unknown: open(/var/lib/php/session/sess_4rgohs4pfji1bq0vqgrp2mvr4sjlrjtm, O_RDWR) failed: Permission
denied (13) in Unknown on line 0
PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of
session.save_path is correct (/var/lib/php/session) in Unknown on line 0
使っているかどうかわからない場合は、スクリプト内を"session_start" で検索してみてください。ヒットすれば使っています。
ホームディレクトリ以下に適当なディレクトリを作成して、PHP スクリプトで "session.save_path"を設定するか、
ドキュメントルートに".user.ini"ファイルを作成して、"session.save_path"を設定してください。
[PHP]
....
session.save_path = "/home/<group>/<user>/<適当なディレクトリ名>"