При некоррекном завершении работы пк в файле появляются NULL символы (chr(0)), попытаемся их убрать:
$file = 'e:/1.txt';
file_put_contents($file, 'hello'.chr(1).'0df6ac'.chr(0));
$fp = fopen($file, 'r+b');
$str = fread($fp, filesize($file));
$str = strtr($str, [chr(0)=>'']);
echo $str.PHP_EOL;//hello0df6ac
fseek($fp, 0);//указатель в начало
fwrite($fp, $str);
fclose($fp);
Ничего не меняется, опытным путём выяснил:
1. fopen считывает все символы
2. fwrite как бы "оставляет" старые символы (если к записываемой строке добавить символ это видно)
file_put_contents работает правильно, но т.к. мне нужно открывать файл на чтение с блокировкой, эта функция не подходит
$str = strtr($str, [chr(0)=>'']);
Вы заменяете нулевой байт на пустую строку. То есть нулевой байт вы вырезаете и новая строка становится короче. И здесь как раз критично важно то что новая строка стала меньше.
Вы делаете fseek
в начало и пишете новую строку. fwrite
пишет указанные данные в место файла по текущему смещению. Вы решили, что fwrite
должен отбросить остальную часть файла? Нет, fwrite
это делать не должен. Это простое действие записать N байт данных. Вы попросили записать по смещению 0 в файл размером 13 байт новые данные размером 12 байт. Эти 12 байт и были перезаписаны. Тринадцатый байт как был так и остался нетронутым, с ним ничего делать не просили.
Вам необходимо вызвать ftruncate
где-то. Например, после fseek
отбросить содержимое файла до 0:
fseek($fp, 0);
ftruncate($fp, 0);
Либо после записи данных но тогда уже с ненулевым значением size
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Все привет! Я получаю ссылку на изображение, внизу которого находится ссылка, причем это не элемент html, а оригинальное изображениеВозможно...
создаю тестовый пустой Битрикс24также создаю локальное приложение и устанавливаю в него следующий файл:
PhpStorm не открывает файлы через xdebugfile_link_format Уже перепробовал разные форматы, и все равно не открывает