Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Si le visiteur deconnecte...

12 réponses
Avatar
Jean-Francois Ortolo
... Que devient le script PHP lancé ?

Plus précisément: Supposons qu'un utilisateur ait lancé un script PHP
en écrivant son url complète dans son navigateur puis tapé sur "Enter",
et qu'il ait cliqué tout de suite après sur la touche "Arrêter" de son
navigateur, que se passe-t-il ?

Le script PHP continuera-t-il a s'exécuter, ou sera-t-il arrêté
automatiquement dans son exécution par le serveur Apache ?

Je précise que ce script PHP n'a pas de redirections par headers.

Merci beaucoup beaucoup de vos réponses.

C'est une question de sécurité, pour une mise à jour de BDD à
distance, faut pas que ça coince, quoi...

Jean Francois Ortolo

--
Mon site donne des Statistiques
et des Historiques Graphiques gratuits
sur les Courses de Chevaux du PMU.
http://www.ortolojf-courses.com

2 réponses

1 2
Avatar
Pierre Maurette
Re,

J'aurais préféré que vous ne zappiez pas le bout de code que vous allez
ensuite critiquer, même à juste titre. Mais peu importe.


Il n'y avait aucune malice. On est pas sur fufe, ici !
En me relisant, c'est plus agressif que souhaité. Je voulais simplement

dire qu'effacer justement ce que vous allez commenter était un peu
balot ;-)


avec évidement pas un commentaire à côté.
Apparté: un commentaire ici se justifierai peut-être dans un tuto, mais

AMHA pas dans la vraie vie.


Le commentaire "attention, par défaut php prend en compte les actions
users / pertes de connexions détectées et ça nous fout le bordel dans
tel module parce que le SGBD ne gère pas les transactions" me parait
plus que nécessaire pour justifier la présence d'un appel à
ignore_user_abort(). Comme ça le jour où on a des transactions, on
dégage la verrue.
Ah, OK, j'en conviens. Ce style de commentaire est *indispensable*, et

je n'en mets pas sufffisamment, même que c'en est maladif chez moi. Je
n'arrive pas à admettre malgrés des heures et des heures de perdues,
des parcours sur Google que je refais en permanence, que l'évidence de
maintenant ne le sera plus dans un mois (ou même demain).

[...]
A moi pas, selon la documentation c'est un "int". Manque de bol (de bool
?) c'est un booléen. Alors, la valeur "2", je peux la recevoir ou pas ?
Dans le doute (fonction tierce, ancienne, etc.):

$SW1_OPEN = (IS_OPEN($SW1) != FALSE);
ou
$SW1_OPEN = !!IS_OPEN($SW1);
(c'est bon en PHP ?)


En plus sur la même page de documentation on me brouille les pistes en
me mettant un lien vers les "connection state" avec justement des
valeurs entières, de là à faire la confusion entre les deux modules...

doc parle bien de int, mais précise qu'il s'agit de l'état précédent et
le paramètre est lui défioni comme booléen. En tous cas au niveau
sémantique, c'est un booléen (au sens mal choisi, OK).
Dommage qu'il faille lire 5 lignes de blabla au lieu de mettre bool

comme type de retour sachant qu'il y a bien bool comme paramètre...
Le bool n'a été introduit que tardivement en PHP, non ? La

compatibilité serait alors la raison de ce flou ?

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette



Avatar
Pierre Maurette
Pierre Maurette wrote:

- Acquisition de l'état précédent avec nommage signifiant (pas facile ici,
effectivement):
$WAS_IGNORE = ! ignore_user_abort();
ou
$WAS_ABORT = ignore_user_abort();

- Modification de l'état:
(quelque part, peut être dans un fichier à inclure)
$SET_IGNORE = FALSE;
$SET_ABORT = TRUE;
(à ce niveau de mon apprentissage, je sais que les enum n'existent pas en
PHP, seulement dans MySQL, et je ne connais pas la bonne façon de définir
des constantes symboliques)

ignore_user_abort($SET_IGNORE);



Je m'esbaudis

Seulement il me semble que vous faites une erreur, d'après ce qu'a dit
précédemment Monsieur John Gallet: Dans votre cas, pour que la fonction
ignore_user_abort($SET_IGNORE) fasse en sorte d'ignorer la déconnexion de
l'utilisateur, il me semble que la bonne valeur pour cette constante, serait:
$SET_IGNORE = TRUE; ( et non pas FALSE. )

Heureux d'avoir votre opinion là-dessus.
Erreur de ma part effectivement, shame on me, si j'en crois cette page:

http://www.phpdig.net/ref/rn10re182.html
"If the user_abort_setting argument is set to FALSE, client aborts (and
some network errors) will cause the script to stop running. If
user_abort_setting is set to TRUE, the script continues running until
an error occurs, the script finishes execution, or the script times
out"

Le manual ne précise pas vraiment: "setting est un booléen, qui active
ou désactive l'interruption". Et c'est tout. Quand je cherche une
erreur de logique, et que la fonction n'est pas immédiate à tester, je
lis que ça active l'interruption à TRUE et la désactive à FALSE.
Efectivement, un peu plus bas, dans les "User Contributed Notes", on
lit:
"The function name is the authoritative one: a value of TRUE will
ignore the user's abort"
ce qui est simplement logique.

Je ne vois pas trop où était le problème initial.

--
Pour répondre directement: enlever une lettre sur deux
wwaannaaddoooo -> wanadoo

Pierre Maurette


1 2