J'utilise Symfony 3.1.5 sur une pile Ubuntu 14.04, PHP 7.1 et Apache 2.4.23 gérée par Vagrant 1.8.6/VirtualBox 5.1.6. J'essaie d'utiliser un contrôleur simple que j'ai créé pour afficher une réponse sur mon interface client:
<?php
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\BrowserKit\Response;
class LandingController {
/**
* @Route("/", name="homepage")
*/
public function showAction(){
return new Response('This is the landing page!');
}
}
Lorsque je tente d'accéder à mon interface Symfony via /app_dev.php
, je vois:
Warning: SessionHandler::read(): Session data file is not created by your uid 500 Internal Server Error - ContextErrorException
Mon journal Apache se lit comme suit:
CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::read(): Session data file is not created by your uid" at /var/www/conan/var/cache/dev/classes.php line 366
Le journal de développement Symfony se lit comme suit:
==> /var/www/conan/var/logs/dev.log <== [2016-10-11 14:23:04] request.INFO: Matched route "{route}". {"route":"homepage","route_parameters":{"_controller":"AppBundle\\Controller\\LandingController::showAction","_route":"homepage"},"request_uri":"http://conan.dev/app_dev.php/","method":"GET"} [] [2016-10-11 14:23:04] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Warning: SessionHandler::read(): Session data file is not created by your uid" at /var/www/conan/var/cache/dev/classes.php line 366 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\ContextErrorException(code: 0): Warning: SessionHandler::read(): Session data file is not created by your uid at /var/www/conan/var/cache/dev/classes.php:366)"} []
Considérant qu'il semble s'agir d'un problème lié à la session, j'ai consulté la documentation de Symfony pour Session Management . Il est dit:
Les sessions Symfony sont incompatibles avec la directive php.ini session.auto_start = 1 Cette directive doit être désactivée dans php.ini, dans les directives du serveur Web ou dans le fichier .htaccess.
session.auto_start = 0
dans mon php.ini
et le fichier appartient à l'utilisateur et au groupe root
:
$ ls -lta /etc/php/7.1/fpm/php.ini -rw-r--r-- 1 root root 70584 Sep 30 07:29 /etc/php/7.1/fpm/php.ini
J'ai essayé de créer un .htaccess
(que j'ai placé dans ma DocumentRoot
) conformément aux instructions de la documentation de Symfony, mais l'erreur persiste.
J'ai cherché plusieurs solutions et questions pour trouver une solution, mais je n'ai rien trouvé. Des idées ce qui cause ceci?
Éditer config/config.yml
et remplacer save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
par save_path: /var/lib/php/sessions
a corrigé l'erreur.
Si vous utilisez un éditeur/IDE qui convertit automatiquement les espaces en onglets, veillez à désactiver cette fonctionnalité avant d'enregistrer vos modifications. Sinon, une erreur 'ne contenant pas de YAML valide' peut se produire.
J'ai eu le même problème. La solution qui a fonctionné pour moi est de changer var/sessions
propriétaire en www-data:www-data
(même utilisateur/groupe pour les sous-processus php-fpm):
Sudo chown -R www-data:www-data var/sessions/
AVOID changer la configuration de produit pour les problèmes qui ne se produisent que dans l'environnement de développement
Avait le même problème lorsque vous utilisez Vagrant (PHP-FPM 7 + Nginx) avec un dossier de synchronisation (/ vagrant ~ default)
Résolu vient de mettre
session:
save_path: '/tmp'
surconfig_dev.ymlinsideframeworkentry
Il suffit de choisir un emplacement où Webserver et PHP peuvent lire/écrire sans problèmes de permission.
Si Magento 2 génère cet avertissement,
Juste supprimer session déjà existante dans le dossier var/session
et son corrigé .
J'ai eu un problème similaire et effacer le cache de mon navigateur et les données stockées a résolu le problème.
Sur chrome et opéra, vous devriez ce qui suit:
Developer tools > Application > Clear Storage > Clear Site Data
Dans mon cas, * la suppression des cookies du navigateur a résolu le problème . Je n'ai fait aucune des étapes mentionnées ci-dessus et j'ai essayé de modifier les autorisations et tout ce qui n'était pas non, ce n'était pas le problème. J'ai rencontré un problème sur magento.
J'utilise PIMCORE, basé sur Symfony 3. Pour résoudre ce problème, je viens de vider le cache du navigateur.
J'espère que cela aidera.
Le chemin de session ne peut pas être écrit car l'utilisateur Web et le propriétaire du contenu du dossier de sessions sont différents et ne le sont donc pas.
La solution consiste à définir votre/var ou/var/sessions/property sur l'utilisateur Web.
apache chown: apache/var/-R * Ou: chown www-data: www-data/var/-R *
La réponse la mieux notée n'est pas vraiment la meilleure réponse ici.
Si vous utilisez NFS pour le dossier synchronisé, l'UID et le GID de tous les fichiers qu'il contient seront les UID et GID de l'utilisateur Host exécutant Vagrant et pourraient ne pas correspondre à l'UID et au GID de l'utilisateur vagrant
sur l'invité. Par exemple, j'ai:
-rw-r--r-- 1 501 dialout 5.1K Oct 29 15:14 Vagrantfile
501
est l'UID de mon utilisateur sur le Mac et il n'y a pas d'utilisateur correspondant sur l'invité. dialout
est le groupe sur l'invité qui correspond au groupe staff
qui est mon groupe principal sur Mac.
Bien que vous disposiez des autorisations pour lire et écrire tous les fichiers du dossier synchronisé, lorsque PHP vérifie l'UID du propriétaire du fichier de session, il ne correspond pas à l'utilisateur PHP en cours d'exécution en tant que, et il bloque le accès comme mesure de sécurité.
Vous pouvez utiliser le plugin vagrant-bindfs
pour contourner ce problème:
vagrant-bindfs
Un plugin Vagrant pour automatiser le montage de bindfs dans la VM. Cela vous permet de modifier le propriétaire, le groupe et les autorisations sur les fichiers et, par exemple, de contourner les problèmes d'autorisations de partage NFS.
Voici ce qui a fonctionné pour moi:
vagrant plugin install vagrant-bindfs
Dans votre Vagrantfile:
config.vm.synced_folder '.', '/vagrant', disabled: true
config.vm.synced_folder '.', '/vagrant-nfs', type: 'nfs'
config.bindfs.bind_folder '/vagrant-nfs', '/vagrant'
Exécuter vagrant reload
Et il fonctionne:
-rw-r--r-- 1 vagrant vagrant 5.1K Oct 29 15:45 Vagrantfile