用Java MySQL PHP轻松构建跨平台的搜索引

MySQL的优点 MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。MySQL中提供了多种数据库存储引擎,各引擎各有所长,适用于不同的应用场合,用户可以选择最合适的引擎以得到最高性能,可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL为各种流行的程序设计语言提供支持,为它们提供了很多的API函数,包括PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl语言等。高速是MySQL的显著特性。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 此搜索引擎适于在一个中等规模的局域网中使用,由于找到的网页存在数据库中,不仅可以索静态的HTML页面,可以搜索php、asp等动态页面。对于一个拥有5万个网页的系统(使用PII-400作为服务器),搜索响应时间在2-10秒左右,完全可以满足要求,由于Java、MySQL、PHP都是跨平台的软件,所以此搜索引擎不仅可以工作在Windows服务器上,而且也可以工作在Linux等其他系统中。   一、建立搜索引擎需要的数据库和数据表。   首先建立数据库:   c:/mysql/bin/> mysqladmin -uroot -pmypasswd create Spider   然后建立数据库中的表结构   c:/mysql/bin/> mysql -uroot -pmypasswd Spider < Spider.mysql   其中Spider.mysql为一个文本文件,其内容如下:



CREATE TABLE link (

Id int(10) unsigned NOT NULL auto_increment,

Url varchar(120) NOT NULL,

Class tinyint(3) unsigned NOT NULL default 0 ,

IsSearchLink tinyint(3) unsigned default 0,

PRIMARY KEY (Url),

UNIQUE Id (Id),

KEY Url (Url),

KEY Class (Class)

);

# 本局域网的初始主页地址,搜索蜘蛛从此网址开始搜索所有其他网页 INSERT INTO link VALUES( '1', 'HTTP://102.211.69.1/', '0', '0');   # 数据表 webpagelocal 用来存放下载的所有的网页



CREATE TABLE webpagelocal (

Id int(10) unsigned NOT NULL auto_increment,

Url varchar(120) NOT NULL,

Content text NOT NULL,

PRIMARY KEY (Url),

UNIQUE Id (Id),

KEY Url (Url)

); 



  # 数据表 webpagefindfast 



  # 用MakeFast.php从表webpagelocal中提取512字节的检索信息存放其中



CREATE TABLE webpagefindfast (

Id int(10) unsigned NOT NULL,

Url varchar(120) NOT NULL,

Title varchar(64),

Content blob,

PRIMARY KEY (Url),

KEY Url (Url),

KEY Title (Title)

); 



二、以下为搜索网页和下载网页至本地数据库的Java程序LinkToDB.java,它也是此搜索引擎的核心和基础



/***************************** LinkToDB.java ***********************************

*

* 对URL中的http链接进行分析,将相对路径转换为绝对路径,排序方式输出结果到数据库 

*

* 如果分析得到的URL是Link表中唯一的,就将其内容下载到表 WebPageLocal 中。 

*

********************************************************************************

/

import java.io.*;

import java.util.*;

import java.net.*;

import java.lang.String;

import java.sql.*;

import java.text.*;



class Counter {

private int i = 1;

int read() { return i; }

void increment() { i  ; }

}



public class LinkToDB {

String UrlHost = "";

String UrlFile = "";

String UrlPath = "";

static String StartWith = null;

boolean outsideTag = true; //判断是否在标记之中

static char[] buffer = new char[4096]; // 缓冲区:用于保存从 URL 读的数据

InputStreamReader read = null;

BufferedReader reader = null;

URLConnection uc = null;

private URL url = null;

private StreamTokenizer st;

private TreeMap counts = new TreeMap();//以排序方式保存找到的链接



LinkToDB(String myurl,String StartOnly){

try {

StartWith = StartOnly;

if(StartOnly!=null) { if(!myurl.startsWith(StartOnly)) return; }//只搜索此网站

url = new URL(myurl);

UrlHost = url.getHost();

UrlHost = UrlHost.toUpperCase();

UrlFile = url.getFile();

int v=UrlFile.lastIndexOf("/");

if(v!=-1) UrlPath = UrlFile.substring(0,v);

System.out.println("分析文件:" myurl);

int uclength=200000;

int ucError=0;

try{ 

uc = url.openConnection();

uc.setUseCaches(false);

uc.connect();

}

catch(IOException io) { ucError=1; System.out.println("打不开待分析网页:" myu

rl); }

if(ucError!=1){

uclength = uc.getContentLength();

if (uclength<200000) {

try{ read = new InputStreamReader(url.openStream()); }

catch(IOException io) {System.out.println("流打开错误:" myurl);}

}

else System.out.println("文件太大,不分析");

}

if(read!=null){

reader=new BufferedReader(read); 

if(reader!=null){

st = new StreamTokenizer(reader);

st.resetSyntax(); // 重置语法表

st.wordChars(0,255); // 令牌范围为全部字符

st.ordinaryChar('<'); // HTML标记两边的分割符

st.ordinaryChar('>');

}

}

}

catch(MalformedURLException e){ System.out.println("Malformed URL String!");} 

}

void cleanup() {

try { read.close(); }

catch(IOException e) { System.out.println("流关闭错误"); }

}

void countWords() {

try {

while(st.nextToken()!=StreamTokenizer.TT_EOF) {

String s0="";

String s_NoCase="";

switch(st.ttype) {

case '<': //入标记字段

outsideTag=false;

continue; //countWords();

case '>': //出标记字段

outsideTag=true;

continue; //countWords();

case StreamTokenizer.TT_EOL: s0 = new String("EOL"); break;

case StreamTokenizer.TT_WORD: if(!outsideTag) s0 = st.sval; /*已经是字符

串*/ break;

