document_root打开文件,而不是在Echo中提供绝对URL



我正在使用Navbar,这就是我的目录结构的方式:

-- localhost
  |- navbar.php
  |- file1.php
  |- file2.php
  |-- AttendanceFolder
    |- file3.php

在Navbar中,我分配了这样的URL:

<a href="<?php $_SERVER['DOCUMENT_ROOT'] ?>/file1.php">File1</a>
<?php
   if(condition) 
   { 
      echo "<a href='" . $_SERVER['DOCUMENT_ROOT'] . "/file2.php'>File2</a>";
   }
?>
<a href="<?php $_SERVER['DOCUMENT_ROOT'] ?>/AttendanceFolder/file3.php">File3</a>

我的问题是,对于 file1 file3 ,它在所有页面中正确显示URL,例如localhost/file1.phplocalhost/AttendanceFolder/file3.php,但对于 file2.php ,它为我提供了Windows Explorer的绝对目录路径,并将其读取为这样的文件:

file:///C:/xampp/htdocs/file2.php

自然,我无法访问此页面,因为它没有由服务器处理。有什么方法可以解决此问题?我尝试查找它,但找不到解决方案的类似问题。

如果您不使用echo命令,则没有写入输出中。因此,对于file1.phpfile2.php,它忽略了$_SERVER['DOCUMENT_ROOT']。您的代码等同于:

<a href="/file1.php">File1</a>
<?php
   if(condition) 
   { 
      echo "<a href='" . $_SERVER['DOCUMENT_ROOT'] . "/file2.php'>File2</a>";
   }
?>
<a href="/AttendanceFolder/file3.php">File3</a>

$_SERVER['DOCUMENT_ROOT']的值是C:/xampp/htdocs,因此将其放入file2.php URL。

在URL中使用DOCUMENT_ROOT实际上永远是不合适的。它是服务器本地的绝对路径名,但是客户端使用的URL需要是相对于文档root而不是包括该的路径名。该变量仅在从php php

访问本地的文件时才有用。

所以将file2.php更改为:

<?php
   if(condition) 
   { 
      echo "<a href='/file2.php'>File2</a>";
   }
?>

最新更新