Filesize дать размер файла


Содержание

filesize — Возвращает размер файла

(PHP 4, PHP 5, PHP 7)

filesize — Возвращает размер файла

Описание

Возвращает размер указанного файла.

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

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

Возвращает размер указанного файла в байтах или FALSE (и генерирует ошибку уровня E_WARNING ) в случае возникновения ошибки.

Замечание: Так как тип integer в PHP является целым числом со знаком и многие платформы используют 32-х битные целые числа, то некоторые функции файловых систем могут возвращать неожиданные результаты для файлов размером больше 2ГБ.

Примеры

Пример #1 Пример использования функции filesize()

// Пример вывода: Размер файла somefile.txt: 1024 байта

$filename = ‘somefile.txt’ ;
echo ‘Размер файла ‘ . $filename . ‘: ‘ . filesize ( $filename ) . ‘ байт’ ;

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примечания

Замечание: Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat() , смотрите в Поддерживаемые протоколы и обработчики (wrappers).

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

  • file_exists() — Проверяет наличие указанного файла или каталога

Размер загруженного файла превышает значение upload_max_filesize, установленное в файле php.ini

Если подобное сообщение возникает при работе сайта на вашем локальном компьютере (денвер), то скорее всего дело в том, что денвер не настроен на загрузку необходимого вам размера файла (по умолчанию 2 мб).

Для решения проблемы необходимо подредактировать файл php.ini (расположение: webservers->usr->local->php5) в строчке upload_max_filesize = 2M

Изменим значение на загрузку максимального файла размером 20 Мб, тогда строчка примет вид:

Также рекомендуется изменить значение post_max_size ( значение этого параметра должно быть равным или большим по значению параметра upload_max_filesize). На самом деле работать будет и без изменения этого параметра.

После внесения изменений следует сохранить их и перезапустить денвер.

Как увеличить лимиты на размер загружаемых файлов и объем выделяемой для PHP памяти

По умолчанию WordPress устанавливает небольшой лимит на размер загружаемых изображений, видеороликов и других файлов. Аналогичная ситуация с PHP memory limit , который сказывается на возможности запускать плагины и скрипты.

Если вы запускаете сайт с большим количеством контента, эти лимиты могут стать проблемой. Можно получить ошибку при загрузке:

Если достигнут предел выделяемой памяти, то выведется другое сообщение об ошибке:


Рассмотрим наиболее эффективные способы увеличения этих лимитов на сервере. Начнем с memory limit php ini .

Обновление файла php.ini

Если вы используете CPanel , перейдите в раздел « Файлы » и нажмите кнопку « Диспетчер файлов ». Убедитесь, что установлен флажок « Показать скрытые файлы », а затем нажмите на кнопку « Перейти ».

Выберите папку wp-admin и найдите файл php.ini или php5.ini . Если такого файла нет, создайте его, нажав на кнопку « Создать файл », расположенную в верхнем левом углу. Назовите файл php.ini и нажмите во всплывающем окне кнопку « Создать файл »:

Если ошибка не исчезла, попробуйте переименовать файл в php5.ini . Когда файл будет открыт, добавьте в него приведенные ниже строки, а затем сохраните изменения и закройте файл:

M — означает мегабайты. Измените лимиты 1000M, 2000M и 3000M на значения, которые необходимы. Изменение значения max_execution_time ограничит время загрузки скрипта.

Во многих случаях используемые значения должны увеличиваться по мере перехода в списке от первой до третьей строки. Upload_max_filesize должен быть самым маленьким, memory limit php ini — самым большим. При этом post_max_size должен иметь среднее значение.

Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.

Редактирование файла .htaccess

Если редактирование php.ini не помогло, попробуйте изменить файл .htaccess . Добавьте приведенный ниже код в конец файла:

Измените значения php ini set memory limit так, как вам нужно. Не забудьте сохранить файл и очистить кэш браузера.

Изменение файла wp-config.php

