phpで検索システムを作ろうと思っています。形としては、検索窓を使いサーバー内にあるファイル,例えば「my.db」というファイル内のテキスト文から文字で検索しそれをhtmlで表示させたいです。「my.db」内に”板野友美、2ndシングル発売決定のサプライズに放心状態http://dailynews.yahoo.co.jp/fc/entertainment/akb48/?1297592069.html”というワードがあるとします。これをホームページ上の検索窓から”板野友美”という文字で検索すると「板野友美、2ndシングル発売決定のサプライズに放心状態」という文を「http://dailynews.yahoo.co.jp/fc/entertainment/akb48/?1297592069.html」のリンクと合わせて(検索結果の文字をクリックするとリンクするように)表示させたいのです。(ちなみに「my.db」というファイルは文字コードがSHIFT-JISで中身を見ようとすると文字化けしています。)このようなシステムをphpで作ることは可能なのでしょうか?また、サンプル等があるサイトをご存じでしたら教えていただきたいです。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2011/02/20 23:27:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:asuka645 No.1

回答回数856ベストアンサー獲得回数97

ポイント60pt

以下のような感じでどうでしょう。

このスクリプトは UTF-8 形式で保存して下さい。

<?php
mb_internal_encoding('utf-8');
$myself = $_SERVER['SCRIPT_NAME'];
$filename = 'my.db';            //検索対象のファイル名

$q = isset($_GET['q']) ? mb_convert_encoding($_GET['q'], 'utf-8', 'auto') : '';
$res = '';
//検索
if ($q != '') {
    $fp = fopen($filename, 'r');
    while (! feof($fp)) {
        $str = fgets($fp);
        $str = mb_convert_encoding($str, 'utf-8', 'SJIS');
        if (strstr($str, $q) != FALSE) {
            $res .= $str . '<br />';
        }
    }
    fclose($fp);
}
if ($res == '')     $res = '(一致するデータがありません)';

//結果表示
echo <<< EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form action={$myself} method="GET">
検索キーワード 
<input type="text" name="q" /> 
<input type="submit" value="検索" />
</form>
<p>
検索結果:<br />
{$res}
</p>
</body>
</html>

EOD;
?>
id:numb08

ご回答ありがとうございます。質問なのですが、”$filename = 'my.db'; //検索対象のファイル名”の部分は相対パスで書けばいいのでしょうか?

2011/02/14 17:06:58
  • id:asuka645
    >質問なのですが、”$filename = 'my.db'; //検索対象のファイル名”の部分は相対パスで書けばいいのでしょうか?

    相対パスでも絶対パスでもOKです。
    相対パスで書くなら、スクリプトを置いたフォルダからの相対パスにして下さい。
  • id:numb08
    検索結果としては、http://otonantenna.sakura.ne.jp/aaa.txtのようなテキストから検索するとして、ゲームという文字で検索すると、結果htmlではゲームという文字が表示されそれをクリックするとhttp://games.yahoo.co.jp/にリンクするようにしたいのです。それと、文字化けしたファイルを検索対象にする場合ちゃんと検索してくれないようでした。ご丁寧に作っていただきありがとうございました。もう少し調べてみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません