为了生成一个CSV文件,我们使用Guzzle来发出HTTP请求;我们使用的另一个组件是$_SESSION变量,用于存储有关生成不同文件的状态信息。
这种方法的主要问题是PHP阻塞了所有其他使用$_SESSION变量的请求。我们知道我们可以用一个叫做session_write_close()的函数来克服这个“问题”;
但是,我们仍然需要能够更新信息并将其存储在$_SESSION变量中,并且我们还应该能够在站点的其他部分使用$_SESSION信息;因此,应该“同步”这些信息。
发布于 2016-03-24 19:18:43
PHP会话的实现假定会话数据是:
因此,例如,假设您实现了一个不实现锁定的会话处理程序,并且发生了以下一系列事件。
这就是为什么PHP的默认会话处理程序以及任何其他值其salt的会话处理程序在给定请求的持续时间内锁定每个会话的原因。
考虑到您需要在长时间运行的请求结束时写入数据,并且有多个并行运行,您可能根本不应该对这些数据使用会话,我建议使用数据库和事务。
发布于 2016-03-24 18:51:00
遗憾的是,为了确保请求不被阻塞,session_write_close正是您需要使用的。我的建议是,在开始生成CSV之前,在脚本开始时获取和设置所需的所有会话信息。然后调用session_write_close并继续创建CSV文件。
发布于 2016-03-24 19:00:50
您的问题是,您的请求花费的时间比典型的请求要长得多。原因是需要时间从脚本执行HTTP请求。这将导致阻塞会话文件的初始问题。
我可以看到两种解决你的问题的方法:
https://stackoverflow.com/questions/36207783
复制相似问题