web-dev-qa-db-fra.com

Comment puis-je corriger l'erreur de permission lorsque j'appelle session_start ()?

quand j'ai téléchargé le script sur le serveur, j'ai eu cette erreur

Avertissement: inconnu: open (/ tmp/sess_58f54ee6a828f04116c2ed97664497b2, O_RDWR) a échoué: autorisation refusée (13) dans Unknown sur la ligne 0

Avertissement: Inconnu: Échec d'écriture des données de session (fichiers). Vérifiez que le paramètre actuel de session.save_path est correct (/ tmp) dans Unknown sur la ligne 0.

l'erreur est apparue lorsque j'ai appelé session_start();, bien que je règle l'autorisation du dossier/tmp sur 777.

21
Waseem Abu Senjer

Changer le chemin de session où vous pouvez écrire des données ou contacter l'administrateur du serveur à propos du problème/tmp

http://php.net/manual/en/function.session-save-path.php

25
Tadas Šubonis

vous devrez changer votre directive session.save_path php.ini

Vous pouvez le faire en utilisant session_save_path

9
German Rumm

Si vous avez un accès SSH, voici comment corriger l'autorisation et la propriété

Sudo chown -R NAME_OF_USER /tmp

Remplacez NAME_OF_USER par l'utilisateur sous lequel tourne php. Vous pouvez le trouver en mettant simplement ces lignes dans un fichier php:

$processUser = posix_getpwuid(posix_geteuid());
print $processUser['name'];
exit;
6
pixeline

De plus, vous pouvez utiliser ini_set('session.save_path', '/dir/here'); en supposant que vous avez accès à cette fonction. Les autres moyens proposés sont valables.

3
Norm

Je me rends compte que c’est un vieux message, mais j’ai juste rencontré ce problème et trouvé une solution facile.

Pour moi, le problème se posait avec l'un de mes sites Web déployés localement. Je n'avais pas essayé d'accéder aux sites Web à l'aide d'autres navigateurs, mais cela se produisait à chaque fois que j'essayais d'accéder à ce site via Chrome. J'ai décidé d'aller dans les outils de développement de Chrome, sous l'onglet Application - et de cliquer sur "Effacer le stockage". Voilà - tout fonctionne à nouveau comme par magie. 

J'espère que ceci aide quelqu'un d'autre!

2
Whipenstein

Je viens d'avoir exactement le même problème avec l'un de mes scripts PHP et j'étais comme ce que j'ai cassé, car cela fonctionnait parfaitement la veille et je le lance à partir de ma propre machine locale Puppy Linux donc ce n'est même pas un hôte ou quoi que ce soit.

La seule chose que je faisais auparavant consistait à faire en sorte que Java fonctionne dans le navigateur Web. Certains ont donc réussi à faire fonctionner Java mais en rompant PHP - oups!

Quoi qu'il en soit, je me souvenais qu'en essayant de faire fonctionner Java, j'avais supprimé le contenu du dossier/tmp pour supprimer tout ce qui pouvait causer un problème (en fait, avec Java, j'utilisais l'ancien plugin oij avec le nouveau Firefox )

Pour résoudre ce problème, j'ai ouvert le gestionnaire de fichiers Rox, je suis allé dans le dossier/et un clic droit sur le tmp folder -> Mount Point 'tmp' and clicked properties.

J'ai remarqué que les autorisations étaient définies en tant que Propriétaire - Lecture, Écriture, Exec, mais Groupe et Monde n'étaient définis qu'en Lecture et Exec et non en écriture. Je coche dans Write pour Group et World et maintenant PHP fonctionne à nouveau correctement.

Je ne sais pas à quel moment les autorisations pour tmp doivent avoir changé, mais pour que PHP puisse les utiliser, il doit être configuré pour disposer d'autorisations en écriture.

2
user1784974

J'ai eu ce problème dans la situation suivante:

  1. J'ai rempli des vars de session avec PHP
  2. Pendant que la session était toujours active, je suis passé de PHP 5.4 à 5.3 sur mon hôte.
  3. Le rechargement de la page a généré l’erreur décrite ci-dessus.
  4. Réinitialisez la version PHP à 5.4.
  5. Utilisé session_unset (); et session_destroy (); pour nettoyer la session en cours.
  6. La version PHP est revenue à la version 5.3.
  7. Maintenant cela fonctionne à nouveau.

