编程语言
首页 > 编程语言> > PHP会话文件死锁

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