default: s0 = "";// s0 = String.valueOf((char)st.ttype);/*单一字符*/

}

if(outsideTag) continue;//出了标记区域(<a >)

String s = "";

s_NoCase = s0.trim();

s0=s_NoCase.toUpperCase();

if(s0.startsWith("A ")||s0.startsWith("AREA ")||s0.startsWith("FRAME ")||s0.s

tartsWith("IFRAME ")){ //以这些开始的都是超级链接

int HREF_POS = -1;

if(s0.startsWith("FRAME ")||s0.startsWith("IFRAME ")) {

HREF_POS = s0.indexOf("SRC=");

s0 = s0.substring(HREF_POS 4).trim();

s_NoCase=s_NoCase.substring(HREF_POS 4).trim();

}

else {

HREF_POS=s0.indexOf("HREF=");

s0=s0.substring(HREF_POS 5).trim();

s_NoCase=s_NoCase.substring(HREF_POS 5).trim();

}

if(HREF_POS!=-1) {

if(s0.startsWith("/"")) 

{s0=s0.substring(1);s_NoCase=s_NoCase.substring(1);}

int QUOTE=s0.indexOf("/"");

if(QUOTE!=-1) 

{s0=s0.substring(0,QUOTE).trim();s_NoCase=s_NoCase.substring(0,QUOTE).trim

();}

int SPACE=s0.indexOf(" ");

if(SPACE!=-1) 

{s0=s0.substring(0,SPACE).trim();s_NoCase=s_NoCase.substring(0,SPACE).trim

();}

if(s0.endsWith("/"")) 

{s0=s0.substring(0,s0.length()-1);s_NoCase=s_NoCase.substring(0,s_NoCase.l

ength()-1);}

if(s0.indexOf("'")!=-1||s0.indexOf("JAVASCRIPT:")!=-1||s0.indexOf("..")!=-1

)

{s0="";s_NoCase="";} //有这些符号,认为非合法链接;两点表示上一目录,而我

只想向下级查找

if ( !s0.startsWith("FTP://") &&//以下后缀或前缀通常非网页格式

!s0.startsWith("FTP://") &&

!s0.startsWith("MAILTO:") &&

!s0.endsWith(".SWF") &&

!s0.startsWith("../")) //因../表示上一目录,通常只需考虑本级和下N级目录

s=s0;

if (!s.startsWith("HTTP://")&&!s.equals("")) {s=UrlHost UrlPath "/" s;s_No

Case=UrlHost UrlPath "/" s_NoCase;}

else if(s.startsWith("/")) {s=UrlHost s;s_NoCase=UrlHost s_NoCase;}

if(s.startsWith("HTTP://")) {s=s.substring(7);s_NoCase=s_NoCase.substring(

7);}

int JinHao=s.indexOf("#"); //如果含有"#"号,表示有效的链接是此前的部分

if(JinHao!=-1) {s=s.substring(0,JinHao).trim();s_NoCase=s_NoCase.substring(

0,JinHao).trim();}

int H=-1; //以下将/./转换为/

for(int m=0;m<4;m  ){

H=s.indexOf("/./");

if(H!=-1) {s=s.substring(0,H) s.substring(H 2);s_NoCase=s_NoCase.substring

(0,H) s_NoCase.substring(H 2);}

}

int TwoXG=-1; //以下将//转换为/

for(int m=0;m<5;m  ){

TwoXG=s.indexOf("//");

if(TwoXG!=-1) {s=s.substring(0,TwoXG) s.substring(TwoXG 1);s_NoCase=s_NoCa

se.substring(0,TwoXG) s_NoCase.substring(TwoXG 1);}

}

int OneXG=s.indexOf("/");

if(OneXG==-1) {s=s "/";s_NoCase ="/";} //将xx.xx.xx.xxx转换为xx.xx.xx.xxx/的

标准形式

if (!s.startsWith("HTTP://")) {s="HTTP://" s;s_NoCase="HTTP://" s_NoCase;}

}

}

if(counts.containsKey(s_NoCase)) ((Counter)counts.get(s_NoCase)).increment();

else counts.put(s_NoCase,new Counter());

}

} catch(IOException e) {

System.out.println("st.nextToken() unsuccessful");

}

}



Collection values() { return counts.values(); }

Set keySet() { return counts.keySet(); }

Counter getCounter(String s) { return (Counter)counts.get(s); }



public static void main(String[] argv) throws FileNotFoundException {

try{

Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 

}

catch (Exception E) {

System.out.println("加载Jdbc驱动程序失败");

E.printStackTrace();

}

try{

Connection conn = DriverManager.getConnection(

"jdbc:mysql://localhost/Spider?user=root&password=mypassword");

Statement stmt = conn.createStatement();

String myurl;

for(int i=1;i<=6;i  ){

String query = "SELECT Url FROM link WHERE IsSearchLink=0 and Class=" (i-1) " 

ORDER BY Url";

ResultSet rs = stmt.executeQuery(query);

while (rs.next()) {

myurl = rs.getString("Url");

String StartOnly = null;

if(argv.length>0) StartOnly=argv[0];

LinkToDB wc = new LinkToDB(myurl,StartOnly);

if(wc.reader!=null){

stmt.executeUpdate("UPDATE Link SET IsSearchLink=1 WHERE Class=" (i-1) " a

nd Url='" myurl "'");

wc.countWords();

Iterator keys = wc.keySet().iterator();

while(keys.hasNext()) {

String key = (String)keys.next();

System.out.println("分析找到链接:" key   ": "  wc.getCounter(key).read());

int ErrorDB=0;

if(StartWith==null||(StartWith!=null&&key.startsWith(StartWith))){

try{//-------------------------- 找到的链接插入数据库link -----------------

--

stmt.executeUpdate("INSERT INTO Link(Id,Url,Class) VALUES(0,'" key "'," 

i ")");

}

catch(SQLException ex){

ErrorDB=1;

System.out.println("插入数据错 SQLException: "   ex.getMessage())

;

}

if(ErrorDB!=1){ //链接不重复就下载网页到WebPageLocal

System.out.println("下载网页:" key);

int length; // 读的字符数

int filelength=200000;

InputStreamReader read=null;

URL rurl=null;

URLConnection urlc=null;

String Content="";

try{ rurl = new URL(key); }

catch(MalformedURLException mu) {

System.out.println("打开下载网页出错:" mu.getMessage());

}

if(rurl!=null){

int ucError=0;

try{ urlc = rurl.openConnection(); urlc.connect();}

catch(IOException io) { ucError=1; System.out.println("下载网页打不开:" ke

y); }

if(ucError==0){

try{ 

filelength=urlc.getContentLength();

if (filelength>=200000) System.out.println("网页太大,我不下载了。" key);

else read = new InputStreamReader(rurl.openStream());

}

catch(IOException io) {System.out.println("下载网页打不开:" key);}

}

// 读入 URL 并写入数据库

if(read!=null&&filelength<200000){

try{

while((length = read.read(buffer)) != -1) {

String s = new String(buffer, 0, length);

Content=Content s;

}

}

catch(IOException io) {

Content="";

System.out.println("不能读入URL文件");

}

try{

Statement stmt2 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, Res

ultSet.CONCUR_UPDATABLE);

ResultSet uprs = stmt2.executeQuery("SELECT Id,Url,Content FROM WebPageLoca

l WHERE 0");//WHERE 0很重要,否则会耗尽内存

uprs.moveToInsertRow();

uprs.updateInt("Id",0);

uprs.updateString("Url",key);

uprs.updateString("Content",Content);

uprs.insertRow();

uprs.beforeFirst();

uprs.close();

stmt2.close();

}

catch(SQLException ex){

System.out.println("插入数据错:"   ex.getMessage());

}

}//if(read!=null&&filelength<200000)

}//

}

}

//------------------------------- 下载网页 ----------------------------------

}//while(keys.hasNext())

wc.cleanup();

}//if(wc.reader!=null) 

}//while rs.next

rs.close(); //关闭记录结果

}//end for

stmt.close(); //关闭语句

conn.close(); //关闭连接 

}//try

catch(SQLException ex){ System.out.println("SQL异常:"   ex.getMessage()); }

}//main()函数结束

}//类 LinkToDB 结束



三、编译和运行此Java程序



d:/Spider/> set CLASSPATH=d:/j/mm.mysql.jdbc2;

d:/Spider/> d:/j/bin/javac LinkToDB.java

d:/Spider/> d:/j/bin/java LinkToDB

其中第一行命令是设置MySQL的JDBC驱动程序路径。 四、由于网页中含有大量的无用的格式信息,直接用它来搜索要浪费大量的时间,所以需要掉其中的HTML格式控制信息,并将太长的网页截短,然后将整理后的用于搜索的信息存到另一个数据表中。由于PHP4中有一个很方便的函数strip_tags可以去掉其中的HTML格式标记,所以我们用PHP来整理。   MakeFast.php的内容如下:



<?php

mysql_connect("localhost","root","mypassword");

$result = mysql_db_query("Spider","select Id,Url,Content from WebPageLocal whe

re Id>$n1 and Id<$n2");

while($mt = mysql_fetch_array($result)){

$Title = "";

$Body = "";

$mt2 = strtoupper($mt[2]);

$PosTitleL = strpos($mt2,"<TITLE>");

$PosTitleR = strpos($mt2,"</TITLE>");

$PosBody = strpos($mt2,"<BODY");

$PosHeadR = strpos($mt2,"</HEAD>");

if($PosTitleL&&$PosTitleR) $Title = substr($mt[2],$PosTitleL 7,$PosTitl

eR-$PosTitleL-7);

$Title = eregi_replace("'","’",$Title);

if($PosBody) $Body = substr($mt[2],$PosBody);

else if($PosHeadR) $Body = substr($mt[2],$PosHeadR 7);

else if($PosTitleR) $Body = substr($mt[2],$PosTitleR 8);

else if($PosTitleL) $Body = substr($mt[2],$PosTitleL);

else $Body = $mt[2];

$BodyText = strip_tags($Body);

$BodyNoSpace = eregi_replace(" ","",$BodyText);

$BodyNoQuote = eregi_replace("'","",$BodyNoSpace);

$Body512 = substr($BodyNoQuote,0,511)." ";

$Id = $mt[0];

$Url = $mt[1];

$sql="Insert Into WebPageFindFast(Id,Url,Title,Content)

VALUES($Id,'$Url','$Title','$Body512')";

mysql_db_query("Spider",$sql) or die($sql);

echo $Id." ";

}

?>

  使用方式:   在浏览器中输入http://mywebsite/Spider/MakeFast.php?n1=1&n2=10000



五、以上是建立搜索引擎所用到的数据,下面编制用于用户搜索的网页和PHP脚本文件。首先是用于搜索的表单页面SearchForm.htm,其内容如下。




<html>

<head>

<title>红蜘蛛搜索引擎-V0.1</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<link rel="stylesheet" href="../All.css" type="text/css">

</head>



<body bgcolor="#eeffee" text="#000000">

<table width="600" border="0" cellspacing="2" cellpadding="2" align="center" bgc

olor="#99CC00">

<tr>

<td>

<div align="center"><font color="#FF0000"><b><span class="pt16">红蜘蛛搜索

引擎</span> 

<span class="pt12">V0.1</span></b></font></div>

</td>

</tr>

</table>

<form name="form1" method="post" action="Search.php">



<table width="600" border="1" cellspacing="1" cellpadding="1" align="center" b

ordercolor="#99CC00">

<tr> 

<td> 



<div align="left"><span class="pt15"><font color="#FF0000"><b>关 键 字</

b>:</font></span> 

<input type="text" name="KeyWords" size="40" maxlength="40">

</div>

</td>

<td> 



<div align="left"><span class="pt15"><font color="#FF0000"><b>查找范围</

b>:</font></span> 

<select name="SearchIn">

<option value="Content" selected>网页正文</option>

<option value="Title">网页标题</option>

</select>

</div>

</td>

</tr>

<tr> 



<td colspan="2"><span class="pt15"><font color="#FF0000"><b>查找方式</b>:

</font></span> 

<select name="Speed">

<option value="Fast" selected>快速查找</option>

<option value="Slow">更深查找</option>

</select>

</td>

</tr>

<tr> 

<td colspan="2"> 

<div align="left"> 

<input type="submit" name="Submit" value="搜索">

</div>

</td>

</tr>

</table>

</form>

<table width="600" border="0" cellspacing="2" cellpadding="2" align="center">

<tr> 

<td height="18"> 

<p class="pt12"><font color="#FF0000"><b>使用方法</b></font>:仅需在关键字

一栏输入查询内容并按回车键(Enter)即可。 

</p>

<blockquote> 

<p align="left" class="pt12">如果希望输入多个条件,只需要用空格分隔即可:

</p>

<p class="pt12">例如:要查询同时包含“西昌”和“卫星”的网页,只需输入[西

昌 卫星]。</p>

<p class="pt12">又如:要查询只包含关键字“西昌”而不包含“卫星”的网页,

只需要输入[西昌 -卫星]。注意中间的空格不能少。</p>

</blockquote>

<p class="pt12"><font color="#FF0000"><b>查找范围</b></font>:你可以选择从

“网页标题”中查找或者从“网页正文”中查找。</p>

<p class="pt12"><font color="#FF0000"><b>查找方式</b></font>:“快速查找”

速度快但找到的网页数可能较少,因为:</p>

<blockquote> 

<p class="pt12">“快速查找”只搜索网页正文的前512个字符。</p>

<p class="pt12">“更深查找”搜索网页正文的前2048个字符。</p>

<div align="right"><a href="mailto:zdyhlp@263.net"><font color="#FF0000" class="pt13"><b>欢迎

提出宝贵意见</b></font></a></div>

</blockquote>

</td>

</tr>

</table>

</body>

</html>



search.php根据用户输入的条件,完成搜索,显示找到的网页的链接地址、标题和提要信息 。内容如下:



<TITLE>红蜘蛛正在搜索关键词为[<?php echo $KeyWords?>]的网页</TITLE>

<link rel="stylesheet" href="../All.css" type="text/css">

<body bgcolor="#eeffee">

<table width="96%" border="0" cellspacing="2" cellpadding="2" align="center" bgc

olor="#99CC00">

<tr> 

<td> 

<div align="center"><font color="#FF0000"><b><span class="pt16">红蜘蛛搜索

引擎</span> 

<span class="pt12">V0.1</span></b></font></div>

</td>

</tr>

</table>

<form name="form1" method="post" action="Search.php">

<table width="96%" border="1" cellspacing="1" cellpadding="1" align="center" b

ordercolor="#99CC00">

<tr> 

<td valign="top"> <font color="#FF0000"><b><span class="pt13">关键字</span

></b><span class="pt13">:</span></font> 

<input type="text" name="KeyWords" value="<?php echo $KeyWords?>" size="

30" maxlength="30">

<input type="submit" name="Submit" value="重新搜索">

</td>

<td valign="top"><font color="#FF0000"><b><span class="pt13">查找范围</spa

n></b><span class="pt13">:</span></font> 

<select name="SearchIn">

<option value="Content" <?php if ($SearchIn=="Content") echo "selected

";?>>网页正文</option>

<option value="Title" <?php if ($SearchIn=="Title") echo "selected

";?>>网页标题</option>

</select>

</td>

<td valign="top"> 

<div align="left"><font color="#FF0000"><b><span class="pt13">查找方式</

span></b><span class="pt13">:</span></font> 

<select name="Speed">

<option value="Fast" <?php if ($Speed=="Fast") echo "selected";?>>快

速查找</option>

<option value="Slow" <?php if ($Speed=="Slow") echo "selected";?>>更

深查找</option>

</select>

</div>

</td>

</tr>

</table>

</form>

<?php

if($SearchIn=="Title") $SQL="SELECT Id,Url,Title,Content FROM WebPageFindFast 

WHERE ";

else $SQL="SELECT Id,Url,Title,Content FROM WebPageFind$Speed WHERE ";

$KeyWords=str_replace(" ", " ", $KeyWords);

if($KeyWords=="") {echo "关键字不能为空"; exit();}

$tok = strtok($KeyWords," ");

$i=0;

$j=0;

while($tok) {

$i  ;

$tok = strtok(" ");

}

$key = strtok($KeyWords," ");

while($key) {

$j  ;

if(substr($key,0,1)!="-") {

$SQL=$SQL.$SearchIn." LIKE '%".$key."%' ";

$Words[]=$key;

}

else {

$SQL=$SQL.$SearchIn." NOT LIKE '%".substr($key,1)."%' ";

}

if($j<$i) $SQL.=" AND ";

$key = strtok(" ");

}

if($CurPos!="") $SQL.=" AND Id>=$CurPos ";

$SQL.=" LIMIT 100";

//echo "/$SQL=".$SQL."<br>";

mysql_connect("localhost","root","mypassword");

$result=mysql_db_query("Spider",$SQL);

$RowCount=mysql_num_rows($result);

$FindCount=0;

?>

<table border=0 align=center width="96%">

<tr> 

<th nowrap width="41%"> 

<div align="left" class="pt12">共找到关键字为 <font color=red> 

<?php echo $KeyWords?>

</font> 的网页共 <font color=red> 

<?php echo $RowCount;?>

</font> 个</div>

</th>

<td nowrap>

</td>

</tr>

<tr bgcolor="#FF0000"> 

<th nowrap colspan="2" height="3"></th>

</tr>

<?php while($row= mysql_fetch_array($result)){ 

$Pos=$row[0];

$FindCount  ;

if($FindCount>20) break;?>

<tr> 

<td nowrap colspan="2"> 

<?php echo $FindCount;?>

<a href="<?php echo $row[1]?>" target=_black> 

<?php if($row[2]!="") echo $row[2];

else echo substr($row[3],0,64);

?>

</a></td>

</tr>

<tr> 

<td colspan="2" ><span class="pt13">摘要:</span> 

<?php 

if($SearchIn=="Title") {

$ZhaiYao=substr($row[3],0,1024);

}

else{

if($Speed=="Fast") $ZhaiYao=$row[3];

else{

$RowLen=strlen($row[3]);

if ($RowLen<1024) {

$ZhaiYao=$row[3];

}

else { 

$CutPos=0;

$PosWord1=strpos($row[3],$Words[0]);

if($PosWord1-512<0) $ZhaiYao=substr($row[3],0,1024);

else {

for($i=24;$i<500;$i  ){ //避免将中文字符从半个字处截断,选择从英文处截断

if(ord(substr($row[3],$PosWord1-$i,1))<128) {$CutPos=$i;break;}

}

$ZhaiYao=substr($row[3],$PosWord1-$CutPos,1024);

}

} 

}

for($i=0;$i<count($Words);$i  ){

$ZhaiYao=str_replace($Words[$i],"<font color=red>".$Words[$i]."</font>", $ZhaiY

ao);

}

}

echo $ZhaiYao;

?>

</td>

</tr>

<tr> 

<td colspan="2" align="right"><a href="One.php?num=<?php echo $row[0]?>" tar

get=_black> 

<font color="#0033FF" class="pt12">本地镜像</font></a></td>

</tr>

<tr bgcolor="#999933"> 

<td nowrap colspan="2" height="1"></td>

</tr>

<?php } ?>

<?php if($RowCount>20){ ?>

<tr> 

<td align="right" colspan="2" height="10">

<form name="form2" method="post" action="Search.php">

<input type="hidden" name="KeyWords" value="<?php echo $KeyWords;?>">

<input type="hidden" name="SearchIn" value="<?php echo $SearchIn;?>">

<input type="hidden" name="Speed" value="<?php echo $Speed;?>">

<input type="hidden" name="CurPos" value="<?php echo $Pos;?>">

<input type="submit" name="Submit" value="下20个网页">

</form> 

</td>

</tr>

<?php } ?>

</table>

One.php用于从本地镜像中显示一个找到的网页。由于网页的原始信息已经在WebPageLocal中存储,所以 只需简单的读出,发给用户。



<?php

 mysql_connect("localhost","root","mypassword");

 $sql="select Url,Content from WebPageLocal where ";

 if($num!="") $sql=$sql."Id=$num";

 else exit();

 $result=mysql_db_query("Spider",$sql);

 $mt=mysql_fetch_row($result);

 echo $mt[1];

?>



Java+MySQL校园宿舍管理系统的详细解读与实现 本文还有配套的精品资源,点击获取 简介:本文详细解析了一个基于Java和MySQL的校园宿舍管理系统,强调其在提升学生生活质量和优化校园管理效率方面的重要性。系统利用Java的跨平台性和面向对象特性,配合MySQL数据库高效管理大量数据,实现了包括用户管理、宿舍分配、维修管理等功能在内的综合信息管理平台。同时提供了系统架构、前端技术栈以及功能模块的详细介绍,是学习和实践Ja... 阅读详情

相关推荐

pw2021_203040014:探索PHP编程世界

PHP是Hypertext Preprocessor的缩写,最初在1994年由Rasmus Lerdorf创建。它被设计为一种嵌入到HTML中的脚本语言,使开发者能够轻松创建动态内容的网站。PHP代码通过PHP解析器执行,然后输出到网页上,浏览器无法看到PHP代码,只能看到其生成的HTML内容。PHP的语法类似于C语言和Perl语言,使其易于学习和使用。它被广泛用于开发网站和Web应用程序。

weixin_30336531的博客 609

跨平台文件搜索工具

#!/usr/bin/envpython #-*-coding:utf-8-*- fromTkinterimport* importtkMessageBox importtkFileDialog importos importfnmatch fromScrolledTextimportScrolledText deffunc(): st...

weixin_34092455的博客 265

智能车数字图像处理算法入门及C语言实现

智能车图像的最最基本入门算法介绍及C语言实现,二值化 - 特征识别 - 补线 - 中心巡线 - 偏差曲率计算。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 5112

Java Mysql 中 text 字段类型无法搜索 解决方案

Java Mysql中text字段类型无法搜索 解决方案 最近做的一个项目,项目中设置content字段类型为text,后来通过模糊搜索content LIKE '%' + #{content} + '%'的时候发现这附近一直报错,原因是text无法搜索。至于原因嘛可以自行百度,还有字段最好不要设置为text。 解决方式: 改为 content like concat('%', #{content} ,'%') concat()函数的作用是拼接字符串 我是时生,一个正在努力的小白。欢迎

qq_41883461的博客 905

GD32F303实战:用定时器4触发ADC2+DMA,实现10ms精准采样1024点的完整流程

本文详细介绍了在GD32F303微控制器上使用Timer4触发ADC2配合DMA传输,实现10ms精准采样1024点的完整方案。从硬件架构设计、时钟树配置到定时器参数计算,提供了完整的工程实现流程和常见问题排查方法,适用于工业传感器监测等高实时性场景。

weixin_29194693的博客 433

EMC测试案例分析——晶振对辐射发射的影响

本文分析了某产品350MHz辐射发射超标问题,发现源头是50MHz晶振的7次谐波通过连接器泄漏。主要原因是:1)防水非导电垫圈形成屏蔽缝隙;2)晶振下方地平面不完整且信号线穿过;3)晶振离接口过近。改进措施包括:完善晶振下方地平面、增大晶振与接口距离、使用导电密封圈等。最终辐射降低10dB以上达标。文章总结了晶振EMC设计要点:保持地平面完整、远离接口、外壳接地、合理布局滤波电路等,并强调防水与屏蔽的协调统一。

