[英]Retry if failed to open stream: HTTP request failed! 1 PHP
我正在尝试打开一个api并提取一些数据,大约是脚本运行它的1/5倍,并带有一个错误
PHP警告:file_get_contents( http://192.168.1.52/home.cgi ):无法打开流:HTTP请求失败! 1个
我想重试打开错误的api,然后继续执行其余的代码
这是使用PHP5在Pi上运行的
$inverterDataURL = "http://".$dataManagerIP."/home.cgi";
$context = stream_context_create(array('http'=>array('protocol_version'=>'1.1')));
$result = file_get_contents('http://192.168.1.11/home.cgi', false, $context);
20%的时间在运行脚本时尝试打开api时出错,并且没有打开api我无法从中获取任何数据。 脚本的其余部分在正确打开时可以正常运行
您应该为重试逻辑使用一个循环,该循环在结果成功时会中断。 在这里使用do ... while
循环是因为它保证它将至少运行一次(因此保证$result
将被设置为某值 )。 当file_get_contents
失败时, $result
将为false:
<?php
$context = stream_context_create(array('http'=>array('protocol_version'=>'1.1')));
do {
$result = file_get_contents('http://127.0.0.1/home.cgi', false, $context);
if (!$result) {
echo "Waiting 3 seconds.\n";
sleep(3);
}
} while( !$result);
如果服务器出现故障,您可能需要几次尝试才能打破循环。 5次失败后,该位将停止尝试。
<?php
$context = stream_context_create(array('http'=>array('protocol_version'=>'1.1')));
$attempts = 0;
do {
$attempts++;
echo "Attempt $attempts\n";
$result = file_get_contents('http://127.0.0.1/home.cgi', false, $context);
if (!$result) {
echo "Attempt $attempts has failed. Waiting 3 seconds.\n";
sleep(3);
}
} while( !$result && $attempts < 5);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.