Я использую следующий код для загрузки и перемещения файла в папку "film_images":
$filepath = '../images/film_images/';
echo '<br />Trying to store file at ' . $filepath;
if (!move_uploaded_file(
$_FILES['teaserimage']['tmp_name'],
sprintf($filepath . '%s.%s',
'test',
$ext))) {
throw new RuntimeException('Failed to move uploaded file.');
}
Однако, как многие люди здесь, я всегда получал
Не удалось открыть поток: разрешение отклонено
исключение в PHP. Затем я пошел на сервер и, используя команду setfacl
я дал пользователю rw-
разрешение на rw-
к www-data
, являющемуся пользователем этого скрипта PHP. Используя rw-
я все еще получил исключение. Только когда я переключил права на rwx
, т.е. когда я дал полный контроль над этой папкой www-data
, это сработало. Теперь мне интересно две вещи:
Хорошо, я думаю, что понял. Спасибо Paulius S. и его ответ, который заставил меня на правильном пути.
Папка ist принадлежит мне. Во-первых, после ответа на этот пост я использую
chmod g+rwxs dirname
чтобы файлы, созданные в каталоге, принадлежали группе, к которой я принадлежу. В частности, www-данные не являются частью этой группы. Затем, используя
setfacl -m u:www-data:rwx dirname
Я предоставляю полный доступ к каталогу для пользовательских www-данных. Теперь www-данные могут загружать файл, но этот файл автоматически принадлежит к группе, указанной выше (какие WW-данные не принадлежат), и, следовательно, www-data не имеет права выполнения, хотя он может выполняться в папке в целом.
Вы должны установить разрешение по умолчанию для папки, если создаете новые файлы, сначала chmod it: chmod g+s images/film_images//set permission what you need
во-вторых, вам нужно установить разрешения по умолчанию для создания файлов/папок:
setfacl -R -d -m group:www-data:rwx /path/to/your/dir //set permission what you need
user:www-data:rwx
меня есть запись поdefault:user:www-data:rw-
. С этой настройкой я снова получаю сообщение об ошибке «Отказано в доступе». Есть идеи, что пошло не так? Кажется, работает только с записи user: www-data: rwx.