相对路径或绝对路径以及如何在PHP中设置

use*_*288 2 php relative-path absolute-path

我有一个网站,我正在努力,我正在尝试去网站的主目录,我不知道如何设置它.我想要做的是包括_inc/config.php通过/_inc/config.php而不是必须使用../_inc/config.php任何想法如何添加这个?

Jon*_*Jon 6

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

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

这是两种不同的野兽.

文件系统路径

如果您的应用程序只有一个入口点(例如index.php,在检查URL查询字符串后委托给相应的业务逻辑),那么您可以执行

$ROOT_DIR = dirname(__FILE__);
Run Code Online (Sandbox Code Playgroud)

在该文件中,然后您可以通过附加组成分发中任何文件的文件系统路径$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配置的怪癖的防弹实现稍微复杂一些.

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