2012-02-02 61 views
0

我喜歡這樣做:如何檢查文件是否存在沒有錯誤?

if (file_exists("path/a/b/c/file.txt")) { 
    fopen("path/a/b/c/file.txt"); ----------> ERROR 
    do_this_if_file_exists(); 

} 
else { 
    do_this_if_not_exists(); 
} 

不幸的是,我得到以下錯誤:

fopen(path/a/b/c/file.txt) [function.fopen]: failed to open stream: No such file or directory 

我在做什麼毛病file_exists?

另外,當我呼叫文件存在路徑時,如:file_exists("file.txt"),效果很好。我認爲問題是路徑(路徑/ a/b/c /),但如何驗證,而不是先創建路徑。

謝謝。

+1

你似乎回答自己的問題,使用正確的路徑 – 2012-02-02 20:22:54

+0

你能顯示一個路徑的確切例子,你傳遞給'file_exists()'並且錯誤地返回true嗎?你是否100%確定它與你在函數中使用的路徑完全相同? – 2012-02-02 20:22:58

+0

如果你展示真實的代碼會更好,因爲在這個代碼中不會有任何問題 – Seagull 2012-02-02 20:23:52

回答

0

你的問題是在這裏:

fopen("path/a/b/c/file.txt"); 

你不僅是不分配的返回值什麼,但fopen()需要你不使用所需的第二個參數。

1

這不是用@隱藏錯誤的正確方法。應正確處理所有錯誤。在其他情況下,調試將是一個痛苦。另外,爲了將來您可以使用is_readable()函數來確定該文件是否不僅存在而且還可讀,例如,你有足夠的權限。

1

您需要包括與fopen錯誤檢查:

if (file_exists("path/a/b/c/file.txt")) 
{ 
    $fh=fopen("path/a/b/c/file.txt","r"); #or whatever mode you want... 
    if($fh!==false) 
    { 
     do_this_if_file_exists_and_can_be_opened(); 
    } 
    else 
    { 
     die("Couldn't open the file. Sorry!\n"); 
    } 
} 
else { 
    do_this_if_not_exists(); 
} 
-3

您可以通過在你的PHP頁面的頂部加入這一行關閉錯誤報告

的error_reporting(0);

+1

「男孩,在我拿出電池之前,那些煙霧探測器確實很煩人!說,你聞到什麼東西在燃燒嗎?」 – 2012-02-02 20:37:51

1

檢查指定的文件存在,如果它是真的一個文件:

if (file_exists("path/a/b/c/file.txt") && is_file("path/a/b/c/file.txt")) { 
    $file_handler = @fopen("path/a/b/c/file.txt", MODE_IS_NOT_OPTIONAL) 
    if($file_handler !== false){ 
     do_things_with_file_handler(); 
    } else { 
     throw_some_error(); 
    } 
} 
else { 
    do_this_if_not_exists(); 
} 

功能file_exists()也可以檢查,如果給定的目錄是否存在,以及shluod幫助你。

mode參數fopen功能不是可選的@Jack Maney指出。您必須使用模式可能值full list之一。