質問: '/storage/logs/articles/' . $id . '.log'; if (!file_exists($file)){ touch($file); } ``` /storage/logs/articles/のディレクトリは存在しています。 なぜファイルが作成できないのでしょうか? どこが間違っているのか教えていただきたいです。 よろしくお願いします。 //////追記////// ``` $path='/storage/logs/articles/'; $file=$path.$id.'.log'; if(file_exists($path) and is_dir($path)){ if(!file_exists($file)){ touch($file); } } ```
回答: > > '/storage/logs/ > > > 始まりが「/」であるということは「最上部の階層から」という指定となります。 windowsであればCドライブ直下から・・・みたいな感じです。 つまり、それより上の階層がないことを指します。ただ、今回は上の階層が存在しているため、該当のエラーが出ています。 こういうときは*DIR*を使ってPHPを実行しているファイルからの階層を指定するのが最も確実です。 例えば Myproject/storage/logs/articles Myproject/app/Controllers/TestController.php となっていて、TestController.phpに書く場合、以下のような感じ。 ``` $file = __DIR__.'/../../storage/logs/articles/' . $id . '.log'; ``` *DIR*は「実行しているファイル自身のディレクトリまでのフルパス」が格納されているので、 そこから相対で辿っていく感じです。