Intereting Posts
PHP-скрипт для поиска имени веб-сервера Ошибка анализа данных: JSONException: значение <br типа java.lang.String не может быть преобразовано в JSONObject Как отобразить категорию и подкатегорию? Имя вложения и расширение файла не работают по электронной почте * .eml простой анализатор html dom, чтобы вернуть все значения td`s? Альтернатива с открытым исходным кодом AddThis AddToAny, ShareThis и т. Д. Для социальных закладок Объединение нескольких результатов MySQL в один JSON-код (PHP) PHP DOM Xpath – поиск имени класса PHP: определенные значения времени / даты не помечены как конфликты (большинство других, хотя) Получение значения кнопки отправки в Laravel 5.3 Предоставляет ли Aptana 3 плагин PHP так же хорошо, как Aptana 1.5.1? Symfony2 Twig, включая заголовок с неработающими активами WordPress с Haml / Sass Система Ajax push Как я могу скомпилировать linux для совместного использования со всеми дистрибутивами?

Можно ли заставить glob () PHP искать файлы в нечувствительном к регистру образом?

Я хочу, чтобы все файлы CSV в каталоге, поэтому я использую

glob('my/dir/*.CSV') 

Это, однако, не находит файлы с строчным расширением CSV.

Я мог бы использовать

 glob('my/dir/*.{CSV,csv}', GLOB_BRACE); 

Но есть ли способ разрешить все версии смешанного варианта? Или это просто ограничение glob() ?

Шаблоны Glob поддерживают диапазоны символов:

 glob('my/dir/*.[cC][sS][vV]') 

Вы можете это сделать

 $files = glob('my/dir/*'); $csvFiles = preg_grep('/\.csv$/i', $files); 

glob('my/dir/*.[cC][sS][vV]') должен это сделать. Да, это отвратительно.

Вы также можете отфильтровывать файлы после выбора всех из них

 foreach(glob('my/dir/*') as $file){ $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION)); if(!in_array($ext, array('csv'))){ continue; } ... do stuff ... } 

производительность может быть не лучшим вариантом, если, например, у вас есть 1 миллион файлов, которые не являются csv в папке.

Вы можете написать свой собственный регистр, нечувствительный к регистру. Это из личной веб-библиотеки, которую я пишу:

 /** PHP has no case insensitive globbing * so we have to build our own. * * $base will be the initial part of the path which doesn't need case insensitive * globbing. * Suffix is similar - it will not be made insensitive * Make good use of $base and $suffix to keep $pat simple and fast in use. */ function ciGlob($pat, $base = '', $suffix = '') { $p = $base; for($x=0; $x<strlen($pat); $x++) { $c = substr($pat, $x, 1); if( preg_match("/[^A-Za-z]/", $c) ) { $p .= $c; continue; } $a = strtolower($c); $b = strtoupper($c); $p .= "[{$a}{$b}]"; } $p .= $suffix; return glob($p); } 

Я слышал о функции, которая может быть использована следующим образом: попробуйте, если это сработает для вас!

 <?php $pattern = sql_regcase("*.txt"); glob($pattern); ?> 

Чтобы заставить его работать со всеми расширениями, используйте:

 $extension = 'some_extension'; glob('my/dir/*.preg_replace('/(\w)/e', "'['.strtoupper($1).strtolower($1).']'", $extension));