通过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::---
有什么想法吗?
答案 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);