Laravel проверить, если хранилище не работает

Я пытаюсь проверить, существует ли файл в хранилище,

if(Storage::exists($request->file_name)):
    dd(var_dump("it did exist"));
else:
    dd(var_dump("it did not exist"));
endif

но он всегда возвращает строку "он существует", даже если файл фактически удален или файл не существует, какие-либо идеи, помогите?

Я уверен, что нет проблем с настройкой моего хранилища, так как у меня нет проблем при загрузке файла в хранилище,

Storage::put($file_name, File::get($file));

PS: я на Laravel 5.0

ОБНОВИТЬ:

вот мой filesystems.php из папки config моего Laravel 5.0

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Here you may specify the default filesystem disk that should be used
    | by the framework. A "local" driver, as well as a variety of cloud
    | based drivers are available for your choosing. Just store away!
    |
    | Supported: "local", "s3", "rackspace"
    |
    */

    'default' => 'local',

    /*
    |--------------------------------------------------------------------------
    | Default Cloud Filesystem Disk
    |--------------------------------------------------------------------------
    |
    | Many applications store files both locally and in the cloud. For this
    | reason, you may specify a default "cloud" driver here. This driver
    | will be bound as the Cloud disk implementation in the container.
    |
    */

    'cloud' => 's3',

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    |
    | Here you may configure as many filesystem "disks" as you wish, and you
    | may even configure multiple disks of the same driver. Defaults have
    | been setup for each driver as an example of the required options.
    |
    */

    'disks' => [

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

        's3' => [
            'driver' => 's3',
            'key'    => 'your-key',
            'secret' => 'your-secret',
            'region' => 'your-region',
            'bucket' => 'your-bucket',
        ],

        'rackspace' => [
            'driver'    => 'rackspace',
            'username'  => 'your-username',
            'key'       => 'your-key',
            'container' => 'your-container',
            'endpoint'  => 'https://identity.api.rackspacecloud.com/v2.0/',
            'region'    => 'IAD',
        ],

    ],

];

3 ответа

У меня была такая же проблема с Laravel 5.5, и решением было использовать

Storage::disk('public')->exists($file_name)

вместо того

Storage::exists($file_name)

В моем config/filesystem.php по умолчанию у меня есть два типа локальных дисков (локальные и общедоступные), и я не знал об этом:

    'disks' => [

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

    'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],

],

Я действительно не знаю причину, почему это не работает в вашем случае. Я попробовал на своей машине, она работает нормально.

Я пытался отладить, что внутри Storage::exits он использует то же самое return file_exists($path);

Это может быть причиной

Результаты file_exists() кэшируются

Попробуй эти вещи

  1. Конфигурация php artisan: кеш
  2. PHP кэш ремесленника: очистить
  3. php artisan view: очистить
  4. chmod -R 777 хранилище / или chown -R webuser: хранилище веб-пользователя /

Это может помочь вам. Это работает с Laravel5.4:

Storage::exists('dir/'. $filename)
if(File::exists('filePath')){
     dd(var_dump("it did exist"));

}else{
   dd(var_dump("it did not exist"));
}

Пожалуйста, попробуйте код выше

Другие вопросы по тегам