@vottakoinick

Почему файл заполнен?

Есть скрипт на php, сервер ngnix, он генерирует xml файлы, в нём вывод осуществляется через
ob_start();
код
$result = minify_html(ob_get_contents());
ob_end_clean();
fwrite($fp, $result);

Это просто коротко записал как вывод в файл осузествляется. Иногда в файле появляются места заполненные <0x00> или NULL смотря в каком редакторе открыть. В спонтанных местах, как будто обрыв какой то. Я не понимаю от чего такое может происходить, по моему с PHP это вообще не связано. Хостинг бегет, сервер выделенный ngnix. Вообще как будто битый файл какой то.

Не знаю какие подробности ещё указать. Код php по моему тут бессмысленно приводить целиком, там генератор страниц для яндекс турбо с сайта на CMS Wordpress. Ошибок в логах нет.
671de91ec00fd262987961.jpeg

Дополнение:
заполнен нулями участок от операторов fwrite, первый из них такой fwrite($fp, '<item turbo="true">');то есть тут даже нет каких то переменных для ошибки, весь блок из этих fwrite заполнен нулями,

ещё дополнение:
Во время работы скрипта генерируется последовательно несколько файлов, каждый раз когда есть файл с нулями, происходит какой то сбой. Но вообще не понятно. Вот в этот раз блок с нулями был в 3 файле, а генерация остановилась на 4. А 3 файл полностью доконца был записан и блок с нулями по середине кода. Не могу это вместе как то всё связать.

Есть в логах upstream response is buffered to a temporary file
Но правда по времени с ошибкой в файле не связано.
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Две гипотезы.
1. Ваш код генерирует "нулевой" результат, поэтому записывается null значение.
Попробуйте искусственно записать null значение в буфер, без реальных данных.
2. Код генерирует слишком большой результат, не влезает в оперативную память выполнения скрипта (переполнение возникает именно на выполнении minify_html). Как ошибка записывается null значение.
Попробуйте уменьшить значение выделенной оперативной памяти так, чтобы хватало для работы кода, но не хватало на выполнение minify_html, понаблюдайте через memory_get_usage, как на каждом этапе используется память.
Ответ написан
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Первое, что приходит в голову - это ошибка в длине записываемой строки где-то, т.к. ноль обычно используется как символ конца строки. Причины могут быть разные: массив с нулями, который не очень правильно конвертируется в строку, ошибка в кодировке и/или конвертации строки из одно/двух байтовой, какой-то пустой буфер, неправильный режим записи в файл - текст/бинарные данные, например. Надо делать подробный дамп каждой записи в файл и смотреть, где и что именно пишет не то, что ожидается.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы