我是PHP的新手,我正在努力创建一个基本的搜索引擎。在每次搜索之后,我想在HTML页面中提供结果摘要,其中包含满足查询的所有项目。每个项目摘要还应提供指向特定HTML页面的链接,其中包含有关此项目的详细信息(每个项目的页面)。这与stackoverflow或google或任何其他搜索引擎非常相似。
这可以用PHP制作吗?
我发现这样做的唯一方法是使用像这样的代码自动生成每个搜索的HTML摘要代码(并且它可以工作),用于摘要页面(我必须做类似的事情来生成HTML页面) :
<?php
function frontPagePresentation($theFirstName,$theLastName,$theUserName,$theSummary)
{
$fileName='ShowSearch'.$theUserName.'.html';
$theHTML="profileO".$theUserName.".html";
$theLinkText=$theFirstName." ".$theLastName;
$theFigureName="/NetBeansProjects/NewPhpProject/photos/".$theUserName;
$thePos=strpos($theSummary, ' ', 200);
$theSummary=substr($theSummary,0,$thePos);
$theSummary=": ".$theSummary;
//$file = fopen(,"w");
$str1="<table border=\"0\" width=\"75%\">";
echo $str1;
if (!($fp = fopen($fileName, 'w'))) {
return;
}
$str1="<table border=\"0\" width=\"75%\">";
$str2="<tr>";
$str3="<td width=\"20%\">";
$str4="<img src= $theFigureName alt=\" \" width= \"100\">";
$str5="</td>";
$str6="<td width=\"80%\">";
$str7="<a href= $theHTML > $theLinkText </a>";
$str8= $theSummary;
$str9="</td>";
$str10="</tr>";
$str11="</table>";
$len = fprintf($fp, '%s',$str1."\n");
$len = fprintf($fp, '%s',$str2."\n");
$len = fprintf($fp, '%s',$str3."\n");
$len = fprintf($fp, '%s',$str4."\n");
$len = fprintf($fp, '%s',$str5."\n");
$len = fprintf($fp, '%s',$str6."\n");
$len = fprintf($fp, '%s',$str7."\n");
$len = fprintf($fp, '%s',$str8."\n");
$len = fprintf($fp, '%s',$str9."\n");
$len = fprintf($fp, '%s',$str10."\n");
$len = fprintf($fp, '%s',$str11."\n");
}
?>
之后我将这个页面加载到一个HTML页面(将显示摘要的HTML页面)中,使用以下内容:
$ theUser = mysql_fetch_assoc($ theUserSearch); $ theFirstName = $ theUser [ '姓名']; $ theLastName = $ theUser [ '姓氏']; $ theUserName = $ theUser [ '用户名']; $ theSummary = $ theUser [ '摘要'];
frontPagePresentation($ theFirstName,$ theLastName,$ theUserName,$ theSummary);
$ theHTML = “ShowSearch” $ theUserName。 “HTML”;
require($DOCUMENT_ROOT . $theHTML);
正如我所说,我是PHP的新手,但这似乎不是一个非常聪明的方法。
每次我必须生成很多摘要和所有与这些摘要相关的主页(因为在将浏览器发送到HTML之后,我再也无法访问它们了 - 我在客户端)并且每次搜索后我都会必须删除它们(包括与每个项目相关的摘要和HTML页面)。此外,目前尚不清楚如何选择正确的删除时间(如何知道这些结果是否仍在使用?)
这样做的正确方法是什么?
答案 0 :(得分:1)
我认为你应该做的是尝试学习像Codeigniter或Laravel这样的小型PHP框架。 基本上,它允许您“开箱即用”的是将URL映射到特定代码。
例如,您可以只使用2个不同的代码部分来管理它。 第一部分可以显示搜索表单。 第二部分可以显示结果。无需生成任何HTML。如果您需要“缓存”数据,可以使用我列出的框架来完成。
因此,总而言之,您可以使用这些框架执行的操作如下: - 将url / search映射到search.php文件 - 将urls / search-result / *映射到文件search_result.php
请注意,“*”是一个通配符,如果网址以/ search-result / ...开头,则始终会调用文件“search_result.php”。
之后,在“search_result.php”文件中,您可以访问此通配符的值。
为您寻找:为什么需要生成HTML文件,背后的需求是什么?是为了表现吗?与某人分享结果..?
(抱歉,我会使用评论功能,但我的声誉还不到50岁)
编辑2:我建议你做的是尝试学习Laravel(获得“冷却”)或代码点火器(轻量级),如果你有空闲时间。
第二个选项,如果你想更快地完成它,可以学习一点用Apache重写URL。例如,请查看:http://httpd.apache.org/docs/2.0/misc/rewriteguide.html (或在Google上搜索Apache重写教程)
您希望通过以下方式实现: - 使用/ user /获取所有生成的URL并将其发送到search_user.php?stringToSearch = $ 1 php script - 请注意$ 1将被url的“/ user /”部分后面的内容替换 - 所以,如果你键入/ user / bob,那么URL基本上是search_user.php?stringToSearch = bob(但它将是一个“静默重定向”,所以用户仍然会在URL中看到/ user / bob。 - 然后,在您的search_user.php脚本中,您将执行
<?php
$stringToSearch = $_GET['stringToSearch'];
$theUser=mysql_fetch_assoc($stringToSearch);
...
这就是你搜索引擎的“细节”部分。
对于“搜索和显示”部分,创建一个新脚本(如index.php)并基本完成您在开始时发布的内容。但不是这一行:
$str7="<a href='$theHTML'> $theLinkText </a>";
使用此
$str7="<a href='http://www.yoursite.com/user/$theUserName'> $theLinkText </a>";
这有意义吗?