J'ai des traitements assez longs à effectuer en PHP. J'aurais donc
souhaité renvoyer une page "OK" au client après avoir reçu ses données
et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il
attend ensuite la fermeture de la socket et finit en timeout.
Un header "Connection: close" ne change rien.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
frederic girard
Denis Labat wrote:
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
Une suggestion?
Merci. Exit() ??
Denis Labat wrote:
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc
souhaité renvoyer une page "OK" au client après avoir reçu ses données
et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il
attend ensuite la fermeture de la socket et finit en timeout.
Un header "Connection: close" ne change rien.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
Une suggestion?
Merci. Exit() ??
vv
"Denis Labat" a écrit dans le message de news:438d7b12$0$617$
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
Une suggestion?
Merci.
Hello,
Le serveur aura probablement envoyé le header HTTP/1.1, et le "Connection: close" est probablement ignoré car il manque "Content-Length". Tenter dans un premier temps de mettre également un header "Content-Length", et si ça ne fonctionne pas (ou si trop compliqué à déterminer en amont sans output buffering), de forcer une réponse HTTP/1.0 avec header('HTTP/1.0 200 OK');
Ceci dit, ça m'interesse de savoir si ça fonctionnera grâce à cela. Il me semble que vous devrez également instruire PHP de ne pas terminer le script suite à la fermeture de la connexion de la part du client (celle-ci sera détectée immédiatement sur certains systèmes, sur d'autres uniquement si le script retente d'écrire quelque chose).
-- vv
"Denis Labat" <jsp77hda9jb02kp@jetable.net> a écrit dans le message de
news:438d7b12$0$617$626a14ce@news.free.fr...
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc
souhaité renvoyer une page "OK" au client après avoir reçu ses données
et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il
attend ensuite la fermeture de la socket et finit en timeout.
Un header "Connection: close" ne change rien.
Une suggestion?
Merci.
Hello,
Le serveur aura probablement envoyé le header HTTP/1.1, et le "Connection:
close" est probablement ignoré car il manque "Content-Length".
Tenter dans un premier temps de mettre également un header "Content-Length",
et si ça ne fonctionne pas (ou si trop compliqué à déterminer en amont sans
output buffering), de forcer une réponse HTTP/1.0 avec
header('HTTP/1.0 200 OK');
Ceci dit, ça m'interesse de savoir si ça fonctionnera grâce à cela.
Il me semble que vous devrez également instruire PHP de ne pas terminer le
script suite à la fermeture de la connexion de la part du client (celle-ci
sera détectée immédiatement sur certains systèmes, sur d'autres uniquement
si le script retente d'écrire quelque chose).
"Denis Labat" a écrit dans le message de news:438d7b12$0$617$
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
Une suggestion?
Merci.
Hello,
Le serveur aura probablement envoyé le header HTTP/1.1, et le "Connection: close" est probablement ignoré car il manque "Content-Length". Tenter dans un premier temps de mettre également un header "Content-Length", et si ça ne fonctionne pas (ou si trop compliqué à déterminer en amont sans output buffering), de forcer une réponse HTTP/1.0 avec header('HTTP/1.0 200 OK');
Ceci dit, ça m'interesse de savoir si ça fonctionnera grâce à cela. Il me semble que vous devrez également instruire PHP de ne pas terminer le script suite à la fermeture de la connexion de la part du client (celle-ci sera détectée immédiatement sur certains systèmes, sur d'autres uniquement si le script retente d'écrire quelque chose).
-- vv
Denis Labat
Denis Labat wrote:
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
Une suggestion?
Merci.
Exit() ??
Oups... Ma question n'est pas complète...
Ma page récupère les données entrantes dans $_POST, elle renvoie une page "OK" au mobile, fait un pti flush()... Et commence à attaquer la base de données!
Je ne peux donc pas mettre un exit() après le flush(). Et le client continue à attendre la fermeture de la socket, même si je le route sur une autre page avec un header location.
Denis Labat wrote:
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc
souhaité renvoyer une page "OK" au client après avoir reçu ses données
et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais
il attend ensuite la fermeture de la socket et finit en timeout.
Un header "Connection: close" ne change rien.
Une suggestion?
Merci.
Exit() ??
Oups... Ma question n'est pas complète...
Ma page récupère les données entrantes dans $_POST, elle renvoie une
page "OK" au mobile, fait un pti flush()... Et commence à attaquer la
base de données!
Je ne peux donc pas mettre un exit() après le flush(). Et le client
continue à attendre la fermeture de la socket, même si je le route sur
une autre page avec un header location.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
Une suggestion?
Merci.
Exit() ??
Oups... Ma question n'est pas complète...
Ma page récupère les données entrantes dans $_POST, elle renvoie une page "OK" au mobile, fait un pti flush()... Et commence à attaquer la base de données!
Je ne peux donc pas mettre un exit() après le flush(). Et le client continue à attendre la fermeture de la socket, même si je le route sur une autre page avec un header location.
Antoine Polatouche
Denis Labat wrote:
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
ignore_user_abort();
puis affichage d'une page OK signalant au client qu'il peut fermer la fenêtre, et/ou avec un lien sur une autre page...
Denis Labat wrote:
Bonjour.
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc
souhaité renvoyer une page "OK" au client après avoir reçu ses données
et fermer ensuite la socket.
ignore_user_abort();
puis affichage d'une page OK signalant au client qu'il peut fermer la
fenêtre, et/ou avec un lien sur une autre page...
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket.
ignore_user_abort();
puis affichage d'une page OK signalant au client qu'il peut fermer la fenêtre, et/ou avec un lien sur une autre page...
Denis Labat
Le serveur aura probablement envoyé le header HTTP/1.1, et le "Connection: close" est probablement ignoré car il manque "Content-Length". Tenter dans un premier temps de mettre également un header "Content-Length", et si ça ne fonctionne pas (ou si trop compliqué à déterminer en amont sans output buffering), de forcer une réponse HTTP/1.0 avec header('HTTP/1.0 200 OK');
Merci pour ces idées, je vais essayer...
Le serveur aura probablement envoyé le header HTTP/1.1, et le "Connection:
close" est probablement ignoré car il manque "Content-Length".
Tenter dans un premier temps de mettre également un header "Content-Length",
et si ça ne fonctionne pas (ou si trop compliqué à déterminer en amont sans
output buffering), de forcer une réponse HTTP/1.0 avec
header('HTTP/1.0 200 OK');
Le serveur aura probablement envoyé le header HTTP/1.1, et le "Connection: close" est probablement ignoré car il manque "Content-Length". Tenter dans un premier temps de mettre également un header "Content-Length", et si ça ne fonctionne pas (ou si trop compliqué à déterminer en amont sans output buffering), de forcer une réponse HTTP/1.0 avec header('HTTP/1.0 200 OK');
Merci pour ces idées, je vais essayer...
John GALLET
Bonjour,
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket. Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
C'est l'un des rares cas où j'essaierais bien un header Location vers la page disant Ok, sans mettre d'exit derrière. La suggestion du ignore_user_abort devrait dans ce cas être seulement une protection "think safe", donc ne mange pas de pain. De l'une des discussions assez anciennes maintenant sur le sujet, il en avait été conlu à l'époque que ça rentrait dans les utilisations possibles de Location, quelqu'un avait décrit une espèce de cascade de pages pour lancer des traitements en background. Jamais testé moi même. En revanche, si tu es sous unix et que tu as accès à system(), tu peux parfaitement lancer ces traitements en vraies tâches détachées, cf http://faqfclphp.free.fr/#rub4.2
a++; JG
Bonjour,
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc
souhaité renvoyer une page "OK" au client après avoir reçu ses données
et fermer ensuite la socket.
Le client reçoit bien la confirmation, grâce à un petit flush() mais il
attend ensuite la fermeture de la socket et finit en timeout.
Un header "Connection: close" ne change rien.
C'est l'un des rares cas où j'essaierais bien un header Location vers la
page disant Ok, sans mettre d'exit derrière. La suggestion du
ignore_user_abort devrait dans ce cas être seulement une protection
"think safe", donc ne mange pas de pain. De l'une des discussions assez
anciennes maintenant sur le sujet, il en avait été conlu à l'époque que
ça rentrait dans les utilisations possibles de Location, quelqu'un avait
décrit une espèce de cascade de pages pour lancer des traitements en
background. Jamais testé moi même. En revanche, si tu es sous unix et
que tu as accès à system(), tu peux parfaitement lancer ces traitements
en vraies tâches détachées, cf http://faqfclphp.free.fr/#rub4.2
J'ai des traitements assez longs à effectuer en PHP. J'aurais donc souhaité renvoyer une page "OK" au client après avoir reçu ses données et fermer ensuite la socket. Le client reçoit bien la confirmation, grâce à un petit flush() mais il attend ensuite la fermeture de la socket et finit en timeout. Un header "Connection: close" ne change rien.
C'est l'un des rares cas où j'essaierais bien un header Location vers la page disant Ok, sans mettre d'exit derrière. La suggestion du ignore_user_abort devrait dans ce cas être seulement une protection "think safe", donc ne mange pas de pain. De l'une des discussions assez anciennes maintenant sur le sujet, il en avait été conlu à l'époque que ça rentrait dans les utilisations possibles de Location, quelqu'un avait décrit une espèce de cascade de pages pour lancer des traitements en background. Jamais testé moi même. En revanche, si tu es sous unix et que tu as accès à system(), tu peux parfaitement lancer ces traitements en vraies tâches détachées, cf http://faqfclphp.free.fr/#rub4.2