找源码首页 - 技术文章

设置IIS下PHP环境的DOCUMENT_ROOT

更新日期:2014-09-26 16:23:46

在WINDOWS下的PHP总会出现DOCUMENT_ROOT为空,无值的问题.

设置IIS下PHP环境的DOCUMENT_ROO

这两天把一网站架到了IIS服务器上,却发现在读取 $_SERVER['DOCUMENT_ROOT'] 的时候是空值。翻阅了PHP的文档,发现对该变量的解释为:“当前运行脚本所在的文档根目录。在服务器配置文件中定义。”这才突然想到,Apache的配置文件里确实有 DocumentRoot 这一项,而IIS则没有这个配置文件。好吧,既然没有,那就值得用别的方式来“修复”IIS服务器了。把下面这段代码加到程序中,注意必须在你调用 $_SERVER['DOCUMENT_ROOT'] 之前哦!

  1. if(empty($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['SCRIPT_FILENAME'])) {
  2.     $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr($_SERVER['SCRIPT_FILENAME'], 0, 0 - strlen($_SERVER['PHP_SELF'])));
  3. }
  4. if(empty($_SERVER['DOCUMENT_ROOT']) && !empty($_SERVER['PATH_TRANSLATED'])) {
  5.     $_SERVER['DOCUMENT_ROOT'] = str_replace( '\\', '/', substr(str_replace('\\\\', '\\', $_SERVER['PATH_TRANSLATED']), 0, 0 - strlen($_SERVER['PHP_SELF'])));
  6. }

解决方法二:

使用 php.iis.net 上的安装方法直接安装 php 会出现$_SERVER["DOCUMENT_ROOT"]为空的问题。

解决办法:将*.php映射到 C:\WINDOWS\system32\inetsrv\fcgiext.dll 即解决。