1

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

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

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

Laravel 返回此错误:Illuminate\Contracts\Filesystem\FileNotFoundException

但是文件已经存在!

我想读取文件内容。


Laravel 版本:6.2.0 - PHP 版本:7.2.19

4

4 回答 4

3

config/filesystems.php添加新磁盘logs

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

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

Storage::disk('logs')->get('laravel-2019-10-14.log');
于 2019-10-17T15:40:28.383 回答
0

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');
于 2019-10-17T15:34:32.450 回答
0

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

Storage::get() 接受相对于存储磁盘根的路径。

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

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

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

于 2019-10-17T15:09:30.603 回答
0

也许 Storage 类对于您的实现来说太过分了。您可以只使用 PHP file_get_contents() 函数:

$contents=file_get_contents( storage_path( 'logs/laravel-2019-10-14.log' ) );
于 2019-10-17T16:52:24.010 回答