Filesize: примеры (PHP)

Работа с функцией filesize в PHP: полное руководство
Раздел: Работа с файловой системой
filesize(string $filename): int|false

Описание функции filesize

Функция filesize() в PHP используется для получения размера указанного файла в байтах. Эта функция часто применяется при работе с файловой системой для проверки объема данных, контроля загрузки файлов или анализа использования дискового пространства.

Аргументы функции

Функция принимает один обязательный параметр:

  • filename (строка) - путь к файлу, размер которого необходимо определить. Может быть абсолютным или относительным путем.

Возвращаемое значение:

  • При успешном выполнении: целое число, представляющее размер файла в байтах
  • При ошибке: false

Основные примеры использования

Базовое определение размера файла
<?
$file = 'document.pdf';
$size = filesize($file);
echo "Размер файла: $size байт";
?>
Размер файла: 24576 байт
Проверка существования файла перед определением размера
<?
$file = 'image.jpg';
if (file_exists($file)) {
    $size = filesize($file);
    echo "Файл существует, размер: " . number_format($size) . " байт";
} else {
    echo "Файл не найден";
}
?>
Файл существует, размер: 1,048,576 байт
Форматирование вывода размера файла
<?
function formatSize($bytes) {
    $units = ['Б', 'КБ', 'МБ', 'ГБ'];
    $index = 0;
    while ($bytes >= 1024 && $index < count($units)-1) {
        $bytes /= 1024;
        $index++;
    }
    return round($bytes, 2) . ' ' . $units[$index];
}

$file = 'video.mp4';
$size = filesize($file);
echo "Размер: " . formatSize($size);
?>
Размер: 145.67 МБ

Альтернативные функции в PHP

Функция stat()

Возвращает массив с подробной статистикой файла, включая размер (ключ 'size'). Полезна при необходимости получения нескольких характеристик файла одновременно.

SplFileInfo

Класс из SPL (Standard PHP Library), предоставляющий объектно-ориентированный интерфейс для работы с файлами. Метод getSize() возвращает размер файла.

Работает с открытым файловым дескриптором, возвращая статистику файла. Используется при уже открытом файле.

Типичные ошибки

Отсутствие проверки существования файла
<?
// Ошибка: файл может не существовать
$size = filesize('nonexistent.jpg');
if ($size === false) {
    echo "Не удалось определить размер файла";
}
?>
Не удалось определить размер файла
Кэширование результатов
<?
// filesize() кэширует результаты
$size1 = filesize('log.txt');
// Записываем что-то в файл
file_put_contents('log.txt', 'новая запись', FILE_APPEND);
// Может вернуть старое значение из кэша
$size2 = filesize('log.txt');
echo "До: $size1, После: $size2";
?>
Проблемы с большими файлами
<?
// На 32-битных системах файлы >2GB могут вызвать проблемы
$size = filesize('large_video.mkv');
// Может вернуть отрицательное число
var_dump($size);
?>

Изменения в последних версиях PHP

В PHP 8.0 не было внесено существенных изменений в работу функции filesize(). Однако стоит отметить:

  • В PHP 7.4 улучшена обработка ошибок при работе с сетевыми ресурсами
  • Начиная с PHP 5.0, функция поддерживает работу с потоковыми обертками
  • В 64-битных версиях PHP устранены ограничения на работу с файлами размером более 2GB

Расширенные примеры использования

Рекурсивный подсчет размера директории
Пример php
<?
function dirSize($path) {
    $total = 0;
    $files = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($path)
    );
    
    foreach ($files as $file) {
        if ($file->isFile()) {
            $total += $file->getSize();
        }
    }
    return $total;
}

$size = dirSize('/path/to/directory');
echo "Общий размер: " . number_format($size) . " байт";
?>
Мониторинг изменения размера файла
Пример php
<?
class FileSizeMonitor {
    private $file;
    private $lastSize;
    
    public function __construct($filename) {
        $this->file = $filename;
        $this->lastSize = filesize($filename);
    }
    
    public function checkGrowth() {
        clearstatcache(true, $this->file);
        $currentSize = filesize($this->file);
        $growth = $currentSize - $this->lastSize;
        $this->lastSize = $currentSize;
        
        return $growth;
    }
}

$monitor = new FileSizeMonitor('server.log');
// Через некоторое время
$growth = $monitor->checkGrowth();
echo "Файл вырос на: $growth байт";
?>
Определение размера удаленного файла через HTTP
Пример php
<?
function getRemoteFileSize($url) {
    $headers = get_headers($url, 1);
    if ($headers && isset($headers['Content-Length'])) {
        return (int)$headers['Content-Length'];
    }
    return false;
}

$size = getRemoteFileSize('https://example.com/file.zip');
if ($size !== false) {
    echo "Размер удаленного файла: $size байт";
}
?>
Обработка специальных файловых дескрипторов
Пример php
<?
// Работа с временными файлами
$tempFile = tmpfile();
fwrite($tempFile, str_repeat('x', 1000));
fflush($tempFile);

$meta = stream_get_meta_data($tempFile);
$size = filesize($meta['uri']);
echo "Размер временного файла: $size байт";

fclose($tempFile);
?>

Аналоги в других языках программирования

Filesize в Python

import os
size = os.path.getsize('file.txt')
print(f"Размер файла: {size} байт")
Размер файла: 1024 байт
JavaScript (Node.js)
const fs = require('fs');
const stats = fs.statSync('file.txt');
console.log(`Размер файла: ${stats.size} байт`);
Размер файла: 2048 байт

Filesize в MySQL

SELECT 
  TABLE_NAME,
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024) AS 'Size (KB)'
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name';
+------------+------------+
| TABLE_NAME | Size (KB)  |
+------------+------------+
| users      | 1024       |
| orders     | 2048       |
+------------+------------+

PHP filesize function comments

En
Filesize Gets file size