はじめに
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に関して理解が浅いので追及しきれていません.
コメントなどでご教授いただければ嬉しいです.
最後までご覧いただきありがとうございました!