Вывод размера файла php

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

Описание родственных функций вы сможете найти в разделах Каталоги и Выполнение программ.

За списком обёрток URL для работы с удалёнными файлами и пояснениями обращайтесь к главе Поддерживаемые протоколы и обёртки.

User Contributed Notes 8 notes

I just learned that, to specify file names in a portable manner, you DON’T need ‘DIRECTORY_SEPARATOR’ — just use ‘/’. This really surprised and shocked me, as until now I typed about a zillion times ‘DIRECTORY_SEPARATOR’ to stay platform independent — unnecessary. Don’t make the same mistake.

You have an array of directories (straightforward list of directories):

$array = array(
‘/home/drapeko/var’ ,
‘/home/drapeko/var/y’ ,
‘/home/drapeko’ ,
‘/home’ ,
‘/var/libexec’
);
);
?>

And you would like to transform this array to hierarchy of directories:

$array = array (
‘home’ => array (
‘drapeko’ => array (
‘var’ => array (
‘y’ => array()
)
)
),
‘var’ => array(
‘libexec’ => array()
)
);
?>

How can you do it?

First of all the below function will help us.

/**
* This function converts real filesystem path to the string array representation.
*
* for example,
* ‘/home/drapeko/var/y will be converted to $result_array[‘home’][‘drapeko’][‘var’][‘y’]
* ‘/home/drapeko/var/y/file.txt will be converted to $result_array[‘home’][‘drapeko’][‘var’][‘y’]
*
* @param $path realpath of the directory
* @return string string array representation of the path
*/
function pathToArrayStr ( $path ) <
// TODO constants/configs?
$res_path = str_replace (array( ‘:/’ , ‘:\\’ , ‘/’ , ‘\\’ , DIRECTORY_SEPARATOR ), ‘/’ , $path );
// if the first or last symbol is ‘/’ delete it (e.g. for linux)
$res_path = preg_replace (array( «/^\//» , «/\/$/» ), » , $res_path );
// create string
$res_path = ‘[\» . str_replace ( ‘/’ , ‘\’][\» , $res_path ). ‘\’]’ ;

return $res_path ;
>
?>

It simply converts the real path of the file to array string representation.

How can you use this function? I know it looks like a little confusing. But it’s quite simple. Consider the example below:

$result = array();
$check = array();
foreach( $array as $val ) <
$str = pathToArrayStr ( $val , ‘result’ );
foreach( $check as $ck ) <
if ( strpos ( $ck , $str ) !== false ) <
continue 2 ;
>
>
$check [] = $str ;
eval( ‘$result’ . $str . ‘ = array();’ );
>
print_r ( $result );
?>

Heh, how do you find it? This approach has helped me very much. I hope you will find it useful. 🙂

I made this function to search and/or display files by extension or for a string occurance in the filename. Any comments or enhancements are welcome offcourse. I’ll update this function soon.

usage: list_files([string], [string], [int 1 | 0], [int 1 | 0]);

search for extension: list_files([string], [string], [0], [int 1 | 0]);
returns array: $myArray = list_files([string], [string], [0], [0]);
echo result: list_files([string], [string], [0], [1]);

Читайте также:  Переменные окружения python django

search for string occurance: list_files([string], [string], [1], [int 1 | 0]);
returns array: $myArray = list_files([string], [string], [1], [0]);
echo result: list_files([string], [string], [1], [1]);

function list_files ( $directory , $stringSearch , $searchHandler , $outputHandler ) $errorHandler = false ;
$result = array();
if (! $directoryHandler = @ opendir ( $directory )) echo ( «

\nerror: directory \" $directory \" doesn't exist!\n

\n» );
return $errorHandler = true ;
>
if ( $searchHandler === 0 ) while ( false !== ( $fileName = @ readdir ( $directoryHandler ))) if(@ substr ( $fileName , — @ strlen ( $stringSearch )) === $stringSearch ) @ array_push ( $result , $fileName );
>
>
>
if ( $searchHandler === 1 ) while( false !== ( $fileName = @ readdir ( $directoryHandler ))) if(@ substr_count ( $fileName , $stringSearch ) > 0 ) @ array_push ( $result , $fileName );
>
>
>
if (( $errorHandler === true ) && (@ count ( $result ) === 0 )) echo ( «

\nerror: no filetype \" $fileExtension \" found!\n

\n» );
>
else sort ( $result );
if ( $outputHandler === 0 ) return $result ;
>
if ( $outputHandler === 1 ) echo ( «

\n" ); 
print_r ( $result );
echo ( "

\n» );
>
>
>

Pollard@php.net contributed this in response to a question on setting these variables .
This option *IS* settable within your PHP scripts.
Example:

ini_set ( ‘auto_detect_line_endings’ , true );
$contents = file ( ‘unknowntype.txt’ );

ini_set ( ‘auto_detect_line_endings’ , false );
$content2 = file ( ‘unixfile.txt’ );
?>

Note, with PHP 4.3 anytime Mac files are read using fgets or file you’ll need to auto_detect_line_endings since \n is otherwise assumed. However, with PHP 5.0, stream_get_line() will allow you to specify what line ending character to read up to.

\\ Read a line from a MAC file
stream_get_line($fp, 4096, «\r»);

\\ Read a line from a UNIX file
stream_get_line($fp, 4096, «\n»);

\\ Read a line from a DOS file
stream_get_line($fp, 4096, «\r\n»);

\\ Read a line up to any filesystem line ending
ini_set(‘auto_detect_line_endings’, true); fgets($fp);

\\ You can also make up your own line ending characters:
\\ Read up to the first instance of «:»
stream_get_line($fp, 4096, «:»);

This function searches a directory and returns an array of all files whose filename matches the specified regular expression. It’s similar in concept to the Unix find program.

function findfile($location=»,$fileregex=») if (!$location or !is_dir($location) or !$fileregex) return false;
>

$all = opendir($location);
while ($file = readdir($all)) if (is_dir($location.’/’.$file) and $file <> «..» and $file <> «.») $subdir_matches = findfile($location.’/’.$file,$fileregex);
$matchedfiles = array_merge($matchedfiles,$subdir_matches);
unset($file);
>
elseif (!is_dir($location.’/’.$file)) if (preg_match($fileregex,$file)) array_push($matchedfiles,$location.’/’.$file);
>
>
>
closedir($all);
unset($all);
return $matchedfiles;
>

This is a function I use to determine if a file contains Binary information. I use this for my search engine so that it doesn’t try to index files like .zip or .mp3 or any other file that doesn’t contain readable information. It makes use of the Character Type Extension if it’s loaded, if it’s not then it uses Regular Expressions.

function is_binary($link)
$tmpStr = »;
@$fp = fopen($link, ‘rb’);
@$tmpStr = fread($fp, 256);
@fclose($fp);

if($tmpStr != »)
$tmpStr = str_replace(chr(10), », $tmpStr);
$tmpStr = str_replace(chr(13), », $tmpStr);

Here is a useful function if you’re having trouble writing raw bytes into a file.

Читайте также:  Php send email phpmailer

It receives an integer and returns an array containing the ASCII values of the bytes on each index of the array.

function int2bytes($number) $byte = $number;
$i=0;
do $dec_tmp = $byte;

$byte = bcdiv($byte,256,0);
$resto = $dec_tmp — (256 * $byte);
$return[] = $resto;
> while($byte >= 256);
if($byte) $return[] = $byte;
return array_reverse($return);
>

$arr will contain the following values:
Array
(
[0] => 1
[1] => 40
[2] => 56
)

Now, to write this data to the file, just use a fputs() with chr(), just like this:

a function based on «tunnelareaten at gmail dot com»s idea to search for files in a given directory by a searchstring or by fileextension.

I added support to search recursively through all sub-directories an to determine weather the filepath should be returned or not.

// recursive function to get contents of given folder by searchterm or fileextension
// (does not show folders)
// standards: Foldername: string
// Searchterm: string
// Searchtype: ext/search (file-extension or searchterm within filename)
// SaveCompletePath: true/1
// usage: array FileSearch_r($Folder,$Search[,$SearchType,$SavePath])

function FileSearch_r ( $Dir , $Search , $SearchType = «search» , $SavePath = 1 ) $Array =array();
$D = dir ( $Dir );
while ( false !==( $Entry = $D -> read ()))
if ( $Entry != ‘.’ && $Entry != ‘..’ ) $Entry = $Dir . $Entry ;
if ( is_dir ( $Entry )) $Array = array_merge ( $Array , FileSearch_r ( $Entry . ‘/’ , $Search , $SearchType , $SavePath ));
else
if ( $SearchType == «search»
? substr_count ( $Entry , $Search )> 0
🙁 $SearchType == «ext»
? substr ( $Entry ,- strlen ( $Search ))=== $Search
: true ))
$Array []= $Entry ;
>
$D -> close ();
sort ( $Array , SORT_STRING );
if(!(bool) $SavePath ) $Array = str_replace ( $Dir , «» , array_values ( $Array ));
return $Array ;
>
?>

Источник

Как определить размер файла на 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');

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

Читайте также:  Icon in header html

Также, в примере используется функция округления 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.""; // выводим результат с размером
?>

Источник

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