Plesk10+PHP5で発生するエラー解決のための各種設定
新規プロジェクト用に新しくGMOクラウドVPS(Plesk 10ドメイン版)を契約したのですが、設定途中でいくつかエラーを出してしまったので、その原因と解決法を書いていこうと思います。
1.タイムゾーンを「Asia/Tokyo」に設定
まず、PHPのdate()関数を使ったプログラムを動かした時に以下のエラーが発生。
date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead
これは「システムのタイムゾーン設定が信頼できる状態になっていないよ。」 というエラーで「date.timezone = Asia/Tokyo」を設定するか、スクリプト内に「date_default_timezone_set()」を挿入して「Asia/Tokyo」を設定するように促されます。
いちいち各種スクリプトで「date_default_timezone_set()」を書くのも面倒ですから、ここはphp設定ファイルに「date.timezone = Asia/Tokyo」を設定してしまいましょう。
PleskではWebサイトを作成後にGUIでphp設定ファイルを変更できる機能があります。
ここで、以下のように変更します。
保存したら特に再起動をかける必要もありません。
2.プログラム実行・読み込み可能なopen_basedirを追加
次に発生したトラブルが、WEBアクセスできるPHPスクリプトから、他のディレクトリのPHPスクリプトにアクセスしようとした時にエラーが発生。
Warning: require_once(): open_basedir restriction in effect.
具体的にはPleskで作成された「/var/www/vhosts/mydomain.com/httpdocs」の一つ上の階層に「myframework」ディレクトリを作成し、そこにあるPHPファイルをrequire_once()しようとしたので発生したエラーです。
これも1で説明したphp設定を編集するページの「open_basedir」に以下のようにカスタム値を設定します。 プログラムパスを通すのに似ていますね。
3.safe_mode設定の重複
1で説明したPHP設定で「safe_mode」を「Off」にして保存し、任意のPHPスクリプトにアクセスすると、突然以下のようなエラーが表示されるようになります。
PHP Warning: Directive 'safe_mode' is deprecated in PHP 5.3 and greater in Unknown on line 0 PHP Error[2]: realpath(): SAFE MODE Restriction in effect. The script whose uid is 10000 is not allowed to access /var/www/vhosts/mydomain.com owned by uid 0
エラー内容を見ると「『safe_mode』の記述が重複しているよ」とありますね。
実は、Pleskで作成したWebサイトごとのphp設定は「/etc/php.ini」そのものをいじっているわけではなく、Webサイトルート・ディレクトリ中の「conf/~httpd.include」ファイルの中に以下のような内容で記載されています。(内容は設定によって異なります)
# General settings php_admin_flag safe_mode off php_admin_value open_basedir "/var/www/vhosts/mydomain.com/httpdocs/:/tmp/:/var/www/vhosts/mydomain.com/" php_admin_flag display_errors on # Performance settings # Additional directives php_admin_value date.timezone "Asia/Tokyo"
「safe_mode」の記載がありますね。 これが「/etc/php.ini」の「safe_mode」の記述と重複しているのが原因です。
このエラーを取り除くには「/etc/php.ini」の該当部分をコメントアウトすればOKです。
...(前略)... ; Safe Mode ; http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode ; safe_mode = On ...(後略)...
…ということで
以上でとりあえずエラーなしで動くような状態になったと思います。
あとは個別にチューニングして快適なPHP環境にしていってくださいませ。
それでは!
2012-10-17