В языке PHP имеется две функции получения списка файлов в директории: scandir() и glob(). Если читать только официальную документацию, то будет казаться, что единственное отличие этих функций в том, что glob() выдает список файлов согласно заданной файловой маске, а scandir() - просто список файлов. Но на самом деле это не так.
Самое важное отличие состоит в том, что scandir() возвращает список коротких имен файлов (т. е. имя файла без пути), а glob() - список имен файлов с путем. Причем, это можно заметить только в том случае, если запускать эти функции с указанием относительного или абсолютного пути. Если же эти функции исполняются без указания пути, то они обе будут возвращать список имен файлов без пути.
Второе отличие состоит в том, что в результат работы функции glob() при маске "*" не попадают специальные файлы "." и "..".
Вот пример, который ставит все на свои места:
Функция glob():
$workDir = "./workDir";
echo "glob():\n";
$fileList = glob("$workDir/*");
foreach ($fileList as $fileName) {
echo "$fileName , размер " . filesize($fileName) . "\n";
}
Результат:
glob():
./workDir/file01.txt , размер 28
./workDir/file02.txt , размер 48
./workDir/thisIsDir , размер 4096
Нужно обратить внимание, что функция filesize() вызывалась просто с именем файла, полученным из glob(), потому что в нем уже содержится полный путь.
Функция scandir():
$workDir = "./workDir";
echo "scandir():\n";
$fileList = scandir("$workDir");
foreach ($fileList as $fileName) {
echo "$fileName , размер " . filesize($workDir."/".$fileName) . "\n";
}
Результат:
scandir():
. , размер 4096
.. , размер 4096
file01.txt , размер 28
file02.txt , размер 48
thisIsDir , размер 4096
Здесь помимо того, что в результат попали файлы "." и "..", надо отметить, что для получения размера файла надо было использовать переменные $workDir и $fileName, так как результат работы функции scandir() содержит только имена файлов без пути к директории, где эти файлы находятся.