Хранилище Laravel возвращает FileNotFoundException, но файл существует - PullRequest
1 голос
/ 17 октября 2019

Я хочу прочитать содержимое файла в 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 ]

2 голосов
/ 17 октября 2019

В config/filesystems.php добавить новый диск logs:

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

Теперь вы можете получить файлы журнала:

Storage::disk('logs')->get('laravel-2019-10-14.log');
0 голосов
/ 17 октября 2019

Возможно, класс Storage является излишним для вашей реализации. Вместо этого вы можете использовать функцию PHP file_get_contents ():

$contents=file_get_contents( storage_path( 'logs/laravel-2019-10-14.log' ) );
0 голосов
/ 17 октября 2019

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');
0 голосов
/ 17 октября 2019

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')

Посмотрите, где диск ищет файл, затем настройте путь, пока вы не найдетепоиск в правильном каталоге.

...