• ベストアンサー

simplexml_load_fileのタイムアウト制御

simplexml_load_fileでXMLをパースしているのですが、パース元からのレスポンスが遅い場合止まってしまいますが、一定時間レスポンスが無い場合に処理をスキップするような方法はないでしょうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://www.opensubscriber.com/message/php-general@lists.php.net/3782407.html こんな風にタイムアウト付きで取ってきて,ファイルとして保存してから,そのファイルを読み込む,かな。俺は。 #stream_set_timeoutだけで,simplexml_load_fileに影響を与えるかどうかはわかりません。 #HTMLやXMLを文字列として扱って操作しようとするの嫌いだから上記コードに本題に関係ない部分まで完全に同意するわけじゃないけどね。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • simplexml_load_fileのエラー

    AmazonのAPIを使ったWebサイトを作っていて、simplexml_load_fileを使って外部サーバのXMLを読み込もうとしています。 ローカル・サーバ1ではうまくいきますが、サーバ2ではI/O warning : failed to load external entity となり読み込めません。 3つのサーバで使用しているプログラムは全く同じです。 PHPのバージョン、SimpleXMLのRevisionは下記の通り。 ローカル:5.2.5、1.151.2.22.2.35 サーバ1:5.2.9、1.151.2.22.2.46 サーバ2:5.2.9、1.151.2.22.2.46 調べていると、XML文字列の中に実体参照等パースエラーとなる文字が含まれているとこのようなエラーが出るとのことでしたが、該当するような文字列はありませんし、同じプログラムでも別のサーバであれば取得できるのでその可能性は考え辛いですが、この場合の対処方法として、file_get_contentsで一度文字列として受け取ってから、simplexml_load_stringでパースするとあったので、それも試しました。 しかし、simplexml_load_fileであれば数秒で取得できるものが、file_get_contentsだと4分以上かかりました。 できればsimplexml_load_fileで行いたいのですが、上記のような違いが出る可能性として考えられることは何かありますでしょうか。

    • 締切済み
    • PHP
  • simplexml_load_file() のかわりの simplexml_load_string() がエラーになる

    こんにちわ。 お時間あるかた、どうぞよろしくおねがいします。 現在、RSSを読み込んで、色々な処理をしたいと思っています。 そして、下記のコードを書いたところうまくいきました。 $root = simplexml_load_file($url); ところが、使っているレンタルサーバでは PHP.iniのallow_url_fopenをONにすることが禁止されていることを知ったので、 simplexml_load_string()を使うように、プログラムを書き換えました。(下記抜粋) $response = http($url . $parm); $line = explode("\n" , $response); // HTTPヘッダを消す for ( $i=0 ; $i < 100 ; $i++ ) if ( $line[$i] == "" ) break; // HTTPボディーだけ取得 $xml_str = ""; for ( $i++ ; $i < count($line) ; $i++ ) $xml_str .= $line[$i]; $root = simplexml_load_string($xml_str); こうしたところ、一部のRSSで、Error while parsing the documentが出るようになってしまいました。 いくつか試したところ、amebloのフィードはOKなのですが、他のRSSだとエラーになるようです。 $ret = get_rss("http://feedblog.ameba.jp/rss/ameblo/femiohji"); // OK $ret = get_rss("http://pub.ne.jp/marunohi/?action=rss&type=rss1.0"); // NG というわけで、 simplexml_load_file()のときは動いていたのですが、 simplexml_load_string()にしたらエラーになります。 原因がわからず、行き詰まってしまいました。 よろしくおねがいいたします。

    • ベストアンサー
    • PHP
  • simplexml_load_fileについて

    simplexml_load_fileでrssを読み込んでいるのですが、 rssのxmlファイルが少し特殊でリンクが抜けているitemがあり、 以降ずれ込んで読まれてしまい困っています。 ■xml例 <root> <item> <title></title> <link></link> </item> <item> <title></title> <link></link> </item> <item> <title></title> ←リンクがぬけている </item> <item> <title></title> <link></link> </item> </root> ■php側 抜粋/割愛 $xml = simplexml_load_file($this->xmlPath) or die("ファイルが読み込まれません"); //xpathにて各ノードを取得 $title = $xml->xpath(//title); $link = $xml->xpath(//link); for($i = 0; $i < 3; $i++) { <a href="<?=$link[$i]?>"> <?=$title[$i]?> </a> } のように取得して、html加工して 吐き出しているので、linkがないノードがあると 後のものがどんどんずれて読み込まれてしまいます・・・ どのようにしたら解決できますでしょうか・・・

    • 締切済み
    • PHP
  • simplexml_load_fileでのXML

    simplexml_load_fileを使ってXML形式のデータを処理したいのですが、 <YDF xmlns="http://olp.yahooapis.jp/ydf/1.0" firstResultPosition="1" totalResultsAvailable="1" totalResultsReturned="1"> <ResultInfo> <Count>1</Count> <Total>1</Total> </ResultInfo> <Feature> <Id>201210191610_139.73229_35.663613</Id> <Geometry> <Type>point</Type> <Coordinates>139.73229,35.663613</Coordinates> </Geometry> <Property> <WeatherAreaCode>4410</WeatherAreaCode> <WeatherList> <Weather> <Type>observation</Type> <Date>201210191610</Date> <Rainfall>1.65</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201210191620</Date> <Rainfall>0.00</Rainfall> </Weather> <Weather> <Type>forecast</Type> <Date>201210191630</Date> <Rainfall>0.00</Rainfall> </Weather> </WeatherList> </Property> </Feature> </YDF> $xml = simplexml_load_file(リクエストURL); 上記のレスポンスが返ってきたとして、2番めのDateを取得しようとした場合 $xml->Feature->Property->WeatherList->Weather[1]->Date; では表示する事が出来ませんでした。 なにが原因でしょうか?

    • 締切済み
    • PHP
  • 「Warning: simplexml_load_string() [

    「Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 61: parser error : Entity 'rsaquo' not defined」というようなエラーが出てPHPファイルが実行できません。 simplexml_load_string() はphpのpearのXMLフォルダのUtil.phpの中の関数と思われるのですが、ちゃんと関数があるのにどうしてエラーが出ているのでしょうか。

    • ベストアンサー
    • PHP
  • ヘッダーが付いた場合の、simplexml_load_fileでの取り出し方

    simplexml_load_file()を使って <?xml version="1.0" encoding="UTF-8" ?> - <Response> - <header:Header xmlns:header="http://test.com/"> </header:Header> - <Body> - <itemSearch:ItemSearch xmlns:itemSearch="http://test.com/"> <count>2000</count> <page>1</page> ...... この<count>2000</count> の「2000」を取り出すにはどうしたらよういのでしょうか? echo $Xml->Response->Body->itemSearch->count; このXML文書の構成様式が初めてで(ヘッダーが付いている)、いくらやっても 取得できないので宜しくお願い致します。

    • ベストアンサー
    • PHP
  • simplexml_load_fileについて

    お世話になります。 simplexml_load_fileについて質問です。 下記のようなコードでライブドアブログのRSSを解析しようとしております。 ブログ記事の全文を取得したいのですが、一部分しか取得することが出来ません アドバイスをお願いします。 宜しくお願いします ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $rss = $data['blog_rss']; $xml = @simplexml_load_file($rss,'SimpleXMLElement', LIBXML_NOCDATA); #ブログタイトル $data['xml']['title'] = $xml->channel->title; #ブログ説明 $data['xml']['description'] = $xml->channel->description; #最大件数 $max_lines = 8; $i=0; foreach ($xml->item as $item) { $ns = $item->getNamespaces(true); $date = $item->children($ns["dc"]); //記事のリンク先 $data['xml']['kiji'][$i]['link'] = $item->link; //記事の見出し $data['xml']['kiji'][$i]['title'] = $item->title; //記事の日付 $pubDate = $date->date; $data['xml']['kiji'][$i]['pubDate'] = date("Y年m月d日 H:i:s", strtotime($pubDate)); //記事本文 $desc = $item->description; $data['xml']['kiji'][$i]['desc'] = $desc; $i++; //最大件数に達したときストップ if ($i == $max_lines) break; }

    • 締切済み
    • PHP
  • simplexml_load_file でデータがうまく取得できない

    楽天ウェブサービスの楽天トラベルキーワード検索APIを、 PHP5でsimplexml_load_fileにより利用しているのですが、うまくゆきません。 ■楽天トラベルキーワード検索API http://webservice.rakuten.co.jp/api/keywordhotelsearch/ 1.現象 simplexml_load_fileで取得したデータをprint_rで表示させると、下記のように、ヘッダ(共通パラメーター)の部分が取得できません。 しかしながら、ブラウザからリクエストURLを直打ちすると、正常にデータが取得できていることがわかります。 ■print_rでの出力結果 -------------------------------------------------- SimpleXMLElement Object ( [Body] => SimpleXMLElement Object ( ) ) -------------------------------------------------- ■コーディング $xml = simplexml_load_file($restURL) or die("XMLパースエラー"); echo "<pre>"; print_r($xml); echo "</pre>"; ■ブラウザにリクエストURLを直打ちして出力した結果 -------------------------------------------------- <Response>  <header:Header>   <Args>    <Arg key="User-Agent" value="Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6">true</Arg>    <Arg key="developerId" value="****">true</Arg>    <Arg key="affiliateId" value="****">true</Arg>    <Arg key="operation" value="KeywordHotelSearch">true</Arg>    <Arg key="version" value="2007-04-11">true</Arg>    <Arg key="keyword" value="アートホテルズ札幌">true</Arg> </Args> <Status>Success</Status> <StatusMsg/> </header:Header> <Body> <keywordHotelSearch:KeywordHotelSearch> <hotelSimple> …… -------------------------------------------------- なぜ、simplexml_load_fileで取得した場合がうまくいかないのか原因がわかりません。 ブラウザ直打ちの場合も、simplexml_load_fileの場合もリクエストURLは同一であることを確認しています。 ちなみに、楽天商品検索APIと楽天トラベル地区コードAPIは既に利用していますが、正常にデータが取得できています。 楽天商品検索APIと楽天トラベル地区コードAPIと、楽天トラベルキーワード検索APIとでの 出力結果の差異は、正常にデータ取得できているAPIの共通パラメーターと呼ばれる部分の名前が、 "<Header>"となっていることです。 楽天トラベル地区コードAPIの場合は、 " <header:Header xmlns:header="http://api.rakuten.co.jp/rws/rest/Header"> " です。 これが原因なのかなとも思いましたが、対処法がわかりません。 どなたかアドバイスをお願いいたします。

    • 締切済み
    • PHP
  • PHP5のsimplexml_load_fileで取得した結果をファイルに書き込みたい

    よろしくお願いします。 PHP5でSimpleXMLを利用して得られた結果をファイルに書き込む、つまりキャッシュを保存したいのですが、以下のようにやっても作成されるファイルは空のままです。ディレクトリモードは755です。 $url = "http://hoge.co.jp/index.php?a=123"; $cache_file = md5($url); $xml = simplexml_load_file($url); $fp = fopen($cache_file, 'w'); fwrite ($fp, $xml); fclose($fp); どうかご教授よろしくお願いします。

    • 締切済み
    • PHP
  • PHP5でsimple_xml_load_fileするとエラーになっちゃいます。

    simple_xml_load_fileを使ってXMLを読み込んでいるのですが、読み込みの時点でエラーが出てしまいます。 Warning: simplexml_load_file() [function.simplexml-load-file]: input conversion failed due to input error, bytes 0xAD 0xB5 0x3C 0x2F ↑こんな感じです。 原因を探ったところ、XMLファイルのデータ中にローマ数字(I、II、・・)があるとこのようになることが分かりました。 ちなみにsimplexml_load_stringを使用してもほぼ同様のエラーが発生しました。 ローマ数字入りのXMLファイルを読み込むことはできないのでしょうか?ご存じでしたら知恵を拝借したいのですが・・・。 ※SAX、DOMでも読み込めず(T_T)

    • 締切済み
    • PHP