单PHP快速TXT查询系统

单PHP快速查询系统
能快速查询指定目录下的全部text文件内容,并以行的方式体现出来

原始text文件必须是GKB格式 否则乱码
推荐配合 PrimoCache 或 SuperCache 使用 效率极佳!

define ('DB_SOURCE', 'E:\go'); 目录配置

可以多目录

define ('DB_SOURCE1', 'E:\go1');
define ('DB_SOURCE2', 'E:\go2');
define ('DB_SOURCE3', 'E:\go3');

在第27行添加对应变量既可

get_file_list(DB_SOURCE1 . '\\*');
get_file_list(DB_SOURCE2 . '\\*');
get_file_list(DB_SOURCE3 . '\\*');

最多回显行数

define ('RESULT_LIMIT', 999999999);


直接复制另存search.php保存成GBK格式既可



<?php
define ('DB_SOURCE', 'E:\go');
define ('CACHE_LIMIT', 4194304);
define ('RESULT_LIMIT', 999999999);
define ('TIME_LIMIT', 600);

$begin = microtime(true);
set_time_limit(TIME_LIMIT + 100);
ob_end_flush();

echo <<< EOF
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>Full text search</title>
</head><body>
<form method="get" action="">
<input type="text" name="keyword" />
<input type="submit" />
</form>
EOF;
flush();

$keyword = isset($_REQUEST['keyword']) ? trim($_REQUEST['keyword']) : '';
if (empty($keyword)) exit('</body></html>');

$filelist = array();
get_file_list(DB_SOURCE . '\\*');
$count = 0;


flush();

foreach ($filelist as $filepath) {
$fp = fopen($filepath, 'r');
if (!$fp) continue;

$basename = basename($filepath);
$filesize = filesize($filepath);
$fp_start_pos = 0;

while($fp_start_pos !== $filesize) {
    fseek($fp, $fp_start_pos);
    $content = fread($fp, CACHE_LIMIT);
    $content_length = strlen($content);
    
    if ($fp_start_pos + $content_length !== $filesize) {
        $content_length = strrpos($content, "\n") + 1;
        $content = substr($content, 0, $content_length);
    }
    
    $fp_start_pos += $content_length;

    $keyword_pos = 0;
    while (($keyword_pos = strpos($content, $keyword, $keyword_pos)) !== false)
    {
        $start_pos = strrpos($content, "\n", -$content_length + $keyword_pos);
        $end_pos = strpos($content, "\n", $keyword_pos);
        if ($end_pos === FALSE) $end_pos = $content_length;
        echo $basename . ' | ' . trim(substr($content, $start_pos, $end_pos - $start_pos))             . "<br />\r\n";
            flush();
            $keyword_pos = $end_pos;
            $count++;
            if ($count >= RESULT_LIMIT) break;
        }
        if ($count >= RESULT_LIMIT) break;
    }

    fclose($fp);
    if ($count >= RESULT_LIMIT) break;
    if ((microtime(true) - $begin) >= TIME_LIMIT) break;
}

if ($count >= RESULT_LIMIT)
    echo "太多无意义数据,被放弃...<br />\r\n";

if ((microtime(true) - $begin) >= TIME_LIMIT)
    echo "Search time out, give up<br />\r\n";

echo '搜索完成,已经列出条数共 ' . $count . ' 耗时 ' . (microtime(true) - $begin) . "秒<br />\r\n";
echo '</body></html>';
flush();

function get_file_list($dbsource) {
    global $filelist;
    $current_file_list = glob($dbsource);
    foreach ($current_file_list as $each) {
        if (strpos($each, 'search.php') === true)
            continue;
        if (is_file($each))
            $filelist[] = $each;
        if (is_dir($each))
            get_file_list($each . '\\*');
    }
}
?>


发表评论

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠(ᐛ」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • (งᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ°Д°;)っ
  • ╮(╯▽╰)╭
  • o(*
  • >﹏<
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 颜文字

*

已有 5 条评论
  1. 我会写PHP代码。但是我不知道如何得到这些txt文件。请问哪里可以获取呢?

  2. 希望可以改进支持其他格式,原始TXT文件太多都改成GBK很麻烦。