Самый быстрый способ рассчитать размер файла, открытого внутри кода (PHP) - PullRequest
6 голосов
/ 13 июля 2011

Я знаю, что в PHP имеется довольно много встроенных функций для получения размера файла, некоторые из них: размер файла , stat , ftell и т. д.

Мой вопрос лежит вокруг ftell, что довольно интересно, он возвращает вам целочисленное значение указателя файла из файла.

Можно ли получить размер файла с помощью функции ftell? Если да, то скажи мне как?

Сценарий:

  1. Система (код) открывает существующий файл в режиме «а» для добавления содержимого.
  2. Указатель файла указывает на конец строки.
  3. Система обновляет содержимое в файл.
  4. Система использует ftell для расчета размера файла.

Ответы [ 3 ]

12 голосов
/ 13 июля 2011

fstat определяет размер файла без акробатики:

$f = fopen('file', 'r+');
$stat = fstat($f);
$size = $stat['size'];

ftell нельзя использовать, когда файл был открыт с флагом добавления ("a"). Кроме того, вы должны искать в конце файла сначала fseek($f, 0, SEEK_END).

2 голосов
/ 13 июля 2011

ftell() может сказать вам, сколько байтов предполагается в файле, но не сколько фактически . Разреженные файлы занимают меньше места на диске, чем возвращаемое значение до конца и сообщение возвращает.

0 голосов
/ 13 июля 2011

Спасибо @Phihag, с вашей информацией о fseek вместе с ftell Я могу рассчитать размер намного лучше.Смотрите код здесь: http://pastebin.com/7XCqu0WR

<?php
$fp = fopen("/tmp/temp.rock", "a+");

fwrite($fp, "This is the contents");

echo "Time taken to calculate the size by filesize function: ";
$t = microtime(true);
$ts1 = filesize("/tmp/temp.rock") . "\n";
echo microtime(true) - $t . "\n";

echo "Time taken to calculate the size by fstat function:";
$t = microtime(true);
$ts1 = fstat($fp) . "\n";
$size = $ts1["size"];
echo microtime(true) - $t . "\n";

echo "Time taken to calculate the size by fseek and ftell function: ";
$t = microtime(true);
fseek($fp, 0, SEEK_END);
$ts2 = ftell($fp) . "\n";
echo microtime(true) - $t . "\n";

fclose($fp);

/**
OUTPUT:

Time taken to calculate the size by filesize function:2.4080276489258E-5
Time taken to calculate the size by fstat function:2.9802322387695E-5
Time taken to calculate the size by fseek and ftell function:1.2874603271484E-5

*/
?>
...