Запрос вставки строки в таблицу с условием наличия файла в директории

Вот php запрос, который смотрит в директорию item и записывает наименования файлов в таблицу images_fn БД:
Скрипт запускаю через shell. Работает, конечно долго (в папке более 500 тыс. файлов), но свои функции выполняет.

Подскажите, как сделать так, чтобы в таблицу заносились наименования файлов без расширения (в моём случае все расширения .jpg)
И второй вопрос: В сканируемой папке есть подпапки. Как заставить скрипт сканировать их тоже?

PHP:
/** ... **/
$directory = new RecursiveDirectoryIterator("/home/item/");
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, '/^(?P<basename>.+)\.(jpg|png|gif|jpeg)$/i', RecursiveRegexIterator::GET_MATCH);
foreach ($regex as $item) {
     $a[] = $item;
}
/** ... **/
foreach ($a as $i => $match) {
    $filename = $match[0];
    $baseName = $match['basename'];

Будет работать если PHP версии 5.2.х и выше
В $baseName лежит имя файла без расширения, в $filename - полное имя
 
Последнее редактирование:
  • Нравится
Реакции: 1van
Don't forget about transactions. Performance is good, but simple (IF EXISTS..) approach is very dangerous.
When multiple threads will try to perform Insert-or-update you can easily get primary key violation.
 
Назад
Сверху