2010-05-30 3 views
7

J'ai un site qui a 2 pages, (home_page.php et action_page.php) Page d'action prend env. 2 minutes pour charger complètement (le serveur prend 2 minutes). Mais si l'utilisateur clique sur le lien de la page d'accueil alors que la page d'action est en cours de chargement, le navigateur ne va pas à la page d'accueil, jusqu'à ce que la page d'action soit complètement chargée. Même chose si la page d'accueil est ouverte dans un nouvel onglet.2 demandes php différentes en même temps par utilisateur

Tout d'abord, quelle est la raison de cela? (bowser? php? apache?) et comment puis-je éviter cela?

Merci

Répondre

10

Plus que probablement, il est parce qu'une session est verrouillée. PHP autorisera seulement une requête par session pour éviter les problèmes (écraser les données, etc.). Voir: session_write_close() ...

+0

Ok, je viens d'ajouter cette fonction en haut de la page d'action et maintenant il semble parfait. –

+0

résoudra-t-il également le problème des appels ajax? Si je fais 2 appels ajax à la même page, alors le deuxième appel ajax ne sera répondu qu'après avoir terminé le traitement. Cela se produit uniquement lorsque la session est activée. Lorsque je supprime une session de la page php, l'un ou l'autre des appels peut répondre en premier. Est-ce le même comportement particulier de la session php? –

+0

Eh bien, ce n'est pas un comportement "particulier", c'est très recherché. Il y a deux façons d'éviter le problème. Fermez votre session dès que vous en avez terminé, ou accélérez vos pages, même s'il y avait un verrou, cela ne durerait qu'une infime fraction de seconde (et ne sera donc pas remarqué) ... – ircmaxell

1

Si le chargement de la page dure 2 minutes, vous atteignez les limites de délai réseau d'un navigateur standard. C'est vraiment très long pour charger une page. Vous pouvez envisager de générer un processus distinct pour gérer le traitement long. Vous pouvez mettre le résultat dans une base de données, un fichier, etc. et utiliser l'interrogation pour vérifier si c'est fait. Lors de la génération d'un processus (exec()), assurez-vous d'utiliser nohup, background it (&) et de diriger la sortie d'erreur vers/dev/null, sinon il ne se déconnectera pas du processus web et du processus web l'attendra pour finir.

0

Regardez également vos paramètres de débogage si vous développez. J'ai ceci dans mon .htaccess:

php_flag xdebug.remote_enable on 
php_flag xdebug.remote_connect_back on 
php_flag xdebug.remote_autostart on 

Et cela crée le même comportement.

Questions connexes