我需要向我的 apache 配置添加外部路径。 (httpd)
所以,我在我的httpd根文件夹中创建了到此路径的符号链接,路径是:/var/log/httpd/(我想直接在我的项目中显示日志)
我可以通过浏览器输入以下内容来访问所有路径:http://127.0.0.1/httpd/
但是当我尝试从 php 文件访问它时,php 会抛出一个错误:
代码:
function logInfo() {
$log_path = $_SERVER['DOCUMENT_ROOT'] . "/httpd/local.cmp-error_log";
$php_log = file_get_contents($log_path);
print_r ($php_log);
}
错误:
[Sun Jul 17 23:45:19.960292 2016] [:error] [pid 19451] [client 127.0.0.1:34718] PHP Warning: file_get_contents(/home/txx/http/www/httpd/local.cmp-error_log): failed to open stream: Operation not permitted in /home/txx/http/www/base_home/config/sys.php on line 8
这里的错误在哪里?
答案1
基本思想是您无法访问文档根目录之外的文件。这就是文档根的重点。有多种保护措施可以防止 Apache 跟踪根目录之外的符号链接。你需要使能够FollowSymlinks
在包含链接的目录中,但如果您可以浏览文件,则意味着这已经完成。
您还需要确保 PHP 不限于文档根目录。看这个堆栈溢出问题:检查php.ini
不包含该open_basedir
设置。另一个潜在的限制是 SELinux,如果您的机器已经过强化,那么 PHP 可能会被限制在某些预定义的目录中,特别是可能会被禁止访问主目录。也可以看看访问文档根目录之外的文件。
如果您无法访问 Web 根目录之外的内容,或者您不想过多削弱系统的安全性,则可以将文件放在 Web 根目录下,而不是让 Apache 和 PHP 寻找其他地方。 A绑定挂载to/var/log/httpd
创建挂载目录/var/www/dangerous/logs
的视图。您可以而且可能应该将该视图设置为只读。/var/log/httpd
/var/www/dangerous/logs