次の関数は、URL を表す文字列パラメーターを受け取り、その URL を simple_html_dom オブジェクトにロードします。ロードに失敗した場合は、URL のロードを再試行します。
public function getSimpleHtmlDomLoaded($url)
{
$ret = false;
$count = 1;
$max_attemps = 10;
while ($ret === false) {
$html = new simple_html_dom();
$ret = $html->load_file($url);
if ($ret === false) {
echo "Error loading url: $url\n";
sleep(5);
$count++;
$html->clear();
unset($html);
if ($count > $max_attemps)
return false;
}
}
return $html;
}
ただし、URL の読み込みが 1 回失敗すると、現在の URL で失敗し続け、処理が終了した後max attemps
も、処理する必要がある残りの URL を使用して、関数の次の呼び出しでも失敗し続けます。
URL が一時的にオフラインの場合は失敗し続けるのが理にかなっていますが、そうではありません (スクリプトの実行中に確認しました)。
これが適切に機能しない理由はありますか?
また、URL のロードに失敗し始めると、(複数の警告ではなく) 警告のみが表示され、次のメッセージが表示されることも指摘したいと思います。
PHP 警告: file_get_contents(http://www.foo.com/resource): ストリームを開くことができませんでした: HTTP 要求が失敗しました! simple_html_dom.php の 1081 行目
次のコード行によってプロンプトが表示されます。
$ret = $html->load_file($url);