Symfony在Ubuntu 14.04上调用PHP垃圾收集器,即使在会话时也是如此.Gc_probability设置为


Symfony calls the PHP garbage collector on Ubuntu 14.04 even when session.gc_probability is set to 0

由于某些原因,我的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用户已经访问的地方,但我想知道为什么这个进程甚至在应该被禁用时被调用。

我找到了,我猜symfony的最新版本在使用app_dev.php时默认覆盖了这一点。Symfony FrameworkBundle正在设置session.gc_probability = 1 .

Symfony 3

然而,一些操作系统自己处理会话并设置会话。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

这里显示了默认为1gc_probability。我不知道为什么他们不直接从php.ini设置中读取。

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

可以手动设置会话的路径。参见Symfony文档中的sessions目录。

# app/config/config.yml
framework:
    session:
        handler_id: session.handler.native_file
        save_path: '%kernel.root_dir%/sessions'