PHP 8.3部署IIS 10时文档根目录异常,绝对路径include失败求助
解决PHP绝对路径Include失败的问题
问题核心
新服务器上,PHP把以/开头的路径解析成了磁盘根目录H:\,而旧服务器是解析到网站根H:\www,导致大量带/的include语句找不到文件。
可行解决方案
方案1:自动加载重写函数(推荐,无需修改现有代码)
写一个全局前置脚本,重写include/require系列函数,自动把开头的/替换为网站根路径:
- 在
H:\www下创建prepend.php文件,内容如下:
<?php // 重写include函数 function include($path) { // 判断路径是否以/开头 if (substr($path, 0, 1) === '/') { // 替换为网站根目录路径 $path = $_SERVER['DOCUMENT_ROOT'] . $path; } // 调用原生include函数 return call_user_func_array('include', [$path]); } // 同理重写其他包含函数 function require($path) { if (substr($path, 0, 1) === '/') { $path = $_SERVER['DOCUMENT_ROOT'] . $path; } return call_user_func_array('require', [$path]); } function include_once($path) { if (substr($path, 0, 1) === '/') { $path = $_SERVER['DOCUMENT_ROOT'] . $path; } return call_user_func_array('include_once', [$path]); } function require_once($path) { if (substr($path, 0, 1) === '/') { $path = $_SERVER['DOCUMENT_ROOT'] . $path; } return call_user_func_array('require_once', [$path]); }
- 修改php.ini配置,让PHP在每个脚本执行前自动加载这个文件:
auto_prepend_file = "H:\www\prepend.php"
如果没有权限修改php.ini,若服务器用Apache且允许.htaccess,可以在网站根目录的.htaccess里加:
php_value auto_prepend_file "H:\www\prepend.php"
方案2:调整服务器环境配置(依赖特定环境)
如果用Apache+PHP模块,可检查是否开启了让PHP把/解析为网站根目录的配置(比如mod_php的相关文档根设置)。不过这个方法兼容性较差,不同服务器环境配置差异大。
方案3:批量替换代码(万不得已时)
如果上面的方法都无法生效,只能批量修改代码里的路径引用:
- 用IDE的全局替换功能(比如VSCode的Ctrl+Shift+F),把
include("/替换为include(",或者直接替换为include($_SERVER['DOCUMENT_ROOT']."/ - 也可以用Windows命令行工具批量处理目录下的所有PHP文件
内容的提问来源于stack exchange,提问作者user2969509
相关产品推荐
相关产品推荐

