filesize (): дает неверный результат

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

$file = tempnam('/tmp', 'test_');
file_put_contents($file, 'hello world');

echo 'Initial Read: ' . file_get_contents($file).PHP_EOL;

echo 'Initial Size: ' . filesize($file).PHP_EOL;

$fp = fopen($file, 'a');
fwrite($fp, ' then bye');

echo 'Final Read:   ' . file_get_contents($file).PHP_EOL;

fclose($fp);
echo 'Final Size:   ' . filesize($file).PHP_EOL;

Этот простой скрипт дает странные результаты:

Initial Read: hello world
Initial Size: 11
Final Read:   hello world then bye
Final Size:   11

Я думал, что окончательный размер был бы результатом открытого файла, поэтому я добавил fclose($fp);Однако это не имеет значения. В любом случае мне нужно иметь возможность определить размер, пока файл еще открыт.

Окончательный размер должен быть 20. Кто-нибудь знает возможную причину этого и как обойти это?

1

Решение

Как этот комментарий заявляет, вам нужно позвонить clearstatcache() перед звонком filesize() снова.

$file = tempnam('/tmp', 'test_');
file_put_contents($file, 'hello world');

echo 'Initial Read: ' . file_get_contents($file).PHP_EOL;

echo 'Initial Size: ' . filesize($file).PHP_EOL;

$fp = fopen($file, 'a');
fwrite($fp, ' then bye');

echo 'Final Read:   ' . file_get_contents($file).PHP_EOL;

fclose($fp);
clearstatcache();

echo 'Final Size:   ' . filesize($file).PHP_EOL;
7

Другие решения

Других решений пока нет …