首页 > 解决方案 > DOCUMENT_ROOT 打开文件而不是在 echo 中给出绝对 URL

问题描述

我正在使用导航栏,这就是我的目录结构:

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

在导航栏中,我分配了这样的 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>

我的问题是,对于file1file3,它在所有页面中正确显示 URL,例如localhost/file1.phpand localhost/AttendanceFolder/file3.php,但是对于file2.php,它为我提供了 Windows 资源管理器的绝对目录路径并将其作为文件读取,如下所示:

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

自然我无法访问此页面,因为它没有被服务器处理。有没有办法解决这个问题?我尝试查找它,但找不到类似的修复问题。任何帮助将非常感激。

标签: phppathglobal-variables

解决方案


如果您不使用该echo命令,则不会将任何内容写入输出。所以对于file1.phpand file2.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.phpURL。

它实际上永远不适合DOCUMENT_ROOT在 URL 中使用。它是服务器本地的绝对路径名,但客户端使用的 URL 需要是相对于文档根目录的路径名,不包括它。此变量仅在从 PHP 本地访问文件时有用。

所以改为file2.php

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

推荐阅读