1

こんにちは、PHPの初心者です。PHPを使用して検索機能を作成しようとしていますが、データベースなしでWebサイト内のみです

基本的に、「Health」という文字列を検索したい場合、行が表示されます

<a href="foobar.html">The Joys of Health</a>
<a href="foobar2.html">Healthy Diets</a>

このスニペットは、適切にコーディングされた場合に必要な「行」を出力する場合に見つけることができる唯一のものです

$myPage = array("directory.php","pages.php");
$lines = file($myPage[n]);
echo $lines[n]; 

それが機能するかどうかはまだ試していませんが、その前に、これを行うためのより良い方法があるかどうかを尋ねたいですか? ファイルの行数が多すぎる場合、サーバーに負荷がかかりませんか?

4

3 に答える 3

1

あなたの目標は問題ありませんが、あなたが考えている方法はそうではありません。このfile()関数はファイルを 1 行ずつ読み取り、それを配列に挿入します。これは、HTML が人間が読める形式で適切に構造化されていることを前提としていますが、常にそうであるとは限りません。ただし、あなたが HTML を提供していて、構造が完全に定義されていることを確認している場合は、わかりました... ここに提供された例がありますが、完全です (問題を解決する「間違った」方法であることを考慮してください) 、しかし、そのパターンに従いたい場合は、問題ありません):

function pagesearch($pages, $string) {
    if (!empty($pages) && !empty($string)) {
        $tags = [];

        foreach ($pages as $page) {
            if ($lines = file($page)) {
                foreach ($lines as $line) {
                    if (!empty($line)) {
                        if (mb_strpos($line, $string)) {
                            $tags[$page][] = $line;
                        }
                    }
                }
            }
        }

        return $tags;
    }
}

これにより、参照したすべてのページと、探している単語のすべての出現箇所をページごとに区切った配列が返されます。私が言ったように、それはあなたがこれを解決したい方法ではありませんが、方法です。

それが役立つことを願っています

于 2013-04-10T10:17:07.680 に答える
1

file()関数は配列を返します。file_get_contents()文字列を返すため、代わりに使用する必要があります。

次に、正規表現を使用してリンク内の特定のテキストを検索します。

于 2013-04-10T09:55:57.030 に答える
0

データベースを使用したくないため、データベースという用語は非常に広く、データベースを持たずにデータベースで検索を実行したいファイルシステムを含むためです。

それは意味がありません。あなたの場合、少なくとも1つのデータベースはファイルシステムです。データベース(ここではhtmlファイル)を検索したいという事実を受け入れることができるが、データベースを使用して検索に関連するもの(たとえば、いくつかのインデックスまたはキャッシュされた結果)を保存したくない場合、あなたが提案することは基本的に仕組み: リアルタイムのテキストベースの行ごとのファイル検索。

確かにそれは非常に初歩的ですが、制約が「データベースなし」であるため、可能な唯一の方法をすでに見つけています。はい、リアルタイム検索はコストがかかるため、使用するとサーバーに負荷がかかります.

それ以外の場合、通常はLucene/Solrがジョブに使用されますが、それはデータベースでありサーバーでもあります。

于 2013-04-10T09:52:40.537 に答える