web-dev-qa-db-fra.com

Symfony appelle le PHP garbage collector sur Ubuntu 14.04 même lorsque session.gc_probability est défini sur 0

En tant qu'état du titre pour une raison quelconque, mon application Symfony 2.5 appelle le garbage collector php même lorsque tous mes fichiers php.ini ont:

session.gc_probability = 0

Quelqu'un sait-il comment empêcher que cela se produise?

Message d'erreur im obtenant:

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 

DE PHPINFO ():

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

Je sais que je peux simplement donner la permission de l'utilisateur www-data au /var/lib/php5 dossier ou modifiez le session.save_path vers un endroit où le www-data l'utilisateur y a déjà accès mais je veux savoir pourquoi ce processus est même appelé alors qu'il devrait être désactivé.

44
Chase

Je l'ai trouvé, je suppose que la dernière version de symfony l'écrase par défaut lors de l'utilisation de app_dev.php. Symfony FrameworkBundle définit le session.gc_probability = 1.

Depuis Symfony 3

Cependant, certains systèmes d'exploitation gèrent leur propre session et définissent la variable session.gc_probability sur 0 pour arrêter PHP faisant le ramasse-miettes. C'est pourquoi Symfony écrase maintenant cette valeur à 1.

Si vous souhaitez utiliser la valeur d'origine définie dans votre php.ini, ajoutez la configuration suivante:

# config.yml
framework:
    session:
        gc_probability: null

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

Versions 2.x précédentes

Pour modifier cela, ajoutez ce qui suit à votre config.yml

framework:
    session:
        gc_probability: 0

Vider ensuite le cache de développement

php app/console cache:clear

C'est là qu'il montre le gc_probability par défaut à 1. Pourquoi ils ne se contentent pas de lire les paramètres php.ini, je ne suis pas sûr.

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

70
Chase

Vous pouvez définir manuellement le chemin des sessions. Voir Doc Symfony sur le répertoire des sessions .

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