u012526819的博客 669

java搜索引擎mysql_用Java MySQL PHP轻松构建跨平台的搜索引擎

此搜索引擎适于在一个中等规模的局域网中使用,由于找到的网页存在数据库中,不仅可以索静态的HTML页面,可以搜索php、asp等动态页面。对于一个拥有5万个网页的系统(使用PII-400作为服务器),搜索响应时间在2-10秒左右,完全可以满足要求,由于Java、MySQL、PHP都是跨平台的软件,所以此搜索引擎不仅可以工作在Windows服务器上,而且也可以工作在Linux等其他系统中。一、建立搜索...

weixin_42119866的博客 248

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

Mysql介绍

PHP 在开发 Web 站点或一些管理系统时,需要对大量的数据进行保存,虽然 XML 文件或者文本文件也可以作为数据的载体,但不易进行管理和对大量数据的存储,所以在项目开发时,数据库就显得非常重要。 PHP 可以连接的数据库种类较多,其中 MySQL 数据库与其兼容较好,在 PHP 数据库开发中被广泛地应用。 MySQL 是什么 MySQL 是一款安全、跨平台、高效的,并与 PHP、Java 等主流编程语言紧密结合的数据库系统。该数据库系统是由瑞典的 MySQL AB 公司开发、发布并支持,由 MySQL

