MyTetra Share
Делитесь знаниями!
Получение списка файлов в директории. В чем отличие scandir() от glob() ?
Время создания: 14.06.2024 16:39
Текстовые метки: php, список, файл, поиск, выборка, директория, каталог, папка, функция, scandir, glob, маска, расширение
Раздел: Компьютер - Программирование - Язык PHP
Запись: xintrea/mytetra_syncro/master/base/1718372369o2za48dbc6/text.html на raw.github.com

В языке 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() содержит только имена файлов без пути к директории, где эти файлы находятся.



Так же в этом разделе:
 
MyTetra Share v.0.64
Яндекс индекс цитирования