|
|
表>
フォーム>
2. 番組を検索
次に、search.htm フォームから渡されたデータを処理するための search.php ファイルをルートディレクトリに作成します。内容は次のとおりです
。
//検索キーワードを取得します
$keyword=trim($_POST[“キーワード”]);
// 空かどうかを確認します
if($keyword==””){
echo "検索したいキーワードを空にすることはできません";
exit;// プログラムを終了します
}
?>
このようにして、訪問者が入力したキーワードが空の場合、プロンプトを作成できます。以下はすべてのファイルのループです。
関数 opendir、readdir、または PHP Directory クラスを使用して、すべてのファイルを再帰的に走査できます。今は前者を使用しています
//すべてのファイルを走査する関数
関数リストファイル($dir){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
// ディレクトリの場合は検索を続けます
if(is_dir("$dir/$file")){
listFiles("$dir/$file");
}
他{
//ここで処理
}
}
}
}
?>
赤いテキストでは、検索されたファイルを読み取って処理できます。以下では、ファイルの内容を読み取り、その内容にキーワード $keyword が含まれているかどうかを確認します。含まれている場合は、ファイル アドレスを配列に割り当てます。
//$dir は検索ディレクトリ、$keyword は検索キーワード、$array は格納された配列です
関数 listFiles($dir,$keyword,&$array){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir("$dir/$file")){
listFiles("$dir/$file",$keyword,$array);
}
他{
// ファイルの内容を読み取ります
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
//自分自身を検索しないでください
if($file!=”search.php”){
// 一致するかどうか
if(エレギ("$キーワード",$データ)){
$array[]="$dir/$file";
}
}
}
}
}
}
//配列$arrayを定義
$array=array();
//関数を実行
listFiles(".","php",$array);
//検索結果を印刷します
foreach($array as $value){
echo "$value"."
n";
}
?>
この結果を最初のプログラムと組み合わせてキーワードを入力すると、Web サイト内の関連する結果が検索されたことがわかります。現在改善中です。
1.コンテンツのタイトルを列挙します
を入れてください
if(エレギ("$キーワード",$データ)){
$array[]="$dir/$file";
}
に変更します
if(エレギ("$キーワード",$データ)){
if(エレギ("
(.+)",$data,$m)){
$title=$m["1"];
}
他{
$title="タイトルなし";
}
$array[]="$dir/$file $title";
}
原則として、ファイルの内容に xxx が見つかった場合は、xxx をタイトルとして取り除き、タイトルに「no title」という名前を付けます。
2. Web ページのコンテンツのトピック部分のみを検索します。
Web ページを作成する場合、HTML コードが大量に含まれている必要がありますが、これらは検索対象ではないため、削除する必要があります。現在、strip_tags で正規表現を使用していますが、すべてを削除できるわけではありません。
を入れてください
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
//自分自身を検索しないでください
if($file!=”search.php”){
// 一致するかどうか
if(エレギ("$キーワード",$データ)){
に変更します
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
if(eregi("
]+)>(.+)",$data,$b)){
$body=strip_tags($b["2"]);
}
他{
$body=strip_tags($data);
}
if($file!="search.php"){
if(エレギ("$キーワード",$body)){
3. タイトルにリンクを追加します
foreach($array as $value){
echo "$value"."
n";
}
に変更します
foreach($array as $value){
//逆アセンブル
list($filedir,$title)=split(“[ ]”,$value,”2”);
//出力
echo "$value"."
n";
}
4 タイムアウトを防ぐ
ファイル数が多い場合は、PHPの実行時間がタイムアウトにならないようにする必要があります。ファイルヘッダーに
を追加できます
set_time_limit(“600”);
単位は秒なので、上記の制限は 10 分です。
完全なプログラムは次のとおりです
set_time_limit("600");
//検索キーワードを取得します
$keyword=trim($_POST["キーワード"]);
// 空かどうかを確認します
if($keyword==""){
echo "検索したいキーワードを空にすることはできません";
exit;// プログラムを終了します
}
関数 listFiles($dir,$keyword,&$array){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir("$dir/$file")){
listFiles("$dir/$file",$keyword,$array);
}
他{
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
if(eregi("
]+)>(.+)",$data,$b)){
$body=strip_tags($b["2"]);
}
他{
$body=strip_tags($data);
}
if($file!="search.php"){
if(エレギ("$キーワード",$body)){
if(エレギ("(.+)",$data,$m)){
$title=$m["1"];
}
他{
$title="タイトルなし";
}
$array[]="$dir/$file $title";
}
}
}
}
}
}
$array=array();
listFiles(".","$keyword",$array);
foreach($array as $value){
//逆アセンブル
list($filedir,$title)=split("[ ]",$value,"2");
//出力
echo "$title "."
n";
}
?>
ここまでは独自の検索エンジンを作成しましたが、コンテンツ処理部分を変更することで、タイトル検索やコンテンツ検索の機能を実現することもできます。ページネーションも考慮してください。これは内緒にしておいてください。
ここでは、eregi の代わりに preg_match を使用する方法を説明します。これにより、はるかに高速になります。分かりやすいように一般的に使われているエレギを使用しています
http://www.bkjia.com/PHPjc/845141.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/845141.html技術記事 PHP サイトの全文検索コード Dreamweaver または Frontpage でデザインした場合、意図的に削除しない限り、それらはすべて存在します。段階的に完成させて、プロジェクトを開始しましょう...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31