2016-01-29 106 views
0

当通过PHP上传图片时,生成的文件的权限不允许Apache在稍后的请求中读取文件。PHP正在上传没有读取权限的文件

--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数据这个问题只发生在分期(用于上传的文件看起来像本例中的权限当然)。在我的开发环境中,文件上传没有问题,所以它不可能是代码问题。我正在使用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::--- 

任何想法?

+0

什么是php的[umask](http://php.net/manual/en/function.umask.php)设置? –

+0

我的第一个想法是使用umask,但你也可以尝试setfacl:http://unix.stackexchange.com/questions/1314/how-to-set-default-file-permissions-for-all-folders-files- IN-A-目录 – MortenSickel

回答

2

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

0

什么是你的umask?

<?php 

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

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