PHP 会话文件死锁


php session file deadlock

在为某人修复网站时,我遇到了以下问题:

为了处理一些数据,它调用exec("/usr/bin/php /path/to/file.php input.dat"),而被调用的file.php包含一个include("config.php"),而又包含对session_start()的调用。

出现的问题是等待flock("/tmp/sess_XXXXXX")的死锁。父脚本锁定会话文件,然后exec脚本尝试继续相同的会话,再次锁定该文件,但在等待它时陷入僵局。

我尝试将以下内容放在exec脚本的最开头,但无济于事:

session_save_path("/tmp/alt_session");
session_id("NOTHING");

从 php 脚本中调用 exec("php ...") 显然有些荒谬,但这是另一天的争论,我不能在这里改变。此外,虽然我可以自由更改在 exec 下运行的文件,但更改config.php会产生一些我宁愿避免的其他麻烦。

还有其他选择,还是我错过了一些重要的东西?

我认为有一个

php 错误与您的问题有关。

简而言之,解决方案是在file_get_contents()之前运行session_write_close()(在您的情况下会exec()

(