Как отобразить все файлы в каталоге, используя PHP 5.6 - PullRequest
0 голосов
/ 11 мая 2018

У меня проблема с файлами, например .342342.jpg или .3423423.ico.Скрипт ниже не видит эти файлы.Мой сценарий:

<?php
$filepath = recursiveScan('/public_html/');

function recursiveScan($dir) {
    $tree = glob(rtrim($dir, '/') . '/*');
    if (is_array($tree)) {
        foreach($tree as $file) {
            if (is_dir($file)) {
                //echo $file . '<br/>';
                //recursiveScan($file);
            } elseif (is_file($file)) {
 echo $file . '<br/>'; 
               if (preg_match("[.a-zA-Z0-9]", $file )) {
                   echo $file . '<br/>';
                   //unlink($file);
               }

            }
        }
    }
}
?>

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

AFAIK, glob не возвращает имена файлов, начинающиеся с точки, поэтому .342342.jpg не возвращается.

Ваше регулярное выражение if (preg_match("[.a-zA-Z0-9]", $file )) { соответствует именам файлов, которые содержат .a-zA-Z0-9 (то есть. xxx.a-zA-Z0-9yyy) Полагаю, вам нужны имена файлов, содержащие точку или алфавит, поэтому ваше регулярное выражение становится:

if (preg_match("/^[.a-zA-Z0-9]+$/", $file )) {
0 голосов
/ 11 мая 2018

Используйте это \.[[:alnum:]]* в качестве регулярного выражения для сопоставления с одной точкой, а затем с любым количеством букв и цифр после этого, потому что, поскольку вы используете его сейчас, оно соответствует только одному символу любого вида.Используйте regex101.com для будущего тестирования регулярных выражений.Он показывает подробную разбивку того, для чего вы фильтруете, и имеет отличную таблицу для всех токенов, которые вы можете использовать

...