miv-men
@miv-men
Фронт и бэк

Почему при попытке получить xml данные через file_get_contents() получаю timeout?

Здравствуйте.

Раньше все работало, изменений в коде не было, возможно стало больше товаров и раздулся сам xml.

Фид достаточно объемный (216000 строк) но раньше проблем с timeout-ом не было.
Если открыть файл https://wisell.ru/bitrix/catalog_export/yandex_wis... то xml прогрузится, но если попробывать получить содержимое через
file_get_contents("https://wisell.ru/bitrix/catalog_export/yandex_wisell_opt_gp.php");

то ошибка
Warning: file_get_contents(https://wisell.ru/bitrix/catalog_export/yandex_wisell_opt_gp.php): Failed to open stream: Connection timed out in ...


Размер файла 13M, я как понимаю это не так много что бы падать по таймауту. Почему может не работать file_get_contents()?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) попробовать скачать файл меньшего размера, если проблема в размере - смотреть настройки сервера, вполне возможно что это проблема апача/нжинкса/пхп на максимальный размер какого-нибудь буфера/файла (у меня он кстати не открывается до конца, хотя возможно проблема в чем-то другом). Возможно запрос через браузер выдает вам файл нормально, так как у вас он вытаскивает файл вообще из локального кеша, и вы не видите реальной проблемы в браузере.

2) Проверить не слетели ли пермишны с файлов/папок (такое иногда бывает на хостинге) и условный пых теперь не имеет доступа к этому файлу. Тут может быть нюанс с настройкой сервера, когда локальный домен запрашивается по серому внутреннему айпи, опять же - надо смотреть настройки, например проверить лукап с сервера на домен, не выдает ли он что-то типа 192.168.10.55 .

3) Проверить сам код, возможно он тупо зависает с каким-то бесконечным циклом и падает по таймауту... Можно вместо вывода в нем прям писать в файл и проверить все ли ок.
Ответ написан
Комментировать
@olya-fomina2024
По умолчанию 60 секунд. Можно увеличить так:
Документация: https://www.php.net/manual/en/context.http.php
$ctx = stream_context_create(array('http'=>
    array(
        'timeout' => 3600,  // в секундах / 1 час
    )
));

echo file_get_contents('https://wisell.ru/bitrix/catalog_export/yandex_wisell_opt_gp.php', false, $ctx);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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