Функции доступа к общей информации о файле и файловой системе позволяют:
· получить сведения об объемах памяти в файловой системе;
· получить характеристики файла;
· проверить некоторые характеристики файла.
Сведения об объемах памяти в файловой системе можно получить с помощью функций float disk_free_space() и float disk_total_space().
Функция
float disk_free_space(string directory)
определяет, в какой файловой системе находится каталог или диск directory, и возвращает объем (в байтах) свободного места в файловой системе или разделе диска.
Функция
float disk_total_space(string directory)
определяет, в какой файловой системе находится каталог или диск directory, и возвращает общий объем дисковой памяти (в байтах) в файловой системе или разделе диска.
Пример 4.6.135. Использование функций disk_free_space()и disk_total_space():
Следующий фрагмент программы определяет общий объем и объем свободного места на диске D и выводит эти характеристики:
$totalSpace = disk_total_space("D:");
$freeSpace = disk_free_space("D:");
echo "Space on disk D:",
"\n Total space: $totalSpace",
"\n Free space: $freeSpace";
|
|
Вывод этого фрагмента имеет следующий вид:
Получить характеристики файла можно с помощью функций realpath(), basename(), pathinfo() и stat().
Функция
string realpath(string path)
возвращает абсолютный путь к файлу по заданному в параметре path относительному имени файла. Если в пути path присутствуют символические ссылки, они заменяются реальными именами.
Функция
string basename(string path)
определяет в полном имени файла path его имя в каталоге и возвращает выделенное имя (строка после последнего символа "/").
Функция
mixed pathinfo(string filename)
возвращает массив с ключами dirname, filename, basename и extension, содержащий в качестве значений соответственно имя каталога, имя файла с расширением, имя файла без расширения и расширение файла.
Пример 4.6.136. Использование функций realpath(), basename() и pathinfo():
Выполнение следующего фрагмента программы
// Переход в каталог "d:/Uploads/"
chdir("d:/Uploads/");
// Получение абсолютного пути к файлу eagle.png
$imageDirRealPath=realpath("images/eagle.png");
// Получение базового имени файла eagle.png
$imageBaseName=basename($imageDirRealPath);
// Получение компонент пути к файлу eagle.png
$pathArray = pathinfo($imageDirRealPath);
// Вывод характеристик файла eagle.png
echo "Properties of 'eagle.png' file:",
"\n Real path='$imageDirRealPath'",
"\n Base name='$imageBaseName'",
"\n File info:",
"\n dirname=".$pathArray['dirname'],
"\n basename=".$pathArray['basename'],
"\n filename=".$pathArray['filename'],
"\n extension=".$pathArray['extension'];
выводит на экран строки:
Функция
array stat(string filename)
возвращает ассоциативный массив из 13 элементов с информацией о файле filename:
· 'dev' – номер устройства;
· 'ino' – номер индексного дескриптора;
· 'mode' – права доступа к файлу;
· 'nlink' – число жестких (hard) ссылок на данный файл;
|
|
· 'uid' – идентификатор пользователя;
· 'gid' – идентификатор группы;
· 'rdev' – тип устройства;
· 'size' – размер файла в байтах;
· 'atime' – время последнего обращения к файлу;
· 'mtime' – время последней модификации файла;
· 'ctime' – время последнего изменения параметров доступа к файлу;
· 'blksize'– размер блока в файловой системе;
· 'blocks' – число выделенных блоков для файла.
Если информация о файле недоступна, возвращается значение false.
В качестве значений времени в элементах массива задаются метки времени (см. 4.6.18).
Большинство из приведенных характеристик файла относится к операционной системе Unix. Реально в Windows можно использовать только характеристики 7-10. Эти же характеристики можно получить с помощью следующих функций:
· int filesize(string filename) – возвращает размер файла в байтах;
· int fileatime(string filename) – возвращает время последнего обращения к файлу;
· int filemtime(string filename) – возвращает время последней модификации файла;
· int filectime(string filename) – возвращает время последнего изменения параметров доступа к файлу.
Пример 4.6.137. Использование функций filesize() и filemtime():
Следующий фрагмент программы выводит для файлов Word (с расширением.doc) в каталоге "d:/Uploads/" размер и дату последней модификации файла:
// Задание имени каталога
$UploadsDir = "d:/Uploads/";
// Сканирование каталога
$UploadsArray = scandir($UploadsDir);
// Начальное значение индекса файла Word
$j = 0;
// Вывод заголовка
print "Word files in directory \"$UploadsDir\":";
// Вывод имен и характеристик файлов Word в цикле
for($i=0; $i < count($UploadsArray); $i++)
{
// Получение имени текущего элемента
$elementName = $UploadsArray[$i];
// Проверка расширения файла
if(preg_match("/\.doc$/", $elementName) == 1)
{
// Увеличение значения индекса файла Word
$j++;
// Получение размера файла
$docFileSize = filesize($UploadsDir.$elementName);
// Получение времени последней
// модификации файла
$docFileMtime =
filemtime($UploadsDir.$elementName);
// Получение массива даты и времени
$dateTime = getDate($docFileMtime);
// Вывод характеристик файла
echo "\n $j. $elementName ",
"Size: $docFileSize bytes Last modification: ",
$dateTime['mday']." ". $dateTime['month'].
" ".$dateTime['year'];
}
}
Вывод этого фрагмента имеет следующий вид:
Для проверки некоторых характеристик файла можно использовать следующие функции:
· bool file_exists(string name) – возвращает true, если файл или каталог name существует и false – в противном случае;
· bool is_executable(string filename) – возвращает true, если файл filename выполняемый (является программой) и false – в противном случае;
· bool is_file(string filename) – возвращает true, если файл filename – обычный файл (не каталог) и false – в противном случае;
· bool is_readable(string filename) – возвращает true, если файл filename можно читать и false – в противном случае;
· bool is_writable(string filename) – возвращает true, если в файл filename можно писать и false – в противном случае;
· bool is_uploaded_file(string filename) – возвращает значение true, если файл filename загружен с Web-браузера, в противном случае возвращает false.
Пример 4.6.138. Использование функций is_file(), is_executable(), is_readable() и is_writable():
Следующий фрагмент программы выводит для файлов в каталоге "d:/Uploads/" возможность чтения, записи и выполнения:
// Задание имени каталога
$UploadsDir = "d:/Uploads/";
// Сканирование каталога
$UploadsArray = scandir($UploadsDir);
// Начальное значение индекса файла
$j = 0;
// Вывод заголовка
print "Files accesses in directory \"$UploadsDir\":";
// Вывод имен и характеристик файлов Word в цикле
for($i=0; $i < count($UploadsArray); $i++)
{
// Получение имени текущего элемента
$elementName = $UploadsArray[$i];
// Проверка расширения файла
if(is_file($UploadsDir.$elementName))
{
// Увеличение значения индекса файла
$j++;
// Получение возможности чтения файла
$fileIsReadable =
is_readable($UploadsDir.$elementName)?"yes":"no";
// Получение возможности записи в файл
$fileIsWritable =
is_writable($UploadsDir.$elementName)?"yes":"no";
// Получение возможности выполнения файла
$fileIsExecutable =
is_executable($UploadsDir.$elementName)?
"yes":"no";
|
|
// Вывод характеристик файла
echo "\n $j. $elementName ",
"Readable: $fileIsReadable ".
"Writable: $fileIsWritable",
" Executable: $fileIsExecutable";
}
}
Вывод этого фрагмента имеет следующий вид: