2013-12-14 54 views
0

我有數據庫列attach1和attach2。 我需要顯示來自這些列的文件(pdf),但前提是它們存在於www.domain.com/uploads目錄中。 Attach1包含真實文件,但attach2不包含。PHP如果文件存在,總是顯示存在

我想是這樣的:

<?php 
$file = $row['attach']; 
$exists = file_exists('uploads/'.$file.''); 
if ($exists) { 
    echo $file; 
} 
if (!$exists) { 
    echo 'No file1'; 
}  
?> 

<?php 
$file2 = $row['attach2']; 
$exists = file_exists('uploads/'.$file2.''); 
if ($exists) { 
    echo $file2; 
} 
if (!$exists) { 
    echo 'No file2'; 
}  
?> 

但是每當它回我回來,該文件存在,即使attach2包含什麼。爲什麼?

+0

不是你的問題,但也有你的代碼示例中的一些毫無意義的事情。您不需要將空字符串連接到文件名的末尾。您不需要將'file_exists'的結果保存在變量中。您可以使用'else'來簡化條件。 –

+0

您是否嘗試'echo $ file2'並確保它不是空的?如果是,你會檢查'file_exists(「/上傳」)',這當然是'TRUE'的。 – Mureinik

+0

試試這個「如果(isset($文件)」 – Sandesh

回答

2

如果您的文件名爲空,那麼您只將目錄名稱傳遞給file_exists。目錄也是文件。我認爲該目錄確實存在。這不是騙你。

您可以檢查數據庫中的文件名是否爲空,也可以將整個字符串傳遞給函數is_dir以查看它是否爲目錄。我假設你只想要普通文件。

這將是這個樣子:

<?php 
$file = $row['attach']; 
$exists = file_exists('uploads/'.$file.'') && !is_dir('uploads/'.$file.''); 
if ($exists) { 
    echo $file; 
} else { 
    echo 'No file1'; 
}  
?> 

我改變了if語句中使用的else條款。這相當於像你一樣使用第二個if

+0

我該怎麼做?請。 – user2957822

+0

哪一部分? 'is_dir'? –

+0

是的。is_dir .... – user2957822