php - 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>
我的问题是,对于file1和file3,它在所有页面中正确显示 URL,例如localhost/file1.php
and localhost/AttendanceFolder/file3.php
,但是对于file2.php,它为我提供了 Windows 资源管理器的绝对目录路径并将其作为文件读取,如下所示:
file:///C:/xampp/htdocs/file2.php
自然我无法访问此页面,因为它没有被服务器处理。有没有办法解决这个问题?我尝试查找它,但找不到类似的修复问题。任何帮助将非常感激。
解决方案
如果您不使用该echo
命令,则不会将任何内容写入输出。所以对于file1.php
and 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.php
URL。
它实际上永远不适合DOCUMENT_ROOT
在 URL 中使用。它是服务器本地的绝对路径名,但客户端使用的 URL 需要是相对于文档根目录的路径名,不包括它。此变量仅在从 PHP 本地访问文件时有用。
所以改为file2.php
:
<?php
if(condition)
{
echo "<a href='/file2.php'>File2</a>";
}
?>
推荐阅读
- kubernetes - Kubernetes Ingress 返回 502 Bad Gateway
- git - GitHub 如何处理移动的 Pull Request?
- php - 无法连接:用户“用户名”@“本地主机”的访问被拒绝(使用密码:是)
- python - Pandas - Groupby 或将多个数据帧剪切到垃圾箱
- python-3.x - Python 返回状态 200,但没有响应数据
- qt - Qt QQuickWidget 与 QGraphicsVideoItem 冲突
- javascript - Gatsby/React - 获取引荐网址
- google-chrome - 如何在 Chrome 中禁用 CSP 保护?
- swift - 仅针对 iOS 13 呈现 Storyboard ViewController 错误
- c# - 从数据库中的 ID 查找名称属性