Parado_Z的博客 5497

SolidWorks草图绘制实战:如何用图片参考快速搞定智能小车底板设计

本文详细介绍了在SolidWorks中利用图片参考进行草图绘制的实战方法,以智能小车底板设计为例,帮助设计师快速将概念转化为精准三维模型。通过插入、对齐参考图片并高效描图,结合参数化约束与尺寸驱动,大幅提升设计效率和准确性,尤其适合新手入门与老手优化工作流。

rust6ferris的博客 219

Bellhop水声信道模型的仿真

Bellhop是一种基于射线追踪的水声信道模型,广泛用于预测水下环境中的声压场。它通过模拟声波在水中的传播路径,计算声场分布,适用于复杂的水下通信场景。

yt94832的博客 1315

MySQL简介及用法

学习过程中要不断总结自己的经验和体会,也要乐于分享,可以通过博客、社区或者参与讨论来和他人交流学习。

karia177的博客 2895

微信终于支持“多设备同时在线”?我用 NAS + Docker 搭了一个云端微信系统,多端共享24小时在线

通过Docker 容器,将微信运行在云端并通过浏览器访问,实现多设备共享同一微信会话 📱。本文详细介绍完整部署流程、docker-compose 配置及资源控制方案,让微信变成“可访问的云桌面应用” ✨

