現在以下のように指定のディレクトリ内にファイルを作成しようとしているのですが、
「touch(): Unable to create file /storage/logs/articles/8.log because No such file or directory」
というエラーが表示されてファイルが作成できません。
php
1 $file = '/storage/logs/articles/' . $id . '.log'; 2 if (!file_exists($file)){ 3 touch($file); 4 }
/storage/logs/articles/のディレクトリは存在しています。
なぜファイルが作成できないのでしょうか?
どこが間違っているのか教えていただきたいです。
よろしくお願いします。
//////追記//////
php
1$path='/storage/logs/articles/'; 2 $file=$path.$id.'.log'; 3 4 if(file_exists($path) and is_dir($path)){ 5 if(!file_exists($file)){ 6 touch($file); 7 } 8 }
$file = '/storage/logs/articles/' . $id . '.log'; → $file = "./". $id . '.log'; とした場合(要は実行ファイルと同じ階層に作る) とどうなりますか? touch()は「ファイルが存在しない場合、ファイルが生成される」のでfile_exists()は必要ないようにも思いますが。
また「/」で始まっている場合は「ROOTからのパス」となりますがそこは問題ないですか?実行ファイルを含めたフォルダ階層もご提示いただけると助かります。
$file = "./". $id . '.log';とした場合、publicフォルダの下に作成されました。Laravelで作成しています。touchはfile_exists()は必要ないのですね
storageフォルダはルート配下にあります。/MyProject/storage/logs/articles以下にファイルを作成しようとしています。
フレームワークとなると話は別です。フォルダ階層も含め検討する必要があります。いずれにしても 「/storage/・・・」という指定方法では、storageよりも上の階層にフォルダがある時点で間違っています。
タグにlaravel(バージョンがついているものの方がいいです)を追加と、実際に実行しているファイルのソースコードもご提示ください。ただ、おおよそ分かったので、一応、ヒントになりそうな回答はしておきます。
フレームワークだと話は別なのですね。階層のことについて勘違いしていました。タグとファイル保存のコードを追記して質問を編集しました。
回答4件
あなたの回答
tips
プレビュー