Laravelというかphpのエラーになりますが、そこはご愛嬌。

状況

ディレクトリを作成するメソッドであるFile::makeDirectory()を使って2階層以上のディレクトリをいっきに作成しようとするとNo such file or directryが発生する。

原因

2階層以上のディレクトリの作成を許可していないこと。

対処

このFile::makeDirectory()の第3引数にtrueを指定すること。

要点

つまり、phpのビルトイン関数であるmkdir()を実行しているのです。phpのマニュアルにも書いてある通り、入れ子構造(2階層以上)のディレクトリ作成の許可をすればいいわけです。

このmkdir()File::makeDirectory()の引数は同じように指定するので違和感はないですね。

  • 第1引数:作成したいディレクトリのパス
  • 第2引数:パーミッション
  • 第3引数:入れ子構造作成の可否
  • 第4引数:エラーメッセージを無視するかどうか

例えば、写真を投稿するアプリケーションでユーザーごとの写真のディレクトリを作成したい場合があります。作成するディレクトリはpublic/images/1/photosです。数字の部分はログインしているユーザーIDです。

この場合は以下のようにすると問題なく作成できます。

※あくまでディレクトリ作成までのイメージです。