Если оба способа не дали результата, попробуйте отредактировать файл wp-config.php , добавив следующий код в самый низ, перед строкой « happy blogging «:

Сохраните файл и очистите кэш браузера.

Изменение лимитов в WHM

Если сайт размещен на VPS или выделенном сервере, можно попробовать изменить лимиты в WHM .

После того, как вы вошли в систему, перейдите в раздел Конфигурация сервера> Настройки > PHP .

Введите нужные вам значения и нажмите кнопку « Сохранить ».

Затем перейдите в раздел Конфигурация служб> Редактор конфигурации PHP . Прокрутите страницу вниз до разделов memory_limit и upload_max_filesize :

Введите необходимые значения. В разделе « Параметры и информация » найдите memory_limit и задайте то же значение, которое вы установили в memory limit php ini и .htaccess .

Нажмите кнопку « Сохранить » и очистите кэш браузера.

Заключение

Мы рассмотрели все способы решения данной проблемы. Наслаждайтесь возможностью загружать большие файлы и продолжайте использовать на своем сайте плагины WordPress . Внесенные в php memory limit htaccess изменения должны вступить в силу через несколько минут, после чего можно будет приступить к работе с новыми параметрами.

Если нужно загрузить большие файлы только один раз, попробуйте сделать это через FTP . Обычно файлы, загруженные через FTP в каталог /wp-content/uploads/ , не отображаются в библиотеке медиа. Но с помощью плагина Media from FTP можно отобразить их всего в несколько кликов.

Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.

Данная публикация представляет собой перевод статьи « How to Increase the Maximum Upload and PHP Memory Limit » , подготовленной дружной командой проекта Интернет-технологии.ру

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

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

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

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

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


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

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

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

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

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

Какие услуги предоставляю:
— Создание сайтов, шаблонов и компонентов на 1С-Битрикс;
— Разработка функционала с нуля и доработка кода на уже созданных проектах;
— Адаптивная вёрстка макетов и натяжка на Битрикс;
— Парсинг файлов и выгрузка на сайт (форматы — CSV, XML, XLSX, JSON)
— Интеграции со сторонними сервисами по API;
— Многоязычные версии и многое другое.

php.ini — Увеличить размер загружаемого файла

Как увеличить размер загружаемого на сервер файла в WordPress или в любой другой CMS?

Это делается в файлике php.ini параметром upload_max_filesize. Я использую локальный сервер Mac OS и у меня этот файлик лежит по такому пути: /usr/local/etc/php/5.6/php.ini. У вас путь к файлу php.ini может отличаться.

Илон Маск рекомендует:  Что такое код mcal_event_set_recur_yearly

Также помимо этого параметра, я изменил сразу 2 остальных. Это post_max_size и memory_limit.

upload_max_filesize — Устанавливает максимальный размер файла для закачки.

post_max_size — Устанавливает максимально допустимый размер данных, отправляемых методом POST.

memory_limit — Устанавливает выполняемому скрипту максимальный обьем используемой памяти.

В итоге вот то что нам нужно изменить:

После изменений в php.ini не забудьте перезагрузить сервер. Вот статья на как управлять локальным сервером. Пример как это делать в Mac OS:

Советы и дополнения оставляйте в комментариях.

filesize

(PHP 4, PHP 5, PHP 7)

filesize — Возвращает размер файла

Описание

Возвращает размер указанного файла.

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

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

Возвращает размер указанного файла в байтах или FALSE (и генерирует ошибку уровня E_WARNING ) в случае возникновения ошибки.

Замечание: Так как тип integer в PHP является целым числом со знаком и многие платформы используют 32-х битные целые числа, то некоторые функции файловых систем могут возвращать неожиданные результаты для файлов размером больше 2 Гб.

Примеры

Пример #1 Пример использования функции filesize()

// Пример вывода: Размер файла somefile.txt: 1024 байтов

$filename = ‘somefile.txt’ ;
echo ‘Размер файла ‘ . $filename . ‘: ‘ . filesize ( $filename ) . ‘ байтов’ ;


Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примечания

