• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP Webページのタイトルを取得したい)

PHP Webページのタイトルを取得する方法について

このQ&Aのポイント
  • PHPを使用してウェブページのタイトルを取得する方法について説明します。
  • file_get_contents関数と正規表現を使用して、URLからHTMLを読み取り、タイトルを抽出することができます。
  • タイトルを取得するまでの処理時間を短縮するために、HTMLの一部だけを読み込む方法もあります。

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

まずは $html = file_get_contents($url); を $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); に変えるところからどうぞ。これだけでかなり速くなると思います。これで速度が足りなければ fopen で1行ずつ読み込んでいくことも検討しましょう。なお、提示された関数中の文字コードの羅列順序が不適切です(私もググって出てきたってことで以前はこれ使ってましたが、誤りです)。以下に正しい順番に直したサンプルを掲載しておきます。 function getPageTitle($url) {   static $regex = '@<title>([^<]++)</title>@i';   static $order = 'ASCII,JIS,UTF-8,CP51932,SJIS-win';   static $ch;   if (!$ch) {     $ch = curl_init();     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   }   curl_setopt($ch, CURLOPT_URL, $url);   $html = mb_convert_encoding(curl_exec($ch), 'UTF-8', $order);   return preg_match($regex, $html, $m) ? $m[1] : ''; } また、そもそも遅い原因が「この関数の実行を繰り返している」ということであれば、今はオーダー表現で表せば O(n) 時間かかっていることになりますが、回線が許す限り O(1) の実行時間にする方法があります。これに該当する場合はその点の補足をお願いします。

newtgecko
質問者

お礼

何度も、試したところ、実用的な早さなので、使わせていただきます。ありがとうございました

newtgecko
質問者

補足

ご回答有難うございます! 一行ずつ読み取る考えは思い浮かびませんでした。<title></title>が一行に収まってることが前提じゃないと処理が少し複雑なるかも知れませんが。 適切なコードまで、載せていただき感謝しています。これから実行してみます!

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

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>HTMLをすべて読み取るまで、終了しないため、遅くなるのだと思います。 それはhttpの仕組み上そういうものでは? 複数ページクロールするのならwgetあたりで非同期にバックグラウンド処理をさせるとか タイトルを持ってくる部分をタイトルを抜くだけのPHPをajaxで走らせれば 速いところから順次うまっていくので、感覚的に速いと思えるようになるかもしれません。 また更新時間などを保存しておき、2回目以降の検索時にはヘッダ情報の日付けを 見るなりして、変更がなけば前回のデータを利用するなど それなりの処理をすればある程度実用レベルのスピードになるのでは?

newtgecko
質問者

補足

そういった方法しかないのですか。今のところURLを先に表示しておいて、決まったら、URLをタイトルに書き直すようにはしてみましたが。 ブラウザだと、ページが完全に読み終わる前に、タイトルが表示されるので、何か方法があるかと思いました。

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

関連するQ&A