【问题标题】:How to add delay between two echos in PHP? [duplicate]如何在 PHP 中的两个回声之间添加延迟? [复制]
【发布时间】:2019-09-22 07:56:44
【问题描述】:

我正在尝试在每个回显之间添加 5 秒的延迟,以允许用户查看状态。

我的代码

add_action( 'gform_pre_submission_8', 'pre_submission_handlerr' );

function pre_submission_handlerr( $form ) {

$current_user = wp_get_current_user();
global $wpdb; 


$checkip = $_POST['input_8'];

echo "IP Requested: . $checkip";

$result = $wpdb->get_var("SELECT EXISTS(SELECT * from wp_gf_entry_meta WHERE meta_value like '$checkip');"); 

  if ( $result == 1) {
  $_POST['input_7'] = 'Approved';
  sleep(5);
  echo "Status: Found";
  sleep(5);

 }

if ( $result == 0) {
$_POST['input_7'] = 'Not Approved';
echo "Status: Not Found";
}
   }

但是,我看到延迟实际上是在开始时,并且没有我想要的延迟(在两个回声之间)

WordPress 中的 PHP 代码段(重力形式)

任何反馈将不胜感激

谢谢! 娜塔莉

【问题讨论】:

  • 你可以使用 flush() 和你的 sleep() stackoverflow.com/a/19085197/11274409
  • 直接输出所有内容并让 Javascript 在 5 秒后执行某些操作可能是一个更好的主意。这样您就不会打开连接。
  • 警告:您对SQL Injections 持开放态度,应该真正使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何类型的输入,尤其是来自客户端的输入。即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data
  • 这是一个最好用 javascript 解决的问题。
  • Javascript 的另一个优点是它在用户的浏览器中进行计时,因此计时更加可靠。

标签: php


【解决方案1】:

这样做可能不是最好的主意。应该有其他方式可以让你的脚本异步,我猜在你的客户端使用Promises

但是,这可能会帮助您这样做:

add_action('gform_pre_submission_8', 'pre_submission_handlerr');

function preSubmissionHandlerr($form)
{
    $current_user = wp_get_current_user();
    global $wpdb;
    $checkip = $_POST['input_8'];
    echo "IP Requested: . $checkip";

    $result = $wpdb->get_var("SELECT EXISTS(SELECT * from wp_gf_entry_meta WHERE meta_value like '$checkip');");

    if ($result == 1) {
        $_POST['input_7'] = 'Approved';
        flush();
        sleep(5);
        flush();
        echo "Status: Found";
        flush();
        sleep(5);

    }

    if ($result == 0) {
        $_POST['input_7'] = 'Not Approved';
        echo "Status: Not Found";
    }
}

如果您愿意,也可以使用ob_implicit_flush();,这也可能有效,可能一次或多次:

add_action('gform_pre_submission_8', 'pre_submission_handlerr');

function preSubmissionHandlerr($form)
{
    $current_user = wp_get_current_user();
    global $wpdb;
    $checkip = $_POST['input_8'];
    echo "IP Requested: . $checkip";

    $result = $wpdb->get_var("SELECT EXISTS(SELECT * from wp_gf_entry_meta WHERE meta_value like '$checkip');");

    if ($result == 1) {
        ob_implicit_flush(true);
        $_POST['input_7'] = 'Approved';
        sleep(5);
        ob_implicit_flush(false);

        ob_implicit_flush(true);
        echo "Status: Found";
        sleep(5);
        ob_implicit_flush(false);

    }

    if ($result == 0) {
        $_POST['input_7'] = 'Not Approved';
        echo "Status: Not Found";
    }
}

【讨论】:

  • 谢谢艾玛。我尝试了代码,但似乎有延迟,但输出在最后快速显示并消失状态找到后的睡眠(5)肯定不起作用
猜你喜欢
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 2022-12-02
  • 2020-10-15
相关资源
最近更新 更多