0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel Storageに動的にディレクトリ作成

Posted at

はじめに

LaravelのStorageにて動的に作成するディレクトリに関してつまずいた箇所があったので
備忘録も含めて投稿します.
ご意見などありましたらコメントいただければ嬉しいです.

バージョン

Laravel: 9.8.1

要件

APIにてリクエストを受け取った際,DBデータをSqliteで出力し,ユーザーIDに応じてStorageないにディレクトリを作成,
zipファイル化し返す.
以下予想ディレクトリ

Storage/
    ┣ Sqlite
        └ユーザーID
            └hogehoge.db

失敗例1

Storageに追加するんだから Storage::makeDirectory でいけるだろうという安直な考え

if(!Storage::exists('Sqlite/' . $ユーザーID)){
    Storage::makeDirectory('Sqlite/' . $ユーザーID);
}

テーブル作成時にエラー

Error: unable to open database xxx:unable to open database file

はぇ?
VScodeのエクスプローラーには確かにディレクトリがない
でもStorageファサードでディレクトリ取得すると新規作成されている......

権限が正しく設定できてないか?

失敗例2

とりあえず777で指定してみるか
権限が原因かまだわからないし

if(!Storage::exists('Sqlite/' . $ユーザーID)){
    Storage::makeDirectory('Sqlite/' . $ユーザーID, 0777);
}

変わらずテーブル作成時にエラー

Error: unable to open database xxx:unable to open database file

変わらんやんけ!!
そもそもStorageファサード使うのがダメなんか?
Fileファサード使うか

成功例

File::makeDirectory 使って storage_path 渡してあげればいいかな

if(!File::exists('storage_path(Sqlite/' . $ユーザーID)){
    File::makeDirectory(storage_path('Sqlite/' . $ユーザーID));
}

よっしゃ!!
エラー出てない!
ちゃんとディレクトリもファイルも生成されている!
勝利!!

まとめ

以上,Storageファサードが無理だったらFileファサードを使ってみたらうまく行ったってお話でした.
とても初歩的な話な気もしますが......

ちなみに原因などはLaravel・PHPに関して理解が浅いので追及しきれていません.
コメントなどでご教授いただければ嬉しいです.

最後までご覧いただきありがとうございました!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?