php - PHP:有没有比 $_SERVER['DOCUMENT_ROOT'] 更容易的 docroot 参考?
问题描述
/
HTML在属性(默认情况下会转到 localhost/index.html 或 index.php)中使用斜杠 () 引用站点的“doc root”(例如 localhost/ href="/"
),但我没有看到简单的方法在 PHP 中指定“docroot”,就像 $_SERVER['DOCUMENT_ROOT'] 所做的那样......
我已经读过,如果我用/
(like '/some.log'
) 开始一条路径,则斜杠将引用 docroot,但我发现情况并非如此,因为我收到了文件写入权限错误,并且 realpath() 表示它正在尝试逐字写入到/的Linux根文件夹。
有没有一些简单的方法可以参考这个?我可以定义自己的常量,但基本文件(或普遍包含的文件)不一定是我们古老代码库中的常量......
解决方案
许多$_SERVER
值都填充了外部变量,并且DOCUMENT_ROOT
是其中之一。它甚至也不是标准的CGI变量。如果您在 Apache 上运行 PHP,您将拥有这样的变量,该变量具有在 Apache 的DocumentRoot
指令中设置的任何值。
现在,您可能假设文件系统路径和 URL 路径之间始终存在一对一的映射。情况并非总是如此。事实上,URL 重写和基于路由器的应用程序是当今的一种常态。
如果你加起来还有可能在 Apache 中配置虚拟主机和 PHP 的方法......事情是这样的$_SERVER['DOCUMENT_ROOT']
:
- 不一定存在
- 不一定正确
- 可能根本没有帮助
因此,根据您的用例,您有多种选择:
- 定义您自己的价值(我建议使用 PHP 常量)作为应用程序提升的一部分
- 硬编码一条主要路径
/
- … 甚至
$_SERVER['DOCUMENT_ROOT']
按原样使用 ;-)
推荐阅读
- node.js - Fs.readFile 返回未定义
- sql-server - 更快的 I/O 可以减少索引中的页面拆分吗?
- python - 如何使用熊猫读取其中项目是引用的文本文件
- android - 连接到BLE后获取最后收到的数据?
- kotlin - 为什么 Kotlin Lambda 函数在调用时不执行?
- c# - Multiple fixture instances
- python - 使用字典查找样式访问 numpy,但保留 numpy 数组操作
- .net - 为什么 String.IsNullOrWhiteSpace(vbNullChar) = False?
- python - 如何根据某些分组列取消pandas数据框?
- sql-server - SELECT COUNT(*) 查询是否必须进行全表扫描?