PHP - 头文件 - 相对路径问题

3
我有一个使用php编写的Web应用程序。我有一个名为header.php的文件,其中包含开放的html标签、元数据、css和js文件。
在这个应用程序中有多个文件夹,我已经在header.php中给出了相对路径来引用css和js文件。但是,当我在其他文件中包含这个header.php文件时,比如说./test-folder/my-file.php,相对路径就会失效。
因此,我不得不在需要的地方提供绝对路径。但是每次上传到服务器时都必须更改这些路径,这很麻烦。是否有其他方法可以解决这个问题?
谢谢。
4个回答

11
不要使用静态值作为路径,而是定义一个常量作为文档根目录,并使用该常量。
define('ROOT_PATH',$_SERVER['DOCUMENT_ROOT']);

在包含文件时,您可以使用此常量。

include ROOT_PATH.'/some_dir/file.php';

谢谢你的回答。那么我需要在哪个文件中定义ROOT_PATHheader.php可以吗? - Anji
1
@Anji:你应该有一个“config”文件,其中包含配置变量,并在应用程序启动时被包含。 - Shakti Singh
那包含 config 文件不是同样的问题吗? - Anji
@anji:不,你不能把config文件放在文档根目录中并直接包含它,例如include 'config.php'。配置文件的包含应该在你的根index.php文件中。 - Shakti Singh

2

1

相对路径是相对于当前工作目录(cwd)的。如果您只是包含另一个文件,则cwd不会更改
如果您想要相对于当前脚本文件路径的路径,可以使用例如:

require dirname(__FILE__).'/some_dir/file.php';

或者从 PHP 5.3 开始

require __DIR__.'/some_dir/file.php';

参见:http://docs.php.net/language.constants.predefined


0
如果我正确理解了你的问题,你只是想知道你的应用程序的根文件夹,而无需硬编码它。
更简单的方法是像Shakti回答的那样定义一个常量。
但是,你实际上可以在根文件夹中拥有一个具有唯一名称(例如“foobar”)的文件,然后从当前目录向上遍历树,直到找到foobar。

抱歉,我无法理解“foobar”文件的内容。 - Anji
假设你的 /var/www/public_html/ 目录下有一个名为 "foobar" 的文件,而你的当前工作目录 (cwd) 是未知的,但肯定是类似于 /var/www/public_html/my/current/folder/ 这样的路径。当你找不到 foobar 文件时,请向上一级目录查找。只要找到 foobar 文件,你就得到了根目录。 - mmhan
是的,基本上 foobar 用于获取根目录。谢谢。 - Anji

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