PHP fopen (): Имя файла не может быть пустой причиной getRealPath return false

Я разрабатываю проект Laravel на Windows 10 локально, используя Laragon

Версия PHP: 7.1.8 64bit NTS

связанный с php.ini, который я знаю

post_max_size = 8M

file_uploads = On


Исходный код:

// if no image uploaded if (!$request->hasFile('profile_picture')) throw new \Exception("No image found"); // get uploaded image $image = $request->file('profile_picture'); // store to storage/app/users/ Storage::putFileAs('users', $image ,auth()->id()); 

введите описание изображения здесь

На мой взгляд, это проблема конфигурации сервера, возможно, проблема на php.ini,

но я не знаком с конфигурацией сервера, и в этой теме не так много тем, связанных с этой проблемой.

Я знаю причину проблемы, но я не знаю, как ее решить.

Вы уверены, что пользователь, который запускает пользователя процесса веб-сервера, имеет доступ RW (чтение / запись) к Windows TEMP Directory? Если нет, вы обязательно потерпите неудачу!

Возможное исправление для этого – установить PHP TEMP Dir в читаемое / записываемое местоположение.

На вашем php.ini установите эту директиву.

upload_tmp_dir = 'PATH'

Убедитесь, что существует «PATH», и ваш пользователь процесса веб-сервера имеет доступ для чтения / записи.

Процесс веб-сервера Пользователь – это учетная запись, используемая вашим веб-сервером для запуска службы. Вы можете проверить это в диспетчере задач.

Через 2 дня я наконец понял, почему. В прошлый раз я использовал версию PHP-TS (Thread Safe) для разработки этого приложения, и он работал нормально.

К настоящему времени я использую версию PHP-NTS (Non Thread Safe), и после тестирования я смог подтвердить, что эта проблема была вызвана другим результатом информации о файлах NTS & TS

Для PHP 7.1.7 64-битный TS TS

Для PHP 7.1.8 64bit NTS NTS

Итак, теперь мы можем знать, что ошибка возникает в настройках временных файлов,

Для версии NTS временная папка на C: \ Windows \ Temp,

Нет разрешения этой папки, потому что PHP не может прочитать realPath (я думаю), realPath return false

Для версии TS временная папка на C: \ Users \ YQuan \ AppData \ Local \ Temp,

Разрешить доступ, читаемый realPath

Решение

  1. Изменить разрешение на изменение папки

    Я не буду использовать этот метод, потому что слишком беспорядочно менять разрешение на систему Windows

  2. установите upload_tmp_dir в php.ini в «C: \ Users \ {username} \ AppData \ Local \ Temp», затем перезапустите сервер

    этот метод проще.