Mecha versi 2.6.4 sudah dirilis!

Lis Berkas dengan PHP `glob`

Kebanyakan dari kita akan menggunakan cara ini untuk mendapatkan daftar berkas pada sebuah direktori, yang mana ini akan menampilkan semua jalur berkas dan folder, namun tidak dengan jalur berkas dan folder yang memiliki awalan ., misalnya pada berkas dengan nama .htaccess:

$files = glob('.\path\to\folder\*');

Untuk mengatasi masalah ini, biasanya kita akan menggabungkan dua pola yaitu .* untuk menelusuri berkas dan folder dengan awalan . dan pola * untuk menelusuri berkas dan folder generik:

$files = array_unique(array_merge(
    glob('.\path\to\folder\.*'),
    glob('.\path\to\folder\*')
));

Kendala sekarang ada pada jalur .\path\to\folder\. dan .\path\to\folder\.. yang sebenarnya tidak kita perlukan, namun muncul juga di dalam daftar. Sehingga kita perlu melakukan usaha ekstra untuk menyingkirkan item tersebut dari daftar:

$files = array_filter(array_unique(array_merge(
    glob('.\path\to\folder\.*'),
    glob('.\path\to\folder\*')
)), function($v) {
    $n = basename($v);
    return $n !== '.' && $n !== '..';
});

Cara paling sederhana untuk menampilkan semua jalur berkas dan folder, termasuk berkas dan folder yang memiliki awalan nama . adalah seperti ini:

$files = glob('.\path\to\folder\{,.}[!.,!..]*', GLOB_BRACE);

Meskipun berkas dengan nama seperti ...foo-bar.baz akan gagal lolos pada pola penelusuran di atas, namun penamaan berkas dengan awalan . lebih dari satu sepertinya sangat jarang ada, jadi Saya kira pola ini cukup aman.


Referensi: Stack Overflow