在不同的服务器环境中,PHP $_SERVER['DOCUMENT_ROOT']
超级全局有时会有斜线,有时不会。 我原以为这个问题直接关系到Apache DocumentRoot
在httpd.conf
文件中的定义:
即我会认为,如果httpd.conf
包含结尾斜杠:
<VirtualHost *:8880> DocumentRoot /var/www/live/current ...
那么echo $_SERVER['DOCUMENT_ROOT']
应该给/ var / www / live / current
如果httpd.conf
确实包含尾部的斜杠:
<VirtualHost *:8880> DocumentRoot /var/www/live/current/ ...
然后echo $_SERVER['DOCUMENT_ROOT']
应该给/ var / www / live / current /
Ubuntu 10.04就是这种情况,但在RHEL 5.5上,即使没有在Apache上定义,也会在$_SERVER['DOCUMENT_ROOT']
添加尾部斜线。
任何想法为什么发生这种情况 有没有我错过的configuration参数?
以供参考:
我不知道为什么你的虚拟主机之间的斜线正在改变。 顺便说一下,重要吗? 只需要添加一个新的斜杠到你的程序(删除如果双斜杠存在),问题就解决了。
我用
$realpath = realpath ($_SERVER['DOCUMENT_ROOT']."/"); $realpath = str_replace ("//", "/", $realpath);
Apache环境中的文档根目录可以在多个地方定义。
是的, httpd.conf
包含这些设置,但是它们可以被覆盖,因为这个文件用于默认configuration。
我build议你去检查虚拟主机configuration下的vhosts.d
和sites-available
目录。
Dom的回答是解决这个问题的方法,但是stefanvesca的陈述是为什么在不同的环境中你遇到双重“//”。 在本地机器上,在设置虚拟主机的.conf文件中,最有可能在定义的文档根目录的末尾添加了/,而设置其他环境的人却没有,反之亦然。
无论如何,当使用php的$ _SERVER ['DOCUMENT_ROOT']时,您将获得作为configuration结果的apache环境值。 这是“/”在一个环境中的原因,而“/”在另一个环境中。
build议的解决scheme:
$realpath = realpath ($_SERVER['DOCUMENT_ROOT']."/"); $realpath = str_replace ("//", "/", $realpath);
在所有的安装中都不起作用。
例如,在我的情况下:
$_SERVER['DOCUMENT_ROOT'] = "/www/site/" $_SERVER['DOCUMENT_ROOT']."/" = "/www/site//" realpath("/www/site//") = "/www/site" str_replace("//", "/", "/www/site") = "/www/site"
和以前一样的问题。
可能你应该修改第一条指令:
$realpath = realpath ($_SERVER['DOCUMENT_ROOT'])."/";
蓟