Замечание: Результаты этой функции кешируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat() , смотрите в разделе Поддерживаемые протоколы и обертки.

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

  • file_exists() — Проверяет существование указанного файла или каталога

User Contributed Notes 35 notes

/**
* Converts bytes into human readable file size.
*
* @param string $bytes
* @return string human readable file size (2,87 Мб)
* @author Mogilev Arseny
*/
function FileSizeConvert ( $bytes )
<
$bytes = floatval ( $bytes );
$arBytes = array(
0 => array(
«UNIT» => «TB» ,
«VALUE» => pow ( 1024 , 4 )
),
1 => array(
«UNIT» => «GB» ,
«VALUE» => pow ( 1024 , 3 )
),
2 => array(
«UNIT» => «MB» ,
«VALUE» => pow ( 1024 , 2 )
),
3 => array(
«UNIT» => «KB» ,
«VALUE» => 1024
),
4 => array(
«UNIT» => «B» ,
«VALUE» => 1
),
);

foreach( $arBytes as $arItem )
<
if( $bytes >= $arItem [ «VALUE» ])
<
$result = $bytes / $arItem [ «VALUE» ];
$result = str_replace ( «.» , «,» , strval ( round ( $result , 2 ))). » » . $arItem [ «UNIT» ];
break;
>
>
return $result ;
>

/**
* Return file size (even for file > 2 Gb)
* For file size over PHP_INT_MAX (2 147 483 647), PHP filesize function loops from -PHP_INT_MAX to PHP_INT_MAX.
*
* @param string $path Path of the file
* @return mixed File size or false if error
*/
function realFileSize ( $path )
<
if (! file_exists ( $path ))
return false ;

$size = filesize ( $path );

if (!( $file = fopen ( $path , ‘rb’ )))
return false ;

//Quickly jump the first 2 GB with fseek. After that fseek is not working on 32 bit php (it uses int internally)
$size = PHP_INT_MAX — 1 ;
if ( fseek ( $file , PHP_INT_MAX — 1 ) !== 0 )
<
fclose ( $file );
return false ;
>

$length = 1024 * 1024 ;
while (! feof ( $file ))
< //Read the file until end
$read = fread ( $file , $length );
$size = bcadd ( $size , $length );
>
$size = bcsub ( $size , $length );
$size = bcadd ( $size , strlen ( $read ));

fclose ( $file );
return $size ;
>

// best converting the negative number with File Size .
// does not work with files greater than 4GB
//
// specifically for 32 bit systems. limit conversions filsize is 4GB or
// 4294967296. why we get negative numbers? by what the file
// pointer of the meter must work with the PHP MAX value is 2147483647.
// Offset file : 0 , 1 , 2 , 3 , . 2147483647 = 2GB
// to go higher up the 4GB negative numbers are used
// and therefore after 2147483647, we will -2147483647
// -2147483647, -2147483646, -2147483645, -2147483644 . 0 = 4GB
// therefore 0, 2147483647 and -2147483647 to 0. all done 4GB = 4294967296
// the first offset to 0 and the last offset to 0 of 4GB should be added in
// your compute, so «+ 2» for the number of bytes exate .

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.

function find_filesize ( $file )
<
if( substr ( PHP_OS , 0 , 3 ) == «WIN» )
<
exec ( ‘for %I in («‘ . $file . ‘») do @echo %

zI’ , $output );
$return = $output [ 0 ];
>
else
<
$return = filesize ( $file );
>
return $return ;
>

//Usage : find_filesize(«path»);
//Example :
echo «File size is : » . find_filesize ( «D:\Server\movie.mp4» ). «» ;
?>

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.

function human_filesize ( $bytes , $decimals = 2 ) <
$factor = floor (( strlen ( $bytes ) — 1 ) / 3 );
if ( $factor > 0 ) $sz = ‘KMGT’ ;
return sprintf ( «%. < $decimals >f» , $bytes / pow ( 1024 , $factor )) . @ $sz [ $factor — 1 ] . ‘B’ ;
>

