2010-05-25 3 views
2

Je cours php5, cependant dès que j'appelle session_start() le script se bloque et rien ne se passe. Est-ce que quelqu'un d'autre rencontre ce problème, ou est-ce que je fais quelque chose de mal? J'utilise session_start() sur index.php et, pour une raison quelconque, cela échouera. Pas d'avertissement, pas d'erreur, pas d'avis, même après précédant error_reporting (E_ALL) et ini_set ('display_errors', TRUE) avant session_start() puis-je voir quelque chose, il meurt tout simplement.J'appelle session_start() le script se bloque et rien ne se passe

+0

Il meurt ou il se bloque? Je veux dire, la page continue-t-elle à charger pour toujours? Définissez-vous un PHPSESSID? Les fichiers de session sont-ils créés sur le serveur? – nico

+0

Je suppose que votre script est censé avoir une sortie, n'est-ce pas? ("Oui, le grille-pain est branché.") Avez-vous vérifié vos journaux? –

Répondre

3

Il y a beaucoup de raisons à cela, voici quelques-uns d'entre eux:

A. Le fichier de session pourrait être ouvert exclusivement. Lorsque le verrou de fichier n'est pas libéré correctement pour une raison quelconque, il entraîne l'arrêt indéfini de session_start() lors des futures exécutions de script. Contournement: utilisez session_set_save_handler() et assurez-vous que la fonction write utilise fopen ($ file, 'w') au lieu de fopen ($ file, 'x')

B. N'utilisez jamais ce qui suit dans votre fichier php.ini (fichier entropique à "/ dev/random"), cela entraînera votre session_start() pour accrocher:

<?php 
ini_set("session.entropy_file", "/dev/random"); 
ini_set("session.entropy_length", "512"); 
?> 

C. session_start() a besoin d'un répertoire pour écrire.

Vous pouvez faire fonctionner Apache plus PHP dans un compte utilisateur normal. Apache devra alors bien entendu écouter un autre port que 80 (par exemple, 8080).

Assurez-vous de faire les choses suivantes: - créer un PREFIX répertoire temporaire/tmp - mis php.ini dans PREFIX/lib - php.ini modifier et définir session.save_path dans le répertoire que vous venez de créer

Sinon, vos scripts sembleront se bloquer sur session_start().

+1

Le premier point est un problème encore plus important avec les processus php à exécution longue, par exemple le gestionnaire d'événements envoyé par le serveur. J'ai eu un moment pour découvrir ce qui n'allait pas - mod_security et apparmor ont été les premiers suspects. – Olli

Questions connexes