XiaoqiangClub的博客 878

Mysql入门教程第一讲:什么是MySQL?

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件...

congs1002的博客 170

1篇2章1节:在 Mac 上安装 Python,从环境检查到工具配置的完整指南

Python 是当今最流行的高级编程语言之一,广泛应用于数据分析、人工智能、自动化脚本和 Web 开发。虽然 macOS 曾自带 Python,但从 macOS 12.3 开始,系统不再默认提供可直接使用的版本,因此需要手动安装。本文将详细讲解如何在 Mac 上安装最新版本的 Python,如何验证安装是否成功,以及如何配置 IDLE 和 Python Launcher 等工具,为日常开发和学习打下坚实基础。即便你是完全的新手,也能按步骤完成环境搭建。

MD Code 850

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

基于PHP的校园综合服务管理平台的设计与实现(源码+定制+开发)基于WEB的校园一体化小助手 校园一体化小助手系统开发 PHP+MySQL 实现课程提醒 + 事务代办 + 校内信息服务平台

资深Java开发专家阿龙,优快云特邀作者/博客专家,拥有10W+粉丝和技术社区优质创作者身份。专注提供计算机毕业设计全流程服务,涵盖SpringBoot、Vue等主流技术栈的完整开发方案。服务内容包括系统设计、代码实现、论文辅导、答辩模拟等8大核心环节,特别提供腾讯会议1v1代码讲解和终身售后保障。擅长构建校园综合服务平台,采用PHP+MySQL+B/S架构实现公告发布、二手交易等多元功能,通过严格测试确保系统稳定性。所有项目均附赠源码及操作演示视频,