print human_filesize ( 12 , 0 ); // 12B
print human_filesize ( 1234567890 , 4 ); // 1.1498GB
print human_filesize ( 123456789 , 1 ); // 117.7MB
print human_filesize ( 12345678901234 , 5 ); // 11.22833TB
print human_filesize ( 1234567 , 3 ); // 1.177MB
print human_filesize ( 123456 ); // 120.56KB
?>

I removed the P units because strlen doesn’t seem to work as expected with integers longer than 14 digits. Though it might be only my system’s limitation.

The simplest and most efficient implemention for getting remote filesize:

function remote_filesize ( $url ) <
static $regex = ‘/^Content-Length: *+\K\d++$/im’ ;
if (! $fp = @ fopen ( $url , ‘rb’ )) <
return false ;
>
if (
isset( $http_response_header ) &&
preg_match ( $regex , implode ( «\n» , $http_response_header ), $matches )
) <
return (int) $matches [ 0 ];
>
return strlen ( stream_get_contents ( $fp ));
>
?>

return $x ;
>
?>

In case of you have a redirection in the server (like Redirect Permanent in the .htaccess)

In this case we have for exemple:
[content-length] => Array

[0] => 294 // Size requested file

[1] => 357556 // Real Size redirected file


// Recover all file sizes larger than > 4GB.
// Works on php 32bits and 64bits and supports linux
// Used the com_dotnet extension

function getSize ( $file ) <
$size = filesize ( $file );
if ( $size 0 )
if (!( strtoupper ( substr ( PHP_OS , 0 , 3 )) == ‘WIN’ )) <
$size = trim (` stat -c%s $file `);
>
else <
$fsobj = new COM ( «Scripting.FileSystemObject» );
$f = $fsobj -> GetFile ( $file );
$size = $f -> Size ;
>
return $size ;
>
?>

This is an updated version of my previous filesize2bytes.
The return type now it’s really an int.

/**
* Converts human readable file size (e.g. 10 MB, 200.20 GB) into bytes.
*
* @param string $str
* @return int the result is in bytes
* @author Svetoslav Marinov
* @author http://slavi.biz
*/
function filesize2bytes ( $str ) <
$bytes = 0 ;

$bytes_array = array(
‘B’ => 1 ,
‘KB’ => 1024 ,
‘MB’ => 1024 * 1024 ,
‘GB’ => 1024 * 1024 * 1024 ,
‘TB’ => 1024 * 1024 * 1024 * 1024 ,
‘PB’ => 1024 * 1024 * 1024 * 1024 * 1024 ,
);

$bytes = floatval ( $str );

$bytes = intval ( round ( $bytes , 2 ));

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://us.php.net/get/php-5.2.10.tar.bz2/from/this/mirror’ ;
$ch = curl_init ( $remoteFile );
curl_setopt ( $ch , CURLOPT_NOBODY , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_HEADER , true );
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , true ); //not necessary unless the file redirects (like the PHP example we’re using here)
$data = curl_exec ( $ch );
curl_close ( $ch );
if ( $data === false ) <
echo ‘cURL failed’ ;
exit;
>

$contentLength = ‘unknown’ ;
$status = ‘unknown’ ;
if ( preg_match ( ‘/^HTTP\/1\.[01] (\d\d\d)/’ , $data , $matches )) <
$status = (int) $matches [ 1 ];
>
if ( preg_match ( ‘/Content-Length: (\d+)/’ , $data , $matches )) <
$contentLength = (int) $matches [ 1 ];
>

echo ‘HTTP Status: ‘ . $status . «\n» ;
echo ‘Content-Length: ‘ . $contentLength ;
?>

Result:

HTTP Status: 302
Content-Length: 8808759

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).

