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.
但是,某些操作系统会执行自己的会话处理并将session.gc_probability变量设置为0以阻止PHP执行垃圾回收.这就是Symfony现在将此值覆盖为1的原因.
如果您希望使用php.ini中设置的原始值,请添加以下配置:
# config.yml
framework:
session:
gc_probability: null
Run Code Online (Sandbox Code Playgroud)
要更改此项,请将以下内容添加到您的 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
您可以手动设置会话的路径。请参见会话目录中的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)