php - PHP中相对路径还是绝对路径以及如何设置

标签 php relative-path absolute-path

我正在开发一个网站,我正在尝试访问该网站的主目录,但我不知道如何进行设置。我想做的是通过 /_inc/config.php 包含 _inc/config.php 而不必使用 ../_inc/config.php 有什么想法如何添加这个吗?

最佳答案

一般来说,处理路径时需要解决两个不同的问题:

  1. 文件系统路径(您需要将其用于 include 文件)
  2. URL 路径(在应用程序内部构建 URL 时需要使用该路径)

这是两种不同的野兽。

文件系统路径

如果您的应用程序有单个入口点(例如 index.php,然后在检查 URL 查询字符串后委托(delegate)给适当的业务逻辑),那么您可以这样做

$ROOT_DIR = dirname(__FILE__);

在该文件中,然后您可以通过附加到 $ROOT_DIR 来为发行版中的任何文件组成文件系统路径.

如果您的应用程序没有单一入口点,则此选项不可用,您可以使用以下替代方案:

  1. 在任何地方都使用相对路径(这是您希望避免的)。
  2. 从当前入口脚本中调用“路径解析”函数,将脚本的相对路径作为参数传递到基目录,例如:

    // for a script in $ROOT_DIR.'/commands' do this:

    $ROOT_DIR = resolve_root(__FILE__, DIRECTORY_SEPARATOR.'commands');

    额外的相对路径信息将启用 resolve_root($filename, $relative)找出 dirname($filename) 的哪一部分是应用程序根。然而,该技术并不实用,并且要求您在每个应用程序入口点内对相对路径名进行硬编码,因此我建议不要使用它。

  3. 要求您的应用程序配置包含具有“根”路径的硬编码变量,类似于 $ROOT_DIR多于。如果您的应用程序有安装程序,那么在安装过程中,您可以通过执行以下操作来让它准确解析根路径:

$installer_dir = dirname(__FILE__); // assume this is root path + "/install" $ROOT_DIR = realpath($installer_dir.DIRECTORY_SEPARATOR.'..');

然后安装程序会将此路径写入您的应用程序配置。如果您的应用程序没有安装程序,那么您需要手动将基本路径硬编码到您的配置或使用其他选项。

使用$_SERVER['DOCUMENT_ROOT']并不是这个问题的令人满意的解决方案。 仅当您的应用程序安装在文档根目录时,它才会执行此任务。如果您的文档根目录是 /var/www并且您的应用程序安装在 /var/www/app ,那么您无法知道应该添加 /app到路径。

更新: 关于提到运行的答案pwd在 Linux 上:请不要这样做。曾经。为每个 HTTP 请求调用系统 shell 会比用户单击链接的速度更快地终止 Web 服务器。它可以适用于已知用户数量较少且对性能没有真正期望的内部应用程序,但如果您愿意使用快速而肮脏的解决方案,为什么不简单地硬编码该路径呢?

网址路径

在任何实际应用程序中,您还需要创建与应用程序的基本 URL 相关的 URL(例如,执行 <img src="$BASE_URL/images/icon.png" /> )。

同样,如果您的应用程序有一个入口点(例如 index.php ),那么您可以使用 $_SERVER['REQUEST_URI']解析应用程序的“基本”URL。一个简单的实现(应该适合您)很简单:它是 URL 路径中 index.php 之前的部分。 。然而,解决不同 Web 服务器和 PHP 配置的怪癖的防弹实现是 somewhat more complicated .

如果您的应用程序没有单个入口点,那么您会遇到与文件系统路径相同的问题。解决方案也是相同的:手动对配置中的 URL 进行硬编码,让安装程序在安装过程中对 URL 进行硬编码,或者根据需要使用相对路径的硬编码知识来解析它。

关于php - PHP中相对路径还是绝对路径以及如何设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650517/

相关文章:

php - 将文本列从 mysql 以 HTML 格式加载到 php

php - Yii2 检查延迟加载是否已经完成

php - 使用输入序列时如何更新排序顺序?

c# - Silverlight 中的 URI 相对资源

cordova - Phonegap : how to use absolute paths on both Android, iOS 和浏览器?

java - 从定义位置的字符串变量获取引用

php - 在 Laravel 中将 JSON 错误消息作为 "error"对象返回

javascript - Ajax中的相对路径在不同环境下工作方式不同

node.js - websockets 的相对路径

ruby - 相对于绝对路径转换(对于 perforce 仓库路径),我可以更好地做到这一点吗?