我使用 php 和 jquery 创建了 MYSQL 数据库的即时搜索。搜索功能正常,直到我删除一些关键字搜索词并再次开始搜索。一旦用户删除搜索词,搜索结果将不再按预期返回。一旦发生这种情况,如果我刷新页面,我会从浏览器收到“未收到数据”消息,并且该网站在一分钟左右的时间内不会再次上线。为了明白我的意思,您可以访问 www.partsearch.club .. 可以使用的一些关键字是“decora Connector wet bx tek tk”。如果您继续添加和删除搜索词,您就会明白我的意思。这是我的代码
index.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Instant Search Tutorial</title>
</head>
<body>
<script type="text/javascript" src="js/jquery.js"></script>
<br />
<br />
<br />
<br />
<br />
<br />
<center><input type="text" id="search" placeholder="Search..." size="50"><br />
</br>
<form><input type=button value="Refresh" onClick="history.go()"></form> </center><br />
<div id="searchresults"></div>
<script type="text/javascript" src="js/search.js"></script>
</body>
</html>
搜索.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Instant Search Tutorial</title>
</head>
<body>
<?php
$username = "xxxx";
$password = "xxxxx";
$hostname = "localhost";
mysql_connect($hostname, $username, $password);
mysql_select_db("wesco");
$searchArray = explode(" ", $_POST['searchterm']);
$query = "";
foreach($searchArray as $val) {
$search = mysql_real_escape_string(trim($val));
if (!empty($query)) {
$query = $query . " AND "; // or AND, depends on what you want
}
$query = $query . "`keywords` LIKE '%$search%'";
}
if (!empty($query)) {
$find_parts = mysql_query("SELECT * FROM `parts` WHERE $query");
}
while($row = mysql_fetch_assoc($find_parts))
{
$name = $row['name'];
echo "<center>$name</center><br />";
}
?>
</body>
</html>
搜索.js
$('#search').keyup(function()
{
var searchterm = $('#search').val();
if(searchterm!='')
{
$.post('search.php',{searchterm:searchterm},
function(data)
{
$('#searchresults').html(data);
});
}
else
{
$('#searchresults').html('');
}
});
最佳答案
您是否使用任何防火墙,或者在 apache 前面使用 varnish 或反向代理?您是否在 apache 设置中的任何位置对请求量设置了速率限制?我尝试通过执行多个自动完成请求来使服务器重载,并最终被阻止,但是在同一时刻,我从另一个 IP 上的另一个盒子进行尝试,并得到了正确的答案:
curl -X GET -I http://www.partsearch.club/
HTTP/1.1 200 OK
Date: Sat, 06 Feb 2016 01:42:05 GMT
Server: Apache/2.4.16
X-Powered-By: PHP/5.4.45
Transfer-Encoding: chunked
Content-Type: text/html
所以这表明服务器并没有对每个人都宕机,而是我被阻止了几秒钟,可能是由于 Apache 或服务器中可能有的任何 Ddos 保护。我建议尝试使用 nginx 或 litespeed 作为网络服务器,以检查问题是否出在 Apache 或其他地方。
关于php 即时搜索崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35236293/