2013-04-10 62 views
1

您好即時在PHP新手我試圖做一個搜索功能,使用PHP,但不作任何數據庫搜索的網站的鏈接,並顯示它PHP

基本上,如果我想即搜索字符串的網站內「健康」,將顯示該行

<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]; 

我還沒有嘗試過它如果它會工作,但在我之前我想問問是否有更好的方法來做到這一點? 如果我的文件有太多的線不會壓力服務器?

回答

0

因爲你不想使用任何數據庫,並且因爲術語數據庫非常廣泛,並且包含要在某個數據庫中執行搜索而不需要數據庫的文件系統。

這沒有任何意義。在你的情況下,一個數據庫至少是文件系統。如果你可以接受你想要搜索數據庫(這裏是你的html文件)的事實,但你不想使用數據庫來存儲與搜索相關的任何東西(例如一些索引或緩存結果),那麼你的建議基本上是它如何工作:一種實時的,基於文本的逐行文件搜索。

確定它是非常基本的,但由於您的約束是「無數據庫」,您已經找到唯一可能的方法。是的,它會強調你的服務器使用時,因爲實時搜索是昂貴的。

否則通常Lucene/Solr是用於工作,但這是一個數據庫和服務器甚至。

1

file()函數將返回一個數組。您應該使用file_get_contents(),因爲它會返回一個字符串。

然後,使用regular expressions查找鏈接中的特定文本。

1

你的目標很好,但你想的方法不是。 file()函數逐行讀取一個文件,並將其插入到一個數組中。這假定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; 
    } 
} 

這將返回所有你與你查找單詞,逐頁分離出現的所有引用的頁面的數組。正如我所說,這不是你想要解決這個問題的方式,但它是一種方式。

希望可以幫到