2009-08-16 137 views
2

奇怪的問題,在Windows上的PHP ...我的應用程序加載,加載一個設置文件,寄存器自動加載一個「核心」文件,不初始化等爲核心文件的頂部我有include_once(「config.php文件「);這適用於當前目錄中的任何內容,如果我從一個單獨的目錄中包含核心文件,儘管它只是默默地忽略配置文件的包含......有沒有人看到過這個?require_once忽略

/webroot/core.php

<?php 
    require_once "config.php"; 
    //register autoloads 
    //do some initialization... standard stuff 
?> 

/webroot/config.php

<?php 
    define("WEB_ROOT","/webroot"); 
    define("DB_USER","root"); 
    // ... more stuff... 
?> 

/webroot/admin/index.php

<?php 
    require_once("../dbconnect.php"); 
    echo WEB_ROOT; 
    // print string literal WEB_ROOT rather than value in config.php 
?> 

我的理解是,文件操作是相對於發出請求的文件的目錄而言的,不應該在require_once(「config.php」)中選擇文件re lative到core.php?這段代碼的工作原理與我在Mac或Linux上所期望的一樣,但在Windows上完全沒有,(如果我改變require的使用完整路徑或../,它會起作用)

真正的瘋狂是require_once(「config.php」)不會拋出任何錯誤,但是裏面的代碼都不會被執行!

+0

已經有人注意到的index.php是裝載dbconnect.php而不是config.php或core.php?您還需要顯示dbconnect.php的內容以及... – 2013-10-03 07:16:32

回答

7

如果PHP忽略這些錯誤,儘量把在被請求的文件的頂部:

ini_set('display_errors', 'On'); 
error_reporting(E_ALL); 

現在,所有錯誤都應該是可見的。

那麼最好的做法(據我)是在請求(沒有任何的包含文件)文件中定義了一些與應用程序根目錄完整文件系統路徑不變。因此,在index.php如果應用程序根目錄是/webroot/admin

define('APP_DIR', dirname(__FILE__)); 

後,當你有一些東西,使用此常量。如果目錄結構是:

/webroot/ 
    admin/ 
     index.php 
    config.php 
    core.php 

而且要包括config.phpindex.php

require_once APP_DIR . '/../config.php'; 

core.php包括config.php這將是:

require_once APP_DIR . '/../config.php'; 

等。

使用絕對文件系統路徑將防止任何含糊之處。

+0

使用dirname(__ FILE__)是定義絕對路徑的好方法!不幸的是,我正在處理的應用程序在配置文件中手動設置,然後將其用作'APP_DIR'。我真的不知道爲什麼! – Michael 2009-08-16 08:00:00

1

也許你正在運行到PHP的open_basedir限制?爲了防止一些惡意腳本,PHP有一個「安全模式」,除其他外,它限制了可以從哪裏加載文件。如果xampp默認啓用了這個功能,那麼你可能會遇到它。

您還可能要檢查你的web服務器的錯誤日誌,看看是否有故障出現的任何跡象(和打開錯誤報告,最好爲E_ALL,直到你得到的問題排序)。

+0

我確實檢查了ini以查看安全模式是否啓用,但情況並非如此,而是非常棒的建議! 錯誤報告被設置爲忽略聲明,但有香草E_ALL我剛剛得到這個: 注意:使用未定義的常量FILE_ROOT的 - 假設「FILE_ROOT」在C:\ webroot的\ core.php中上線87 甚至不在卸載的配置文件中發出通知! – Michael 2009-08-16 07:48:33

2

如果你想使用相對於文件的路徑做列入包括一個文件,你必須預先考慮的完整路徑,如:

<?php 
require_once(dirname(__FILE__) . "/config.php"); 
?> 
+1

不在nixes ...它很奇怪,PHP只是默默地忽略了這種情況下的要求! – Michael 2009-08-16 08:04:31

+0

這行實際上來自我在Linux上專門開發的一個腳本。沉默的無視位確實很奇怪,我不能幫你解決這個問題。我剛剛發佈了我在多年前改編的最佳做法。 – Thorarin 2009-08-16 08:20:32