长期运行的背景PHP脚本块其他PHP页面,直到它完成(Long running background

2019-07-04 07:55发布

我在PHP做了一个很长的脚本这样:

ignore_user_abort(true);
set_time_limit(0);

它完美地在后台运行,即使我关闭页面。 我的问题是,直到该脚本完成在后台运行,我不能打开其他PHP文件。 我怎么解决这个问题?

Answer 1:

当PHP脚本使用会话,PHP锁定了会议文件,直到脚本完成。 任何试图使用一个会话锁定一个页面请求被阻塞,直到会话文件被释放。 PHP做这使会话保持一致的状态。 从PHP的bug#31464报价 :

[2005-01-10 8点13 UTC]德里克在PHP点网

这的确不是一个错误可言,会话扩展需要锁定会话文件,以便并发更新不能损坏文件。 这意味着需要序列化使用同一个会话文件中的所有脚本。 为了提高性能,您可以使用http://php.net/session_write_close你读完/设置会话变量,这将删除的文件锁定,尽快。

如上所述以及最简单的解决方法在这里也就是:

  • 调用session_start()
  • 读/写任何会话变量
  • 调用session_write_close()
  • 做冗长的处理


Answer 2:

正如在评论中提到的,会话是问题 - 这是因为会话文件被锁定。

使用session_write_close()在你的长期运行的脚本来解锁会话文件,但请注意,您不能使用$_SESSION在那个特定的脚本变量之后。



文章来源: Long running background PHP script blocks other PHP pages until it is finished