- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个在服务器端使用 PHP 的网站。
用户访问页面,PHP 进行一些计算,将数据写入 MySQL 数据库等。
假设用户访问一个页面,PHP 会在该页面上为用户创建一个帐户。创建包括两部分:将注册数据插入到“users”表中,并将该帐户的设置插入到“settings”表中。这是两个必须依次执行的 SQL 查询。如果用户在第一次查询后退出页面,则没有任何值插入到“设置”中。
我怎样才能避免这个问题?我认为只需使用 ignore_user_abort(true),对吧?
那么在每个 PHP 脚本的顶部调用 ignore_user_abort(true) 不是很有用吗?我不知道它应该引起问题的任何情况。
最佳答案
对于您的具体示例,使用数据库事务(如 Ignacio 所述)将是更合适的方法。
在其他情况下,您可能希望确保用户不能提前中止,但这与数据库无关。例如,如果您更新数据库然后发送邮件,您不希望用户能够在邮件发出之前停止该过程。在这种情况下,ignore_user_abort
将是合适的。
但是请注意,由于客户端中止连接而导致的管道中断不会立即停止执行,只会在您下次尝试写入脚本输出时停止执行。这可以通过调用 echo
来实现。或 print
,甚至只是关闭 PHP 标记并在打开新标记之前插入一些空格 ( ... ?> <?php ...
)。因此,如果您将脚本的所有“操作”部分都放在页面顶部,那么在您尝试编写任何页面内容之前,您不必担心因损坏的管道而中断会影响您的应用程序逻辑。
当然,您无论如何都应该以这种方式将操作逻辑与页面内容分开。
来自 http://php.net/manual/en/function.ignore-user-abort.php#refsect1-function.ignore-user-abort-notes
PHP will not detect that the user has aborted the connection until an attempt is made to send information to the client. Simply using an echo statement does not guarantee that information is sent
关于PHP:所有脚本中的 ignore_user_abort(true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397116/
多的不说,直接上代码: 复制代码代码如下: ignore_user_abort(true); //设置客户端断开连接时是否中断脚本的执行 set_time_limit(
我有一个在服务器端使用 PHP 的网站。 用户访问页面,PHP 进行一些计算,将数据写入 MySQL 数据库等。 假设用户访问一个页面,PHP 会在该页面上为用户创建一个帐户。创建包括两部分:将注册数
我的设置与这里的人非常相似: PHP Background Processes 即一个很长的脚本,最多需要 10 分钟。但是,我需要在脚本运行时将调用脚本的人重定向回主页。换句话说,我需要这样的用户体
我制作了一个不应该向浏览器返回任何内容的脚本(没有任何回显、打印或带有空格的代码中断,例如 ?> ,并且使用 ignore_user_abort(true); 来避免这种情况,一旦浏览器窗口关闭
我使用日志打印机来测试 ignore_user_abort 是否有效,它确实有效。但是 echo 不想工作。只有在循环完成时 echo 才会起作用吗? 最佳答案 是的,也不是。 您需要担心三个输出缓
我正在编写一个内部服务,需要为一个长时间运行的进程访问 mod_perl2 实例。该作业是从 HTTP POST 触发的,mod_perl 处理程序将其拾取并完成工作。它可能需要很长时间,并准备好异步
我是一名优秀的程序员,十分优秀!