使用glob过滤图像文件类型和字符串匹配

时间:2017-10-02 13:58:25

标签: php

我正在尝试查看文件夹并选择文件夹中的所有图像文件,然后生成缩略图名称(xx.jpg将转换为xx_thumb.jpg)。现在我使用scandir遍历文件夹和子文件夹,我找不到适合我的glob解决方案。我在PHP版本5.2.17。任何人都有我的建议:

  1. 专门过滤没有字符串_thumb的图片?我的hacky if语句让我发疯。
  2. 正确解析字符串是否有缩略图?例如,xx.xx.jpg现在无法正常工作。它返回xx_thumb.xx.jpg而不是xx.xx_thumb.jpg

            <?php
                $file = scandir($imgDir);
    
                for($i=0;$i<count($file);$i++) {
                if((strpos($file[$i],'jpg') !== false||strpos($file[$i],'png') !== false) && strpos($file[$i],'_thumb') == false){
                    //add the text _thumb to a thumb
                    $thumb=explode('.',$imgDir.$file[$i]);
                    $thumb=$thumb[0].'_thumb.'.$thumb[1];
                    //echo('<br>'.$thumb);
                    //echo('<br>'.$file[$i]);
            ?>
    

1 个答案:

答案 0 :(得分:0)

我认为您仍然可以使用scandir()代替glob()

<?php
$img_extensions = ["jpg", "png"];

function matching_end($s1, $s2){
    return substr($s1, - strlen($s2)) === $s2;
}

foreach (scandir($imgDir) as $file) {
    $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
    if ( in_array($ext, $img_extensions) && !matching_end(pathinfo($file, PATHINFO_FILENAME), "_thumb") && substr($file, 0, 1) !== "." ) {
        $thumb = pathinfo($file, PATHINFO_FILENAME) . "_thumb." . pathinfo($file, PATHINFO_EXTENSION);
    }
}

此代码正确地发现扩展名,即使该文件是大写的(myimage.JPG之类的文件是好的;为了进行更强的检查,您应该验证其mime content,但这是不是问题的一部分);和大写扩展区域以正确的方式处理:文件my-image.JPG提供my-image_thumb.JPG结果。

丢弃带有前导点的文件(GNU / Linux实现中的隐藏文件)。另外,在整个文件名中没有搜索"_thumb"子字符串,但是不应该匹配文件名结尾,没有扩展名。

通过使用本机pathinfo()函数正确地重建

_thumb个文件名。