2015-05-18 1 views
5

Мне нужно проверить папку с изображениями для добавления изображений продуктов. В моем массиве списков товаров есть такие SKU, как a48be25, A48be29, A48BE30, и у моей папки с изображениями есть такие изображения, как a48BE25_1.jpg, a48bE29_2.JPG, A48BE30_1.jpg и так далее.PHP - нечувствительность к регистру Поиск файла

Как вы можете видеть, изображения и SKU смешиваются. Мне нужно как-то совместить SKU с именами файлов. Если я использую glob("my/dir/{$SKU}*.jpg"), он не будет работать в случае чувствительных операционных систем, насколько мне известно. Есть ли способ заставить glob искать без учета регистра?

EDIT: Я не думаю, что эта нить является дубликатом this one. Я говорю это, потому что в моем случае у меня может быть много SKU, которые могут иметь смешанные случаи. В упомянутой теме, OP только имел слово CSV в смешанных случаях, поэтому glob('my/dir/*.[cC][sS][vV]') мог хорошо работать там.

+2

Вы попробовали [второй ответ] (http://stackoverflow.com/a/2520643/749181) на связанный вопрос? Это предполагает, что вы сначала забираете имена файлов, а затем сравниваете их без учета регистра на втором этапе. –

+0

@GeorgeCummins У меня есть более 300000 изображений и 60000 продуктов для добавления. Я знаю, что смогу это сделать, но это будет слишком дорого, не так ли? Если ничего не получится, тогда мне придется принять такой подход. :) – Gogol

+1

@ noc2spam ツ Я думаю, что если у вас так много изображений, то с этим обращаться быстрее с php и не позволяйте файловой системе делать это. – Rizier123

ответ

2

В конечном итоге я получал все изображения из папки и проверял каждую sku в массиве имен изображений.

Следующий код решить мою проблему:

$path = $image_path ."/*.{jpg,png,gif}"; 
$all_images = glob($path, GLOB_BRACE); 
$icount = count($all_images); 
for($i = 0; $i < $icount; $i++) 
{ 
    $all_images[$i] = str_replace($image_path.'/', '', $all_images[$i]); 
} 

foreach($products as $product){ 
    $matches = preg_grep ('/^'.$product['sku'].'(\w+)/i', $all_images); 
} 

Тем не менее, я хотел бы видеть, не чувствительны к регистру glob реализован в будущем.

+1

Я держу эту вкладку открытой LOL. Рад видеть, что вы нашли решение, но нечувствительный к регистру glob, как вы заявляете, станет достойным дополнением к будущему выпуску PHP. Что-то, что вы можете публиковать на php.net - * Cheers * –

+0

Извините, я не могу опубликовать код C. Я слишком нуб для этого. Я только веб-разработчик. Я надеюсь, что кто-то это сделает в будущем выпуске php. :) – Gogol

+2

Нет проблем. Хотя я передам это слово. У меня есть друг, который знает этого парня на PHP.net ;-) * cheers * –