在 PHP 7.0 中使用各种 PHP 框架 session 驱动程序时存在错误。我最初在使用 CodeIgniter 数据库驱动程序时遇到了这个问题,并认为这是一个 CodeIgniter 问题,但后来在多个 session 驱动程序和多个框架上遇到了这个问题。在这一点上,我已经安全地得出结论, session 驱动程序的类型是无关紧要的——应用程序似乎是随机崩溃的,日志(我已经尝试过 Apache 和 php-fpm + nginx)填满了以下内容:
PHP Fatal error: session_start(): Failed to initialize storage module: user (path: [whatever I have in my php.ini path])
我使用的驱动程序不使用 php.ini 中设置的值,无论我是否在 php.ini 中将 session.save_handler 设置为文件、redis 等,也不管我设置的路径(Redis 服务器如果 redis ,启用文件的完全可写文件夹)错误发生。除非在框架外的 php 文件中调用 native “session_start()”,否则不应命中此处的路径。此外,在框架外调用“session_start()”也能正常工作……很明显 PHP 可以访问该路径。就好像在某个时候, session 驱动程序变成了框架驱动程序和 php.ini 中设置的任何内容的混合体。错误消息总是有 session.save_handler 的“用户”,所以很明显这不是从 php.ini 中提取的……但路径是。为什么会这样?这是在您体验过之前很难描述的问题之一……并且很难重现,因为即使是数百个 session ,一切似乎都运行良好(直到它突然停止工作)。重新启动 Apache 也不能解决问题 - 这里有很多问题,我最终只是重新启动机器以避免停机。显然,PHP 7 机器现在将退出负载均衡器轮换……但我希望现在能解决问题。
我在自己编译的 PHP 7.0 RC5、RC6 和 RC8 以及 Ubuntu 15.10 Wily (7.0.0-2+deb.sury.org~wily+1) 上的最新 Ondřej Surý PPA 上遇到了这个问题.我在 CodeIgniter 和 Symfony 上遇到过这个问题,无论框架中使用的驱动程序类型(文件、数据库、redis)或 php.ini 中设置的 session.save_handler(同样,这应该是无关紧要的),我都遇到过这个问题在这里,但只是认为应该提及)。我一直在尝试组合并在野外扔东西,这个问题每次都会发生(有时需要 12 多个小时,具体取决于网站的流量)。
感谢您提供的任何帮助!在这一点上,我乐于接受建议并愿意尝试任何事情。
最佳答案
当 session 处理程序的 open()
函数没有返回 bool 值 TRUE 时会发生此错误,这显然意味着某种失败。
可能是无法连接到数据库、无法打开文件、目录不存在等 - 这取决于 session 处理程序实际使用的内容。
关于PHP 7 用户 session 问题 - 无法初始化存储模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125849/