即使session.gc_probability设置为0,Symfony也会在Ubuntu 14.04上调用PHP垃圾收集器

Cha*_*ase 44 php garbage-collection symfony symfony-2.5

由于某些原因标题状态我的Symfony 2.5应用程序调用php垃圾收集器,即使我的所有php.ini文件都有:

session.gc_probability = 0
Run Code Online (Sandbox Code Playgroud)

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

我得到的错误信息:

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 
Run Code Online (Sandbox Code Playgroud)

来自PHPINFO():

Directive               Local Value   Master Value
session.gc_divisor      1000          1000
session.gc_maxlifetime  86400         86400
session.gc_probability  0             0
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*ase 70

我发现它,我猜最新版本的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
Run Code Online (Sandbox Code Playgroud)

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

以前的2.x版本

要更改此项,请将以下内容添加到您的 config.yml

framework:
    session:
        gc_probability: 0
Run Code Online (Sandbox Code Playgroud)

然后清除开发缓存

php app/console cache:clear
Run Code Online (Sandbox Code Playgroud)

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

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


sou*_*ake 5

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

# app/config/config.yml
framework:
    session:
        handler_id: session.handler.native_file
        save_path: '%kernel.root_dir%/sessions'
Run Code Online (Sandbox Code Playgroud)