我正在尝试在文档根目录之外的文件上写入内容,即/var/www/html
。我想要访问的文件是/home/user/files/folder1/info.txt
,但我的 PHP 文件无法打开它(它甚至说它不存在,我用 进行了检查file_exists
)。我尝试以递归方式更改文件夹的所有者/home/user/files
(chown -R apache /home/user/files
),并且我还将 info.txt 文件的权限设置为 777,但似乎没有任何效果。
我在 CentOS 和 Apache2 上。
答案1
从httpd_selinux(8)
手册页中:
SELinux policy for httpd can be setup to not allowed to access users home directories. If you want to allow access to users home directo- ries you need to set the httpd_enable_homedirs boolean and change the context of the files that you want people to access off the home dir. setsebool -P httpd_enable_homedirs 1 chcon -R -t httpd_sys_content_t ~user/public_html
答案2
虽然我不熟悉 selinux,所以其他发帖人的观点可能正确,但这也可能有帮助:
- 创建从文件到
/var/www/html/
目录的符号链接 - 确保该选项
FollowSymLinks
已打开——您可以在主程序中httpd.conf
或使用.htaccess
以下/var/www/html
行执行此操作:Options FollowSymLinks
答案3
这是个不太可能的尝试,但您的 php 可能已在文件中得到强化php.ini
。在您的php.ini
文件中查找类似 的内容open_basedir = /path/to/web/root
。
open_basedir
将所有 PHP 文件操作限制在列出的目录及以下。