Newsgroup: it.comp.www.php
Titolo: problema mailing list xajax

Salve a tutti,
ho delle difficoltà nella modifica di uno script per l'invio di una
mailing list.
Il punto interessato è il ciclo for che prende l'array degli indirizzi
e li passa uno ad uno ad una funzione xajax per l'invio delle email e
l'immediato output dell'esito dell'invio, con annesso contatore
"1/1000,2/1000 ...".
Il problema sorge quando cerco di inviare più di 500 email perchè
mentre fino a quel numero crica (480-520) tutto funziona
correttamente,da lì in poi i browser cominciano a vacillare.
Firefox invece di pubblicare i dati uno ad uno comincia a pubblicarli
di tot in tot, tipo ogni 30 o 47 e via dicendo, inviando però tutte le
email.
IE, dal canto suo, arrivato verso la soglia fatidica dei 500 salta di
colpo verso 700 e qualcosa poi 800 e qualcosa e si ferma
definitivamente.
Capisco che sia un problema un po' strano, anche da spiegare, ma
sinceramente non so dove sbattere la testa.
Qualcuno sa indirizzarmi verso la giusta strada?
Grazie in anticipo e visto il periodo auguri,
N

 Qualcuno sa indirizzarmi verso la giusta strada?
Ma i log cosa dicono? potrebbe essere un problema di timeout o oppure
legato al buffering dei vari browser... non conosco lo script in
questione, quindi posso dirti ben poco (tranne consultare i log); potresti
modificare lo script e stampare anche il timestamp in millisecondi oppure
eseguire un log manuale su file per vedere cosa succede. Certo che
lanciare uno script per l'invio delle mail via browser la vedo molto
pericolosa: queste sono le classiche azioni batch che andrebbero eseguite
in tale modo, non certo online!
    Francesco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
ab...@newsland.it
Capisco perfettamente la tua obiezione sulla questione batch/online,
ma la necessita di tale procedura nasce per permettere agli utenti del
portale di poter gestire delle liste di invio personalizzate e quindi
permettere anche un monitoraggio sul progresso e risultato degli
invii.
Per aiutarti ad aiutarmi posso dirti che lo script genera un array con
tutti gli indirizzi interessati, lo cicla con un for che non fa altro
che chiamare una funzione xajax che inizializza un oggetto phpmailer e
ritorna l'esito dell'invio tramite xajax, ovviamente.
Da quello che mi hai suggerito e che ho potuto constatare opterei per
il problema di buffiering dei browsers (vista anche la diversita' di
comportamento), sai per caso e senza impegno come posso ovviare o
almeno arginare un simile problema?
Grazie in anticipo
N

 ritorna l'esito dell'invio tramite xajax, ovviamente. Da quello che mi
Se usi AJAX per informare l'utente il discorso cambia completamente.
Non so come funzioni xajax, magari tiene aperta una connessione e fa una 
specie di "push" verso il browser, ma solitamente si usa invece un "pull" 
dal browser verso il server.
Bisogna quindi vedere come funziona in realta` xajax.
Se, come penso, appena riceve un risultato fa una nuova richiesta al 
server per ricevere aggiornamenti, puo` semplicemente darsi che lo script 
PHP sia piu` veloce a inviare le mail di quanto lo sia il browser a 
chiedere gli aggiornamenti. Oppure (se le due cose vengono sincronizzate) 
che il webserver ritardi troppo a mandare la risposta al browser che nel 
frattempo fa altre richieste con lo stesso oggetto xmlHttpRequest, 
scartando quindi i risultati delle precedenti.
Insomma, stai lavorando su un progetto asincrono concorrente, non e` 
banale gestire la sincronizzazione e gli errori si possono annidare 
ovunque.
Bye.


Ok, ho afferrato quello che mi hai detto. Quello che non capisco e'
perche' tutto rimane regolare fin verso i 500 invii e poi sembra che
si "intoppi".
Ti faccio anche questa domanda, l'oggetto xmlHttprequest inizializzato
da xajax in che modo dipende dal browser? Te lo chiedo perche' se come
ipotizzo io (e sinceramente non lo so) non dipende dal browser in
se' , non mi spiega la differenza di comportamento dei 2 classici
browser rivali FF e IE.
Per completezza di informazioni e soprattutto per cercare di trovare
una soluzione che non mi mandi fuori di testa, ti ricordo che mente IE
dopo la soglia 500 ne butta fuori altre due o tre un po' a caso, FF le
manda tutte ma non piu' ad intervalli singoli, bensi' ogni 30/40.
Ti ringrazio infinitamente in anticipo per ogni possibile idea,
N

 infinitamente in anticipo per ogni possibile idea, N
Forse la cosa migliore per risolvere il problema potrebbe essere di 
scendere di un livello e implementare manualmente un sistema di streaming 
dei dati. In pratica apri una sola connessione dal browser a uno script 
sul server, e questo script manda le informazioni facendo dei flush() 
dopo ogni conferma. Non saprei pero` dirti cosa fare sul client per 
renderlo possibile. Non so se si possa fare in javascript o se sia 
necessario ricorrere a flash o java.
Bye.


MI suggerisci cose molto valide, ma anche molto drastiche.
Vorrei pero' tagliare la testa al famoso e sfigatissimo toro, perche'
sinceramente ho gia'  perso anche troppo tempo su questo problema.
Lo script nasceva in origine senza l'apporto di xajax ma questo faceva
si' che finche' il ciclo for non terminava nessun output veniva
stampato.
Quello che mi basterebbe ora sarebbe appunto la possibilita' di
stampare dell'output ancora mentre il ciclo for e' in esecuzione, ma
non mi vengono idee.
Idee?
N
PS ancora grazie.

 Idee?
Dopo ogni print()/echo metti un flush().
Se usi output_buffering o moduli di compressione gzip sul webserver 
potrebbe funzionare in modo saltuario, aspettando di avere abbastanza 
byte da fare un blocco, comprimerlo e inviarlo, altrimenti dovrebbe 
andare via liscio.
Ah, per favore quota meglio. (Google: Quotare bene)
Bye.

 invii.
Questo non ha una grande importanza. Da uno sciprt che lanci online
potresti eseguire in background un nuovo processo (ulteriore chiamata al
web server) che si occupa dell'invio della mail. Dal processo "padre"
monitorizzi solo l'output che l'altro processo genera. Ottieni il solito
risultato e non fai girare lo script direttamente sul browser (pensa a
cosa succede se si schianta, fai un reload o cose del genere....)
    Francesco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
