PHP正在上传没有读取权限的文件

时间:2016-01-29 20:04:32

标签: php apache ubuntu file-upload permissions

通过PHP上传图像时,正在创建生成的文件,其权限不允许Apache在以后的请求中读取文件。上传文件的示例权限如下所示:

--w-rw----+  1 www-data www-data 76551 Jan 29 19:52 original.jpeg

包含文件夹的权限如下所示:

drwxr-xr-x+ 41 www-data www-data 4096 Jan 29 19:52 media

Apache正在运行 www-data 此问题仅发生在暂存(当然)。在我的开发环境中,文件上传没有问题,因此它不太可能是代码问题。我正在使用Ubuntu的ACL,我怀疑这可能与它有关。

上传目录中getfacl的结果:

# file: web/media
# owner: www-data
# group: www-data
user::rwx
user:ubuntu:rwx         #effective:r-x
group::r--
mask::r-x
other::r-x
default:user::-wx
default:user:www-data:rwx 
default:user:ubuntu:rwx
default:group::r-- 
default:mask::rwx
default:other::--x

getfacl对文件本身的结果:

# file: web/media/original.jpeg
# owner: www-data
# group: www-data
user::-w-
user:www-data:rwx       #effective:rw-
user:ubuntu:rwx         #effective:rw-
group::r--
mask::rw-
other::---

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我明白了。怀疑这是一个ACL问题。上载目录中ACL的default:user::-wx行指示应使用-wx作为用户权限创建新文件。正在运行sudo setfacl -d -m u::rwx <upload dir>修复此问题。

答案 1 :(得分:0)

你的umask是什么?

<?php

umask(0022); //unset the write bits, should yield rw-r-r-

//Then your file magic
file_put_contents($filename, $content);