2012-12-06 80 views
9


我想檢查'adas.php'是否包含'dbas.php'。我寫的代碼 -
如何檢查一個php文件是否被成功包含?

ad.php

<?php if(file_exists("dbas.php") && include("dbas.php")){ 
// some code will be here 
} 
else{echo"Database loading failed";} 
?> 

我成功地測試了file_exists()的一部分,但不知道是否包括()會工作得好不好,因爲我在本地主機上嘗試,如果文件在目錄中,那麼它永遠不會失敗。所以我不知道如果在那裏有很多流量,代碼會在服務器中表現如何。那麼請告訴我我的代碼是否正確?

- 謝謝。

已解決:非常感謝您的回答。

+0

您可以通過使'dbas.php'文件不是可讀的,則由服務器進行測試。它會斷言它存在,但不能包含它。 –

+0

沒有使用您的代碼bcoz在您的代碼時,文件未找到它顯示PHP錯誤,這是不好的,你可以使用下面我有郵政編碼 –

+0

不會拋出任何錯誤,如果該文件沒有在directory.If文件那麼只有下面的代碼會運行,否則會顯示「數據庫加載失敗」。這就是爲什麼我使用file_exists()來檢查文件是否在目錄中。 – user1844626

回答

16

使用PHP的require method如果要絕對確保該文件包含更適合。 file_exists只檢查文件是否存在,而不是它是否實際可讀。

require如果包含失敗(您可以catch的錯誤,請參閱Cerbrus的答案)將產生錯誤。

編輯:

但是,如果你不希望腳本如果包括未停止,使用方法與is_readable沿file_exists,如:

if(file_exists("dbas.php") && is_readable("dbas.php") && include("dbas.php")) { 
    /* do stuff */ 
} 
+0

OP似乎能夠想要發現錯誤。所以'需要'可能不是最好的主意? –

+0

是的,我喜歡「if(file_exists(」dbas.php「)&& is_readable(」dbas.php「)&& include(」dbas.php「)){/ * do stuff * /}」這段代碼。謝謝你的幫幫我。 – user1844626

+0

查看@Cerbrus的答案,使用'try/catch'的例子。 – Alasjo

-1

echo "file is includ" 

在 「dbas.php」

+0

我的 'dbas.php' 代碼是因此,當文件被包含時,數據庫代碼在頁面上處於活動狀態。我想知道這是我的代碼正確的檢查文件包含是否有很多流量在服務器(我不知道這是因爲我只在本地主機檢查。所以不知道它是否適用於很多流量服務器或不)。 – user1844626

0

file_exists("dbas.php")結束時做檢查。如果存在,則執行include。

if(file_exists("dbas.php"){ 
    include("dbas.php") 
    //continue with you code here 
} 
0

把你的功能在功能並使用function_exists來檢查它是否在那裏。

include ("php_file_with_fcn.php"); 
if (function_exists("myFunc")) { 
    myFunc(); 
    // run code 
} else { 
    echo "failed to load"; 
} 

在你的情況下,incusion文件將是

function db_connect() { 
    $user = "user"; 
    $pass = "pass"; 
    $host = "host"; 
    $database = "database"; 
    mysql_connect($host, $user, $pass); 
    return mysql_select_db($database); 
} 

和主文件:

include("db_connect.php"); 
if (function_exists("db_connect")) { 
    if (db_connect() === TRUE) { 
     // continue 
    } else { 
     // failed to connect (this is a different error than the "can't include" one and 
     // actually **way** more important to handle gracefully under great load 
    } 
} else { 
    // couldn't load database code 
} 
+0

我從你的代碼有一個想法,我會提出有關dbas.php文件中的變量,將在ad.php檢查值是否正確。那麼可以確定dbas.php是否被成功包含。 $ i = 100; //我會將這一行添加到dbas.php。並會檢查在ad.php <?php $ i =「」;包括( 「dbas.php」); if($ i == 100){echo「connection ok;」} else else {echo「connection failed」;}?>怎麼樣? – user1844626

+0

我不會這樣做。我會把你的數據庫連接代碼放在一個函數中,檢查它的存在並調用它。然後,你也可以處理連接失敗,比「回聲」或(恐怖!)'死亡'更優雅。 –

+0

如果'包括(「php_file_with_fcn.php」);'失敗,你就不必檢查函數存在,因爲你的頁面將在包括返回一個錯誤。 爲什麼要檢查它是否存在,如果它不能「不存在」,包含何時發生? – Cerbrus

0

使用此代碼,而不是你的代碼,因爲在你的代碼,如果文件不存在於服務器然後PHP錯誤出現,這是不好的,所以使用此代碼:

if(file_exists("dbas.php")) { 
    include_once("dbas.php"); 
} else { 
    echo"file is not found"; 
} 

此代碼表示如果文件存在於服務器上,則功能包括其他文件未找到echo

+0

_「那麼PHP錯誤出現,這是不好的」_你是什麼意思? PHP錯誤比迴應沒有找到文件要好,因爲錯誤中通常有更多的信息。 – Cerbrus

+0

是的,我完全同意你的,但UX一點都不好,這就是爲什麼我說 –

8

只需使用require:這是沒有提到

try { 
    require 'filename.php'; 
} catch (Exception $e) { 
    exit('Require failed! Error: '.$e); 
    // Or handle $e some other way instead of `exit`-ing, if you wish. 
} 

的東西:你可以添加一個布爾值,如:

$dbasIncluded = true; 

在你dbas.php文件,然後檢查該布爾在你的代碼中。雖然一般情況下,如果一個文件沒有正確包含,你會希望php能夠剎車,而不是渲染頁面的其餘部分。

+0

+1,因爲它不重複的文件名,如對方回覆同意。 – Claudix

+3

但這不起作用,是嗎?要求引發致命錯誤,這不能被try/catch捕獲。 – Frodik

相關問題