php - 为什么这个 PHP 页面加载这么久?
问题描述
我对这段代码有疑问。如果我输入一些不在数据库中的东西,比如ASDF,这个代码会加载很多,加载后会显示如下错误:
致命错误:第 48 行 C:\wamp64\www\Home\index.php 中的最大执行时间超过 120 秒
为什么是这样?
这是我的 PHP 代码:
include "../checkLogin.php";
include "../resources/connectToServer.php";
if (isset($_GET['login_confirm'])) $login_confirm = $_GET['login_confirm'];
if (!isset($_GET['login_confirm']) OR !$login_confirm == "confirmed") {
header("Location: ../error404.php?error=406&error_name=Login%20Confirm%20Failed&eBAT=$login_confirm");
exit();
}
?>
<?php
?>
<html>
<head>
<link rel="icon" href="favico.ico" />
<meta name="theme-color" content="#00FFFF">
</head>
<form method="get">
<input type="hidden" name="login_confirm" value="confirmed" />
<?php
if (isset($_GET['q'])) {
echo "<input type=\"text\" name=\"q\" placeholder=\"Search...\" value=\"" . $_GET['q'] . "\" />";
} else {
echo "<input type=\"text\" name=\"q\" placeholder=\"Search...\" />";
}
echo "<input type=\"submit\" value=\"Search\" />";
if (isset($_GET['q'])) {
//get number of rows in articles
$query = $conn->query("SELECT * FROM articles");
$rows = mysqli_num_rows($query);
//perform a SQL query
$i = 0;
$blacklist = array();
$blacklistwo = array();
$correct_rows = array();
$stmt = $conn->prepare("SELECT title,id FROM articles ORDER BY RAND() LIMIT 1");
if (!$stmt) {
echo $conn->error;
}
while ($i++ < $rows) {
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_array(MYSQLI_ASSOC);
check:
$obj = similar_text($row['title'], $_GET['q'], $perc);
if ($perc >= 55 && !isset($blacklist[$row['title']])) {
$blacklist[$row['title']] = "blacklisted";
$correct_rows[] = $row['title'];
} elseif ($perc < 54 && !isset($blacklisttwo[$row['title']])) {
$blacklistwo[$row['title']] = "Blacklisted";
goto check;
}
if ($perc < 54 && !isset($blacklisttwo[$row['title']])) goto check;
if (count($blacklist) + count($blacklistwo) == $rows) break; else goto check;
}
echo "Search Results: " . count($blacklist) . ".";
echo "<br>";
echo "<br>";
$oa = -1;
foreach ($correct_rows as $key => $value) {
echo $value . "<br><br>";
}
unset($correct_rows);
unset($blacklistwo);
unset($blacklist);
}
?>
</form>
</html>
我已经尝试了很多东西,但仍然没有结果。
解决方案
这似乎是一个无限循环:
check:
if ($perc >= 55 && !isset($blacklist[$row['title']])) {
$blacklist[$row['title']] = "blacklisted";
$correct_rows[] = $row['title'];
} elseif ($perc < 54 && !isset($blacklisttwo[$row['title']])) {
$blacklistwo[$row['title']] = "Blacklisted";
goto check;
}
if ($perc < 54 && !isset($blacklisttwo[$row['title']])) goto check;
因为你有 goto 并且变量 $perc 永远不会改变!也许还有更多问题,但这是我迄今为止发现的问题。
推荐阅读
- python - 根据某些条件从不同的 pyspark 列中提取所有匹配项
- python - 在远程 python 3 解释器周围使用包装器时,如何在 Pycharm 中禁用 python 2.7 代码兼容性错误消息?
- biztalk - 定位 BounceAllBizTalkHosts 时出现 BTDF 错误(多服务器部署)
- python - 有没有办法在作为表格的模板变量中执行 html?
- ssh - 在 Google Cloud vm 中编辑 fstab 后 ssh 连接被拒绝
- android - Android Intent 数据返回 null
- selenium - 如何在 Robot Framework 中使用 Webdriver 管理器?
- android - 如何定义地理编码器返回语言?
- apache-spark - 用于元数据和块位置的 Spark 内存缓存
- spring - 如何通过外部 tomcat 中的战争部署设置 Spring Boot 管理服务器?