Archive for 6月, 2010

このページの目次

mkdir()したときのPermission deniedを回避

火曜日, 6月 8th, 2010

こんにちは、なかわけです。

自分的な作業メモです。
対象のディレクトリのパーミッションは合っているのに
mkdir()したときのPermission deniedのエラーが出ました。
いろいろいろいろ調べてやっと解決しましたが、何が原因だったのかわかりません。
ひょっとしたら私の認識が間違っているかもしれません(ただの勘違い?)。
詳しい人コメントください。

もともとのコードは以下のようなものでした
はじめにimagesディレクトリは存在していて、mkdir()でchocolateディレクトリを作るという設定です。
まず、Hogeクラスにmkdir()の処理が書いてあります。

class Hoge{
    public function __construct(){
        //コンストラクト的な処理
    }
    public function makeDir(){
        mkdir('images/chocolate', 0755, true);
    }
}

それで、Permission deniedのエラーが発生したときのコードFugaクラス

require_once 'Hoge.php'
class Fuga {
    public function __construct(){
        //コンストラクト的な処理
    }
    public function piyo(){
        $hoge = new Hoge();
        $hoge->makeDir();
    }
}

これだとPermission deniedのエラーがでてしまいましたが、
上記のFugaクラスを以下のように変更したら、エラーが無くなりました

require_once 'Hoge.php'
class Fuga {
    protected $hoge;
    public function __construct(){
        //コンストラクト的な処理
        $hoge = new Hoge();
    }
    public function piyo(){
        $this->hoge->makeDir();
    }
}

もともとimagesディレクトリの所有者はApacheだったんだけど、
メソッド内でHogeをnewするとmkdir()したときのディレクトリの所有者がApacheじゃなくなるのかなぁ
とか思ったんですが、じつは書き直す前のコードでもちゃんと動いている時期があって
phpのバージョンが上がったからなのかなんなのか・・・。
今度同じような問題にぶつかったときに詳しく調べようと思います。
ちょっと今日はもう時間がないので解決したというメモだけで・・・。