Я думаю, что это очень популярный вопрос, однако я не могу найти интересующую меня информацию, надеюсь, вы мне поможете. Я новичок в администрировании серверов, так что не бросайте в меня камни :) Я устанавливаю nginx на свой виртуальный сервер debian и уже устанавливаю php, mysql и все, что мне нужно. Но когда я начал использовать свои php-скрипты, я обнаружил, что не могу загружать файлы через html-форму.
Я сделал тестовую страницу и вижу, что после отправки формы я вижу $ _FILES ['tmp_name'], но функция PHP move_uploaded_file не работает. Он не переместил файл.
Вот почему я начал гуглить и нахожу много информации о модуле nginx_upload и так далее. Можно ли настроить nginx для загрузки файла, или я должен установить для этого модуль nginx_upload?
Что я должен сделать, чтобы разрешить загрузку файлов на мой сервер nginx. Спасибо.
поскольку $_FILES['fieldname']['errors']
содержит 0 (что является UPLOAD_ERR_OK
), фактическая загрузка прошла успешно. Что терпит неудачу, так это попытка переместить временный файл в указанное вами место, поэтому move_uploaded_file()
возвращает false. Вы делаете что-то вроде этого:
move_uploaded_file($_FILES['fieldname']['tmp_name'], '/srv/www/uploads')
Наиболее вероятная проблема заключается в том, что PHP не имеет разрешения на запись в каталог, который вы указали вторым параметром. Узнайте, от имени какого пользователя работает PHP (возможно, что-то вроде www-data
) и убедитесь, что у этого пользователя есть разрешение на запись:
chown -R www-data /srv/www/uploads
chmod -R u=rwX,g=rwX,o=rX /srv/www/uploads
Существуют специальные модули, необходимые для обработки индикаторов выполнения и т. Д. Через nginx. Там есть ничего специальный требуется, если функция прогрессивного обновления не требуется.
Скорее всего, вам потребуется создать специальный каталог для загрузки с разными разрешениями. chmod 1770 / path / to / upload_dir подойдет в большинстве случаев.
Официальная документация, скорее всего, не будет рекомендовать один способ по сравнению с другим из-за довольно серьезных последствий для безопасности при разрешении загрузки на тот же сервер, с которого PHP читает файлы для выполнения. Если они порекомендуют один способ, а он окажется уязвимым, они могут почувствовать ответственность.
Как только он заработает, проверьте и убедитесь, что вы не можете загрузить файл .php, а затем вызвать его с помощью простого URL-адреса.