【问题标题】:Why is this PHP Page loading so long?为什么这个 PHP 页面加载这么久?
【发布时间】:2019-10-20 08:46:53
【问题描述】:

我对这段代码有疑问。如果我输入诸如 ASDF 之类的数据库中没有的内容,则此代码将加载很多,加载后会显示如下错误:

致命错误:C:\wamp64\www\Home\index.php 第 48 行的最大执行时间超过 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>

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

【问题讨论】:

    标签: php load


    【解决方案1】:

    这似乎是一个无限循环:

            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 永远不会改变!也许还有一些问题,但这是我目前发现的问题。

    【讨论】:

    • 对不起,我确实修好了!但是感谢您的回复,我向上移动了一点检查,并添加了 `if(count($blacklist) + count(blacklistwo) == $rows) break;我仍然会接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2021-03-02
    • 2014-05-08
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多