用户访问页面,PHP进行一些计算,将数据写入MysqL数据库等.
想象一下,用户访问PHP为用户创建帐户的页面.创建包括两部分:将注册数据插入“用户”表,并将此帐户的设置插入表“设置”.这是两个必须一个接一个地执行的SQL查询.如果用户在第一次查询后退出页面,则“设置”中不会插入任何值.
我怎么能避免这个问题?我想只需使用ignore_user_abort(true),对吗?
那么在每个PHP脚本的顶部调用ignore_user_abort(true)是不是很有用?我不知道它应该导致问题的任何情况.
在其他情况下,您可能希望确保用户不能提前中止,但与数据库无关.例如,如果更新数据库然后发送邮件,则不希望用户在邮件发出之前能够停止该过程.在这种情况下,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