function getSize ( $file ) <
$size = filesize ( $file );
if ( $size 0 )
if (!( strtoupper ( substr ( PHP_OS , 0 , 3 )) == ‘WIN’ ))
$size = trim (` stat -c%s $file `);
else <
$fsobj = new COM ( «Scripting.FileSystemObject» );
$f = $fsobj -> GetFile ( $file );
$size = $file -> Size ;
>
return $size ;
>
?>

Илон Маск рекомендует:  Создаем хлебные крошки на wordpress без плагина

A fast implementation that determines actual file size of large files (>2GB) on 32-bit PHP:

function RealFileSize($fp)
<
$pos = 0;
$size = 1073741824;
fseek($fp, 0, SEEK_SET);
while ($size > 1)
<
fseek($fp, $size, SEEK_CUR);

if (fgetc($fp) === false)
<
fseek($fp, -$size, SEEK_CUR);
$size = (int)($size / 2);
>
else
<
fseek($fp, -1, SEEK_CUR);
$pos += $size;
>
>

while (fgetc($fp) !== false) $pos++;

Input is an open file handle. Return value is an integer for file sizes

This functions returns the exact file size for file larger than 2 GB on 32 bit OS:

function file_get_size ( $file ) <
//open file
$fh = fopen ( $file , «r» );
//declare some variables
$size = «0» ;
$char = «» ;
//set file pointer to 0; I’m a little bit paranoid, you can remove this
fseek ( $fh , 0 , SEEK_SET );
//set multiplicator to zero
$count = 0 ;
while ( true ) <
//jump 1 MB forward in file
fseek ( $fh , 1048576 , SEEK_CUR );
//check if we actually left the file
if (( $char = fgetc ( $fh )) !== false ) <
//if not, go on
$count ++;
> else <
//else jump back where we were before leaving and exit loop
fseek ( $fh , — 1048576 , SEEK_CUR );
break;
>
>
//we could make $count jumps, so the file is at least $count * 1.000001 MB large
//1048577 because we jump 1 MB and fgetc goes 1 B forward too
$size = bcmul ( «1048577» , $count );
//now count the last few bytes; they’re always less than 1048576 so it’s quite fast
$fine = 0 ;
while( false !== ( $char = fgetc ( $fh ))) <
$fine ++;
>
//and add them
$size = bcadd ( $size , $fine );
fclose ( $fh );
return $size ;
>
?>

// 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

function filesize_dir ( $file ) <
exec ( ‘dir ‘ . $file , $inf );
$size_raw = $inf [ 6 ];
$size_exp = explode ( » » , $size_raw );
$size_ext = $size_exp [ 19 ];
$size_int = (float) str_replace ( chr ( 255 ), » , $size_ext );
return $size_int ;
>

// 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

echo filesize_cmd ( ‘c:\\’ , ‘log.txt’ ); //return 1135

function filesize_cmd ( $folder , $file ) <
return exec ( ‘forfiles /p ‘ . $folder . ‘ /m «‘ . $file . ‘» /c «cmd /c echo @fsize»‘ );
>

On 64-bit platforms, this seems quite reliable for getting the filesize of files > 4GB

= fopen ( $filename , ‘r’ );
fseek ( $a , 0 , SEEK_END );
$filesize = ftell ( $a );
fclose ( $a );
?>

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

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).)

[$counter302] specify how much times your allow this function to jump if redirections are met. If initial limit (5 is default) expired — it returns 0 (should be modified for your purposes whatever).0
ReadHeader() function is listed in previous post
(param description is placed there too).

function remote_filesize_thru ( $ipAddress , $url , $counter302 = 5 )
<
$socket = fsockopen ( «10.233.225.2» , 8080 );
if( ! $socket )
<
// failed to open TCP socket connection
// do something sensible here besides exit();
echo «
failed to open socket for [ $ipAddress ]» ;
exit();
>

// just send HEAD request to server
$head = «HEAD $url HTTP/1.0\r\nConnection: Close\r\n\r\n» ;
// you may use HTTP/1.1 instead, then your request head string _must_ contain «Host: » header
fwrite ( $socket , $head );

