2015-12-26 79 views
1

這可能是一個愚蠢而簡單的問題,但無法從google找到任何相關研究,也無法從之前經歷過......爲了複製該場景,我簡化了原始結構並設置了環境像下面這樣:包括的行爲

文件結構:

ROOT 
|---/config/config.php 
|---/system/system.php 
index.php 

config/system.php

return array (
    "test" => "this is test" 
); 

config/config.php

class config 
{ 
    public static function site() 
    { 
     return include "system.php"; 
    } 
} 

index.php

include "config/config.php"; 
$result = config::site(); 

var_dump($result); 

我期待$result將包含來自system.php數組,但它實際上輸出:int(1)

我猜測它已經成功地包含的文件,這就是爲什麼它輸出1,但那只是我的猜測...

如果我改變文件名f ROM

/config/system.php/config/sys.php

/config/config.php,從

return include "system.php";這一說法改爲return include "sys.php";

它會輸出我想要的結果:

array(1) { ["test"]=> string(12) "this is test" } 

雖然我找到了一個解決方法,但我不明白爲什麼文件名是重要的,因爲我不認爲這是在PHP保留字的情況下。此外,我嘗試將文件命名爲echo.phpstrpos.php,並且它仍按預期工作。

爲什麼我不能將我的腳本命名爲system.php

如果它的事,我的工作站下,使用XAMPP:64位的Windows,PHP 5.6.8

+0

你得到正確的輸出。從PHP手冊'包含失敗返回FALSE並提出警告。除非被包含文件覆蓋,否則成功包括返回1.' – bansi

+0

@bansi請參閱:http://php.net/manual/de/function.return.php – Rizier123

+0

直到現在不能用PHP 5.5.9重現問題-1 Ubuntu。 – Rizier123

回答

1

我當之無愧爲一個明顯的問題downvote;經典的RTM 「小心」。我不能再多強調我是多麼愚蠢......我的原始結構定義了一個絕對路徑,但只用於自動加載函數,而不是在那個類中。

PHP: include - Manual

文件是基於給定或者如果沒有給出文件路徑包括, include_path中指定。 如果文件沒有在 include_path中找到,include將最終在調用腳本自己的 目錄和當前工作目錄中檢查失敗之前。

所以我檢查了包含路徑和實際指向.;C:\xampp\php\PEAR,並在其下,你猜對了,文件名爲system.php

我的include找到了正確的文件,但沒有找到我期待的文件。它實際上包括一個梨擴展文件,而不是我想要的腳本。

我不知道或者記住我在安裝XAMPP時已經安裝了pear擴展,我也不知道XAMPP將它指向pear文件夾作爲默認設置。

最後,我需要可以設置set_include_path()指向當前項目文件夾或明確以絕對路徑

對不起稱它爲浪費你的時間