Laravel fopen()无法创建/读取文件

时间:2017-07-27 14:17:05

标签: php json laravel file fopen

所以我有这个Laravel项目,我想将数组导出到json文件以便以后使用它。我对存储文件夹的权限是777,但是当我这样做时

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

我也试过

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

并且在两种情况下(加上一些)我都会收到此错误

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

你知道为什么会这样吗?

编辑:文件夹存在

5 个答案:

答案 0 :(得分:4)

您正在使用存储文件夹,但默认情况下路径来自公开,说明您需要使用../的原因 试试这个

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

答案 1 :(得分:1)

您可以使用Laravel File Storage

答案 2 :(得分:0)

在尝试将文件放入其中之前,您的目录必须存在,无论权限如何。我假设发生了什么。同样,您的权限可以设置在storage文件夹中,但不能设置在app文件夹中。

答案 3 :(得分:0)

您可以使用Laravel的辅助方法base_path():

base_path函数返回到项目根目录的标准路径。

例如:

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

答案 4 :(得分:0)

嗨,团队,我面临着更类似的问题。所以我在 storage/cpdpoints 中保存了一个文件,但我想读取该文件,然后将其移动到 Public 文件夹中

project/public/cdpoints。

我已经尝试了以下

    $file = Storage::path($path);
    $file = fopen($file, 'r');

    if ($file) {
          

            //get file original name
            $name = $file->getClientOriginalName();

            //create a unique file name using the time variable plus the name
            $file_name = time() . $name;

            //upload the file to a directory in Public folder
            $path = $file->move('cpdpoints', $file_name);
        }