Не работает редирект, сервер зависает
Уважаемые профи, помогите пожалуйста с глобальной проблемой. Мне уже три специалиста сказали, что проблема в хостинге, но а хостинг мне пишет, что проблема в коде. Уже испробовали кучу вариантов написания данного функционала. Полный код ниже. Отрабатывает весь функционал кроме РЕДИРЕКТА!!! И в момент загрузки скрипта страница грузится пару секунд, в это время отрубается FTP (т.е. срипт зависает сервер), загрузка страницы останавливается и редирект не происходит. Зато в базе всё успешно добавилось, ответ от серверов успешно получен, в логах всё идеально и успешно….странности. Если убрать функционал cURL из скрипта, то всё работает и РЕДИРЕКТ тоже, но связи с серверами естественно не будет, а всё остальное работает. Проблема в cURL явно же вроде. Сможете пожалуйста помочь/подсказать в чём проблема???
$availableIPs = ‘’;
$multi = curl_multi_init();
$handles = [];
foreach ($serversIP as $srv) {
$ip = $srv['ip'];
if (!isPortOpen($ip, 1800, 0.5)) {
error_log("Сервер недоступен (порт закрыт): $ip:1800\n", 3, 'error.log');
continue;
}
$ch = curl_init("http://$ip:1800/add_uuid");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $jsonData,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 2,
CURLOPT_CONNECTTIMEOUT => 1,
]);
curl_multi_add_handle($multi, $ch);
$handles[] = ['handle' => $ch, 'ip' => $ip]; // сохраняем как массив
}
// Запускаем все запросы одновременно
$running = null;
do {
curl_multi_exec($multi, $running);
curl_multi_select($multi);
} while ($running > 0);
// Обработка ответов
foreach ($handles as $item) {
$ch = $item['handle'];
$ip = $item['ip'];
$response = curl_multi_getcontent($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_multi_remove_handle($multi, $ch);
curl_close($ch);
if ($httpCode == 200) {
$availableIPs .= $ip . ' ';
error_log("Ответ сервера $ip: HTTP $httpCode | $response\n", 3, 'error.log');
}
else {
error_log("Ошибка при отправке на $ip: HTTP $httpCode | $response\n", 3, 'error.log');
}
}
curl_multi_close($multi);
$availableIPs = rtrim($availableIPs, ' ');
// Обновляем IP в подписке
DB('UPDATE subscr_user SET access_ip=? WHERE uuid=? LIMIT 1', $availableIPs, $uuid_gen);
// Чистим буферы вывода
while (ob_get_level()) ob_end_clean();
// Редирект
header('Location: /my_servers');
exit();
Ответы (1 шт):
По этому невнятному писанию что-то сказать сложно, но в целом проблема "сервер зависает от редиректа" обычно вызывается циклическим редиректом. Например /my_servers посылает обратно на этот скрипт, этот скрип снова отрабатывает, посылает на /my_servers, откуда снова редирект - и так далее.
Надо смотреть вкладку Сеть в Инструментах разработчика, и ставить условие в коде, чтобы не редиректил куда попало