Есть проект, в рамках которого приходиться парсить json-файлы не очень маленького размера (30+ Мб) в больших количествах и с расположенных в разных местах серверов.
Используется вот этот
парсер.
Виртуалка, на которой запущен скрипт парсинга, расположена в Европе (PHP 7.2 в режиме PHP-FPM). С европейскими серверами всё идеально, за 2-3 секунды обрабатывается один файл. С серверами в США - после разворачивания еще одной виртуалки в ДиджиталОушене - тоже всё прекрасно. С серверами в Тайване и Корее - беда. Идея поднять еще одну виртуалку там - была, но, накладно по финансам получается, плюс, боюсь, что не осилю их сайты с иероглифами, да и с оплатой могут быть вопросы.
Беда такого плана: файл обрабатывается минимум 30 секунд, в основном больше, потому что парсер бросает исключение "неожиданный конец файла", и цикл для этого файла начинается с начала. Иногда по две минуты на один файл уходит.
При тестовом запуске обработки проблемных файлов - они успешно обрабатываются с первой попытки. Парсер умеет читать либо из строки, либо из потока (под капотом там
fopen()
и
fread()
). Изначально просто передавал ему URI, но в попытках решить проблему попробовал сначала читать файл в переменную с помощью
file_get_contents()
и потом уже скармливать строку парсеру - не помогло.
Вот и вопрос: как можно средствами PHP гарантированно полностью выкачивать файл (хеш-сумм файла API не предоставляет)?
Заранее всем спасибо.