@Nokse

Как гарантированно полностью скачивать файл из удаленного источника?

Есть проект, в рамках которого приходиться парсить json-файлы не очень маленького размера (30+ Мб) в больших количествах и с расположенных в разных местах серверов.

Используется вот этот парсер.

Виртуалка, на которой запущен скрипт парсинга, расположена в Европе (PHP 7.2 в режиме PHP-FPM). С европейскими серверами всё идеально, за 2-3 секунды обрабатывается один файл. С серверами в США - после разворачивания еще одной виртуалки в ДиджиталОушене - тоже всё прекрасно. С серверами в Тайване и Корее - беда. Идея поднять еще одну виртуалку там - была, но, накладно по финансам получается, плюс, боюсь, что не осилю их сайты с иероглифами, да и с оплатой могут быть вопросы.

Беда такого плана: файл обрабатывается минимум 30 секунд, в основном больше, потому что парсер бросает исключение "неожиданный конец файла", и цикл для этого файла начинается с начала. Иногда по две минуты на один файл уходит.
При тестовом запуске обработки проблемных файлов - они успешно обрабатываются с первой попытки. Парсер умеет читать либо из строки, либо из потока (под капотом там fopen() и fread() ). Изначально просто передавал ему URI, но в попытках решить проблему попробовал сначала читать файл в переменную с помощью file_get_contents() и потом уже скармливать строку парсеру - не помогло.

Вот и вопрос: как можно средствами PHP гарантированно полностью выкачивать файл (хеш-сумм файла API не предоставляет)?

Заранее всем спасибо.
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ответы на вопрос 1
Exomode
@Exomode
Архитектор ПО
Дело может быть в таймауте ответа сервера. Таймаут можно увеличить только с вашей стороны. На стороне API этим рулят их разработчики. Вполне возможно, что из-за большого размера потока, ответ просто обрывается по таймауту. Попробуйте увеличить время ожидания ответа на принимающей стороне, если это не поможет, то пока что других идей как можно с этим бюджетно справиться у меня нет.
Ответ написан
Ваш ответ на вопрос

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

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