我使用以下代码上传文件并将文件移至“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-
提供了权限www-data
,这是运行此PHP脚本的用户。使用rw-
我仍然有例外。只有当我将权限切换到rwx
时,即当我对此文件夹进行www-data
完全控制时,它才有效。现在我想知道两件事:
答案 0 :(得分:1)
如果要创建新文件,您需要在文件夹上设置默认权限,首先是chmod: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
答案 1 :(得分:1)
好的,我想我明白了。感谢Paulius S.和他的回答,这让我走上正轨。
该文件夹归我所有。首先,按照this post的答案,我使用
chmod g+rwxs dirname
确保目录中创建的文件归我所属的组所有。特别是,www-data不属于该组。然后使用
setfacl -m u:www-data:rwx dirname
我完全访问用户www-data的目录。现在www-data可以上传一个,但是这个文件自动属于上面设置的组(www-data不属于),因此www-data没有执行权,尽管他一般可以在文件夹中执行。