我正在尝试打开一个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我无法从中获取任何数据。 脚本的其余部分在正确打开时可以正常运行
答案 0 :(得分:0)
您应为重试逻辑使用一个循环,该循环在结果成功时会中断。这里使用do ... while
循环是因为它保证它将至少运行一次(因此保证$result
将被设置为 something )。当file_get_contents
失败时,$result
将为假:
<?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);