Uncaught RedisException:session_write_close()

时间:2018-04-20 19:23:20

标签: php redis fpm phpredis

所以我有一个运行joomla的网站,我尝试从CMS管理信息中心设置session handlerredis。我在主页和我访问的网站的每个其他页面上收到以下错误。

Error: Failed to start application: Connection closed
Fatal error: Uncaught RedisException: Connection closed in /var/www/xxxx/libraries/joomla/session/handler/native.php:194 Stack trace: #0 /var/www/xxxx/libraries/joomla/session/handler/native.php(194): session_write_close() #1 [internal function]: JSessionHandlerNative->save() #2 {main} thrown in /var/www/clients/client3/web9/web/libraries/joomla/session/handler/native.php on line 194

我的服务器默认配置为php-fpm现在有趣的是,如果我将php-wrapper / module更改为与Fast-CGI一起运行( >从我的服务器控制面板)一切完美无缺

顺便说一句,我在Ubuntu上使用PHP-Redis作为客户端库,在LAMP设置中使用ISPConfig作为我的控制面板。

1 个答案:

答案 0 :(得分:0)

好的,所以经过大量的头发拉动,感谢上帝,我有这些惊人的goog-foo技能,这就是解决方案。

如果您正在使用ISPConfig 3并遇到同样的问题,请按照我的说法做,不要问为什么,没时间解释

在文件line 39的{​​{1}}上,您会找到以下模板标记。

/usr/local/ispconfig/server/conf/php_fpm_pool.conf.master

删除它!是的,你读得对,你必须删除那些人。 从管理面板保存更改后,转到

<tmpl_if name='custom_session_save_path' op='!=' value='y'> php_admin_value[session.save_path] = <tmpl_var name='document_root'>/tmp </tmpl_if> &gt; ISPConfig Admin Panel&gt; Sites&gt; Domain

并将该选项切换为已禁用并让其在服务器上更新,然后将该选项设置回PHP。并且...完全是fab-fpm的光荣redis。

好的,你可以问为什么,开玩笑的早些时候:D

根据this thread发生的事情是joomla(和许多其他CMS 一样)尝试在运行时将PHP-FPM更改为session.save_path / strong>根据CMS管理面板中的设置,但ISPConfig 3附带的“fpm-pool-template”试图从服务器控制面板中编辑该值,在此过程中它正在制作它redis无法在运行时更改/覆盖该值。

如上所述here

  

...无法覆盖使用php_admin_value设置的任何指令类型   通过.htaccess或ini_set()。

现在,安全吗? ..用指令删除这些标签。

删除上述行是完全安全的,这些是为用户编写的,以便根据他们的需要进一步修改here。此外,使用的函数有点过于严格(恕我直言),使用较小的独裁php可以实现相同的效果。