#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;