如何在PHP中查找父目录?

4

我有一个HTML代码,它运行良好:

<link href="/mywebsite/styles.css" rel="stylesheet" type="text/css"/>

然而,这段 PHP 代码却不能:
require('/mywebsite/db.php');

db.php和styles.css都在同一个目录中。我可以使用:

require(dirname(__DIR__) . '/db.php');

但看起来有点丑陋。我错过了一些明显的东西吗?
3个回答

3

我有什么遗漏的吗?

是的。:)

require('/mywebsite/db.php');

/系统根目录(如果你使用Windows,则为C:\)。它与您的网站托管的URL无关,而与运行网站的系统有关。我猜您的网站保存在类似/users/aygosis/webroot/index.php的地方。在您的系统上可能不存在/mywebsite/db.php

require dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'db.php'

这实际上是一个不错的做法。你还可以在一个随处可用的文件中建立一个基础,并让所有包含引用它为相对路径:

define('ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);

...

require ROOT . 'db.php';

实际上,这些都已经安装在我的系统上了。我已经安装了Apache、MySQL和PHP(WIN)。db.php和styles.css都在我的计算机上的同一个目录中,位于我的htdocs文件夹中。 - Ay Go Sis
@Aygo 是的,但是在浏览器中包含CSS文件时,它是相对于URL的。在服务器上包含PHP文件是相对于系统的。这两者通常不对应。 - deceze

1

这里的常见方法是定义一些与文件系统相关的常量,然后使用它们,例如在我自己编写的MVC框架中,我定义了以下内容:

if (!defined('DS')) {
    /**
     * Shorter Directory Separator Constant
     */
    define('DS', DIRECTORY_SEPARATOR);
}

if (!defined('ROOT')) {
    /**
     * Application Directory path Constant
     */
    define('ROOT', dirname(dirname(__FILE__)));
}

我会像这样引用文件:

require ROOT . DS . 'System' . DS . 'Library' . DS . 'compatibility.php';

0
在你的php.ini配置文件中,将你的网站文件所在位置添加到include_path中。这样当你调用include()或require()时,它就会在该目录中搜索。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接