0

我目前正在研究使用网络前端编辑文章的锁定/解锁功能。作为在编辑、关闭浏览器或离开页面后解锁文章的可靠技术,我开发了以下概念:

  1. 访问编辑页面时锁定文章
  2. 立即向解锁操作发送 AJAX 请求而不超时

解锁操作具有以下代码。在取消 ajax 请求之前,它应该什么都不做。

ignore_user_abort(true);
set_time_limit(0);

while (!connection_aborted()) {

    usleep(100000);
}

// do database operations to unlock the article

但是在 ajax 请求被 ie 取消之后。离开页面,它永远不会离开while循环。我也试过这个来测试一个中止的连接:

while (connection_status() === CONNECTION_NORMAL)

但结果相同,它永远不会离开循环。

4

1 回答 1

0

引用自 PHP 手册

在尝试向客户端发送信息之前,PHP 不会检测到用户已中止连接。简单地使用 echo 语句并不能保证发送信息,请参见 flush()。

因此,在您的 while 循环中,您应该向客户端发送虚拟数据:

ignore_user_abort(true);
set_time_limit(0);

while (!connection_aborted()) {
    echo "null"; @flush(); @ob_flush();
    usleep(100000);
}

// do database operations to unlock the article
于 2012-09-17T12:54:47.307 回答