Назад | Перейти на главную страницу

Загрузить файл на сервер nginx через форму php / html

Я думаю, что это очень популярный вопрос, однако я не могу найти интересующую меня информацию, надеюсь, вы мне поможете. Я новичок в администрировании серверов, так что не бросайте в меня камни :) Я устанавливаю 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-адреса.