程序员阿龙的博客 1118

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

轻松搞定MySQL安装与配置,让数据库管理不再复杂

最新接入DeepSeek-V3模型,点击下载最新版本InsCode AI IDE 标题:轻松搞定MySQL安装与配置,让数据库管理不再复杂 在现代软件开发中,数据库的管理和配置是不可或缺的一环。无论是构建一个简单的个人博客,还是开发一个复杂的大型企业系统,MySQL作为最受欢迎的关系型数据库之一,始终是开发者们的重要选择。然而,对于许多编程新手或非技术背景的用户来说,MySQL的安装、配置和管理可...

BronzeDragon44的博客 750

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

9个基于Java的搜索引擎框架

转自:http://www.codeceo.com/article/8-java-search-engine.html 在这个信息相当繁杂的互联网时代,我们已经学会了如何利用搜索引擎这个强大的利器来找寻目标信息,比如你会在Google上搜索情人节如何讨女朋友欢心,你也会在百度上寻找正规的整容医疗机构(尽管有很大一部分广告骗子)。那么如果在你自己开发的网站系统中需要能让用户搜索一些重要的信

lotus 5730

MySQL概述

MySQL是一种开源的关系型数据库管理系统,由瑞典MySQL AB公司开发,现在由Oracle公司维护。MySQL支持多个操作系统,包括LinuxWindows、macOS等。它是一种客户端/服务器模式的数据库,提供高效、可靠、稳定的数据存储和管理服务。MySQL是目前最流行的开源关系型数据库之一,被广泛应用于Web应用程序、企业应用程序和移动应用程序等领域。

