2011-04-13 72 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