2011-04-13 56 views
1

在我的PHP框架中,我想使用另一个PHP框架的几个函数。那个框架只有一个门户脚本(index.php)。从那里它完成一切(引导程序,呼叫控制器和操作等)。其他框架包括其所有开始./php的include_path包含开头./

其他框架的index.php的文件:

include './inc/bootstrap.php'; 

在bootstrap.php中:

include './inc/configs.php'; 
include './inc/database.php'; 

等等等等

所以看起来像所有包含的都是相对于index.php文件夹的。

是th是否有任何方法来设置环境,这样我就可以从另一个文件夹(我的框架内的某个地方,所以完全不同的文件夹而不是门户脚本)引导框架?

include_path包括.我试过它与include_path中的其他框架的文件夹,但这并没有改变任何东西。

我猜这是./包括,但我不能改变这些(其他框架不是我的框架的一部分,并会更新一些时间)。有没有办法绕过他们(或者我是否明显错了)?

+0

没有办法。你将不得不调整这个引导脚本来将路径变成非显式的相对URL(=删除所有的'。/'前缀)。其他(不清楚)的解决方法是在加载main包之前对'chdir()'进行处理。 – mario 2011-04-13 19:36:35

回答

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

'getcwd()'不设置工作目录,它只返回当前设置的内容。 'chdir()'是你的意思。 – Kromey 2011-04-13 19:44:40

+0

哎呀...对不起,对不起: - )...更新 – 2011-04-13 19:48:59

+0

这正是我期待的'诀窍'!非常感谢!! – Rudie 2011-04-13 21:22:30

0

你应该可以用set_include_path($path_to_include_files)来做到这一点。如果仍有问题,则可能意味着脚本中还有另一个地方将include_path设置为另一个值。

1

当你去到包括其他框架的引导文件,你需要先将chdir()转换为该目录,然后才能包含它,并且所有后续包含它将会正确地相对于引导文件。

0

文件被包括在 包含路径的顺序,在这个例子中, 目录结构如下:


│-索引。PHP
│-T1
│         │-一个
│         └─b
└─T2
          | - b
         └─Ç

<?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 

?> 

source