我在PHP中制作了一个长脚本:
ignore_user_abort(true);
set_time_limit(0);
即使我关闭页面,它也能在后台完美运行。我的问题是,在此脚本在后台运行之前,我无法打开其他PHP文件。我该如何解决这个问题?
答案 0 :(得分:21)
当PHP脚本使用会话时,PHP会锁定会话文件,直到脚本完成。尝试使用锁定会话的页面请求将被阻止,直到会话文件被释放。 PHP执行此操作以使会话保持一致状态。 Quote from PHP bug #31464:
[2005-01-10 08:13 UTC] derick at php dot net
这确实不是一个bug,会话扩展需要锁定 会话文件,以便并发更新不会破坏文件。 这意味着需要使用相同会话文件的所有脚本 序列化。为了提高性能,您可以使用 完成后http://php.net/session_write_close {$ 3}} 读取/设置会话变量,这将删除锁定 文件。
上述最简单的解决方法和here as well是:
session_start()
session_write_close()
答案 1 :(得分:6)
如评论中所述,会话是问题 - 这是因为会话文件被锁定。
在长时间运行的脚本中使用session_write_close()
来解锁会话文件,但请注意,之后您不能在该特定脚本中使用$_SESSION
变量。