bajzkxjs的博客 1485

MySQL印象

MySQL 特点 下面总结了一下 MySQL 具备的特点。 (1) 功能强大 MySQL 中提供了多种数据库存储引擎,各引擎各有所长,适用于不同的应用场合,用户可以选择最合适的引擎以得到最高性能,可以处理每天访问量超过数亿的高强度的搜索 Web 站点。MySQL5 支持事务、视图、存储过程、触发器等。 (2) 支持跨平台 MySQL 支持至少 20 种以上的开发平台,包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。这使得在任何平台下编写的程序都可以进行

qzm112的博客 973

php+vue+mysql+Laravel大型体育场管理系统nodejs-计算机毕业设计

在当今社会,随着人们对健康生活方式的追求和体育活动的普及,体育场地的有效管理变得尤为重要。为此,大型体育场管理系统的开发应运而生,旨在提供一个综合性的解决方案,以支持体育场地的高效管理。该系统利用了最新的技术框架,包括采用安卓客户端、think PHP服务端以及MySQL数据库技术,构建了一个强大的平台来满足用户和管理者的需求。

QQ511008285的博客 845

MySQL

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 在本教程中,会让大家快速掌握 MySQL 的基本知识,并轻松使用 MySQL 数据库。 什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库...

木晓的博客 484

