2010-08-23 201 views
1

我有文件1.php具有2.php的require_once(它們都在不同的文件夾中)。我遇到的問題是1.php似乎神奇地包含2.php,因爲2.php的路徑不在1.php中。可以肯定的是,我甚至在require_once'2.php'之前添加了一個set_include_path('。'),但它仍然有效......有什麼明顯的我失蹤或是這個奇怪的?require_once不包括路徑

編輯:

//-- file 1.php 
//-- long list of requires... 
set_include_path('.'); 
echo get_include_path(); 
require_once '2.php'; 

而1.PHP和2.PHP在不同的文件夾中的上述工作正常。

+0

請更具體地說明所涉及的所有文件的位置。 – VolkerK 2010-08-23 09:49:59

+0

有任何代碼可以添加?這看起來很奇怪。 – 2010-08-23 09:50:38

+0

@VolkerK - 在這裏,我們只有兩個文件1.PHP和2.PHP,他們是在兩個不同的位置.. @Kevin - 增加了代碼.. 感謝您的意見.. – pinaki 2010-08-23 09:57:01

回答

2

的路徑具有相同名稱的文件作爲文件2有一些包括在PHP的魔力,我以前見過它。
我相信一些自動加載相關的東西。
它總是在運行類文件所在的文件夾中查找

+0

嗯..這看起來很有趣...我在哪裏開始尋找任何autoload魔術? – pinaki 2010-08-23 10:46:27

+0

@pinaki dunno,我正在查看源代碼lol :)在某些PHP OOP手冊中,可能是因爲autoload是OOP功能 – 2010-08-23 10:49:56

+0

自動加載是SPL的一部分,http://php.net/manual/en/function.spl-autoload .PHP – 2010-08-23 11:17:15

1

嘗試echo get_include_path()設置空的include路徑後,可能會將其設置在其他位置(如在Web服務器配置文件中)。

+0

在說明中有一個錯字...我試過把回聲get_include_path()..它列出了我的情況下設置的路徑(。) – pinaki 2010-08-23 09:52:33

1

長鏡頭,但也許其他的一個包含文件改變當前的工作目錄:

<?php 
echo 'cwd at the beginning of 1.php: ', getcwd(), "\n"; 
//-- file 1.php 
//-- long list of requires... 
set_include_path('.'); 
echo 'include_path: ', get_include_path(), " \n"; 
echo 'cwd: ', getcwd(), "\n"; 
require_once '2.php'; 
+0

: - )...這是一個我的第一個想法以及...檢查;沒有發生...... – pinaki 2010-08-23 10:07:49

+0

當需要查找文件時,'require'和'include'與當前工作目錄一起工作。因此,如果腳本將cwd設置爲2.php的文件夾(如VolkerK建議的那樣),則會發生所看到的行爲。另一個選擇是,'1.php'被包含在'2.php'文件夾中的腳本中,所以由於初始調用,cwd在那裏。 – ZeissS 2010-08-23 10:08:20

+0

@ZeissS - 我已經在2.php中做了一個回聲getcwd(),這裏不是這樣的... – pinaki 2010-08-23 10:11:48

1

爲了討論的方便,如果你把一個2.PHP在相同的位置1.PHP做的新文件包含而不是舊文件?

你能告訴我用你的open_basedir的價值是多少?

+0

如果我把它們放在同一個地方,它可以正常工作.. open_basedir value in「no value」.. 。我試圖從2.php更改爲require_once中的pinaki/2.php,但它失敗了......最後一些理智:)... – pinaki 2010-08-23 10:19:37

1

也許你有文件1.

+0

確保不是這種情況... – pinaki 2010-08-23 10:46:03