// read the response header
$header = ReadHeader ( $socket );
if( ! $header )
<
// handle empty response here the way you need.
Header ( «HTTP/1.1 404 Not Found» );
exit();
>

// check for «Location» header
$locationMarker = «Location: » ;
$pos = strpos ( $header , $locationMarker );
if( $pos > 0 )
<
$counter302 —;
if( $counter302 0 )
<
// redirect limit (5 by default) expired — return some warning or do something sensible here
echo «warning: too long redirection sequence» ;
return 0 ;
>

// Location is present — we should determine target host and move there, like any downloading masters do.
// no need to use regex here
$end = strpos ( $header , «\n» , $pos );
$location = trim ( substr ( $header , $pos + strlen ( $locationMarker ), $end — $pos — strlen ( $locationMarker ) ), «\\r\\n» );

// extract pure host (without «http://»)
$host = explode ( «/» , $location );
$ipa = gethostbyname ( $host [ 2 ] );
// move to Location
return remote_filesize_thru ( $ipa , $location , $counter302 );
>

// try to acquire Content-Length within the response
$regex = ‘/Content-Length:\s([0-9].+?)\s/’ ;
$count = preg_match ( $regex , $header , $matches );

// if there was a Content-Length field, its value
// will now be in $matches[1]
if( isset( $matches [ 1 ] ) )
$size = $matches [ 1 ];
else
$size = 0 ;

Получить размер файла на диске

Это дает логический размер файла, а не размер на диске.

Я хочу получить размер файла на диске в С# (желательно без взаимодействия), как сообщается в Проводнике Windows.

Он должен указать правильный размер, в том числе для:

  • Сжатый файл
  • Редкий файл
  • Фрагментированный файл

Это использует GetCompressedFileSize, как предлагалось ho1, так и GetDiskFreeSpace, как PaulStack Однако он предлагает использовать P/Invoke. Я тестировал его только для сжатых файлов, и я подозреваю, что он не работает для фрагментированных файлов.

Приведенный выше код не работает должным образом на Windows Server 2008 или на 2008 R2 или Windows 7 и Windows системы на основе Vista в качестве размера кластера всегда нуль (GetDiskFreeSpaceW и GetDiskFreeSpace возвращают -1 даже с UAC отключен.) Вот модифицированный код, который работает.

С#

VB.NET

Согласно социальным форумам MSDN:

Размер на диске должен быть суммой размера кластеров, которые хранят файл:
http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/85bf76ac-a254-41d4-a3d7-e7803c8d9bc3
Вам нужно окунуться в P/Invoke, чтобы найти размер кластера; GetDiskFreeSpace() возвращает его.

Но учтите, что это не будет работать в NTFS, где сжатие включено.

Как увеличить лимиты на размер загружаемых файлов и объем выделяемой для PHP памяти

По умолчанию WordPress устанавливает небольшой лимит на размер загружаемых изображений, видеороликов и других файлов. Аналогичная ситуация с PHP memory limit , который сказывается на возможности запускать плагины и скрипты.

Если вы запускаете сайт с большим количеством контента, эти лимиты могут стать проблемой. Можно получить ошибку при загрузке:

Если достигнут предел выделяемой памяти, то выведется другое сообщение об ошибке:

Рассмотрим наиболее эффективные способы увеличения этих лимитов на сервере. Начнем с memory limit php ini .


Обновление файла php.ini

Если вы используете CPanel , перейдите в раздел « Файлы » и нажмите кнопку « Диспетчер файлов ». Убедитесь, что установлен флажок « Показать скрытые файлы », а затем нажмите на кнопку « Перейти ».

Выберите папку wp-admin и найдите файл php.ini или php5.ini . Если такого файла нет, создайте его, нажав на кнопку « Создать файл », расположенную в верхнем левом углу. Назовите файл php.ini и нажмите во всплывающем окне кнопку « Создать файл »:

