Как определить размер файла на PHP
Для того чтобы определить размер файла можно воспользоваться стандартной функцией PHP. Но как отобразить его размер не в байтах а в нормальном формате?
PHP — узнать размер файла и отобразить в килобайтах, мегабайтах или гигабайтах
Задача: получить вывод файла в виде 12.4 Мб. Для решения будем использовать несколько встроенных функций. Изначально размер файла будет отображен в байтах. Например, такой код:
выведет размер именно в байтах (12314), что крайне неудобно. Одна из функций filesize() принимает своим аргументом путь к файлу относительно корня с самого сервера (может понадобиться $_SERVER[‘DOCUMENT_ROOT’]) — это важный момент, поскольку указав не верный путь, ничего не произойдет.
Для того чтобы написать функцию, нужно понимать простейшую математику:
в 1 килобайте (Кб) — 1024 байт
в 1 мегабайте (Мб) — 1024 килобайт
в 1 гигайбайте (Гб) — 1024 мегабайт
Исходя из этого, пишем небольшую функцию для читаемого отображения байт в нужный формат:
Также, в примере используется функция округления round(), при помощи которой читаемость становится еще более понятней;
автор: Dmitriy
Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.
— Создание сайтов на 1С-Битрикс любой сложности
— Вёрстка макетов Figma, Photoshop, Zeplin
— Поддержка проектов на Битриксе
— Разработка нового функционала для сайта
— Парсинг данных
— Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
— Интеграция по API со сторонними сервисами
и многое другое
filesize
(PHP 4, PHP 5, PHP 7, PHP 8)
filesize — Возвращает размер файла
Описание
Возвращает размер указанного файла.
Список параметров
Возвращаемые значения
Возвращает размер указанного файла в байтах или false (и генерирует ошибку уровня E_WARNING ) в случае возникновения ошибки.
Замечание: Так как тип integer в PHP является целым числом со знаком, и многие платформы используют 32-х битные целые числа, то некоторые функции файловых систем могут возвращать неожиданные результаты для файлов размером больше 2 Гб.
Ошибки
Примеры
Пример #1 Пример использования функции filesize()
// Пример вывода: Размер файла somefile.txt: 1024 байтов
Примечания
Смотрите также
User Contributed Notes 36 notes
So, everyone tells you to insert clearstatcache() which is supposed to clear the cached value and allow you to retrieve the current file size but it still does nothing and looks like another bug!
This functions returns the exact file size for file larger than 2 GB on 32 bit OS:
// Recover all file sizes larger than > 4GB.
// Works on php 32bits and 64bits and supports linux
// Used the com_dotnet extension
The simplest and most efficient implemention for getting remote filesize:
Here is my super fast method of getting >2GB files to output the correct byte size on any version of windows works with both 32Bit and 64Bit.
This function also can be great for browser caching controll. For example, you have a stylesheet and you want to make sure everyone has the most recent version. You could rename it every time you edit it, but that would be a waste of time. Instead, you can do like:
This also can be apply for JS and also images with same name.
A fast implementation that determines actual file size of large files (>2GB) on 32-bit PHP:
Input is an open file handle. Return value is an integer for file sizes
// use system windows for give filesize
// best for php 32bit or php 64bit
// I do not know if it works on other windows, but on Windows 10 works well here
Slightly edited version of the function from rommel at rommelsantor dot com. Now it returns a two characters file size which is a bit more convenient to read.
In this case we have for exemple:
[content-length] => Array
[0] => 294 // Size requested file
[1] => 357556 // Real Size redirected file
This function quickly calculates the size of a directory:
http://aidanlister.com/repos/v/function.dirsize.php
For a faster (unix only) implementation, see function.disk-total-space, note #34100
http://www.php.net/manual/en/function.disk-total-space.php#34100
Also of interest is this wikipedia article, discussing the difference between a kilobyte (1000) and a kibibyte (1024).
http://en.wikipedia.org/wiki/Bytes
I have created a handy function, using parts of code from kaspernj at gmail dot com and md2perpe at gmail dot com, which should get file sizes > 4GB on Windows, Linux and Mac (at least).
Here’s the best way (that I’ve found) to get the size of a remote file. Note that HEAD requests don’t get the actual body of the request, they just retrieve the headers. So making a HEAD request to a resource that is 100MB will take the same amount of time as a HEAD request to a resource that is 1KB.
HTTP Status: 302
Content-Length: 8808759
On 64-bit platforms, this seems quite reliable for getting the filesize of files > 4GB
The following function takes the ssh2_connect resource and the path as input. It may not be neat, but it solves the problem for the moment.
// extract filesize with command dir windows 10
// is ok for all system 32/64 and the best compatibility for Dummy file
// but cant return value in (int) for best return use Float
( «d:\\test.mkv» ); //11.5GB => return (float) 12401880207
// File size for windows
// if filesize() php > PHP_INT_MAX (4 294 967 296) :: failled
// filesize_cmd returns the value measured by windows
Here a function to get the size of a file in a human understanding way with decimal separator, thousand separator, decimals.
This is an updated version of my previous filesize2bytes.
The return type now it’s really an int.
// Quick example to test the return value in order to tell a 0 byte file from a failed call to filesize()
$size = filesize ( «some.file» );
My solution for calculating the directory size:
Here ist the very fast and reliable way to get size of large files > 2Gb on 32bit and 64bit platforms.
some notes and modifications to previous post.
refering to RFC, when using HTTP/1.1 your request (either GET or POST or HEAD) must contain Host header string, opposite to HTTP/1.1 where Host ain’t required. but there’s no sure how your remote server would treat the request so you can add Host anyway (it won’t be an error for HTTP/1.0).
host value _must_ be a host name (not CNAME and not IP address).
this function catches response, containing Location header and recursively sends HEAD request to host where we are moved until final response is met.
(you can experience such redirections often when downloading something from php scripts or some hash links that use apache mod_rewrite. most all of dowloading masters handle 302 redirects correctly, so this code does it too (running recursively thru 302 redirections).)
проверка веса файла
Какое отклонение веса тела от среднего веса можно гарантировать?
При взвешивании тела получен средний вес m=2,3 г, среднее квадратическое отклонение веса.

