2017-08-29 53 views
1

file_exists&我用這個代碼is_file不工作

$DataSourceName = "..\Log4OM\Log4OM-Active.SQLite"; 
if(!file_exists($DataSourceName)) 
{ 
    $Msg = sprintf("%s does not exist", $DataSourceName); 
    die($Msg); 
} 

該文件確實存在,而且這條道路一直工作到今天早上。現在測試失敗,應用程序死亡。 「is_file」展覽會不會更好。

我也用這個代碼:

$connection = new PDO("sqlite:".$DataSourceName); 
    // Set errormode to exceptions 
$connection->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 

這實際上不打開文件和應用程序正常運行。我知道這是因爲我擊敗了第一個測試來嘗試它。不幸的是,在進入「$ connection =」行之前,必須先通過第一個測試。

我也試過fopen,無法打開文件。文件名實際上是指向真實文件的硬鏈接,但替換真實文件名具有相同的問題。文件權限看起來是正確的,並在幾天前相同。

+0

你確定'$ DataSourceName'是一個正確的路徑嗎? –

+0

是的,我。 $ DataSourceName也用於「新PDO」語句並且可以工作。 – Pilot

回答

5

不要依賴目錄「散步」。總是指定你從哪裏開始的根(例如)__DIR__

$DataSourceName = __DIR__ . "\..\Log4OM\Log4OM-Active.SQLite"; 
if(!file_exists($DataSourceName)) 
{ 
    $Msg = sprintf("%s does not exist", $DataSourceName); 
    die($Msg); 
} 
+0

我發現指定一些更加靜態的東西比較容易,比如'$ _SERVER ['DOCUMENT_ROOT']',所以你不必重新計算每個目錄的路徑。 – aynber

+0

當然。這是一個例子。你可能在document_root的某個地方有一個定義的常量,你可以做dirname(\ _ \ _ FILE__)有很多選項。底線是不信任_default_文件位置。 –

+0

document_root是[$ _SERVER superglobals](http://php.net/manual/en/reserved.variables.server.php)之一。它通過瀏覽器訪問腳本時幾乎總是存在,但通常不會在命令行上使用它。只是說明它是一種簡單的全局方式來指定文件路徑 - 更容易在項目中複製/粘貼。 – aynber