Используйте Rewind после ftruncate (для его изоляции потребовалось немного усилий)
ftruncate($fp, 0); // truncate file
rewind($fp); //rewind the pointer
Или вы можете просто использовать rewind
вместо ftruncate
, что, вероятно, является причиной \0
нулевые байты.Кажется несколько бессмысленным делать и то и другое, так как если вы пишете после перемотки, это все равно стирает файл (если вы не используете a+
append) ...
При просмотре самого первого примера в документе используются оба.
http://php.net/manual/en/function.ftruncate.php
Из PHP.net
<?php
$handle = fopen('output.txt', 'r+');
fwrite($handle, 'Really long sentence.');
rewind($handle);
fwrite($handle, 'Foo');
rewind($handle);
echo fread($handle, filesize('output.txt'));
fclose($handle);
?>
Хотя причина, по которой это не объясняется ... Я просто использую rewind()
, но я всегда ленивый, поэтомуЯ стараюсь написать наименьшее количество кода, которое мне нужно, так как я пишу много кода.
Другое решение
Обрежьте содержимое вашего файла перед использованиемintval
$counter = intval(trim(fread($fp, filesize("counter.txt"))));
В блокноте ++
[null][null]1
В любом случае это было забавно ... спасибо!