Игнорировать скрытые файлы с помощью php

Я пытаюсь сканировать папку с изображениями, однако продолжаю видеть файлы ._, созданные Mac

Я использую этот код:

   <?php
if ($handle = opendir('assets/automotive')) {
    $ignore = array( 'cgi-bin', '.', '..','._' );
    while (false !== ($file = readdir($handle))) {
        if ( !in_array($file,$ignore)) {
            echo "$file\n";
        }
    }
    closedir($handle);
}
?>

Есть идеи, почему? Я создал массив игнорирования, который покрывает его.

Обновление: по-прежнему отображаются оба варианта.


person mattyb    schedule 29.03.2011    source источник


Ответы (3)


Я думаю, вы хотите игнорировать любой файл, который начинается с точки (.), а не только имя файла.

<?php
if ($handle = opendir('assets/automotive')) {
    $ignore = array( 'cgi-bin', '.', '..','._' );
    while (false !== ($file = readdir($handle))) {
        if (!in_array($file,$ignore) and substr($file, 0, 1) != '.') {
            echo "$file\n";
        }
    }
    closedir($handle);
}
?>
person Micah Carrick    schedule 29.03.2011
comment
Да, это фишка, спасибо! Я отмечу его принятым, когда он позволит мне - person mattyb; 30.03.2011
comment
Учитывая, что мы знаем, что $file — непустая строка, substr($file, 0, 1) — это излишне многословный способ записи $file[0]. Избыточность наличия в массиве $ignore файлов точек, несмотря на то, что они покрываются другим условием, также уродлива. - person Mark Amery; 30.05.2015

in_array() принимает два параметра: то, что вы хотите найти, и массив для поиска. Вы хотите:

if ( !in_array($file, $ignore))
person Michael Berkowski    schedule 29.03.2011
comment
Я добавил это, и все еще показывает оба типа - person mattyb; 30.03.2011
comment
Я запустил аналогичный код, и он работает правильно для меня. - person Michael Berkowski; 30.03.2011

Вы проверяете in_array, но следующие вопросы: "это что in_array".

in_array нужен второй параметр, в данном случае $file, для поиска. Вам понадобиться:

in_array($file,$ignore);
person Brad Christie    schedule 29.03.2011