Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同时调用同一文件时php阻塞_Php_Locking - Fatal编程技术网

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

同时调用同一文件时php阻塞,php,locking,Php,Locking,我有一些很奇怪的问题 我用PHP编写了一个能够下载文件的文件管理器,它工作得很好。 整个脚本构建为一个大文件 现在,当下载一个大文件时,我不能同时使用脚本来浏览文件夹内容。它除了继续加载外什么也不做。下载完成后,一切又恢复正常 是否存在阻止PHP同时解析同一文件的情况?因为不管我下载与否,其他脚本的工作都很有魅力 非常感谢您的帮助或文档链接:)您是否使用会话 如果是,那可能就是问题所在。默认会话处理程序使用在执行启用会话的代码时必须锁定的文件。实际上,这意味着每个用户都按顺序执行PHP文件。要解

我有一些很奇怪的问题

我用PHP编写了一个能够下载文件的文件管理器,它工作得很好。 整个脚本构建为一个大文件

现在,当下载一个大文件时,我不能同时使用脚本来浏览文件夹内容。它除了继续加载外什么也不做。下载完成后,一切又恢复正常

是否存在阻止PHP同时解析同一文件的情况?因为不管我下载与否,其他脚本的工作都很有魅力

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

您是否使用会话

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

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


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

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

您是如何强制下载的?哇,我从来都不知道。。但这似乎是个问题,这听起来很合理。但是在发送内容之前,会话是关闭的,不是吗?我不能/不想为此使用DB——它是php-only.call session_write_close(),一旦使用完会话(即发送文件之前)。这将释放锁你如何推送文件?我怀疑你做了类似于:session_start();readfile($file\u路径);这可能是个问题汤姆·黑格:我实际上也想到了。我现在正在尝试。为什么这是个问题?事实上,在这种情况下,在推送文件之前关闭会话更好。