Dimitrios Stefos
Dimitrios Stefos

Reputation: 157

Laravel fopen() cant create/read file

so I have this Laravel project and I want to export an array to a json file to use it later. My permissions on the storage folder are 777 but when I do

$line=[
  'key1'=>'value1',
];
file_put_contents("storage/app/test.json",json_encode($line));

I also tried

$line=[
  'key1'=>'value1',
];
file_put_contents($_SERVER['DOCUMENT_ROOT']."/storage/app/test.json",json_encode($line));

and in both cases (plus some more) I get this error

file_put_contents(storage/app/test.json): failed to open stream: No such file or directory

Do you have any idea why is this happening?

EDIT: The folders exist

Upvotes: 5

Views: 34592

Answers (4)

user3785966
user3785966

Reputation: 2980

You can use Laravel's helper method base_path():

The base_path function returns the fully qualified path to the project root.

Eg:

$fp = fopen(base_path() . 'app/Encryption/PrivateKeys/nginx-selfsigned.key','r');

Upvotes: 3

Grey
Grey

Reputation: 363

You can use Laravel File Storage

Upvotes: 1

Bibhudatta Sahoo
Bibhudatta Sahoo

Reputation: 4894

You are working with storage folder but by default the path takes from public that why you need to use ../
Try like this

$file=fopen('../storage/app/test.json','w');
fwrite($file,json_encode($line));
fclose($file);

Upvotes: 14

ebraley
ebraley

Reputation: 206

Your directories have to exist before attempting to put files in them, regardless of permissions. I assume that's what is occurring. Likewise your permissions may be set on the storage folder, but not the app folder.

Upvotes: 0

Related Questions