我有数据库列attach1和attach2。 我需要显示这些列中的文件(pdf),但前提是它们存在于目录www.domain.com/uploads中。 Attach1包含真实文件,但attach2不包含。
我试过这样的事情:
<?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 :(得分: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
。