最近出现Warning告警 file_get_contents(http://a.b.com/xxx/yyy/zzz/?token=da606c144dd9e62e4c3cd701d444638515441538801672658102): failed to open stream: Connection timed out
file_get_contents可以获取远程资源,但是跨网络访问时可能会出现异常,于是对file_get_contents进行外层封装增加重试机制解决问题。
/**
* file_get_contents 获取远程资源重试(file_get_contents重试机制2023-01-03)
* @param string $remoteFileName 远程文件地址
* @param int $maxRetryTimes 最大重试次数
*/
function retry_remote_file_get_contents(string $remoteFileName,int $maxRetryTimes = 10)
{
$result = file_get_contents($remoteFileName);
$retryTimes=0;
if($result === false)
{
for($retryTimes=0;$retryTimes<$maxRetryTimes;$retryTimes++)
{
$retryTimes++;
$result = file_get_contents($remoteFileName);
if($result !== false)
{
error_log("FILE_GET_CONTENTS重试{$retryTimes}次后成功,请求远程文件地址:{$remoteFileName}");
break;
}
sleep(1);
}
}
if($result === false)
{
//通知告警
qywx_robot_error_notice("FILE_GET_CONTENTS重试{$retryTimes}次后失败,请求远程文件地址:{$remoteFileName}");
}
return $result;
}