lin*_*pin 4 php symlink files apache-httpd
我需要为我的 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);
}
Run Code Online (Sandbox Code Playgroud)
错误:
[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
Run Code Online (Sandbox Code Playgroud)
这里的错误在哪里?
基本思想是您不能访问文档根目录之外的文件。这就是文档根的重点。有几种保护措施可以防止 Apache 遵循根目录之外的符号链接。您需要在包含链接的目录中启用FollowSymlinks
,但如果您可以浏览文件,则表示这已经完成。
您还需要确保 PHP 不限于文档根目录。请参阅此堆栈溢出问题:检查php.ini
不包含open_basedir
设置。另一个潜在的限制是 SELinux,如果你的机器已经加固,那么 PHP 可能会被限制在一些预定义的目录中,特别是可能被禁止访问主目录。另请参阅访问文档根目录外的文件。
如果您无法访问 web 根目录之外的内容,或者您不想过多地削弱系统的安全性,您可以将文件放在 web 根目录下,而不是让 Apache 和 PHP 寻找其他地方。to的绑定挂载在挂载处创建目录的视图。您可以并且可能应该将视图设为只读。/var/log/httpd
/var/www/dangerous/logs
/var/log/httpd
/var/www/dangerous/logs