过去几周我在客户网站上遇到一个问题,他们无法将文件上传到网站根目录之外的目录。
查看错误日志后,似乎 PHP 正在吐出错误,指出上传目录不可写。此目录恰好位于 Web 根目录之外,但open_basedir
服务器上没有任何限制。
我有一个执行以下代码的测试脚本:
$path = '/var/www/vhosts/testdir';
$writable = is_writable($path) ? 'is writable' : 'is not writable';
echo "$path $writable";
当我从命令行运行脚本时,php test.php
目录是可写的。但是,当我从浏览器访问页面时,它不可写。
Web 根目录和testdir
都属于同一个用户和组,并且都755
设置了权限。我尝试将两个目录的所有者都设置为,但apache
无济于事。
当我将上传目录的权限设置为时,777
它可以工作,但显然我不希望所有文件都被所有人读取和执行。
发行版是 CentOS 6.7。
我是否忽略了这里一些明显的东西?
答案1
您的问题几乎肯定是 SELinux。“Web 根目录”之外的文件和目录不太可能具有正确的 SELinux 上下文,例如 httpd_sys_content_t。
您必须更改您想要写入的文件/目录上的 SELinux 上下文。
答案2
运行 httpd 的用户或组必须具有写权限。PHP 从 httpd 继承了此功能。