我在 PHP 中编写了一个长脚本,如下所示:
ignore_user_abort(true);
set_time_limit(0);
即使我关闭页面,它也会在后台完美运行。我的问题是,在此脚本在后台完成运行之前,我无法打开其他 PHP 文件。我怎么解决这个问题?
我在 PHP 中编写了一个长脚本,如下所示:
ignore_user_abort(true);
set_time_limit(0);
即使我关闭页面,它也会在后台完美运行。我的问题是,在此脚本在后台完成运行之前,我无法打开其他 PHP 文件。我怎么解决这个问题?
当 PHP 脚本使用会话时,PHP 会锁定会话文件,直到脚本完成。尝试使用锁定会话的页面请求将被阻止,直到会话文件被释放。PHP 这样做是为了使会话保持一致的状态。引用 PHP 错误 #31464:
[2005-01-10 08:13 UTC] derick at php dot net
这确实根本不是一个错误,会话扩展需要锁定会话文件,以便并发更新不会损坏文件。这意味着所有使用相同会话文件的脚本都需要序列化。为了提高性能,您可以在完成读取/设置会话变量后立即使用 http://php.net/session_write_close,这将删除文件的锁定。
上面和这里描述的最简单的解决方法是:
session_start()
session_write_close()
正如评论中提到的,会话是问题 - 这是因为会话文件被锁定。
在长时间运行的脚本中使用session_write_close()
以解锁会话文件,但请注意,之后您不能$_SESSION
在该特定脚本中使用变量。