0

WordPressコアに外部のWebページのコンテンツを取得するための非常に優れたクラスWP_Httpを見つけました。

問題は、URLが見つからない場合にPHPエラーをスローすることです。Fatal error: Cannot use object of type WP_Error as array.

$url = 'http://asklsahgioa.fdjeoiao.griawpo';   // non-existent url
$oHttp = new WP_Http;
$output = $oHttp->request($url);
print_r($output['body']);

したがって、クラスメソッドの前にURLが存在するかどうかを確認したいと思います。次のコードは機能しますが、速度が遅く、URLが見つかったときに応答に1秒ほどかかることがわかります。つまり、URLに問題がなければ、速度が2倍になります。

$handle = @fopen($url,'r');
if($handle !== false)
   echo 'true';
else
   echo 'false';

私も試しget_headers()ました。ただし、URLが見つかった場合も1秒かかります。

$siteHeader = @get_headers($url , 1);
if ($siteHeader > 1) 
    echo 'true';
else 
    echo 'false';

それで、これを行うためのより良い方法はありますか?たぶん、WordPressにはすでにそのための関数がありますか、それともエラー処理を埋め込むためにクラスを拡張しますか?

4

2 に答える 2

3

失敗したリクエストによってが返される$outputかどうかを確認するのはどうですか?WP_Error

$output = $oHttp->request($url);

if ($output instanceof WP_Error) {
  // handle error
  echo 'something terrible has happened';
} else {
  print_r($output['body']);
}

instanceof(オペレーターは古いバージョンのPHPでは機能しないことに注意してください)

于 2012-09-13T00:17:07.143 に答える
1

このスニペットは、実際には、リクエストが失敗したかどうかを確認する正しい方法ではありません。

Stack Overflowに投稿した回答を紹介します。これは、この種のタスクのベストプラクティスを示しています。

于 2012-09-18T21:11:42.690 に答える