WebjxCom提示:
PHP的许多特点与其他软件或者工具有关
。利用迄今为止我们所学到的
PHP知识
,我们可以试着建立一个简单交互的网站
。利用这一过程我们又可以学到不少东西。好吧
,我们现在开始专注于一个典型个人网站的建设。
3.5简单的站内
搜索引擎 PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的
搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。
<?
include("include/common.inc");
$title="Search";
include("include/header.inc");
?>
<P>
<FORMACTION="<?echo"$PHP_SELF";?>"METHOD="POST">
<INPUTTYPE="text"NAME="searchstr"value="<?echo"$searchstr";?>"
SIZE="20"MAXLENGTH="30">
<INPUTTYPE="submit"VALUE="Search!">
</FORM>
</P>
<?
if(!empty($searchstr))
{
//empty()用来检查查询字串是否为空
//如果不为空,调用grep查询
echo"<HR>
";
//调用grep对所有文件进行大小写非敏感模式的查询
$cmdstr="grep-i$searchstr*";
$fp=popen($cmdstr,"r");//执行命令并输出管道
$myresult=array();//存储查询结果
while($buffer=fgetss($fp,4096))
{
//grep返回这样格式:文件名:匹配字串出现行数
//因此我们利用函数split()分离处理数据
list($fname,$fline)=split(":",$buffer,2);
//我们只输出第一次匹配的结果
if(!defined($myresult[$fname]))
$myresult[$fname]=$fline;
}
//现在我们将结果存储在数组中,下面就可以处理并输出了
if(count($myresult))
{
echo"<OL>
";
while(list($fname,$fline)=each($myresult))
echo"<LI>
<AHREF="$fname">$fname</A>:$fline</LI>
";
echo"</OL>
";
}
else
{
//如果没有查询结果
echo"Sorry.Searchon<B>$searchstr</B>
returnednoresults.<BR>
";
}
pclose($fp);
}
?>
<?
include("include/footer.inc");
?>
注释:
PHP_SELF是PHP内建的变量。包含当前文件名。
fgets()按行读取文件,最多4096(指定)字符长度。
fgetss()与fgets()相似,只是解析输出的HTML标记。
split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。
each()是一个数组操作函数,用来更方便的遍历整个数组。
popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。
请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索。