1

RSS フィードを読んでいて、呼び出しにかかる時間を知りたいと思っています。

    $homepage = file_get_contents('http://www.forbes.com/news/index.xml');

このために私は使用しています

 <?php

$start = microtime(true);
$homepage = file_get_contents('http://www.fohgggrbes.com/news/index.xml');
 $end = microtime(true);
 $dur=$end-$start;
 echo $dur;
  $xml = simplexml_load_string($homepage,'SimpleXMLElement', LIBXML_NOCDATA);
  echo '<pre>';
?>

しかし、私の要件は、最初にファイルが有効なxmlであることを確認し、そうであれば応答時間を表示することです

 $homepage = file_get_contents('http://www.forbes.com/news/index.xml');

XML ファイルが有効でない場合は、エラー メッセージが表示されます。私はtry and catch例外を使いたいです。

4

2 に答える 2

1

URL が有効かどうかを確認することは、XML が有効かどうかを確認することとは異なります。無効な URL を読み込もうとすると、通常、エラーは次のようになります。

ストリームを開くことができませんでした: php_network_getaddresses: getaddrinfo に失敗しました

ただし、そのエラーはストリーム ラッパーに起因し、XML 検証はその後 libxml によって行われます。したがって、2 つの異なる点を確認する必要があります。以下のコードでは、両方が考慮されます。

libxml_use_internal_errors(true);
$start = microtime(true);
$rss = @simplexml_load_file(
    'http://www.fohgggrbes.com/news/index.xml',
    'SimpleXMLElement',
    LIBXML_NOCDATA
);
$end = microtime(true);
$errors = array_filter(
    array(error_get_last(), libxml_get_errors()),
    function($val) { return !empty($val); }
);
print_r(empty($errors) ? $end - $start : $errors);
libxml_use_internal_errors(false);

それをクラスにラップし、try/catch を使用する場合は例外をスローするのはあなたに任せます。

于 2011-11-07T10:32:35.227 に答える
0

取得したデータを取得したら、CURLを使用してW3Cフィードバリデーター(http://validator.w3.org/feed/)にいつでも送信できるか、バリデーターにURLを送信できると思います(おそらくより良い方法です)。移動するデータが少ないためアプローチします)が、返された結果の処理には注意が必要な場合があります(結果は、機械可読ではなく人間が読める形式のHTMLドキュメントです)。

于 2011-11-07T08:38:10.140 に答える