最初にアクセスしたときにWARNINGが出る(open_basedir restriction)
レンタルサーバだとたいてい、open_basedirが設定されています。open_basedirは、PHPを実行できるディレクトリを制限するもの。や、正確に言えば「PHPによってオープンされうるファイルを特定のディレクトリツリー に制限します」。
つまり、PHPから触れていいディレクトリを列挙して、それ以外のディレクトリに触れようとしちゃいけない!ってことです。
エラーの内容はこちら。(実際は1行。見にくいから改行。パスも書き換えてあるよ。)
APP_ID[18827](WARNING): global.file_exists(/lib/Ethna/class/Ethna_Util.php:570): [PHP] E_WARNING: file_exists() [function.file-exists]: open_basedir restriction in effect. File(/proc/net/dev) is not within the allowed path(s): (.:[[open_basedirが列挙されてる]) in [Ethna_PATH]/Ethna/class/Ethna_Util.php on line 570
で、何でエラーが出るかというと、Ethna_Session::start() にて、
<?php ... function start($lifetime = 0, $anonymous = false) { ... session_id(Ethna_Util::getRandom());
これ。セッションIDの生成に使っている、Ethna_Util::getRandom()。Ethna_Util.phpの570行目で、
<?php ... function getRandom($length = 64) { ... for ($i = 0; $i < 2; $i++) { // for Linux if (file_exists('/proc/net/dev')) { // これ!
触れちゃいけないディレクトリを file_exists で触れようとして、WARNINGが出ちゃいます。start()は、1度セッションが開始してしまえば呼び出されないので(呼び出されないようにしているので)、リロードすればこのWARNINGは出ません。
どうしよっかなあ?
ここコメントアウトしていいかなあ。とりあえずこのif文からコメントアウトで処理。どうせfile_existsできなくてfalse返ってくるなら最初からこのifしなくてもいいかな。
ともあれ、レンタルサーバの制約のある中でEthna(だけとは限らないけど。きっと色々なフレームワークで色々な問題が(笑))を使おうとすると、気をつけなきゃいけないことが色々あるので、ちょっと後でまとめようとおもいます。
しかしEthnaネタばっかりですな・・・(笑)