在文本文件中搜索关键字

时间:2012-03-05 17:20:21

标签: php search

我正在开发一个PHP搜索脚本,它扫描网站上包的文本文件存储库并返回每个匹配的URL。文本文件如下所示:

PACKAGE NAME: package_one
PACKAGE LOCATION: ./package_one
PACKAGE VERSION: 0.1.2

PACKAGE NAME: package_two
PACKAGE LOCATION: ./package_two
PACKAGE VERSION: 0.2.1

PACKAGE NAME: package_three
PACKAGE LOCATION: ./package_three
PACKAGE VERSION: 1.3.4

PACKAGE NAME: package_one
PACKAGE LOCATION: ./package_one
PACKAGE VERSION: 0.1.2

我的搜索脚本目前看起来如下:

<?
$search = $_POST['search']; //Passed from a user input form

$data_file = file('http://www.example.com/data_file.txt'); //The text file repository

    $final_concatenated_results = "";

    for ($i = 0, $found = FALSE; isset($data_file[$i]); $i++) {
        if (trim($data_file[$i]) === $search) { 
        $cleanse = trim($data_file[++$i]);
        $output_part_one = strstr($cleanse, '.');
        $output_part_two = "http://www.example.com/packages_repository/".$output_part_one;
        $add_this = "<a href='$output_part_two'>$output_part_two</a>"."<br/>";
        $found = TRUE;
        $final_concatenated_results.=$add_this;
    } }

    if ($found == TRUE) {
        echo $final_results;
    }

    if ($found == FALSE) {
        echo "Error, package not found.";
    }
?>

例如,如果逐字输入“PACKAGE NAME:package_two”,这将是输出 - http://www.example.com/packages_repository/./package_one,它可以正常工作。

理想情况下,我想知道如何更改我的代码,而不是输入“PACKAGE NAME:package_two”,可以简单地输入“package_two”,甚至可以输入“two”或“tw”。需要多少调整?

另外,我创建了一个变量来将所有结果URL连接到一个字符串,所以如果搜索“package_one”,它将返回两个URL ...我不认为我做的代码是正确的,因为它只产生一个URL。

**我应该提一下,在匹配包名后,它会在“PACKAGE LOCATION:”之后找到下一个字符串。抓取网址

感谢您的任何意见,谢谢!

2 个答案:

答案 0 :(得分:2)

在这里,您正在寻找完全匹配:

if (trim($data_file[$i]) === $search) { 

您可以使用stripos查看您的搜索字符串是否显示在以下行中:

if (stripos($data_file[$i], $search) !== FALSE) {

请注意,您需要进行!==比较,因为stripos可以评估为0。

答案 1 :(得分:1)

看一下strpos()函数:

if(strpos(trim($data_file[$i],$search) != false)

检查您的搜索字符串(针)是否在大海捞针(您当前的输入行)内。 http://php.net/manual/en/function.strpos.php