方案
我有两个文件:file.php
和admin/file.php
file.php
有require_once 'admin/functions.php';
admin/file.php
有require_once 'functions.php';
所以他们都包含了同一个文件。问题是在functions.php
内,file_get_contents
和include
以及require
之类的内容会将这些定义的路径视为相对于file.php
和admin/file.php
,而不是functions.php
。
因此,我不能在不创建重复文件的情况下使用来自不同目录的相同functions.php
我不认为这是最好的事情,因为我编辑一个,我必须记住另外编辑另一个。
这种情况的最佳做法是什么?
编辑:请参阅以下对已接受答案的评论。
答案 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";
对任何动态数据都遵循相同的逻辑。
这可能是一项繁琐的工作,但你最终会减少卷积,最后你可能会感激自己。即使您可以通过
使当前代码正常工作