У меня есть два виртуальных сервера.
Старая:Ubuntu 12.04 с PHP 7.2. Новая:CentOS 7.9 с PHP 8.0.
На обоих серверах запущено одно и то же приложение. Cron ежеминутно получает некоторые данные с другого веб-сайта. аналогичный следующему коду
file_get_contents("http://mirror.facebook.net/centos/timestamp.txt")
На старом сервере все работало хорошо. У меня никогда не было проблем. На новом сервере у меня иногда появляется это Сообщение
Warning: file_get_contents(mirror.facebook.net/centos/timestamp.txt): Failed to open stream: HTTP request failed! HTTP/1.0 502 Bad Gateway
Я понятия не имею, почему это происходит. Это затрагивает около 1% звонков.
Есть ли у кого-нибудь идеи, где я могу посмотреть и что я могу сделать, чтобы решить эту проблему?
[EDIT] Я реализовал отслеживание ошибок и времени, как указано ниже.
Сначала код:
$t0 = microtime(true);
$jsonString = file_get_contents($pageUrl);
if ($jsonString === false) {
$t1 = microtime(true);
var_dump(sprintf(
'Fehler beim Abruf der URL %s',
$pageUrl,
));
var_dump($t1 - $t0);
var_dump(error_get_last());
return 0;
}
Теперь результат.
array(4) {
["type"]=>
int(2)
["message"]=>
string(145) "file_get_contents(https://www.example.com/): Failed to open stream: HTTP request failed! HTTP/1.0 502 Bad Gateway
"
["file"]=>
string(62) "/path/to/src/Service/WebcrawlerService.php"
["line"]=>
int(61)
}
Результат, к сожалению, НЕ содержит более подробной информации. Это все еще 502
Я подозреваю, что ваш новый сервер время от времени выходит из строя (DNS?). Чтобы копнуть глубже, попробуйте зарегистрировать подробную ошибку сразу после сбоя file_get_contents()
и продолжительность запроса до сбоя :
$t0 = microtime(true);
if (($data = @file_get_contents("http://mirror.facebook.net/centos/timestamp.txt")) === false) {
$t1 = microtime(true);
var_dump($t1 - $t0); // duration
var_dump(error_get_last());
}
. Объединение этих выходных данных может дать вам подсказки о дальнейших шагах.