我在symfony2中实现文件上传。我的文件实体归用户所有,代表上传的文件。除管理员和所有者外,任何人都无法访问上传的文件。为了解决这个问题(除了保护控制器),我将它们保存在一个不在/ web /下的目录中。我调用了这个目录/ private_files /(并且位于项目的根目录下)。
要允许Web服务器写入该目录,我运行了这个(我在Mac OS X Mavericks上):
$ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" private_files/
$ sudo chmod +a "www allow delete,write,append,file_inherit,directory_inherit" private_files/
上传工作正常。但是,尝试通过控制器删除文件时,使用
unlink($path)
我收到错误"警告:取消链接(路径/到/文件):权限被拒绝"。
使用ls -al
在终端上列出文件时,我会
drwxr-xr-x+ 3 myuser staff 204 Mar 23 11:59 .
drwxr-xr-x 24 myuser staff 816 Mar 21 19:51 ..
-rw-r--r-- 1 _www wheel 7395585 Mar 23 11:59 uploaded_file_1
我注意到上传的文件缺少可执行权限和" +"代表ACL。
使用unlink方法删除这些文件的正确方法是什么?文件是否应该继承ACL(如果是,如何)?或者应该在目录上应用chmod?非常感谢。
答案 0 :(得分:1)
我认为这是因为您的文件夹不属于处理php的apache用户。
因为您创建了文件夹/ private_files /而另一个用户没有使用apache用户,因为app / cache是以编程方式创建的,所以他拥有它并可以创建/删除。我会将其更新为答案