包含文件中的PHP路径

时间:2014-06-26 00:58:22

标签: php relative-path

方案

我有两个文件:file.phpadmin/file.php

file.phprequire_once 'admin/functions.php';

admin/file.phprequire_once 'functions.php';

所以他们都包含了同一个文件。问题是在functions.php内,file_get_contentsinclude以及require之类的内容会将这些定义的路径视为相对于file.phpadmin/file.php,而不是functions.php

因此,我不能在不创建重复文件的情况下使用来自不同目录的相同functions.php我不认为这是最好的事情,因为我编辑一个,我必须记住另外编辑另一个。

这种情况的最佳做法是什么?

编辑:请参阅以下对已接受答案的评论。

4 个答案:

答案 0 :(得分:1)

  

这种情况的最佳做法是什么?

易。只需在配置文件中手动设置基本路径&不要再担心它 - 相对路径 - 再次。

那就是说,如果你试图简化加载文件的方式,你应该明确设置$BASE_PATH这样:

$BASE_PATH = '/full/path/to/your/codebase/here/';

如果您不知道文件系统基本路径是什么,只需将这行代码放在PHP代码中;比如index.php

echo "Your path is: " . realpath(dirname(__FILE__)) . "<br />";

然后加载该页面。靠近顶部的地方将是这个文本:

  

您的路径是:/ full / path / to / your / codebase / here /

然后使用该集,您可以将代码更改为:

然后将include_once设置为:

include_once $BASE_PATH  . 'includes/myfile.php';

有些人可能会说你应该直接使用$_SERVER['DOCUMENT_ROOT']甚至dirname(__FILE__),这意味着你可以通过这种方式简化代码的可移植性。但是为安装设置文件路径的方式可能会有所不同,所以它永远不会正常工作。你在奇怪的服务器怪癖上被抓住的可能性很高。

最好在移动代码时手动在配置文件中设置$BASE_PATH,而不是处理由$_SERVER之类的PHP常量引起的令人头疼的问题,这些问题在安装,设置和安装之间不一致。配置。

答案 1 :(得分:0)

如果您使用__DIR____FILE__等常量,那么它可能会让事情变得更容易。

的functions.php:

require __DIR__ . '/../foo.php'; // will be one directory lower than admin' 'require __DIR__ . '/bar.php'; // will be in admin directory

答案 2 :(得分:-1)

我特别总是在我的系统上创建一个包含路径和网址模式目录的文件。从我开始开发我的系统的那一刻起,任何包含或要求我做的事情,我都把这条完整的道路。在你的情况下,这是最好的事情。

一个细节,require_once不会再次调用该文件。它会检查该文件是否已被调用,然后忽略该调用。

答案 3 :(得分:-1)

没有简单的方法,无需修改两个function.php文件以使用绝对路径而不是将它们作为相对路径。即使你可以通过巧妙的技巧使当前的代码工作,它将使你的生活在未来变得更加困难。

我会在文件顶部声明一个变量,在其中添加一个路径,然后在整个函数中重用该变量

$my_root=$_SERVER['DOCUMENT_ROOT'];

$my_root="/usr/docs/etc/etc";  //if you don't trust the server.

然后只搜索文件中的路径并更改它们

用于管理文件夹外的文件 改变

require "folder1/folder2";

require $my_root . "/folder1/folder2";

并且用于管理文件夹中的文件

require "folder1/folder2";

require $my_root . "/admin/folder1/folder2";

对任何动态数据都遵循相同的逻辑。

这可能是一项繁琐的工作,但你最终会减少卷积,最后你可能会感激自己。即使您可以通过

使当前代码正常工作