检查目录中是否存在图像和文件类型

时间:2014-06-10 13:23:26

标签: php image file file-type

这是我的代码:

$file = 'images/img_' . $post->_id . '.jpg'; // images/img_1.jpg
    if (file_exists($file) && is_file($file)) {
                //show the image
                echo '<img src="' . $file . '" class="img-responsive" />';
            } 
            else {
                // show default image 
                echo '<img src="images/default.gif" class="img-responsive" />'; 
            }

这基本上做的是检查我的图像文件夹中是否存在图像(例如img_1.jpg)并显示它,如果没有则显示默认图像。

这很好,唯一的问题,正如你可能已经看到的那样,它只检查.jpg文件,而不是* .gif或* .png(文件也可以是img_1.gif或img_1.png ,对吧?)。

如何确保它也会检查所有有效的文件类型并显示格式正确的文件?

3 个答案:

答案 0 :(得分:1)

你可以遍历一组文件扩展名并检查它们我已经制作了一个示例脚本来显示我在下面列出的含义

$array = array('.jpg','.png','.gif');
foreach($array as $key => $value){

    $file = 'images/img_' . $post->_id . $value; // images/img_1.jpg
    if (file_exists($file) && is_file($file)) {
       $filefound = '<img src="' . $file . '" class="img-responsive" />';
    } 
} 

if(isset($filefound)){
    echo $filefound; 
}else{
    echo '<img src="images/default.gif" class="img-responsive" />'; 
}

答案 1 :(得分:1)

最有效的方法是将扩展名存储在数据库中,这样就不会扫描文件系统中的匹配项。

但是,您也可以使用glob();;功能并检查结果是否有任何结果。

$result = glob('images/img_' . $post->_id . '.*');

如果您想进一步缩小扩展类型范围,可以这样做:

$result = glob('images/img_' . $post->_id . '.{jpg,jpeg,png,gif}', GLOB_BRACE)

新代码可能看起来像这样(未经测试但你明白了):

$result = glob('images/img_' . $post->_id . '.{jpg,jpeg,png,gif}', GLOB_BRACE);

if(!empty($result)) { 
    //show the image
    echo '<img src="' . $result[0]. '" class="img-responsive" />';
} else {
    // show default image 
    echo '<img src="images/default.gif" class="img-responsive" />'; 
}

答案 2 :(得分:0)

很明显,您的脚本只会检查.jpg而不是其他人,因为您已经静态编写了文件扩展名。

$file = 'images/img_' . $post->_id . '.jpg'; 
                                         ^

现在在此行中进行更改以动态提供扩展。我假设您存储的图像名称扩展名为:

   $file = 'images/img_' . $post->_id . $post->image_name; 

注意:$ post-&gt; image_name应该是:

$post->image_name = abc.png (image_name.extension);