Maison  >  Article  >  développement back-end  >  Pourquoi mes requêtes AJAX se bloquent-elles en PHP ?

Pourquoi mes requêtes AJAX se bloquent-elles en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 16:59:30222parcourir

Why Do My AJAX Requests Block Each Other in PHP?

Requêtes AJAX simultanées se bloquant les unes les autres

Dans certaines situations, les requêtes AJAX peuvent ne pas s'exécuter simultanément, provoquant un comportement inattendu. Ce problème a été soulevé lorsqu'un utilisateur a rencontré un problème avec deux requêtes AJAX simultanées conçues pour afficher la progression lors de l'exportation de données vers un fichier XSLX. La première requête déclenche un long script PHP et la deuxième requête vérifie les mises à jour de progression à intervalles réguliers.

Après enquête, il a été découvert que la deuxième requête AJAX attendait la fin de la première avant de s'exécuter. Ce comportement est attribué au blocage de session en PHP.

Blocage de session en PHP

Par défaut, PHP utilise des fichiers pour stocker les données de session. Lorsqu'une session est démarrée (à l'aide de la fonction session_start()), PHP ouvre le fichier de session en écriture et le verrouille pour garantir un accès exclusif. Ce mécanisme de verrouillage empêche les requêtes concurrentes d'accéder simultanément au fichier. En conséquence, la deuxième requête AJAX a dû attendre que la première termine et déverrouille le fichier de session avant de pouvoir s'exécuter.

Solution

La solution à ce problème Le problème est de désactiver le stockage de session basé sur fichier par défaut de PHP ou de fermer explicitement le fichier de session après y avoir écrit, en libérant le verrou.

Pour désactiver le stockage de session basé sur fichier, ajoutez la ligne suivante à votre php.ini file :

session.save_path =

Pour fermer explicitement le fichier de session, utilisez la fonction session_write_close() :

<code class="php"><?php
    session_start();

    $_SESSION['foo'] = 'bar'; // Write data to the session

    session_write_close(); // Close the session file

    echo $_SESSION['foo']; // You can still read from the session.
?></code>

En implémentant ces solutions, vous pouvez vous assurer que la deuxième requête AJAX s'exécutera simultanément avec le premier, vous permettant de suivre les progrès sans délai.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn