【问题标题】:How to set PHP to wait till a task is done?如何设置 PHP 等待任务完成?
【发布时间】:2016-01-10 07:56:46
【问题描述】:

我有一个登录表单,每次刷新页面都会生成一个唯一密钥。数据库表包含一个标志字段。如果为 0,则用户未登录,1 表示已登录。因此,如果不刷新页面,如何每 5 秒检查一次数据库以查看是否设置了标志?

我尝试使用sleep(5),但它会阻止页面加载,或者它会休眠 5 秒然后加载页面。有没有办法做到这一点?

【问题讨论】:

  • 您可能必须使用 JavaScript 和 AJAX。
  • 这可以帮助你每隔 5 秒调用一次 ajax stackoverflow.com/questions/5687600/…
  • Ajax 请求是最简单的方式。编写另一个脚本来检查数据库并根据找到的值返回 true 或 false。顺便说一句,我知道这听起来很奇怪,但我会每 8 到 10 秒运行一次,以避免可能的请求冲突。
  • 你不希望 PHP 等待或休眠,PHP 有一个最长执行时间(默认 30 秒),正如每个人都告诉你的 - 使用 JS。

标签: php


【解决方案1】:

您需要有 2 个页面:

  1. 您的用户访问的页面(也是您在下面添加 jQuery 代码的页面)
  2. 读取您的数据库并打印出真/假的页面(在下面的示例中,我将其命名为“your_check_login_url.php”。)

第 1 页上的 jQuery 代码将读取第 2 页而不刷新第 1 页。然后您使用 Javascript 更新第 1 页所需的内容。

使用 jQuery:

<script>
var tid = setTimeout(checkLogin, 5000);
function checkLogin() {
    $.get( "your_check_login_url.php", function( data ) {
        alert(data.is_logged_in); // Replace with your own code
    });
    tid = setTimeout(checkLogin, 5000); // repeat myself
}
</script>

在 PHP 端返回一个值 JSON 或其他您的 Javascript 可以读取为真/假的值。

<?php
$logged_in = TRUE; //Replace with your PHP/MySQL code to check if log in is true
header('Content-Type: application/json');
echo json_encode(
    array('is_logged_in' => $logged_in)
);

【讨论】:

  • 你能添加一些关于如何从 MYSQL->PHP->JSON->jQuery 访问数据对象的提示吗?我对它的工作原理感到困惑。
  • @SamPro 基本上,您需要 2 页来执行此操作。用户看到的一个页面(添加 jQuery 代码的地方)和另一个从数据库中读取并打印出 true/false 的页面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多