首页 > 解决方案 > 为什么这个 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>

我已经尝试了很多东西,但仍然没有结果。

标签: phpload

解决方案


这似乎是一个无限循环:

        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 永远不会改变!也许还有更多问题,但这是我迄今为止发现的问题。


推荐阅读