在为某人修复网站时,我遇到了以下问题:
为了处理一些数据,它调用exec("/usr/bin/php/path/to/file.php input.dat")
,而file.php被调用的
包含 include("config.php")
,后者又包含对 session_start()
的调用。
出现的问题是等待flock("/tmp/sess_XXXXXX")
的死锁。父脚本锁定 session 文件,然后 exec
的脚本尝试继续同一 session ,再次锁定该文件,但在等待它时陷入僵局。
我尝试将以下内容放在 exec
脚本的最开头,但无济于事:
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()
)
关于php session 文件死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6554426/