Как отбросить запрос PHP cURL, если целевой URL не отвечает? - PullRequest
0 голосов
/ 22 января 2020

У меня есть веб-сайт на виртуальном хостинге с пределом Entry Processes, равным 30. Я периодически получаю данные с другого URL-адреса, используя функцию cURL для задания PHP cron. Соответствующий код приведен ниже.

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

Большую часть времени мой веб-сайт работает довольно хорошо с использованием только 4-5 процессов ввода. Всякий раз, когда эта цель $url не отвечает по какой-то причине (и это часто случается). Я быстро попадаю в лимит процесса входа и все дальнейшие запросы отклоняются.

Кажется, CURLOPT_CONNECTTIMEOUT работает не так, как ожидалось. Как я могу избежать этой ситуации? Я проверил другие параметры cURL, но ни один из них не работает.

1 Ответ

2 голосов
/ 22 января 2020

Время ожидания 10 секунд очень большое. В зависимости от того, сколько запросов вы обслуживаете, и если все ваши запросы инициируют этот вызов, все ваши доступные процессы могут просто ждать ответов от этого сервера.

Вы можете рассмотреть возможность уменьшения этого числа.

Там также второй тайм-аут для curl CURLOPT_TIMEOUT. Попробуйте установить это дополнительно. Если подключение к серверу выполняется в течение 10 секунд, а затем серверу требуется 60 секунд для обработки вашего запроса, текущий тайм-аут не поможет вам, поскольку ограничивает только время подключения.

Если вы этого не сделаете Если вы хотите зависеть от того, что делает cURL, вы также можете установить ограничение времени для самого процесса php с помощью set_time_limit () . Если вы установите, например, 30 секунд, php остановит выполнение по истечении этого времени, независимо от того, был ли выполнен cURL или нет. Это должно быть сделано до вызова curl.

...