php узнать размер загружаемого файла
Как определить размер файла на 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).)
Как вывести на страницу размер загруженного и прикреплённого к посту файла?
Использую плагин Advanced Custom Fields для добавления доп полей.
В общем добавил поле для загрузки архива, загружает файлы на сайт, через стандартный файловый менеджер. Там же мы моем видеть размер файла.
Как вывести размер загруженного файла на страницу сайта?
загружает файлы на сайт, через стандартный файловый менеджер.
В ACF поле указывайте тип возвращаемых данных, чтобы прилетал массив, в котором будет ID аттачмента. Сам аттачмент будет иметь метаданные, запись с ключом _wp_attached_file, содержащая относительный путь к файлу. Добавьте к нему путь в папке загрузок, и используйте обычный filesize(). Это чтоб вы понимали что, как и где хранится.
Но это долго и нудно 🙂 У WordPress, как обычно, есть все что надо.
Вставил в шаблон полной записи код который вы дали, предварительно заменив
get_field(‘file’); на get_field(‘input_name’);
Где input_name название моего дополнительного поля.
В итоге выдаёт ошибку
Warning: Illegal string offset ‘ID’ in
Игорь Воротнёв: массива нет, есть только файловый объект, url и id
Заменил, переключился на вывод ID, и заработало)
Но после переключения с URL на ID, теперь не знаю как получит ьссылку для скачивания файла. Не подскажите?
И вообще, если выводить прямую ссылку, на сколько это безопасно, можно ли как-то хотя бы ограничить, что бы при вставке прямых ссылок на другие сайты, оно от туда не качало, а перекидывало на мой сайт просто.
Php узнать размер загружаемого файла
В случае, если установлены ограничения памяти, вам может понадобиться увеличить значение опции memory_limit. Убедитесь в том, что значение memory_limit достаточно велико.
В случае, если опция max_execution_time установлена слишком маленьким значением, необходимое время работы скрипта может превышать это значение. Убедитесь в том, что значение max_execution_time достаточно велико.
Директива max_input_time указывает максимально допустимое время в секундах для получения входящих данных, в том числе и загружаемых файлов. В случае, если вы имеете дело с несколькими или большими файлами, либо удалённые пользователи используют медленный канал, ограничение по умолчанию в 60 секунд может быть превышено.
Если директива post_max_size слишком мала, большие файлы не смогут быть загружены на сервер. Убедитесь, что значение директивы post_max_size достаточно велико.
Если не проверять, с какими файлами вы работаете, пользователи могут получить доступ к конфиденциальной информации, расположенной в других директориях.
Следует заметить, что CERN httpd может отсечь всё, что идёт после первого пробела в получаемом от клиента заголовке content-type. Если у вас именно такой случай, CERN httpd не сможет корректно загрузить файлы.
Поскольку разные системы по-разному работают с файловой структурой, нет никаких гарантий того, что файлы с экзотическими именами (например, которые содержат пробельные символы) будут обработаны корректно.
Разработчики не должны использовать одинаковые имена для обычных полей ввода (тег input ) и полей выбора файла в пределах одной и той же формы (например, используя имя для тега input наподобие foo[] ).
php memory limit или как увеличить лимиты на размер загружаемых файлов и объем выделяемой памяти
Если вы запускаете сайт с большим количеством контента, эти лимиты могут стать проблемой. Можно получить ошибку при загрузке:
Если достигнут предел выделяемой памяти, то выведется другое сообщение об ошибке:
Обновление файла php.ini
M — означает мегабайты. Измените лимиты 1000M, 2000M и 3000M на значения, которые необходимы. Изменение значения max_execution_time ограничит время загрузки скрипта.
Во многих случаях используемые значения должны увеличиваться по мере перехода в списке от первой до третьей строки. Upload_max_filesize должен быть самым маленьким, memory limit php ini — самым большим. При этом post_max_size должен иметь среднее значение.
Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.
Измените значения php ini set memory limit так, как вам нужно. Не забудьте сохранить файл и очистить кэш браузера.
Изменение файла wp-config.php
Сохраните файл и очистите кэш браузера.
Изменение лимитов в WHM
Введите нужные вам значения и нажмите кнопку « Сохранить ».
Нажмите кнопку « Сохранить » и очистите кэш браузера.
Заключение
Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.
Пожалуйста, опубликуйте ваши комментарии по текущей теме статьи. За комментарии, подписки, дизлайки, отклики, лайки огромное вам спасибо!