Easily calculate file sizes and convert between units.

v4.2.1 2021-10-17 22:52 UTC


Latest Stable Version Total Downloads


A flexible package for handling file sizes and converting between units.


Include in your project, or, install with Composer:

$ composer require chrisullyott/php-filesize


A FileSize object, both on creation and within its methods, understands just about any expression of data size. You may instantiate it with a size, or leave it initially empty.

use ChrisUllyott\FileSize;

$size = new FileSize('500 GB');

Convert between units

Use as() to export the size in another format.

echo $size->as('MB'); // 512000

A variety of file size strings are supported here as well.

echo $size->as('megabytes'); // 512000

The second argument specifies decimal precision (default is 2).

echo $size->as('TB', 3); // 0.488

User-friendly formatting

Use asAuto() to get a user-friendly string:

$size = new FileSize('1234522678.12 KB');

echo $size->asAuto(); // '1.15 TB'

Optionally, asAuto() also provides a decimal precision.

$size = new FileSize('1234522678.12 KB');

echo $size->asAuto(5); // '1.14974 TB'

Or, simply echo the object for the same functionality:

echo $size; // '1.15 TB'

Modify the size

To make changes, use add(), subtract(), multiplyBy(), and divideBy().

$size = new FileSize('4 GB');

     ->subtract('1 gigabytes')

echo $size; // '10.00 GB'

Negative values are supported. In the case below, 1.2 megabytes are subtracted:


You may also use add() and subtract() with an array of values:

$size->add(['50mb', '140mb', '1.2mb']);

Number base

The second argument of the constructor is the number base, which accepts either 2 (binary) or 10 (decimal). We use binary by default. To handle sizes in decimal:

$size = new FileSize(10921134, 10);

echo $size; // '10.92 MB'

Decimal separator

The third argument of the constructor is the decimal separator, which is a period . by default. Here, you can use a comma instead. The chosen decimal separator will be used both to parse numbers properly, and also to format them on output.

$size = new FileSize('1.234.522.678,12 KB', 2, ',');

echo $size; // '1,15 TB'