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

时间:2019-05-16 23:34:59

标签: 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我无法从中获取任何数据。 脚本的其余部分在正确打开时可以正常运行

1 个答案:

答案 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);