Php 始终拥有正确的文档根字符串的好方法是什么?

Php 始终拥有正确的文档根字符串的好方法是什么?,php,Php,如果我有菜单,比如 <a href="index.php">home</a> <a href="aboutus.php">about us</a> <a href="contact.php">contact us</a> 现在菜单是这样的 <a href="<?=getRoot();?>index.php">home</a> <a href="<?=getRoot();?&g

如果我有菜单,比如

<a href="index.php">home</a>
<a href="aboutus.php">about us</a>
<a href="contact.php">contact us</a>
现在菜单是这样的

<a href="<?=getRoot();?>index.php">home</a>
<a href="<?=getRoot();?>aboutus.php">about us</a>
<a href="<?=getRoot();?>contact.php">contact us</a>

the link should come out as  http://localhost/domain/aboutus.php (for example)
but it comes out as http://localhost:/domain/portfolio/aboutus.php (and this is wrong).

该链接应显示为http://localhost/domain/aboutus.php (例如)
但结果是http://localhost:/domain/portfolio/aboutus.php (这是错误的)。

无论menu.php在何处包含,始终获取正确文档根的最佳方法是什么?

如果URL以单斜杠(
/
)开头,则它将链接到根文件夹。只要您的页面位于根文件夹中(即,不在根文件夹中),则以下操作将起作用:

<a href="/index.php">home</a>
<a href="/aboutus.php">about us</a>
<a href="/contact.php">contact us</a>


如果您在子域中,则将
/
更改为
/subdomain/

我在自制框架中使用以下内容。。。将它放在应用程序根文件夹中的一个文件中,并简单地将其包括在内

define('ABSPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$tempPath1 = explode('/', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME'])));
$tempPath2 = explode('/', substr(ABSPATH, 0, -1));
$tempPath3 = explode('/', str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])));

for ($i = count($tempPath2); $i < count($tempPath1); $i++)
    array_pop ($tempPath3);

$urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3);

if ($urladdr{strlen($urladdr) - 1}== '/')
    define('URLADDR', 'http://' . $urladdr);
else
    define('URLADDR', 'http://' . $urladdr . '/');

unset($tempPath1, $tempPath2, $tempPath3, $urladdr);
define('ABSPATH',str\u replace('\\','/',dirname('uuuuu FILE')。/');
$tempPath1=explode('/',str\u replace('\\','/',dirname($\u SERVER['SCRIPT\u FILENAME']));
$tempPath2=分解('/',substr(ABSPATH,0,-1));
$tempPath3=explode('/',str_replace('\\','/',dirname($\\服务器['PHP_SELF']));
对于($i=count($tempPath2);$i

上面的代码定义了两个常量。ABSPATH包含应用程序根目录(本地文件系统)的绝对路径,而URLADDR包含应用程序的完全限定URL。它在mod_重写情况下确实可以工作。

是的,我在想,但是如果它的某个特定文件不在根目录中,而不是必须去更改菜单文件中的某些文件链接信息,php如何始终检测它的位置?
define('ABSPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$tempPath1 = explode('/', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME'])));
$tempPath2 = explode('/', substr(ABSPATH, 0, -1));
$tempPath3 = explode('/', str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])));

for ($i = count($tempPath2); $i < count($tempPath1); $i++)
    array_pop ($tempPath3);

$urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3);

if ($urladdr{strlen($urladdr) - 1}== '/')
    define('URLADDR', 'http://' . $urladdr);
else
    define('URLADDR', 'http://' . $urladdr . '/');

unset($tempPath1, $tempPath2, $tempPath3, $urladdr);