Conclusion: pour une raison non pertinente, j'ai dû changer ma version de PHP et lors de la commutation avec des sessions actives, celles-ci sont corrompues.

2
Erwin Okken

Vérifiez que vous ne rencontrez pas de problèmes d'espace disque. Si toutes les autorisations sont correctes (et que 777 devraient le faire pour vous), vous risquez toujours d'obtenir cette erreur (pour certaines versions de PHP et Apache) s'il n'y a pas assez d'espace pour écrire dans le fichier. disque.

2
Haz

J'ai le même problème d'autorisation, mais sur/var/lib/php/session /.

Pour résoudre ce problème, je supprime le fichier et redémarre php-fpm.

rm -rf /var/lib/php/session/sess_p930fh0ejjkeeiaes3l4395q96
Sudo service php5.6-fpm restart

Maintenant tout fonctionne bien.

2
oussaka

Ajouter la ligne suivante

ini_set('session.save_path', getcwd() . '/tmp');

avant 

session_start(); 
1
Ozan Olmez

Si :

  • session.gc_probability> 0
  • les fichiers de session sont créés par différents utilisateurs (par exemple root et Apache).
  • les fichiers de session sont tous stockés au même endroit (par exemple,/var/lib/php/session)

Ensuite, vous verrez cette erreur lorsque par exemple. le processus Apache PHP tente d'exécuter le garbage collection sur les fichiers de session.

Correctifs:

  1. Reconfigurez PHP pour que gc_probability soit égal à 0 et qu'une tâche cron supprime les anciens fichiers/stale.
  2. Demandez à chaque utilisateur de sauvegarder ses fichiers de session dans un ou plusieurs endroits distincts (session_save_path (), etc.).
1
David Goodwin

si vous utilisez le serveur Web Apache, la solution rapide consiste à accéder à votre ligne de commande et à taper:

open /etc/Apache2/

ensuite, dans la fenêtre ouverte, ouvrez le fichier appelé httpd.conf et recherchez User ou Group, modifiez ces 2 lignes en:

User  _www
Group _www

Cela est dû au fait que vous souhaitez que votre serveur obtienne une autorisation sur vos répertoires système. En particulier, vous souhaitez modifier la variable User ou vous pouvez laisser votre Group en staff ou admin.

1
Hassan Azimi

J'avais initialement ce problème en raison de la possession par nginx de l'emplacement/tmp et de l'exécution de php-fpm sous l'utilisateur et le groupe 'Apache' en raison du fichier www.conf. J'ai échangé l'utilisateur/groupe dans ce fichier, puis tout a bien fonctionné. Vous voudrez peut-être vérifier <?php echo exec('whoami'); ?> pour vérifier.

0
Mark

Utilisation de PHP 5.6 J'avais déjà utilisé session_save_path () pour pointer vers un répertoire de la structure du domaine. Cela a bien fonctionné jusqu'à ce que je passe à PHP 7.0, date à laquelle j'ai reçu l'erreur notée. A PHP.net J'ai trouvé plusieurs commentaires indiquant que l'attribution d'un chemin direct ne fonctionnait pas toujours, j'ai donc utilisé leur suggestion.

session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));

a fonctionné parfaitement. N'oubliez pas de remplacer /../session par l'emplacement relatif de votre répertoire de session réel.

0
JBH

Pour moi, le problème semble être un bogue WHM! J'ai de nombreux domaines ajoutés et tout fonctionne bien, mais avec un sous-domaine, cette erreur est générée.

Chose étrange, mais si j'utilise l'URL complète avec le domaine principal, cela fonctionne bien:

main-domain.com/my.subdomain.com

Si j'utilise le sous-domaine directement, cela donne "Permission denied (13)":

mon.sousdomaine.com

La chose est que tous les domaines addon root est:

/ home/xx /

Mais pour mon sous-domaine, je ne sais pas pourquoi, la racine est: (je ne devrais pas avoir accès à ce répertoire)

/

Donc, nous essayons vraiment d’atteindre:/tmp au lieu de/home/xx/tmp

Qui existe aussi mais ne dispose pas des autorisations appropriées

Pour clarifier ceci sont des exemples de tout le chemin:

/ home/mon-compte/public_html

/ home/mon-compte/tmp

/ tmp

La solution que j'ai utilisée était la suivante: 

session_save_path ('/ home/mon-compte/tmp');

session_start ();

0
ebelendez