Laravel 5.7 php getimageinfo «не удалось открыть поток: нет такого файла или каталога»

Я пытаюсь получить размеры файла изображения, который успешно загружается в мою общедоступную папку/папку изображений, которая правильно символически связана через Laravel с хранилищем/общедоступной папкой. Я использую функцию PHP getimageinfo.

Чтобы сохранить файл, я использовал встроенный ->store('pathtodirectory', 'public') для сохранения файла на сервере, который работает. Он правильно возвращает путь/имя файла, связанное с изображением, и правильно сохраняет файл, который я могу подтвердить и просмотреть.

Однако! Когда я пытаюсь использовать функцию getimageinfo, она сообщает мне «не удалось открыть поток: нет такого файла или каталога». Я попытался использовать функции Storage::url и storage_path, чтобы получить путь к файлу и передать его в getimageinfo. Я также пытался использовать функцию Laravel asset. Ничего не работает.

Что мне не хватает?

Код:

    $photo = $request->file('image');
    $imageFilePath = $photo->store('images', 'public');
    $imageDimensions = getImageSize(Storage::url($imageFilePath));<--Fails here


Мой конфиг/filesystems.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'),
        'url' => env('AWS_URL'),
    ],

],

Пожалуйста, напечатайте Storage::url($imageFilePath) в журналах и проверьте, есть ли изображение на этом пути или нет? Если изображение существует, проверьте, есть ли у него разрешение или нет?

Sahil Gupta 30.04.2019 09:43

Вы используете второй аргумент в store, который указывает диск для хранения (в данном случае public), но при его извлечении вы используете диск по умолчанию, который может не быть public

apokryfos 30.04.2019 09:53

@SahilGupta - я как раз собирался отредактировать свой вопрос, включив в него уточнение, что ответ, который я получаю, «не удалось открыть поток: нет такого файла или каталога». Как распечатать это в логах?

Everett 30.04.2019 19:14

@apokryfos - как мне получить доступ из того же «общедоступного» места? Какой бы вариант я ни выбрал, путь правильный (либо системный путь к ресурсу, либо то, что я думаю, является относительным путем, который использует Laravel... я понятия не имею, что это такое).

Everett 30.04.2019 19:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
806
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ok. Сначала жалобы... Документация Laravel - это мусор, когда вам нужно что-то, кроме введения (т.е. фактического создания приложения). Это не должно было занять у меня два дня, чтобы отследить этот ответ. Который:

getImageSize(Storage::disk('public')->path($imageFilePath));

Я бы хотел, чтобы Laravel раскрывал в своей документации вызываемые методы, доступные для ресурса.

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