Laravel 存储 returns FileNotFoundException 但是文件存在

Laravel storage returns FileNotFoundException But file exists

我想读取 laravel 6 中的文件内容,该文件已经存在但 laravel return 未找到异常。

这是我的日志文件目录: /var/www/html/myLaravelLab/storage/logs/laravel-2019-10-14.log

$contents = Storage::get(storage_path('logs/laravel-2019-10-14.log'));

Laravel return 这个错误:Illuminate\Contracts\Filesystem\FileNotFoundException

但是文件已经存在!

我要读取文件内容。


Laravel版本:6.2.0 - PHP版本:7.2.19

storage_path('logs/laravel-2019-10-14.log') 将 return 资源的完整路径,例如: http://www.app-name.com/storage/logs/laravel-2019-10-14.log.

Storage::get() 接受一个路径相对于存储磁盘的根目录

您可能不需要在您的函数中包含 storage_path,并尝试类似的操作:

Storage::get('logs/laravel-2019-10-14.log')

查看磁盘在哪里搜索文件,然后调整路径,直到搜索到正确的目录。

storage_path 基本上会在您提供的路径前加上存储文件夹的路径,因此 /var/www/website.com/storage/logs/laravel-2019-10-14.log.

如果您使用 Storage::path(),其工作方式类似,但来自配置的存储磁盘(如果您愿意,可以基于云)。主要区别在于它看起来在 storage/app 中,因此您需要将日志移到那里,或者您可能可以说:

$contents = Storage::get('../logs/laravel-2019-10-14.log');

$contents = file_get_contents(storage_path('logs/laravel-2019-10-14.log'));

编辑:

我刚刚检查过,您不能使用 Storage::get('../'),因为它超出了可用范围。如果您想使用 Storage::get() 方法,您需要调整配置中的位置。 在 config/filesystems.php

'disks' => [

    'local' => [
        'driver' => 'local',
        // 'root' => storage_path('app'),
        'root' => storage_path(),
    ],
]

那么你可以使用

$contents = Storage::get('logs/laravel-2019-10-14.log');

config/filesystems.php添加新磁盘logs:

'disks' => [
        'logs' => [
            'driver' => 'local',
            'root' => storage_path('logs'),
        ],
// orher disks...

现在您可以获得日志文件:

Storage::disk('logs')->get('laravel-2019-10-14.log');

也许存储 class 对您的实施来说太过分了。您可以改用 PHP file_get_contents() 函数:

$contents=file_get_contents( storage_path( 'logs/laravel-2019-10-14.log' ) );