PHP正在上传没有读取权限的文件
问题描述:
当通过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::---
任何想法?
答
我想通了。怀疑这是一个ACL问题。上传目录中的ACL的default:user::-wx
行指示应使用-wx
作为用户权限创建新文件。运行sudo setfacl -d -m u::rwx <upload dir>
修复了这个问题。
答
什么是你的umask?
<?php
umask(0022); //unset the write bits, should yield rw-r-r-
//Then your file magic
file_put_contents($filename, $content);
什么是php的[umask](http://php.net/manual/en/function.umask.php)设置? –
我的第一个想法是使用umask,但你也可以尝试setfacl:http://unix.stackexchange.com/questions/1314/how-to-set-default-file-permissions-for-all-folders-files- IN-A-目录 – MortenSickel