在我的PHP框架中,我想使用另一个PHP框架的几个函数。其他框架只有一个门户脚本(index.php)。它从那里做所有事情(引导程序,呼叫控制器和动作等)。另一个框架包括以./
开头的所有文件另一个框架的index.php:
include './inc/bootstrap.php';
在bootstrap.php中:
include './inc/configs.php';
include './inc/database.php';
等等
所以看起来所有包含都与文件夹index.php相关。
有没有办法设置环境,所以我可以从另一个文件夹(我的框架中的某个地方,所以一个完全不同的文件夹,而不是门户网站脚本)引导框架?
include_path
包含.
,我已经尝试使用include_path中的其他框架文件夹,但这并没有改变任何内容。
我猜它是./ includes,但是我不能改变它们(其他框架不是我的框架的一部分,并且会在一段时间内更新)。有没有办法绕过他们(或者我做错了)?
答案 0 :(得分:5)
开头的路径。或/忽略include_path,因为它们是相对于工作目录的。
所以唯一的方法是使用PHP函数chdir更改工作目录:
在你的框架中:
chdir('/path/of/the/other/framework'); // change the working directory
require '/path/of/the/other/framework/bootstrap.php';
// optionally you can reset the working directory
chdir(dirname(__file__));
答案 1 :(得分:1)
当你去包含另一个框架的bootstrap文件时,你需要首先chdir()
进入该目录,然后你可以包含它,并且它将做的所有后续包含将相对于引导程序正确文件。
答案 2 :(得分:0)
您应该可以使用set_include_path( $path_to_include_files )
执行此操作。如果您仍然遇到问题,则可能意味着您的脚本中还有另一个地方正在将include_path
设置为其他值。
答案 3 :(得分:0)
文件按顺序包含在内 包含路径,在这个例子中, 目录结构如下:
。
│- index.php
│- t1
││- a
│└─ b
└─ t2
| - b
└─ c
<?php
set_include_path('t1' . PATH_SEPARATOR . 't2');
include 'a'; // includes from T1
include 'b'; // includes from T1
include 'c'; // includes from T2
?>
请注意,包含路径会影响 只包含/要求功能。
<?php
var_dump(file_exists('a')); // false
var_dump(fopen('b', 'r')); // file not found
?>