【Laravel】laravel4のmakeDirectoryでパーミッション777にできなかった話
laravel4のmakeDirectoryでパーミッション777にできなかった。
File::makeDirectory($path, 0777);
でやりたかったけど、パーミッション755までしかできなかった。
しかも第2引数が777ではなく、0777にしないとエラーで動かないという謎仕様。
追記
コメントでHiroKws様からご指摘いただき、解決しました。
777じゃなくて0777じゃないと動かないというのは8進数だからで、8進数では先頭に0をつけるのが決まりだからだそうです。ちなみに、僕が勘違いしてしまった理由を述べると、第一に知識不足なのですが、第二にapiリファレンス
のmakeDirectoryに
public bool makeDirectory(string $path, int $mode = 511, bool $recursive = false, bool $force = false)
のような(defaultは511ですよ的な)記述がされており、3桁で記述できると勘違いしてしまった。というような背景があります。
次に、0777を指定しても0755にしかならないのは、新規作成時のマスクが設定されているから だそうです。これに関しては少し自分で調べてみたいと思います。
最後にFile::makeDirectory()の中身は、PHPのmkdirだそうで、こうすることでユニットテストがしやすくなるからだそうで、もしユニットテストを書かないのなら、直接PHPの関数を呼び出す手もあるようです。
なるほど、HiroKws様ありがとうございました!