Как вернуть папки, в которых нет определенного файла?

Я хочу отфильтровать папки, не содержащие плакат.* (JPG/PNG/GIF) ИЛИ папку.* (JPG/PNG/GIF). Я создал следующий код, но я немного не знаю, как это сделать эффективно:

<?php
$dir = "/share/test/";
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." &&
            $file != ".." &&
            $file != ".DS_Store" &&
            $file != "_Incoming" &&
            is_dir($dir.$file) &&
            !file_exists($dir.$file."/poster.*") ){

                echo "$file\n";

        }
    }
    closedir($handle);
}
?>

Спасибо!


person FLX    schedule 22.05.2011    source источник
comment
stackoverflow.com/search?q=folder+php+image   -  person Gordon    schedule 23.05.2011
comment
возможный дубликат Чтение файлов в папке   -  person Gordon    schedule 23.05.2011
comment
Извините за плохие новости, но я боюсь, что opendir, readdir и closedir работают только с каталогами, а не с «папками» — какими бы этими ни были. ????   -  person tchrist    schedule 23.05.2011
comment
@tchrist lol картошка/картошка - реферер/реферер - я склонен называть папки папками, когда они находятся в каталогах, сохраняя их, называя их подкаталогами   -  person Lawrence Cherone    schedule 23.05.2011
comment
@tchrist: на компьютере говорят, что папки и каталоги - это одно и то же. Я * nix раньше называл его каталогом, затем пришла Windows и назвала его папкой, теперь оба используются взаимозаменяемо с небольшим уклоном в сторону исходной номенклатуры ОС.   -  person Andrew Savinykh    schedule 23.05.2011


Ответы (1)


вот, надеюсь поможет:

<?php 
/**
 * Recursive function that will check all folders in the 
 * requested directory for keywords [$lookfor] [Any extention]
 * true,false on returning notfounds 
 *
 * @param $path to folder
 * @param $lookfor word in filename or folder
 * @param $showNotfounds [true|false]
 * @return echo'ed out
 */
function lookfor($path,$lookfor,$showNotfounds=false){
    if(file_exists($path) && is_readable($path)){}else{die('Error reading folder ./'.$path.'');}
    if ($handle = @opendir($path)) {
        while ($file = readdir($handle)){

            if ($file=='.' || $file=='..'){}else{
                if (is_dir($path."/".$file)){
                    //Recursive
                    if(stristr($file, $lookfor) === FALSE) {
                        //[folder]missing
                        echo ($showNotfounds==true) ? '<font color="red"><b>'.$path.'/'.$file.'</b></font>: Not a '.$lookfor.'<br/>': '';
                    }else{
                        //[folder]exists
                        echo '<font color="green"><b>'.$path.'/'.$file.'</b></font>: Is a '.$lookfor.'<br/>';
                    }
                    lookfor($path."/".$file,$lookfor,$showNotfounds);
                }else{
                    if(stristr($file, $lookfor) === FALSE) {
                        //[file]missing
                        echo ($showNotfounds==true) ? '<font color="red"><b>'.$path.'/'.$file.'</b></font>: Not a '.$lookfor.'<br/>': '';
                    }else{
                        //[file]exists
                        echo '<font color="green"><b>'.$path.'/'.$file.'</b></font>: Is a '.$lookfor.'<br/>';
                    }
                }
            }
        }
        closedir($handle);
    }
}

//example usage
lookfor('.','folder.',true);
echo '<hr>';
lookfor('.','poster.',true);
echo '<hr>';
lookfor('.','poster.jpg',false);

?>
person Lawrence Cherone    schedule 22.05.2011
comment
Больше, чем я когда-либо мог просить для Лоуренса, больше, чем вы! - person FLX; 24.05.2011