php session 文件死锁

标签 php linux deadlock

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

为了处理一些数据,它调用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/

相关文章:

php - 如何从mysql中的2个数据库表中选择数据....?

javascript - 为什么我的联系表不起作用? loading.gif 卡住了,没有任何反应

linux - sudo apt upgrade 会更新我的微码吗?

C 编程在 Linux 中调用 "at command"

javascript - 如何读取本地 JSON 文件

php - 禁用的表单元素可以与启用的表单元素共享一列吗?

c++ - TerminateProcess 和死锁

sql - 恼人的 SQL 死锁

c++ - 调试重启守护进程

java - Java EE 应用程序中的线程死锁