• 締切済み

phpの処理を中断する方法を教えてください。

PEARのHTTP_Requestを用いて,指定したURLのHTMLを読み込むというプログラムをPHPで組んでいます。 一部のサイト(以下のソース内の$urlに格納したURLなど)は,サイト自体が重いせいなのか,表示にとても時間がかかってしまいます。 『表示にある一定の時間以上かかる場合は読み込みを中止したい(別処理をしたい)』のですが,どのように書けばよろしいでしょうか。 $optionでHTTP_Requestのタイムアウトを指定しても,その時間でタイムアウトしませんでした。 set_time_limit()を使って実行可能な秒数を指定しようかとも考えたのですが,読み込み中止後に別処理をしたいので,何か良い方法はないかと悩んでいます。 初歩的な問題なのかもしれませんが,開発経験が少ないため解決策がわかりません。是非宜しくお願い致します。 ------------------ソース------------------ <?php require_once "HTTP/Request.php"; $url = "http://bmw.jugem.cc/?search=%C3%E6%B9%F1&mySearch="; $option = array("timeout" => "20"); // HTTP_Requestの初期化 $http = new HTTP_Request($url, $option); // HTTPのヘッダー設定 $http->addHeader("User-Agent", "My PEAR PROGRAM"); $http->addHeader("Referer", "http://www.yahoo.co.jp/"); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $ret1 = $http->getResponseCode();// ResponseCode(200等)を取得 $ret2 = $http->getResponseHeader();// ResponseHeader(レスポンスヘッダ)を取得 $ret3 = $http->getResponseBody();// ResponseBody(レスポンステキスト)を取得 $ret4 = $http->getResponseCookies();// クッキーを取得 } echo $ret3; ?> ------------------ソース------------------

みんなの回答

回答No.1

curlが使える環境ならcurlを使うと良いんじゃないかと思います。 pcntlが使えるならpcntlでも代用できると思います。 それも出来ない場合は別プロセスで動くようにしてやって、 echo $ret3;をファイル保存に変更。 それを取得するまで待ち続けるなんてことも出来ると思います。 HTTP::Requestはfsockopenを使ってたと思いますが、何か上手い方法で回避できるんですかね? 同僚はpcntl_forkあたりで回避してたと記憶してますが。。 便乗ですが、素敵な情報をお持ちの方がいたら教えてください。

参考URL:
http://jp.php.net/manual/ja/ref.curl.php

関連するQ&A