当たり前のことなんだけど、外部サービスを使用する際には、エラー処理をきちんとしないといけないですね。
なんでこんなことを書いているかと言えば、今日発生したから

ブログのRSSを取得して、内容を解析して、必要な情報を表示するようにしているだけの簡単な処理なんだけど…
通信に問題があったときの処理が抜けてた
PHP5を使って開発しているので、
SimpleXMLElementクラスに直接RSSのURLを渡して解析してたんだけど
タイムアウトの処理ができないので、
PEARのHTTP_Requestクラスを使用してXMLファイルを取得するように変更しました
これで、タイムアウトが起こった場合であったり、他のエラーがあった場合であったりと、
エラーハンドリングができるようになりました
エラー処理の必要性を再認識できた一日でした
■SimpleXMLElementクラスを使用したRSSの解析
$target_url = '適当なURL';
$xml_element_object = new SimpleXMLElement( $target_url, null, true );
foreach ( $xml_element_object as $key => $xml_element ) {
// 以下$xml_elementに対して処理を行う
}
以下のように変更しました~
■HTTP_Requestクラスも使用したRSSの解析
$target_url = '適当なURL';
$request_option_array = array('timeout'=>'5');
$request_object = new HTTP_Request( $target_url, $request_option_array );
$request_object->sendRequest();
if ( PEAR::isError( $request_object ) ) {
// エラー処理
} else {
if ( 200 != $request_object->getResponseCode() ) {
// エラー処理
} else {
$response_body = $request_object->getResponseBody();
// 取得したレスポンスを使用
}
}
$xml_element_object = new SimpleXMLElement( $response_body, null );
foreach ( $xml_element_object as $key => $xml_element ) {
// 以下$xml_elementに対して処理を行う
}
なんでこんなことを書いているかと言えば、今日発生したから


ブログのRSSを取得して、内容を解析して、必要な情報を表示するようにしているだけの簡単な処理なんだけど…
通信に問題があったときの処理が抜けてた

PHP5を使って開発しているので、
SimpleXMLElementクラスに直接RSSのURLを渡して解析してたんだけど

タイムアウトの処理ができないので、
PEARのHTTP_Requestクラスを使用してXMLファイルを取得するように変更しました

これで、タイムアウトが起こった場合であったり、他のエラーがあった場合であったりと、
エラーハンドリングができるようになりました

エラー処理の必要性を再認識できた一日でした

■SimpleXMLElementクラスを使用したRSSの解析
$target_url = '適当なURL';
$xml_element_object = new SimpleXMLElement( $target_url, null, true );
foreach ( $xml_element_object as $key => $xml_element ) {
// 以下$xml_elementに対して処理を行う
}
以下のように変更しました~
■HTTP_Requestクラスも使用したRSSの解析
$target_url = '適当なURL';
$request_option_array = array('timeout'=>'5');
$request_object = new HTTP_Request( $target_url, $request_option_array );
$request_object->sendRequest();
if ( PEAR::isError( $request_object ) ) {
// エラー処理
} else {
if ( 200 != $request_object->getResponseCode() ) {
// エラー処理
} else {
$response_body = $request_object->getResponseBody();
// 取得したレスポンスを使用
}
}
$xml_element_object = new SimpleXMLElement( $response_body, null );
foreach ( $xml_element_object as $key => $xml_element ) {
// 以下$xml_elementに対して処理を行う
}