PHP. Почему функция fwrite возвращает больше байт чем длина записанного ею контента?
Перестал работать кэш на файлах в битриксе. Полез разбираться. В методе сохранения кэша есть условие на тождественное равенство байт из функции fwrite с содержимым записанного. Если тождественно равно, кэш запишется. Вот теперь не равно. Чуть-чуть больше.
$handle = fopen($fnTmp, "wb+")
$this->written = fwrite($handle, $contents);
$len = strlen($contents);
fclose($handle);
$tmpContent = file_get_contents($fnTmp);
Printu::obj($this->written)->title('write $this->written');
Printu::obj($len)->title('write $len');
Printu::obj(strlen($tmpContent))->title('write $tmpContent');
if ($this->written === $len) {
...
лог:
write $this->written: 212983
write $len: 210048
write $tmpContent: 210048
Ответы (1 шт):
Спасибо Алексей. Перепроверил, действительно в настройках php.ini стояло 2 Вообще ранее я менял эту настройку локально для этого хоста. Битрикс изменил правила. И все проверки проходили успешно. Настройка пхп показывала такое:
Directive Local Value Master Value mbstring.func_overload 0 2
Изменив сейчас корневую настройку в php.ini теперь настройка такая:
Directive Local Value Master Value mbstring.func_overload 0 0
Теперь циферки совпадают.