【问题标题】:PHP search function on website. (easy)网站上的 PHP 搜索功能。 (简单的)
【发布时间】:2011-11-25 11:12:22
【问题描述】:

我在一个客户网站上实现了一个 php 搜索功能。我想做的是在网站目录中搜索特定pdf文件的文件。

但是我似乎无法让它工作。如果我在搜索框中输入“pdf”,它会返回目录中的所有文件,但如果我输入特定的文件名,则它什么也不返回。

下面是我正在使用的 php 脚本:

  <?php
    $my_server = "http://www.gwent.org".":".getenv("http://www.gwent.org_80");
    $my_root = getenv("docroot/");
    $s_dirs = array("");
    $hits = null;
    $full_url = $_SERVER['PHP_SELF'];
    $site_url = eregi_replace('customer_information.php', '', $full_url);
    $directory_list = array('sold_msds');
    $s_files = ".pdf"; 
    foreach($directory_list as $dirlist)
    {
        $directory_url = $site_url.$dirlist."/";
        $getDirectory = opendir($dirlist);

        while($dirName = readdir($getDirectory))
            $getdirArray[] = $dirName;

        closedir($getDirectory);

        $dirCount = count($getdirArray);
        sort($getdirArray);

        for($dir=0; $dir < $dirCount; $dir++)
        {
            if (substr($getdirArray[$dir], 0, 1) != ".")
            {
                $label = eregi_replace('_', ' ', $getdirArray[$dir]);

                $directory = $dirlist.'/'.$getdirArray[$dir]."/";
                $complete_url = $site_url.$directory;

                if(is_dir($directory))
                {
                    $myDirectory = opendir($directory);

                    $dirArray = null;

                    while($entryName = readdir($myDirectory))
                        $dirArray[] = $entryName;

                    closedir($myDirectory);

                    $indexCount = count($dirArray);
                    sort($dirArray);
                }
                else
                {
                    $hits++;

                    if(file_exists($dirlist."/".$label))
                    {
                        $fd=fopen($dirlist."/".$label, "r");

                        $text=fread($fd, 50000);

                        $keyword_html = htmlentities($keyword);

                        if(!empty($keyword))
                        {
                            $do=stristr($text, $keyword) || stristr($text, $keyword_pdf);
                        }

                        if($do)
                        {
                            $strip = strip_tags($text);
                            $keyword = preg_quote($keyword);
                            $keyword = str_replace("/","\/","$keyword");
                            $keyword_html = preg_quote($keyword_html);
                            $keyword_html = str_replace("/","\/","$keyword_html");
                            echo "<span>";
                            if(preg_match_all("/((\s\S*){0,3})($keyword|$keyword_html)((\s?\S*){0,3})/i", $strip, $match, PREG_SET_ORDER));
                            {
                                $number=count($match);

                                if($number > 0)
                                {
                                    echo "<a href='".$dirlist."/".$label."'>".$label."</a> (".$number.")";
                                    echo "<br />";
                                }

                                for ($h=0;$h<$number;$h++)
                                {
                                    if (!empty($match[$h][3]))
                                    {
                                        printf("<i><b>..</b> %s<b>%s</b>%s <b>..</b></i>", $match[$h][1], $match[$h][3], $match[$h][4]);

                                    }
                                }


                                echo "</span><br /><br />";
                                if($number > 0):
                                    echo "<hr />";
                                endif;
                            }
                        }
                    }
                }
            }
        }
    }
    ?>

非常感谢提前

【问题讨论】:

  • 欢迎来到 SO!这是很多的代码——绝对是太多了。请添加更多详细信息,说明哪里出了问题以及具体在哪里。考虑压缩它,使其仅显示相关代码。谢谢!
  • user1065439 : 如果你知道这很容易,为什么不直接去做呢?
  • 你在哪里使用 $s_files = ".pdf"; ?
  • 请不要使用ereg*函数,而是使用preg*。至少,坚持一个或另一个。

标签: php search directory


【解决方案1】:

查找 glob 函数http://php.net/manual/en/function.glob.php

$found = glob("/path/to/dir/*.pdf");

编辑:没关系,您的问题听起来与您的代码所做的完全不同。我猜我发布的内容不正确

【讨论】:

  • 这不是完全不正确,这是一种比上面实现的更好的获取文件列表的方法。不能直接解决问题,但也不是完全没有帮助。不过作为评论可能会更好......
  • 感谢 cmets/answer。我会和大家讲道理,告诉你我只是一个前端设计师,他的要求苛刻的 MD 在他的脖子上呼吸!因此,任何人都可以用外行的方式向我展示/告诉我如何在网站上放置搜索功能,该功能将仅通过文件名搜索特定目录中的 php 文件。非常感谢!
【解决方案2】:

简单的搜索,这不是递归的。给它一个目录,它会吐出找到的文件

$files = glob("c:/xampp/htdocs/*.php");
if(empty($files)) {
    echo "No PHP Files Found";
}
else {
    foreach($files as $f) {
        echo "PHP File Found: ".$f."\n";    
    }
}

【讨论】:

  • 如何将其链接到网站上的搜索表单,以便用户可以输入确切的文件名以在目录中显示相关的 pdf?谢谢
猜你喜欢
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2012-05-04
  • 2010-12-04
相关资源
最近更新 更多