45

由于某种原因,我的 Symfony 2.5 应用程序正在调用 php 垃圾收集器,即使我的所有 php.ini 文件都有:

session.gc_probability = 0

有谁知道如何防止这种情况发生?

我得到的错误消息:

Notice: SessionHandler::gc(): ps_files_cleanup_dir: opendir(/var/lib/php5)
failed: Permission denied (13) in /<path-to-my-site>/var/cache/dev/classes.php line 432 

从 PHPINFO():

Directive               Local Value   Master Value
session.gc_divisor      1000          1000
session.gc_maxlifetime  86400         86400
session.gc_probability  0             0

我知道我可以只授予 www-data 用户对该/var/lib/php5文件夹的权限,或者将其更改为用户已经可以访问的session.save_path某个位置,但我想知道为什么这个过程在应该被禁用时甚至被调用。www-data

4

2 回答 2

72

我找到了,我猜最新版本的 symfony 在使用app_dev.php. Symfony FrameworkBundle 正在设置session.gc_probability = 1.

从 Symfony 3 开始

但是,一些操作系统自己处理会话并将 session.gc_probability 变量设置为 0 以停止 PHP 进行垃圾收集。这就是为什么 Symfony 现在将此值覆盖为 1。

如果您希望使用 php.ini 中设置的原始值,请添加以下配置:

# config.yml
framework:
    session:
        gc_probability: null

https://symfony.com/doc/current/components/http_foundation/session_configuration.html#configuring-garbage-collection

以前的 2.x 版本

要更改这一点,请将以下内容添加到您的config.yml

framework:
    session:
        gc_probability: 0

然后清空dev缓存

php app/console cache:clear

这是它显示gc_probability默认为1. 为什么他们不只是从 php.ini 设置中读取我不确定。

http://symfony.com/doc/2.5/reference/configuration/framework.html#gc-probability

于 2014-08-22T20:13:40.170 回答
6

您可以手动设置会话的路径。请参阅会话目录上的 Symfony 文档

# app/config/config.yml
framework:
    session:
        handler_id: session.handler.native_file
        save_path: '%kernel.root_dir%/sessions'
于 2016-09-06T10:34:00.137 回答