2011-06-22 18 views
1

我在各種包括文件頂部驗證碼:PHP require_once嘗試包括第二次我的生產服務器上只

require_once("functions.php"); 

有時候,我需要包括我的幾個包括文件生成一個頁面,在我的本地服務器上這工作正常,因爲上面的代碼告訴它只包含functions.php一次(因此它不會嘗試聲明兩次函數)。

當我上傳到我的生產服務器,突然它試圖包含的functions.php第二次,造成了嚴重錯誤,試圖重新聲明功能的第二次。

有什麼在我的PHP配置我的生產服務器上會導致require_once不同的行爲?

回答

3

您可以使用下面的代碼:

require_once(realpath(dirname(__FILE__) . '/functions.php')); 

和如果functions.php位於根目錄中的另一個目錄中,則在functions.php之前修改路徑位置。 功能的真實路徑(目錄名(FILE)需要根文件夾的路徑所以,你應該在你的index.php的功能和修改,如果你的任何目錄function.php如:

require_once (realpath(dirname(__FILE__) . '/your_directory_name/functions.php')); 

享受! !

+0

由於網站結構的變化,我有一箇舊版本的functions.php在另一個目錄中。我認爲,因爲我沒有指定像這樣PHP的絕對路徑,所以它選擇了兩次。無論如何我已經刪除了重複,但我不知道這些功能,所以謝謝! – Dan

+0

以上功能採用根文件夾路徑。所以你應該在你的index.php中包含你的函數,並且修改你的funciton.php在任何目錄中,例如:require_once(realpath(dirname(__ FILE__)。'/your_directory_name/functions.php')); –

0

老實說,我想不出任何會導致此行爲,如果我知道一點關於你的網站是如何構成的,我可以提供一些關於如何以不同的方式構建它,這會不會發生一些建議。

的東西,我在我的網站做的是有這種設​​置的:

global.php < - 東西,如配置數據庫,包括隨機函數

的header.php <文件 - 基本的HTML頭文件,global.php在這裏是required_once。

然後在所有其他文件,只需要頭文件,你應該沒有衝突。如果你正在使用一個特定的框架(CakePHP,Kohana),那麼這肯定會改變一些事情......就像我說的,沒有足夠的信息立即開始。

+0

感謝您的想法!事實證明,我在另一個目錄(舊的)中有另一個同名的文件,並且因爲我沒有指定文件的絕對路徑,所以PHP在某些情況下都選擇了。我通過刪除舊文件解決了這個問題,但我相信絕對路徑上的其他答案會起作用... thx再次! – Dan

0

也許錯誤處理級別設置不同的2臺服務器上?

如果我沒有記錯的話,require_once只會在多次調用時返回true。

沒有與此結構可能有些怪異的結果:

加載(即使是假的)與include_once兩次的文件,返回值將是真實的。

實施例:

<?php 
    var_dump(include_once 'fakefile.ext'); // bool(false) 
    var_dump(include_once 'fakefile.ext'); // bool(true) 
?> 

這是因爲根據PHP中文件已被包含一次(即使它不存在)。

不確定這與require_once是否相同,但很可能是因爲文檔引用了include_once以表示此構造的預期行爲。

0

如果您正在包含包含類的文件,您可能希望嘗試使用__autoload,它應該防止多個包含/要求運行,並且阻止您列出一系列包含/要求。

+0

我沒有聽說過這個MC - 我會檢查出來的!謝謝 – Dan

2

是否有可能你有重複的文件名爲functions.php? 您的示例代表相對位置,是否有可能加載了兩次?

也許要從函數文件中調試它將是 echo __FILE__

+0

感謝理查德 - 事實證明,我有另一個目錄中的文件的第二個副本,由於網站結構的變化(我沒有刪除舊文件)。我不知道爲什麼它不是我的本地服務器上的問題,但我認爲這是因爲我沒有指定絕對路徑。 – Dan

2

檢查你的路徑設置,如果函數名是常見的,那很可能是另一個具有相同名字的文件正在被加載。除了呼應提到__FILE__值,只是嘗試命名它,你知道的東西是獨特的和/或使用像

絕對路徑require_once dirname(__FILE__).'/functions.php';

+0

由於網站結構的變化,我有一箇舊版的functions.php在另一個目錄中浮動。我認爲,因爲我沒有指定像這樣PHP的絕對路徑,所以它選擇了兩次。無論如何我已經刪除了重複,但我不知道這些功能,所以謝謝! – Dan

相關問題