允许web服务器删除上传的文件,方式


Allowing web server to delete uploaded files, how?

我正在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)

我收到错误"警告:取消链接(路径/to/file):权限被拒绝"。

当用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?非常感谢。

我认为这是因为您的文件夹不属于处理php的apache用户。

因为您是用另一个用户而不是用apache用户创建文件夹/private_files/的,所以app/cache是用程序创建的,因此他拥有它并可以创建/删除它。我会将其更新为答案