Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le script utilisateur PHP foreach semble faire bloquer apache

Ce comportement ressemble à un verrouillage de session. Le fonctionnement par défaut des sessions PHP consiste à verrouiller la session (pour empêcher deux processus d'écrire dans l'objet de session). Cela convient normalement aux scripts PHP typiques de courte durée, mais peut vous mordre lorsque vous avez quelque chose qui dure longtemps.

Si votre application n'utilise pas du tout de sessions, vous devez désactiver session.auto_start dans php.ini ou .htaccess :http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start (Si vous ne le voyez pas là, ou s'il est déjà désactivé, mais que vous utilisez une sorte de framework, il se peut que le framework démarre la session pour vous ; si c'est le cas, il est plus simple de passer à la solution suivante que d'essayer de se battre le cadre.)

Si vous utilisez la session sur certaines pages, mais pas sur ce processus de longue durée, la solution consiste à fermer la session au début de votre script, avec session_write_close() :

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

session_write_close();

$i = 1;
....

Encore une fois, l'avertissement du framework :si le framework démarre une session pour vous, alors mettez session_write_close(); après avoir inclus les fichiers du framework, pas avant ! (Vous avez mentionné que c'était le cas dans vos commentaires, c'est pourquoi je l'ai mis après les lignes requises.)

Si votre processus de longue durée doit utiliser la session, mais en lecture seule, ce qui précède fonctionne toujours. Voir https://stackoverflow.com/a/14409902/841830 (Comme le montre cette réponse, si vous devez écrire à la session à la fin du processus de longue durée, c'est également possible.)

(P.S. Cela a déjà été répondu dans les commentaires, mais j'ai accepté l'offre de Wrikken de la publier comme réponse. Oui, les rumeurs sont vraies :je ferai n'importe quoi pour quelques représentants...)