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