肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

最初にアクセスしたときにWARNINGが出る(open_basedir restriction)

レンタルサーバEthnaを使うときの注意。

レンタルサーバだとたいてい、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ネタばっかりですな・・・(笑)