Очереди LARAVEL с каталогами хранения

#php #laravel #directory #queue #storage

#php #laravel #каталог #очередь #Хранение

Вопрос:

Я пытаюсь использовать систему очередей laravel 5.7 (для меня это впервые ;-)). Я создал скрипт, который просматривает папку (с большим количеством файлов и вложенных папок), открывает файлы Excel, восстанавливает в ней некоторые данные и помещает все эти данные в базу данных mysql. Скрипт слишком длинный для выполнения. Я хочу сделать это в фоновом режиме с системой очередей laravel. Первая функция в моем скрипте — это:

 $directories = Storage::disk('doc')->directories();
  

Когда я тестирую эту строку в контроллере, она работает.
Или если я сделаю это:

 Route::get('/test', function (){
   $directories = Storage::disk('doc')->directories();
   dd($directories);
});
  

на странице отображается массив со списком каталогов (как и ожидалось).
Но, когда я пытаюсь сделать это в задании (функция обработки):

 $directories = Storage::disk('doc')->directories();
print_r($directories);
  

Массив, отображаемый в командной строке, пуст.
Когда я делаю это в том же задании:

 $file_url = Storage::disk('doc')->url('name.xlsx');
print_r($file_url);
  

URL, отображаемый в командной строке, правильный! Итак, мое дисковое хранилище настроено правильно!
Почему функция -> directories() не работает в дескрипторе задания? Функция ->files() также не работает ..!

Спасибо за вашу помощь!!!!!

Комментарии:

1. Я сомневаюсь в разрешениях для файлов / каталогов, но вы можете проверить некоторые предложения здесь , это может помочь.

2. Стоит упомянуть, что Storage::disk('doc')->url('name.xlsx') фактически не обращается к файловой системе для создания URL, так что это не скажет вам ничего полезного о том, правильно ли настроен ваш диск

3. Хорошо, понял! Спасибо вам обоим! Но когда я запускаю команду «очередь php artisan: работа» на моем локальном сервере (laragon), если я понимаю, это тот же пользователь … нет?

Ответ №1:

Я нашел решение. Я не знаю, лучший ли это способ, но, похоже, он работает (в локальном режиме):

 $doc = Storage::disk('doc')->getAdapter()->getPathPrefix();
$path = public_path().'\'.$doc;
$files = new Filesystem;
$dir = $files->directories($path);
print_r($dir);
  

Массив не пуст!!!

Не забывайте:

 use Storage;
use IlluminateFilesystemFilesystem;