PHP会话文件死锁
作者:互联网
在为某人修复网站时,我遇到了以下问题:
为了处理某些数据,它调用exec(“ /usr/bin/php /path/to/file.php input.dat”),而被调用的file.php包含include(“ config.php”) ,进而包含对session_start()的调用.
发生的问题是等待flock(“ / tmp / sess_XXXXXX”)的死锁.父脚本会锁定会话文件,然后执行的脚本会尝试继续同一会话,再次锁定该文件,但会死锁等待它.
我试过将以下内容放在执行脚本的开头,但无济于事:
session_save_path("/tmp/alt_session");
session_id("NOTHING");
显然,从php脚本中调用exec(“ php …”)显然有些荒谬,但这是另一天的争论,在这里我不能改变.另外,尽管我可以自由更改要在exec下运行的文件,但更改config.php会带来其他一些我希望避免的麻烦.
还有其他选择,还是我错过了重要的事情?
解决方法:
There is a php bug that I believe relates to your problem.
简而言之,解决方案是在file_get_contents()之前运行session_write_close()(在您的情况下为exec()).
标签:deadlock,linux,php 来源: https://codeday.me/bug/20191208/2089809.html