Найти все файлы в каталоге со строкой или шаблоном в имени файла с помощью PHP

Я пытаюсь перечислить файлы в каталоге (рекурсивном или нерекурсивном) с помощью PHP, где имя файла соответствует определенному шаблону. Я' я никогда не был слишком хорош с регулярным выражением, поэтому любая помощь, которую вы могли бы предложить, была бы замечательной. Я мог бы найти буквальную проверку возвращенных имен файлов, но я думаю, что это не такая уж и хорошая идея :)

Обновление + окончательное решение: 18.01.2011 @ 20:06

Я нашел другой способ сделать то, что я искал, когда я немного больше понял регулярное выражение. Конечно, я был полностью разочарован тем, где я был с регулярным выражением, теперь я немного понял, благодаря тому, что друг отвел меня в сторону, чтобы объяснить некоторые из них более простыми словами, чем я находил в онлайн-руководствах.

Это решение в основном проверяет наличие конкретное изображение (я) с начальным префиксом «prefixone» или «prefixtwo», при этом подтверждая, что это изображение определенного типа (jpg, jpeg, png) и соответствует любому из следующих форматов.

В зависимости от того, какой ярлык вы передали из Wordpress (где я его использовал), он будет соответствовать этому регулярному выражению. Вот пример листинга:

prefixone.123-abc._tag1.001.jpg
prefixone.345-xyz._tag1.002.jpeg
prefixtwo.123-abc._tag2._tag1.003.jpg
prefixone.123-abc._tag2.004.jpeg
prefixtwo.345-xyz._tag2._tag3._tag1.005.jpg
prefixtwo.123-abc._tag1.001.jpg
prefixone.345-xyz._tag1.001.png
prefixtwo.456-rst._tag1.001.png

Все эти файлы, которые потенциально могли быть возвращены в листинге файлов из нашей функции opendir (), любой из них мог быть совпадением, если совпадение слага совпало. Независимо от порядка размещения информации о тегах в имени файла.

Я надеюсь, что это поможет другому пользователю, который борется с регулярным выражением. Это сложно освоить, но как только вы поймете несколько фундаментальных вещей, все остальное начнет быстро становиться на свои места, чтобы начать создавать свое собственное.

Код:

<?php
// create an array to hold directory list
$results = array();

// create a handler for the directory
$directory = $_SERVER['DOCUMENT_ROOT'].'/some/path/to/images/';
$handler = opendir($directory);

// open directory and walk through the filenames
while ($file = readdir($handler)) {

    // if file isn't this directory or its parent, add it to the results
    if ($file != "." && $file != "..") {

        // check with regex that the file format is what we're expecting and not something else
        if(preg_match('#^(prefixone|prefixtwo)[^\s]*\.'.$wordpress-slug.'\.[^\s]+(\.(jpg|jpeg|png))#', $file)) {

            // add to our file array for later use
            $results[] = $file;
        }
    }
}
?>

На самом деле мне для этого не требовалась рекурсия, но в сети действительно есть множество рекурсивных примеров, и это действительно меньше всего меня беспокоило. Изоляция контента по шаблону была ядром этой задачи, поэтому приведенного выше кода было достаточно.

Примечания:

Тем, кто вчера указал на «принятые комментарии», я понятия не имел, что пропустил это, и прошу прощения. У меня был плохой день. Извините, если мне показалось, что я на кого-то огорчился по поводу комментариев. Это отличное сообщество, и я рад поделиться тем, что могу.

20
задан Will Ashworth 19 January 2011 в 04:17
поделиться