簡體   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