Известен список фамилий и вес студентов группы(ввод с клавиатуры). Напечатать в порядке.
Определение максимального веса файла
Добрый день, кто подскажет, как определить максимальный/оптимальный вес файла для веб-приложения.
Добавить в загрузчик изображений проверку размера и веса, и переименовывание файла
http://ajaxs.ru/lesson/ajax/108-zagruzchik_izobrazhenij_na_server.html Друзья, подскажите, как в.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Проверка формы отправки файла на имя и формат файла
Добрый день. Появилась необходимость проверять имя файла и формат перед отправки формы. Пока в.
Чтение и запись из файла, проверка файла на пустоту
В общем написал код который использует сессии и массивы, не могу понять как переделать так что бы.

Как реализовать следующие действия? Cчитать из первой строки два параметра размерности матрицы по.

Как проверить существует ли файл, допустим с названием pwd.txt который лежит по адресу C:\as.txt
getimagesize
(PHP 4, PHP 5, PHP 7, PHP 8)
getimagesize — Получение размера изображения
Описание
Функция ожидает, что filename является корректным файлом изображения. Если будет передан файл не содержащий изображения, он может быть некорректно интерпретирован как изображение и функция завершится успешно, но массив при этом будет содержать бессмысленные значения.
Не используйте getimagesize() для проверки того, что файл является изображением. Для этих целей используйте модуль Fileinfo.
Замечание: Сведения об иконках извлекаются из иконки с наибольшим битрейтом.
Список параметров
Этот аргумент задаёт файл, сведения о котором будут извлекаться. Это может быть локальный или удалённый (зависит от конфигурации) файл. Передача данных удалённого файла должна осуществляться одним из поддерживаемых потоков.
Возвращаемые значения
Возвращает массив из 7 элементов. Не все типы изображений содержат элементы с каналами ( channels ) и битрейтом ( bits ).
Индексы 0 и 1 содержат ширину и высоту изображения.
Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях getimagesize() не сможет определить размер изображения. getimagesize() вернёт нули в качестве значений высоты и ширины.
Индекс 2 содержит одну из констант типа изображения IMAGETYPE_XXX.
Пример #1 getimagesize() и MIME типы
channels принимает значение 3 для RGB картинок и 4 для CMYK.
Ошибки
Список изменений
| Версия | Описание |
|---|---|
| 7.1.0 | Добавлена поддержка WebP. |
Примеры
Пример #2 Пример использования getimagesize()
Пример #3 getimagesize (URL)
// если в имени файла есть пробелы, учтите это должным образом
$size = getimagesize ( «http://www.example.com/gifs/lo%20go.gif» );
Пример #4 getimagesize() возвращающая IPTC
Примечания
Этой функции не требуется библиотека GD.
Смотрите также
User Contributed Notes 24 notes
As noted below, getimagesize will download the entire image before it checks for the requested information. This is extremely slow on large images that are accessed remotely. Since the width/height is in the first few bytes of the file, there is no need to download the entire file. I wrote a function to get the size of a JPEG by streaming bytes until the proper data is found to report the width and height:
There’s a code snippet for getting JPEG image dimensions by getting only first few bytes of the file, but it doesn’t work for PNG files, so I wrote one. It will download only the first 24 bytes instead of the whole image, and thus being much faster than getimagesize() and it will save bandwidth at the same time:
Как узнать вес файла php
filesize
(PHP 4, PHP 5, PHP 7, PHP 8)
filesize — Возвращает размер файла
Описание
Возвращает размер указанного файла.
Список параметров
Возвращаемые значения
Возвращает размер указанного файла в байтах или false (и генерирует ошибку уровня E_WARNING ) в случае возникновения ошибки.
Замечание: Так как тип integer в PHP является целым числом со знаком и многие платформы используют 32-х битные целые числа, то некоторые функции файловых систем могут возвращать неожиданные результаты для файлов размером больше 2 Гб.
Примеры
Пример #1 Пример использования функции filesize()
// Пример вывода: Размер файла somefile.txt: 1024 байтов
Ошибки
Примечания
Смотрите также
User Contributed Notes 36 notes
This functions returns the exact file size for file larger than 2 GB on 32 bit OS:
The simplest and most efficient implemention for getting remote filesize:
Here is my super fast method of getting >2GB files to output the correct byte size on any version of windows works with both 32Bit and 64Bit.
// Recover all file sizes larger than > 4GB.
// Works on php 32bits and 64bits and supports linux
// Used the com_dotnet extension
This function also can be great for browser caching controll. For example, you have a stylesheet and you want to make sure everyone has the most recent version. You could rename it every time you edit it, but that would be a waste of time. Instead, you can do like:
This also can be apply for JS and also images with same name.
A fast implementation that determines actual file size of large files (>2GB) on 32-bit PHP:
Input is an open file handle. Return value is an integer for file sizes
// use system windows for give filesize
// best for php 32bit or php 64bit
// I do not know if it works on other windows, but on Windows 10 works well here
Slightly edited version of the function from rommel at rommelsantor dot com. Now it returns a two characters file size which is a bit more convenient to read.
In this case we have for exemple:
[content-length] => Array
[0] => 294 // Size requested file
[1] => 357556 // Real Size redirected file
I have created a handy function, using parts of code from kaspernj at gmail dot com and md2perpe at gmail dot com, which should get file sizes > 4GB on Windows, Linux and Mac (at least).
Here’s the best way (that I’ve found) to get the size of a remote file. Note that HEAD requests don’t get the actual body of the request, they just retrieve the headers. So making a HEAD request to a resource that is 100MB will take the same amount of time as a HEAD request to a resource that is 1KB.
HTTP Status: 302
Content-Length: 8808759
This function quickly calculates the size of a directory:
http://aidanlister.com/repos/v/function.dirsize.php
For a faster (unix only) implementation, see function.disk-total-space, note #34100
http://www.php.net/manual/en/function.disk-total-space.php#34100
Also of interest is this wikipedia article, discussing the difference between a kilobyte (1000) and a kibibyte (1024).
http://en.wikipedia.org/wiki/Bytes
On 64-bit platforms, this seems quite reliable for getting the filesize of files > 4GB
This is an updated version of my previous filesize2bytes.
The return type now it’s really an int.
The following function takes the ssh2_connect resource and the path as input. It may not be neat, but it solves the problem for the moment.
So, everyone tells you to insert clearstatcache() which is supposed to clear the cached value and allow you to retrieve the current file size but it still does nothing and looks like another bug!
My solution for calculating the directory size:
// Quick example to test the return value in order to tell a 0 byte file from a failed call to filesize()
$size = filesize ( “some.file” );
// File size for windows
// if filesize() php > PHP_INT_MAX (4 294 967 296) :: failled
// filesize_cmd returns the value measured by windows
// extract filesize with command dir windows 10
// is ok for all system 32/64 and the best compatibility for Dummy file
// but cant return value in (int) for best return use Float
( “d:\\test.mkv” ); //11.5GB => return (float) 12401880207
Here a function to get the size of a file in a human understanding way with decimal separator, thousand separator, decimals.
Here ist the very fast and reliable way to get size of large files > 2Gb on 32bit and 64bit platforms.
some notes and modifications to previous post.
refering to RFC, when using HTTP/1.1 your request (either GET or POST or HEAD) must contain Host header string, opposite to HTTP/1.1 where Host ain’t required. but there’s no sure how your remote server would treat the request so you can add Host anyway (it won’t be an error for HTTP/1.0).
host value _must_ be a host name (not CNAME and not IP address).
this function catches response, containing Location header and recursively sends HEAD request to host where we are moved until final response is met.
(you can experience such redirections often when downloading something from php scripts or some hash links that use apache mod_rewrite. most all of dowloading masters handle 302 redirects correctly, so this code does it too (running recursively thru 302 redirections).)
Опции PHP для настройки размеров файлов и времени работы скриптов
Частая ситуация когда размеры файлов, разрешенных к загрузке на сайте стоят очень маленькие. Особенно этим грешат хостинги, где ставят минимальные настройки, не особо задумываясь о потребностях клиента. Это надо изменить и здесь необходимо провести некоторые настройки PHP отвечающие за размеры. Сам набор параметров я напишу чуть ниже и обозначу за что отвечает каждый из них.
Основные параметры
Итак что влияет на размеры файлов которые разрещены к загрузке в PHP.
upload_max_filesize – Максимальный размер загружаемого файла
Измеряется в мегабайтах или гигабайтах. Дефолтное значение: “2M”
max_file_uploads – Максимальное количество одновременных загрузок
Измеряется в цифровом количестве файлов. Дефолтное значение: “20”
post_max_size – Максимальный размер отправляемого через POST-запрос файла (Должен быть больше upload_max_filesize).
Измеряется в мегабайтах или гигабайтах. Дефолтное значение: “8M”
max_execution_time – Время в течении которого скрипт должен полностью завершить своё исполнение. Для отмены ограничений можно присвоить 0.
Измеряется в секундах или минутах. Дефолтное значение: “30”
max_input_time – Время в течении которого скрипт, должен получить и обработать все данные из POST и GET запросов.
Измеряется в секундах.
Измеряется в мегабайтах или гигабайтах. Дефолтное значение: “128M”
Как изменить опции настройки PHP
Изменить возможно разными способами, я покажу как это сделать.
1. PHP.INI
Файл php.ini является основным файлом где хранятся настройки исполнения php скриптов. Пользовательский файл настроек обычно находится на несколько уровней выше папки www сайта. Иногда помещён в папку php-bin. Применение: опция = значение
Пример настройки добавленной в файл php.ini:
post_max_size = 512M
upload_max_filesize = 512M
max_execution_time = 3600
max_input_time = 1800
Применение: php_value опция значение
php_value post_max_size 512M
php_value upload_max_filesize 512M
php_value max_execution_time 3600
php_value max_input_time 1800
3. Любой PHP файл
Помимо вышеописанных способов, можно сделать изменение настроек к любому PHP файлу.
Применение: ini_set(‘опция’, ‘значение’);
ini_set(‘post_max_size’, ‘512M’);
ini_set(‘upload_max_filesize’, ‘512M’);
ini_set(‘max_execution_time’, ‘3600’);
ini_set(‘max_input_time’, ‘1800’);
* Необходимо учесть, что некоторые хостеры, блокируют изменение данных опций и после применения необходимо связаться с своим хостером, чтобы убедиться, что это работает.
Загрузка файлов больших размеров в PHP
Те, кто уже пытался загружать файлы, вполне вероятно, обратили внимание на то, что загрузить файл через PHP даже среднего размера (15-20 МБ) не представляется возможным. А ведь это не такой уж и большой размер файла, и в этой статье я расскажу, как загружать файлы больших размеров в PHP.
Для того, чтобы загружать файлы больших размеров в PHP, надо исправить настройки интерпритатора PHP. Существуют 4 настройки, влияющие на максимальный допустимый размер загружаемого файла:
Фактически, чтобы загружать большие файлы в PHP, нужно исправить все 4 настройки. Делается это с помощью файла .htaccess, в который нужно добавить следующие строки (безусловно, значения можно менять на свои):
php_value max_execution_time 500
php_value max_input_time 500
php_value upload_max_filesize 30M
php_value post_max_size 30M
Почему все 4 опции так важны:
Однако, будьте внимательны! До бесконечности увеличивать эти параметры нельзя! Все эти настройки ограничены оперативной памятью, выделяемой Вам сервером. Запомните следующее неравенство, которое всегда должно соблюдаться: “upload_max_filesize
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 9 ):
Спасибо, Михаил. Буду пробовать.
Михаил, а вы можете написать статью про обрезку изображений?
Хорошо, напишу эту статью.
Данный вопрос вы можете задать своему хостеру. Но в целом да,скорее всего так и есть.Обычно размер аттача одного файла не может превышать 30-50 мегабайт
Есть еще один удобный сервис который позволяет отправлять большие файлы. С его помощью можно отправлять больших файлы по электронной почте. Попробуйте www.jumbomail.me/ru/ вы сможете отправлять по электронной почте большие файлы до 5 ГБ бесплатно. Достаточно ввести адрес электронной почты получателя и загрузить их. Тут еще есть крутая фишка что можно просматривать фотки и слушать музыку не скачивая к себе в компьютер. Сама пользуюсь, рекомендую.
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.
getimagesize
(PHP 4, PHP 5, PHP 7, PHP 8)
getimagesize — Получение размера изображения
Описание
Функция ожидает, что filename является корректным файлом изображения. Если будет передан файл не содержащий изображения, он может быть некорректно интерпретирован как изображение и функция завершится успешно, но массив при этом будет содержать бессмысленные значения.
Не используйте getimagesize() для проверки того, что файл является изображением. Для этих целей используйте модуль Fileinfo.
Замечание: Сведения об иконках извлекаются из иконки с наибольшим битрейтом.
Список параметров
Этот аргумент задаёт файл, сведения о котором будут извлекаться. Это может быть локальный или удалённый (зависит от конфигурации) файл. Передача данных удалённого файла должна осуществляться одним из поддерживаемых потоков.
Возвращаемые значения
Возвращает массив из 7 элементов. Не все типы изображений содержат элементы с каналами ( channels ) и битрейтом ( bits ).
Индексы 0 и 1 содержат ширину и высоту изображения.
Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях getimagesize() не сможет определить размер изображения. getimagesize() вернёт нули в качестве значений высоты и ширины.
Индекс 2 содержит одну из констант типа изображения IMAGETYPE_XXX.
Пример #1 getimagesize() и MIME типы