Если ошибка не исчезла, попробуйте переименовать файл в php5.ini . Когда файл будет открыт, добавьте в него приведенные ниже строки, а затем сохраните изменения и закройте файл:

M — означает мегабайты. Измените лимиты 1000M, 2000M и 3000M на значения, которые необходимы. Изменение значения max_execution_time ограничит время загрузки скрипта.

Во многих случаях используемые значения должны увеличиваться по мере перехода в списке от первой до третьей строки. Upload_max_filesize должен быть самым маленьким, memory limit php ini — самым большим. При этом post_max_size должен иметь среднее значение.

Илон Маск рекомендует:  Чем ссылки не являются

Прежде чем проверить, не исчезла ли ошибка, очистите кэш браузера.

Редактирование файла .htaccess

Если редактирование php.ini не помогло, попробуйте изменить файл .htaccess . Добавьте приведенный ниже код в конец файла:

Измените значения php ini set memory limit так, как вам нужно. Не забудьте сохранить файл и очистить кэш браузера.

Изменение файла wp-config.php

Если оба способа не дали результата, попробуйте отредактировать файл wp-config.php , добавив следующий код в самый низ, перед строкой « happy blogging «:

Сохраните файл и очистите кэш браузера.

Изменение лимитов в WHM

Если сайт размещен на VPS или выделенном сервере, можно попробовать изменить лимиты в WHM .

После того, как вы вошли в систему, перейдите в раздел Конфигурация сервера> Настройки > PHP .

Введите нужные вам значения и нажмите кнопку « Сохранить ».

Затем перейдите в раздел Конфигурация служб> Редактор конфигурации PHP . Прокрутите страницу вниз до разделов memory_limit и upload_max_filesize :

Введите необходимые значения. В разделе « Параметры и информация » найдите memory_limit и задайте то же значение, которое вы установили в memory limit php ini и .htaccess .

Нажмите кнопку « Сохранить » и очистите кэш браузера.

Заключение

Мы рассмотрели все способы решения данной проблемы. Наслаждайтесь возможностью загружать большие файлы и продолжайте использовать на своем сайте плагины WordPress . Внесенные в php memory limit htaccess изменения должны вступить в силу через несколько минут, после чего можно будет приступить к работе с новыми параметрами.

Если нужно загрузить большие файлы только один раз, попробуйте сделать это через FTP . Обычно файлы, загруженные через FTP в каталог /wp-content/uploads/ , не отображаются в библиотеке медиа. Но с помощью плагина Media from FTP можно отобразить их всего в несколько кликов.

Если ни один из вариантов не дал результата, свяжитесь со своим хостинг-провайдером.

Данная публикация представляет собой перевод статьи « How to Increase the Maximum Upload and PHP Memory Limit » , подготовленной дружной командой проекта Интернет-технологии.ру

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

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

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

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

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


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

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

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

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

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

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

Код PHP

Всё готово! Пользуйтесь на здоровье!
Спасибо за внимание! И удачи в работе!

Размер файлов и файловой системы.

NTFS.

Во-первых, в NTFS значительно – до 2^64 байт (16 экзабайт или 18 446 744 073 709 551 616 байт) – увеличен допустимый раздел файлов и томов. В NTFS для решения проблемы фиксированного размера сектора снова применена концепция кластеров, ранее использованная в файловой системе FAT. Это было сделано для улучшения аппаратной независимости операционной системы Windows при ее использовании с жесткими дисками, изготовленными по другой технологии. Таким образом, была принята точка зрения, что деление диска на секторы размером 512 не всегда является оптимальным. Размер кластера определяется кратным числом единичных блоков жесткого диска. Кроме того, для задания имен файлов используется кодировка Юникод и наряду с длинными именами обеспечена поддержка формата 8.3.

EXT4.

