gpt4 book ai didi

PHP:所有脚本中的 ignore_user_abort(true)

转载 作者:可可西里 更新时间:2023-10-31 22:44:19 25 4
gpt4 key购买 nike

我有一个在服务器端使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com