php同时调用同一个文件时阻塞

时间:2009-07-23 20:43:43

标签: php locking

我有一些非常奇怪的问题。

我在PHP中编写了一个文件管理器,可以下载文件 - 工作正常。 整个脚本构建为一个大文件。

现在,在下载大文件时,我无法同时使用该脚本,例如浏览文件夹内容。它什么也没做,只是继续加载。下载完成后,一切都会再次运行。

是否存在阻止PHP同时解析同一文件的内容?因为其他脚本就像魅力一样,无论我是否正在下载。

帮助或链接到文档非常感谢:)

2 个答案:

答案 0 :(得分:4)

你使用会话吗?

如果是,那可能就是问题所在。默认会话处理程序使用在执行启用会话的代码时必须锁定的文件。实际上,这意味着每个用户按顺序执行PHP文件。要解决此问题,您必须使用使用DB的自定义会话处理程序。阅读this

编辑:我想指出,编写一个没有锁定的自定义会话处理程序可能很困难,并引入各种微妙的错误。如果您需要,请阅读更多关于此的文档!

编辑2:有时使用session_write_close()在不再需要时关闭会话就足够了(请参阅注释)。

答案 1 :(得分:1)

Daremon是正确的,但您不需要使用其他会话处理程序。如果在开始发送文件之前调用session_write_close(),会释放会话文件上的锁定,并且其他脚本应该能够继续。