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
Возвращает массив с подробной статистикой файла, включая размер (ключ 'size'). Полезна при необходимости получения нескольких характеристик файла одновременно.
Класс из 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
Расширенные примеры использования
<?
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) . " байт";
?><?
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 байт";
?><?
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 байт";
}
?><?
// Работа с временными файлами
$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 байт
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 | +------------+------------+