linux — файл move_uploaded: не удалось открыть поток: отказано в разрешении в /srv/http/upload.Stack Overflow

Я пытаюсь запустить сервер на ArchLinux, у меня Apache и PHP работают нормально, но я не могу загрузить файл с PHP. Я видел много подобных вопросов на Stackoverflow и, похоже, использовал все найденные мной предложения, но я все еще получаю

failed to open stream: Permission denied in /srv/http/upload.php

ошибка.

Точнее

Warning:  move_uploaded_file(): Unable to move '/tmp/phpZvJK1l' to '/home/administrator/SCRIPTS/tr/solution.cpp' in /srv/http/upload.php on line 20

Я установил разрешения для / tmp /, / home / administrator / SCRIPTS / tr и / srv / http на 777 (я знаю, что это не правильно, но я сейчас работаю локально и хочу, чтобы это как-то работало).

Также я установил для всех владельцев этих каталогов значение http (то есть пользователя, работающего с PHP), но это все равно не работает.

1

Решение

Некоторые конфигурации PHP не разрешают доступ к файлам вне каталога docroot пользователя, поэтому у вас может не быть доступа к / tmp изнутри PHP. Попробуйте загрузить ваши файлы во временный каталог в вашем каталоге / home / administrator — предпочтительно в каталог, который не доступен для веб-браузеров (одноуровневый каталог вашего docroot).

2

Другие решения

дать разрешение директории / tmp:

sudo chmod 777 / tmp

0

Как пользователь Arch у меня та же проблема, когда я работаю над веб-проектами.

Я рекомендую вам посмотреть этот часть Arch Wiki

Пользовательские каталоги доступны по умолчанию через HTTP: // локальный / ~ имя_пользователя / и показать содержимое ~ / public_html (это можно изменить в /etc/httpd/conf/extra/httpd-userdir.conf).

Так что сделайте так, чтобы вам пришлось создать каталог ~ / public_html тогда

Вы должны убедиться, что разрешения вашего домашнего каталога установлены правильно, чтобы Apache мог туда добраться. Ваш домашний каталог и ~ / public_html должны быть исполняемыми для других («остальной мир»):

$ chmod o+x ~
$ chmod o+x ~/public_html
$ chmod -R o+r ~/public_html

После этого вам не нужно помещать файл под /srv/http/ теперь вы можете использовать ~/public_html в качестве каталога разработки.

0