php+vue+mysql+Laravel基于微信小程序的智能停车场预约与计费系统nodejs-计算机毕业设计

随着技术的不断发展,数据库从只能处理数据表格,到现在能够处理大量数据,MySQL数据库属于关系类型数据库,在安装的时候很方便,可以为其添加索引从而更快的查询出数据。数据库还有多种版本[9],能够在不同的操作系统中使用数据库。能够在不同的平台部署。

QQ_511008285的博客 662

MySQL安装使用学习教程,mysql数据库入门的不二之选

MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。 一、什么是数据库 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。 所以,现在我们使用关系型数据库管理系统(RDBMS)来存.

assdfgdfgjhtdo的博客 925

MySQL 安装配置(完整教程)

MySQL 是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司旗下产品。

野生派蒙的博客 4万+

php+vue+mysql+Laravel的校园共享厨房系统-校园共享厨房管理平台nodejs-计算机毕业设计

该系统采用PHP和think PHP技术开发后端,Vue.js开发前端,数据库使用MySQL,实现了校园内厨房资源的高效管理和使用。校园共享厨房系统主要包括用户端和管理员端两大部分。用户端功能涵盖:首页信息展示,用户注册登录,共享厨房资源查看,菜品推荐,个人信息管理等;管理员端则包含:系统管理设置,用户和资源管理,内容发布和更新等。

QQ_511008285的博客 1642
上一篇: 使用Java 输出/输出流读写数据
下一篇: 在J2EE上部署Web服务(Web Services)(1)
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值