file_put_contents(path): failed to open stream: Is a directory

Environment:

  • Laravel Version: 5.8.29
  • PHP Version $ php --version: PHP 7.2.24 (cli)

Problem Statement:

I’m unable to download file from s3 to local disk using put method in created directory.

ErrorException (E_WARNING) : file_put_contents(/path/storage/4804_1626): failed to open stream: Is a directory

However, I’ve found that directory has been created with below permission. I tried setting permission 777 as passing third parameter in makeDirectory() method but it didn’t work.

ubuntu@ip:~/path/storage$ ll
drwxr-xr-x  2 www-data www-data     4096 Sep 20 07:07  4804_1626/

Files & Configuration:

$folderPath = Storage::disk('local')->makeDirectory($folderName, 0777);

$contents = Storage::disk('s3')->get('path/' . $fileName);

Storage::disk('local')->put($folderName, $contents); // Following line is throwing error


Answer

You need to specify full path to file, not only folder:

Storage::disk('local')->put($folderName . '/' . $fileName, $contents);