На сегодняшний день максимальный размер файловой системы Ext3 равен 16 терабайтам, а размер файла ограничен 2 терабайтами. В Ext4 добавлена 48-битная адресация блоков, что означает, что максимальный размер этой файловой системы равен одному экзабайту, и файлы могут быть размером до 16 терабайт. 1 EB (экзабайт) = 1,048,576 TB (терабайт), 1 EB = 1024 PB (петабайт), 1 PB = 1024 TB, 1 TB = 1024 GB. Почему 48-битная, а не 64-битная? Имелся ряд ограничений, которые необходимо было бы снять, чтобы сделать Ext4 полностью 64-битной, и такой задачи перед Ext4 не ставилось. Структуры данных в Ext4 проектировались с учётом требуемых изменений, поэтому однажды в будущем поддержка 64 бит в Ext4 появится. Пока же придётся довольствоваться одним экзабайтом.

Примечание: код для создания файловых систем размером более 16 терабайт на момент написания этой курсовой не содержится ни в одном из стабильных релизов e2fsprogs. В будущем он будет добавлен.

Вывод.

Размер ФС NTFS равен 16 экзабайтам, а Ext4 1 экзабайт, но максимальный размер файла, который может хранится в ФС NTFS равен 2 терабайта, а в Ext4 16 терабайт. Из данного сравнения нам видно, что NTFS позволяет нам хранить больше информации, но ограничивает нас в размере самих файлов, а в Ext4 размер самого файла значительно больше, но суммарный объем информации, который может хранится значительно меньше. Так как мы рассматриваем универсальные ОС, и они ориентированы преимущественно на персональные компьютеры, то в нашем случае предпочтительнее будет ФС Ext4.

Структура Файловой системы

NTFS.

Файловая система NTFS, как и FAT, использует кластеры в качестве фундаментальной единицы дискового пространства. В NTFS размер кластера по умолчанию зависит от размера тома. Программа Disk Administrator позволяет устанавливать размер кластера до 4 Кб. Если для форматирования тома NTFS используется программа Format, запускаемая из командной строки, то нужный размер кластера можно указать в качестве параметра этой команды. Допустимые размеры кластеров приведены в следующей таблице:

Форматирование тома для использования файловой системы NTFS приводит к созданию нескольких системных файлов и главной таблицы файлов (Master File Table, MFT). MFT содержит информацию обо всех файлах и папках, имеющихся на томе NTFS.

Основную информацию о томе NTFS содержит загрузочный сектор раздела (Partition Boot Sector), который начинается с сектора 0 и может иметь длину до 16 секторов. Он состоит из двух структур:

— Блока параметров BIOS. Эта структура содержит информацию о строении тома и структурах файловой системы.

— Кода, который описывает, как найти и загрузить файлы для любой из загружаемых операционных систем.

EXT4.

Если в Ext3 нужно записать на диск новые данные, специальный механизм распределения блоков определяет, какие блоки из числа свободных будут для этого использованы. Проблема в том, что в Ext3 этот механизм распределяет в один присест только один блок (4 килобайта). Это означает, что, если нужно записать, скажем, ранее упомянутые 100 мегабайт данных, нужно будет обратиться к механизму распределения 25600 раз (речь идёт о каких-то 100 мегабайтах!). Мало того, что это неэффективно, это к тому же не позволяет оптимизировать политику распределения, поскольку соответствующий механизм не имеет понятия о реальном объёме данных, подлежащем записи, а знает только об одном-единственном блоке.
Ext4 использует механизм многоблочного распределения (multiblock allocator, mballoc) который позволяет распределить любое количество блоков с помощью единственного вызова и избежать огромных накладных расходов. Благодаря этому производительность существенно вырастает, что особенно заметно при отложенном распределении с использованием экстентов. Эта возможность никак не влияет на формат данных.

Вывод.

Как мы видем в NTFS применяются кластеры, а в Ext4 блоки. Применения блоков при построение ФС увеличивает ее производительность, по сравнению с кластерами. В результате чего Ext4 более производительная ФС, чем NTFS.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: При сдаче лабораторной работы, студент делает вид, что все знает; преподаватель делает вид, что верит ему. 9337 — | 7293 — или читать все.

188.64.174.135 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL