Php как проверить размер файла

getimagesize

Функция getimagesize() определит размер любого заданного, поддерживаемого изображения и вернёт этот размер вместе с типом файла и текстовой строкой height/width , которую можно будет использовать внутри тега HTML IMG , а также вернёт соответствующий тип содержимого HTTP .

Также getimagesize() может вернуть дополнительные сведения об изображении через аргумент image_info .

Функция ожидает, что filename является корректным файлом изображения. Если будет передан файл не содержащий изображения, он может быть некорректно интерпретирован как изображение и функция завершится успешно, но массив при этом будет содержать бессмысленные значения.

Не используйте getimagesize() для проверки того, что файл является изображением. Для этих целей используйте модуль Fileinfo.

Замечание: Обратите внимание на тот факт, что отдельные части JPC и JP2 изображений могут иметь различную глубину цвета. В этом случае в параметре «bits» будет стоять максимальное значение из всех обнаруженных. Также JP2 файлы могут содержать несколько кодовых потоков JPEG 2000 . В таком случае getimagesize() вернёт значения для первого такого потока, который будет обнаружен функцией в корне файла.

Замечание: Сведения об иконках извлекаются из иконки с наибольшим битрейтом.

Замечание: Изображения GIF состоят из одного или нескольких кадров, где каждый кадр может занимать только часть изображения. Размер изображения, возвращаемый getimagesize() , будет являться общим размером (прочитанным из дескриптора логического экрана).

Список параметров

Этот аргумент задаёт файл, сведения о котором будут извлекаться. Это может быть локальный или удалённый (зависит от конфигурации) файл. Передача данных удалённого файла должна осуществляться одним из поддерживаемых потоков.

Этот необязательный аргумент позволяет извлечь некоторые расширенные сведения из файла изображения. На данный момент можно получать различные JPG APP маркеры в виде ассоциативного массива. Некоторые программы используют эти маркеры для встраивания текста в картинку. Наиболее часто встраивают » IPTC сведения в APP13 маркер. Для преобразования двоичных данных APP13 маркера во что-то удобочитаемое можно воспользоваться функцией iptcparse() .

Замечание:

image_info поддерживает только файлы JFIF .

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

Возвращает массив из 7 элементов. Не все типы изображений содержат элементы с каналами ( channels ) и битрейтом ( bits ).

Индексы 0 и 1 содержат ширину и высоту изображения.

Замечание:

Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях getimagesize() не сможет определить размер изображения. getimagesize() вернёт нули в качестве значений высоты и ширины.

Индекс 2 содержит одну из констант типа изображения IMAGETYPE_XXX.

Индекс 3 содержит строку со значениями ширины и высоты изображения height=»yyy» width=»xxx» , которая может быть использована внутри IMG тега.

mime — соответствующий MIME-тип изображения. Эти сведения используются для корректной обработки изображения на основании заголовка Content-type :

Читайте также:  Http cc forum lo cc line24 agents index php

Пример #1 getimagesize() и MIME типы

channels принимает значение 3 для RGB картинок и 4 для CMYK.

bits — глубина цвета, число бит для каждого цвета.

Для некоторых типов изображений наличие значений channels и bits может сбить с толку. Например, GIF всегда использует 3 канала на пиксель, но глубину цвета невозможно вычислить для анимированных GIF изображений с общей таблицей цветов.

В случае возникновения ошибки функция вернёт false .

Ошибки

Если доступ к файлу filename невозможен, getimagesize() вызовет ошибку уровня E_WARNING . В случае возникновения ошибки чтения файла getimagesize() вызовет ошибку уровня E_NOTICE .

Список изменений

Версия Описание
8.2.0 Теперь возвращает фактические размеры, биты и каналы изображений AVIF; ранее размеры сообщались как 0x0 , а биты и каналы не сообщались вообще.
7.1.0 Добавлена поддержка WebP.

Примеры

Пример #2 Пример использования getimagesize()

\"пример

list( $width , $height , $type , $attr ) = getimagesize ( «img/flag.jpg» );
echo «» ;
?>

Пример #3 getimagesize (URL)

$size = getimagesize ( «http://www.example.com/gifs/logo.gif» );

// если в имени файла есть пробелы, учтите это должным образом
$size = getimagesize ( «http://www.example.com/gifs/lo%20go.gif» );

Пример #4 getimagesize() возвращающая IPTC

$size = getimagesize ( «testimg.jpg» , $info );
if (isset( $info [ «APP13» ])) $iptc = iptcparse ( $info [ «APP13» ]);
var_dump ( $iptc );
>
?>

Примечания

Замечание:

Этой функции не требуется библиотека GD.

Смотрите также

  • image_type_to_mime_type() — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
  • exif_imagetype() — Determine the type of an image
  • exif_read_data() — Читает заголовки EXIF из файлов изображений
  • exif_thumbnail() — Получает встроенное превью изображения
  • imagesx() — Получение ширины изображения
  • imagesy() — Получение высоты изображения

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:

// Retrieve JPEG width and height without downloading/reading entire image.
function getjpegsize ( $img_loc ) $handle = fopen ( $img_loc , «rb» ) or die( «Invalid file stream.» );
$new_block = NULL ;
if(! feof ( $handle )) $new_block = fread ( $handle , 32 );
$i = 0 ;
if( $new_block [ $i ]== «\xFF» && $new_block [ $i + 1 ]== «\xD8» && $new_block [ $i + 2 ]== «\xFF» && $new_block [ $i + 3 ]== «\xE0» ) $i += 4 ;
if( $new_block [ $i + 2 ]== «\x4A» && $new_block [ $i + 3 ]== «\x46» && $new_block [ $i + 4 ]== «\x49» && $new_block [ $i + 5 ]== «\x46» && $new_block [ $i + 6 ]== «\x00» ) // Read block size and skip ahead to begin cycling through blocks in search of SOF marker
$block_size = unpack ( «H*» , $new_block [ $i ] . $new_block [ $i + 1 ]);
$block_size = hexdec ( $block_size [ 1 ]);
while(! feof ( $handle )) $i += $block_size ;
$new_block .= fread ( $handle , $block_size );
if( $new_block [ $i ]== «\xFF» ) // New block detected, check for SOF marker
$sof_marker = array( «\xC0» , «\xC1» , «\xC2» , «\xC3» , «\xC5» , «\xC6» , «\xC7» , «\xC8» , «\xC9» , «\xCA» , «\xCB» , «\xCD» , «\xCE» , «\xCF» );
if( in_array ( $new_block [ $i + 1 ], $sof_marker )) // SOF marker detected. Width and height information is contained in bytes 4-7 after this byte.
$size_data = $new_block [ $i + 2 ] . $new_block [ $i + 3 ] . $new_block [ $i + 4 ] . $new_block [ $i + 5 ] . $new_block [ $i + 6 ] . $new_block [ $i + 7 ] . $new_block [ $i + 8 ];
$unpacked = unpack ( «H*» , $size_data );
$unpacked = $unpacked [ 1 ];
$height = hexdec ( $unpacked [ 6 ] . $unpacked [ 7 ] . $unpacked [ 8 ] . $unpacked [ 9 ]);
$width = hexdec ( $unpacked [ 10 ] . $unpacked [ 11 ] . $unpacked [ 12 ] . $unpacked [ 13 ]);
return array( $width , $height );
> else // Skip block marker and read block size
$i += 2 ;
$block_size = unpack ( «H*» , $new_block [ $i ] . $new_block [ $i + 1 ]);
$block_size = hexdec ( $block_size [ 1 ]);
>
> else return FALSE ;
>
>
>
>
>
return FALSE ;
>
?>

Читайте также:  Style all submit buttons css

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:

// Retrieve PNG width and height without downloading/reading entire image.
function getpngsize ( $img_loc ) $handle = fopen ( $img_loc , «rb» ) or die( «Invalid file stream.» );

Источник

Как определить размер файла на PHP

Для того чтобы определить размер файла можно воспользоваться стандартной функцией PHP. Но как отобразить его размер не в байтах а в нормальном формате?

PHP – узнать размер файла и отобразить в килобайтах, мегабайтах или гигабайтах

Задача: получить вывод файла в виде 12.4 Мб. Для решения будем использовать несколько встроенных функций. Изначально размер файла будет отображен в байтах. Например, такой код:

выведет размер именно в байтах (12314), что крайне неудобно. Одна из функций filesize() принимает своим аргументом путь к файлу относительно корня с самого сервера (может понадобиться $_SERVER[‘DOCUMENT_ROOT’]) – это важный момент, поскольку указав не верный путь, ничего не произойдет.

Для того чтобы написать функцию, нужно понимать простейшую математику:
в 1 килобайте (Кб) – 1024 байт
в 1 мегабайте (Мб) – 1024 килобайт
в 1 гигайбайте (Гб) – 1024 мегабайт

Исходя из этого, пишем небольшую функцию для читаемого отображения байт в нужный формат:

 1024) < $filesize = ($filesize/1024); // Если размер файла больше Килобайта // то лучше отобразить его в Мегабайтах. Пересчитываем в Мб if($filesize >1024) < $filesize = ($filesize/1024); // А уж если файл больше 1 Мегабайта, то проверяем // Не больше ли он 1 Гигабайта if($filesize >1024) < $filesize = ($filesize/1024); $filesize = round($filesize, 1); return $filesize." ГБ"; >else < $filesize = round($filesize, 1); return $filesize." MБ"; >> else < $filesize = round($filesize, 1); return $filesize." Кб"; >> else < $filesize = round($filesize, 1); return $filesize." байт"; >> ?>
echo $size = getFilesize($_SERVER['DOCUMENT_ROOT'].'/images/bg.jpg');

Данный код переконвертирует число в нужную величину, исходя из размера файла. Основная проблема, которая может возникнуть, это правильный путь к файлу, всё остальное должно отработать как часы 🙂 .

Читайте также:  Javascript function this element

Также, в примере используется функция округления round(), при помощи которой читаемость становится еще более понятней;

Источник

Как определить размер файла средствами PHP?

Наверное, Вы часто видите на сайтах подпись с указанием размера файла. Данный показатель сам никто не подписывает. Этот вопрос решается написанием функции на php. В результате она будет выводить строчку вида:

Размер файла: 2.3 Мб
Очень удобно в случае скачивания каких-либо материалов с сайта. Итак, приступим.

Создаём функцию PHP, определяющую размер файла

Функция будет довольно проста и понятна. Использует в себе три встроенные функции:

file_exists — проверка на наличие указанного файла или каталога.

filesize — определить размер файла. Возвращает результат в байтах. Если файл больше 2 Гб, то, в зависимости от сервера, может выводить некорректный результат.

round — встроенная функция, укорачивающая выводимое значения до целого числа и одной десятой после разделительного знака точки.
Функция проверяет наличие самого файла, затем последовательно пытается определить насколько велик размер файла — если больше 1024 байт, то результат следует выводить в Мб, если больше 1024 Мб, то следует выводить в Гб. А в конце каждого этапа встроенная функция round округляет результат с множества цифр до целого значения и одной десятой с разделительным знаком.

Теперь создаём файл функции. Подобные файлы принято содержать в отдельной папке. Например function.

Код PHP (файл function.php)

 // аргументов функции будет путь к файлу 
function get_filesize($file)
// идем файл
if(!file_exists($file)) return "Файл не найден";
// теперь определяем размер файла в несколько шагов
$filesize = filesize($file);
// Если размер больше 1 Кб
if($filesize > 1024)
$filesize = ($filesize/1024);
// Если размер файла больше Килобайта
// то лучше отобразить его в Мегабайтах. Пересчитываем в Мб
if($filesize > 1024)
$filesize = ($filesize/1024);
// А уж если файл больше 1 Мегабайта, то проверяем
// Не больше ли он 1 Гигабайта
if($filesize > 1024)
$filesize = ($filesize/1024);
$filesize = round($filesize, 1);
return $filesize." ГБ";
>
else
$filesize = round($filesize, 1);
return $filesize." MБ";
>
>
else
$filesize = round($filesize, 1);
return $filesize." Кб";
>
>
else
$filesize = round($filesize, 1);
return $filesize." байт";
>
>
?>

Функцию мы создали. Далее остаётся её применить.

 include_once "function/function.php"; // подключаем файл с функцией 

// вставляете путь или переменную с путём для обработки его функцией
$size = get_filesize ('images/photo.jpg');
echo "Размер файла: ".$size.""; // выводим результат с размером
?>

Источник

Оцените статью