Windows10 IIS环境下PHP7.2.3缺失$_SERVER['DOCUMENTROOT']的解决咨询
解决IIS下PHP 7.2.3缺失
$_SERVER['DOCUMENTROOT']的问题 我之前在Windows IIS环境升级PHP到7.x版本时,也碰到过一模一样的问题——原本依赖的$_SERVER['DOCUMENTROOT']突然消失了,折腾了好一阵才搞定,给你几个靠谱的方案:
方案1:配置IIS FastCGI环境变量(推荐)
这是最彻底的解决办法,让IIS主动把DOCUMENT_ROOT传递给PHP:
- 打开IIS管理器,找到FastCGI设置(服务器节点或网站节点下均可找到)
- 找到你当前使用的PHP 7.2.3对应的条目,右键选择「编辑」
- 在「环境变量」部分,点击「添加」,输入:
- 名称:
DOCUMENT_ROOT - 值:
%APPL_PHYSICAL_PATH%
- 名称:
- 保存配置后,重启IIS和PHP-FastCGI进程,
$_SERVER['DOCUMENTROOT']就会正常出现了
方案2:通过php.ini自动补全变量
如果不想动IIS配置,可以用PHP的自动前置脚本功能来定义这个变量:
- 在你的PHP安装目录下创建一个脚本,比如
fix_docroot.php,内容如下:
if (!isset($_SERVER['DOCUMENTROOT'])) { $_SERVER['DOCUMENTROOT'] = $_SERVER['APPL_PHYSICAL_PATH']; }
- 打开
php.ini,找到auto_prepend_file配置项,修改为:
auto_prepend_file = "C:\path\to\your\fix_docroot.php"
(注意替换成你实际的脚本路径)
3. 重启IIS,这样所有PHP脚本运行前都会自动执行这个脚本,补上缺失的变量
方案3:直接使用替代变量
如果只是临时应急或者不想改配置,IIS下还有几个可以直接替代的变量:
$_SERVER['APPL_PHYSICAL_PATH']:和DOCUMENTROOT作用完全一致,就是网站的物理根目录__DIR__:当前脚本所在的目录,如果你需要从当前文件定位到根目录,可以用realpath(__DIR__ . '/../')这类写法(根据你的目录结构调整)
为什么升级后会缺失?
简单说,PHP 7.2+在IIS FastCGI模式下的默认行为有变化,不再自动将IIS的站点物理路径映射为DOCUMENT_ROOT环境变量,所以需要我们手动配置或者补全。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

