繁体   English   中英

如果无法打开流,请重试:HTTP请求失败! 1 PHP

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM