0

SimpleHTMLDOMというライブラリを使用しています

そのメソッドの1つは、URLをDOMオブジェクトにロードします。

function load_file()
{
    $args = func_get_args();
    $this->load(call_user_func_array('file_get_contents', $args), true);
    // Throw an error if we can't properly load the dom.
    if (($error=error_get_last())!==null) {
        $this->clear();
        return false;
    }
}

エラー処理をテストするために、次のコードを作成しました。

include_once 'simple_html_dom.php';
function getSimpleHtmlDomLoaded($url)
{
  $html = false;
  $count = 0;
  while ($html === false && ($count < 10)) {
    $html = new simple_html_dom();
    $html->load_file($url);
    if ($html === false) {
      echo "Error loading url!\n";
      sleep(5);
      $count++;
    }
  }
  return $html;
}

$url = "inexistent.html";
getSimpleHtmlDomLoaded($url);

このコードの背後にある考え方は、URLの読み込みに失敗した場合に再試行することです。それでも、10回試行しても失敗した場合は、falseを返す必要があります。

ただし、URLが存在しない場合、load_fileメソッドがfalseを返すことはないようです。

代わりに、次の警告メッセージが表示されます。

PHP警告:file_get_contents(inexisten.html):ストリームを開くことができませんでした

これを修正する方法はありますか?

注:できれば、ライブラリへのハッキングは避けたいと思います。

4

2 に答える 2

2

次のコードを変更します。

$html->load_file($url);
if ($html === false) {

これのために:

$ret = $html->load_file($url);
if ($ret === false) {

メソッドからの戻り値ではなく、オブジェクトインスタンスをチェックしていたためですload_file()

于 2012-09-24T11:34:40.780 に答える
0

メソッド呼び出しの前に@記号を追加すると、警告が抑制されます。これを使用する場合は、今と同じように常に自分でエラーをチェックし、警告やエラーがポップアップしないことを確認するために他の方法が利用できないことを確認してください。

オブジェクトインスタンス$htmlではなくFALSEに等しい場合は、load()メソッドによってどこかに保存されている実際のデータを確認する必要があります。

于 2012-09-24T11:23:50.857 に答える