PHP usleep / sleep在输出缓冲区内

时间:2009-08-03 09:29:36

标签: php sleep output-buffering

我有一个包含这些文件的PHP应用程序:landing.php,redirect.php,ajax.php

landing.php 的页面调用中,我执行了一个javascript代码来捕获某些数据,然后向 ajax.php 发出一个AJAX POST,将其插入到DB中。最后php header()重定向到 redirect.php

目前上面的功能是使用输出缓冲,但是 header()执行得太快,以至于AJAX POST没有完成......我没有进行数据库查询。

我尝试在 header()之前使用 sleep() usleep(),但它们无效。由于我对输出缓冲不是很熟悉,请你提供一个好心的手吗?

谢谢。

<?php ob_start(); ?>

<scripts type="text/javascript">
var data = 'blah..blah..blah..';
ajaxPost('ajax.php', data);
</scripts>

<?php
sleep(2);    // <---- I want the script to sleep here and wait for the AJAX to finish
header('c.php)
ob_end_flush();
?>

1 个答案:

答案 0 :(得分:3)

如果我理解正确,那么您对Web应用程序的工作方式存在根本性的误解。

您的PHP脚本无法等待AJAX​​位执行,因为整个脚本首先在服务器上运行,然后将输出(AJAX调用的一部分)发送到浏览器。你必须重新考虑你这样做的方式。

例如,您可以让JavaScript首先进行AJAX调用,然后重定向浏览器。

编辑:好的,现在我已经考虑了一段时间,我可以看到当你没有使用输出缓冲时,这个可能的工作方式,如果浏览器执行了脚本一见到它(没有加载整个页面)。如果情况确实如此,那么您仍然依赖浏览器的时间,用户互联网连接的质量等等来保持同步。这显然是一件好事。

然而,唯一可行的方法是在你的标题调用之前将AJAX调用输出到浏览器 - 这是不可能的!需要在HTTP响应中的内容之前发送标头(这就是您首先使用输出缓冲的原因),因此要么您不输出JavaScript,要么标头调用将失败。所以我建议你重新考虑你的方法。