按扩展名和文件名过滤

时间:2015-04-17 13:57:28

标签: php image

我的代码位于下方。我注意到我开始添加更多文件,这些文件是要过滤的文件,但是现在我想添加扩展名。

所以任何jpg,mp3或者vtr都会被排除在外。说实话,我不确定100%如何处理这个问题。我试过没有成功。

$folder = scandir($path);
$files = array();
foreach($folder as $file){
    if($file == '.' OR $file == '..' OR $file == 'index.htm'  OR $file == 'index.html' OR $file == 'jpg'){}else{
        $files[$file] = filemtime($path.'/'.$file);     
    }
}

4 个答案:

答案 0 :(得分:2)

这是我的解决方案。我认为它非常直接且易于维护:

// put those two somewhere in conf file or something
$allowedFiles = array(
    ".",
    "..",
    "index.htm",
    "index.html"
);

$allowedExtensions = array(
    "mp3",
    "jpg",
    "png"
);

foreach($folder as $file){
    $filePathInfo = pathinfo($file);
    if(!in_array($filePathInfo["basename"], $allowedFiles) && !in_array($filePathInfo["extension"], $allowedExtensions)) {
        // do what you want here...
    }

}

希望这有帮助!

答案 1 :(得分:0)

<?php
$folder = scandir($path);
$files = array();
foreach($folder as $file)
{
    if (!in_array($file, array('.', '..', 'index.htm', 'index.html')) && !in_array(substr($file, -4), array('.jpg', '.mp3', '.vtr')))
    {
        $files[$file] = filemtime($path.'/'.$file);     
    }
}
?>

只要扩展名称长度为3个字符,只需在第二个in_array()中添加已排除的扩展名。

如果要排除扩展名为4个字符的文件,请添加另一个in_array。例如:

<?php
$folder = scandir($path);
$files = array();
foreach($folder as $file)
{
    if (!in_array($file, array('.', '..', 'index.htm', 'index.html')) && !in_array(substr($file, -4), array('.jpg', '.mp3', '.vtr')) && !in_array(substr($file, -5), array('.jpeg', '.mpeg')))
    {
        $files[$file] = filemtime($path.'/'.$file);     
    }
}
?>

substr将提取扩展名,而in_array将确保扩展名不在给定的扩展名列表中。

答案 2 :(得分:0)

您可以使用regular expressions。即使您的文件中包含多个.(例如index.html.bak):

,这也会有效
$folder = scandir($path);
$files = array();
foreach($folder as $file){
    preg_match('/^(.*)(\..*)$/', $file, $matches);

    $fileNamePart = $matches[1]; // Just the part before the extension
    $fileExtension = $matches[2]; // The extension (like '.mp3')
     if ($file == '.' || $file == '..' || $file == 'index.htm' || $file == 'index.html' || $fileExtension == '.mp3' || $fileExtension == '.jpeg' || $fileExtension == '.jpg' /* || other conditions ... */ ) {
        // ...
    } else {
        $files[$file] = filemtime($path.'/'.$file);   
    }
}

答案 3 :(得分:0)

您可以使用preg_match

$notAllowedFileTypes = array(
    "mp3",
    "jpg"
);

$folder = scandir($path);
$files = array();
foreach($folder as $file){
    if(isAllowed($file)){
      //...
    }
}

function isAllowed($file)
{
    $notAllowedTypes = implode("|", $notAllowedFileTypes);
    preg_match("/^.*(\.(" . $notAllowedTypes . ")?)$/", $file, $matches);

    return count($matches) === 0;
}