Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #22510 > unrolled thread
| Started by | Greg <greg@alicie.com> |
|---|---|
| First post | 2019-01-24 18:17 +0100 |
| Last post | 2019-01-26 20:31 +0100 |
| Articles | 10 — 4 participants |
Back to article view | Back to it.comp.www.php
Mostrare subito la pagina Greg <greg@alicie.com> - 2019-01-24 18:17 +0100
Re: Mostrare subito la pagina g4b0 <g4b0@nospam.com> - 2019-01-25 08:04 +0000
Re: Mostrare subito la pagina Greg <greg@alicie.com> - 2019-01-25 15:05 +0100
Re: Mostrare subito la pagina g4b0 <g4b0@nospam.com> - 2019-01-25 14:51 +0000
Re: Mostrare subito la pagina Greg <greg@alicie.com> - 2019-01-25 17:03 +0100
Re: Mostrare subito la pagina g4b0 <g4b0@nospam.com> - 2019-01-28 13:22 +0000
Re: Mostrare subito la pagina (batch process) Umberto Salsi <salsi@icosaedro.it> - 2019-01-28 15:07 +0100
Re: Mostrare subito la pagina (batch process) Leonardo Serni <lserni@gmail.com> - 2019-01-28 20:22 +0100
Re: Mostrare subito la pagina Greg <greg@alicie.com> - 2019-01-25 23:35 +0100
Re: Mostrare subito la pagina Leonardo Serni <lserni@gmail.com> - 2019-01-26 20:31 +0100
| From | Greg <greg@alicie.com> |
|---|---|
| Date | 2019-01-24 18:17 +0100 |
| Subject | Mostrare subito la pagina |
| Message-ID | <q2crva$cuk$1@solani.org> |
Ho pagina che serve solo per mandare un paio di mail e subito dopo appare un link da clikkare per proseguire la navigazione. il codice con il testo da visualizzare è posto prima dei comandi mail, ma fintanto che che le mail non sono partite non appare nulla. C'è un modo per visualizzare subito la pagina senza aspettare l'esito delle mail? Grazie -- Greg
[toc] | [next] | [standalone]
| From | g4b0 <g4b0@nospam.com> |
|---|---|
| Date | 2019-01-25 08:04 +0000 |
| Message-ID | <q2efuq$837$1@gioia.aioe.org> |
| In reply to | #22510 |
Il Thu, 24 Jan 2019 18:17:27 +0100, Greg ha scritto: > Ho pagina che serve solo per mandare un paio di mail e subito dopo > appare un link da clikkare per proseguire la navigazione. > > il codice con il testo da visualizzare è posto prima dei comandi mail, > ma fintanto che che le mail non sono partite non appare nulla. > > C'è un modo per visualizzare subito la pagina senza aspettare l'esito > delle mail? Grazie Anzichè inviare le email direttamente crei dei job, li metti in una queue e servi la pagina, nel frattempo con calma un queue worker (processo batch) può occuparsi dell'invio delle suddette. Per esempio in laravel: https://laravel.com/docs/5.7/queues g4b0
[toc] | [prev] | [next] | [standalone]
| From | Greg <greg@alicie.com> |
|---|---|
| Date | 2019-01-25 15:05 +0100 |
| Message-ID | <q2f52m$u59$1@solani.org> |
| In reply to | #22511 |
Il 25/01/19 09:04:42 g4b0 ha scritto: > Il Thu, 24 Jan 2019 18:17:27 +0100, Greg ha scritto: > >> Ho pagina che serve solo per mandare un paio di mail e subito dopo >> appare un link da clikkare per proseguire la navigazione. >> >> il codice con il testo da visualizzare è posto prima dei comandi mail, >> ma fintanto che che le mail non sono partite non appare nulla. >> >> C'è un modo per visualizzare subito la pagina senza aspettare l'esito >> delle mail? Grazie > > Anzichè inviare le email direttamente crei dei job, li metti in una queue > e servi la pagina, nel frattempo con calma un queue worker (processo > batch) può occuparsi dell'invio delle suddette. > > Per esempio in laravel: https://laravel.com/docs/5.7/queues > > g4b0 Grazie, mi rendo conto che mi hai suggerito una soluzione definitiva e molto elegante, ma le mie conoscenze purtroppo non arrivano a tanto -- Greg
[toc] | [prev] | [next] | [standalone]
| From | g4b0 <g4b0@nospam.com> |
|---|---|
| Date | 2019-01-25 14:51 +0000 |
| Message-ID | <q2f7pd$1sim$1@gioia.aioe.org> |
| In reply to | #22512 |
Il Fri, 25 Jan 2019 15:05:06 +0100, Greg ha scritto: > Il 25/01/19 09:04:42 g4b0 ha scritto: >> Il Thu, 24 Jan 2019 18:17:27 +0100, Greg ha scritto: >> >>> Ho pagina che serve solo per mandare un paio di mail e subito dopo >>> appare un link da clikkare per proseguire la navigazione. >>> >>> il codice con il testo da visualizzare è posto prima dei comandi mail, >>> ma fintanto che che le mail non sono partite non appare nulla. >>> >>> C'è un modo per visualizzare subito la pagina senza aspettare l'esito >>> delle mail? Grazie >> >> Anzichè inviare le email direttamente crei dei job, li metti in una >> queue e servi la pagina, nel frattempo con calma un queue worker >> (processo batch) può occuparsi dell'invio delle suddette. >> >> Per esempio in laravel: https://laravel.com/docs/5.7/queues >> >> g4b0 > > Grazie, mi rendo conto che mi hai suggerito una soluzione definitiva e > molto elegante, ma le mie conoscenze purtroppo non arrivano a tanto Ma non è così difficile, provo a spiegarla più facile: anzichè inviare l'email salvi nel db quanto necessario a farlo: subject, body, indirizzi vari, ecc. e restituisci la pagina come se avessi inviato. Lo script batch è un semplice script php lanciato via cronjob ogni x minuti, il quale se trova nel DB delle email da spedire lo fa, con lo stesso codice che usi attualmente. In sostanza aggiungi 2 query, una insert ed una select, e splitti il codice in 2 file. Niente di complicato. Poi si può rifinire in mille modi, per esempio evitando che lo script batch giri se non ha finito il giro precedente, così eviti di inviare due volte le email, però per cominciare quanto ti ho detto prima basta ed avanza.
[toc] | [prev] | [next] | [standalone]
| From | Greg <greg@alicie.com> |
|---|---|
| Date | 2019-01-25 17:03 +0100 |
| Message-ID | <q2fc08$3ld$1@solani.org> |
| In reply to | #22513 |
Il 25/01/19 15:51:25 g4b0 ha scritto: > Ma non è così difficile, provo a spiegarla più facile: anzichè inviare > l'email salvi nel db quanto necessario a farlo: subject, body, indirizzi > vari, ecc. e restituisci la pagina come se avessi inviato. Si il concetto l'ho capito, ma intanto non ho un db, i dati li prendo da un form di immissione che chiama poi una pagina php, qui me li ritrovo in 3 variabili e da qui lancio la funzione mail, ed espongo il testo "mail inviata" e il link "torna indietro" Come vedi una cosa molto primitiva e spartana e sarebbe tempo di ammodernarla anche Potrei scrivere e leggere su un file di testo > Lo script batch è un semplice script php lanciato via cronjob ogni x > minuti, il quale se trova nel DB delle email da spedire lo fa, con lo > stesso codice che usi attualmente. Adesso vedo se trovo qualche esempio in rete su cui lavorarci intorno... Una cosa che mi ingarbuglia molto è che la mail deve partite da una pagina che contenga solo codice php e non htlm. Ho provato ad inserire il codice della mail direttamente nella futura pagina di arrivo in vari posti, prima, dopo, dentro head ma invariamente compare tutto a video ...altrimenti avrei già risolto -- Greg
[toc] | [prev] | [next] | [standalone]
| From | g4b0 <g4b0@nospam.com> |
|---|---|
| Date | 2019-01-28 13:22 +0000 |
| Message-ID | <q2mvmu$8sb$1@gioia.aioe.org> |
| In reply to | #22514 |
Il Fri, 25 Jan 2019 17:03:16 +0100, Greg ha scritto: > Il 25/01/19 15:51:25 g4b0 ha scritto: > >> Ma non è così difficile, provo a spiegarla più facile: anzichè inviare >> l'email salvi nel db quanto necessario a farlo: subject, body, >> indirizzi vari, ecc. e restituisci la pagina come se avessi inviato. > > Si il concetto l'ho capito, ma intanto non ho un db, i dati li prendo da > un form di immissione che chiama poi una pagina php, qui me li ritrovo > in 3 variabili e da qui lancio la funzione mail, ed espongo il testo > "mail inviata" e il link "torna indietro" > Come vedi una cosa molto primitiva e spartana e sarebbe tempo di > ammodernarla anche Attento a non diventare un relay per spammer... Come semplice test prova a metterti nei panni di qualcuno che vuole mandare email a tanti indirizzi diversi: potrebbe farlo con il tuo script? Cosa c'è in quelle 3 variabili > Potrei scrivere e leggere su un file di testo È una variante del tema, una coda si può implementare in molti modi. >> Lo script batch è un semplice script php lanciato via cronjob ogni x >> minuti, il quale se trova nel DB delle email da spedire lo fa, con lo >> stesso codice che usi attualmente. > > Adesso vedo se trovo qualche esempio in rete su cui lavorarci intorno... C'era un bell'articolo su php[architect] di qualche mese fa a proposito del batch programming in php, in particolare nella issue di marzo 2018 [1] È quella intitolata "PHP Daemons and Long-Running Processes", purtroppo non è l'articolo gratuito per quella issue. Probabilmente in rete trovi tonnellate di roba, io da quando mi sono iscritto a php[architect] mi sono impigrito e non cerco più tanto sul web, leggo quello che mi propongono :) > Una cosa che mi ingarbuglia molto è che la mail deve partite da una > pagina che contenga solo codice php e non htlm. Ho provato ad inserire > il codice della mail direttamente nella futura pagina di arrivo in vari > posti, prima, dopo, dentro head ma invariamente compare tutto a video > ...altrimenti avrei già risolto PHP non dovrebbe più essere inglobato dentro al codice HTML, è una bad practice che era molto in voga negli anni 90. Io fossi in te mi fermerei un attimo e partirei con un libro, giusto per chiarirti le idee. Per esempio ultimamente sono usciti un paio di libri (che non ho letto) che potrebbero fare a caso tuo: Beginning PHP and MySQL 5th Edition [2] Learning PHP, MYSQL & JavaScript: With jQuery, CSS & HTML5 [3] Ripeto, non li ho letti, ma per una visione d'insieme dello sviluppo web direi che l'importante è che siano recenti (questi sono entrambi del 2018). g4b0 [1] https://www.phparch.com/magazine/2018-2/march/ [2] https://www.amazon.it/Beginning-PHP-MySQL-Jason-Gilmore/dp/1430260432/ ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr= [3] https://www.amazon.it/Learning-PHP-MYSQL-JavaScript-jQuery/ dp/1491978910/ref=sr_1_1?s=english- books&ie=UTF8&qid=1548681653&sr=1-1&keywords=learning+php%2C+mysql+and +javascript
[toc] | [prev] | [next] | [standalone]
| From | Umberto Salsi <salsi@icosaedro.it> |
|---|---|
| Date | 2019-01-28 15:07 +0100 |
| Subject | Re: Mostrare subito la pagina (batch process) |
| Message-ID | <q2n2c5$tqr$1@gioia.aioe.org> |
| In reply to | #22528 |
g4b0 <g4b0@nospam.com> wrote:
> C'era un bell'articolo su php[architect] di qualche mese fa a proposito
> del batch programming in php, in particolare nella issue di marzo 2018 [1]
> È quella intitolata "PHP Daemons and Long-Running Processes", purtroppo
> non è l'articolo gratuito per quella issue.
Non ho letto l'articolo in questione ma sarebbe interessante una review
dei concetti di base. In ogni caso, ho risolto il problema dei processi
batch su Windows e su Linux con una classe apposta:
http://www.icosaedro.it/phplint/phplint2/library.html?i=it/icosaedro/web/OfflineJob
Basilarmente:
- Creando un nuovo oggetto, viene creata una dir. temporanea di lavoro
e viene restituito un ticket (una stringa alfanumerica che identifica
il job).
$job = new OfflineJob();
$ticket = $job->getTicket();
- Nella dir. temporanea si possono mettere i file di lavoro e leggere
i risultati:
$mydata = $job->propertyPath("mydata.csv");
file_put_contents($mydata, ".....");
- Si può lanciare un processo di shell che esegue quindi comandi
arbitrari all'interno della dir. di lavoro:
$job->start("c:\\myprogram.exe mydata.csv myresults.xml");
Il "detaching" dal processo PHP che lo lancia viene realizzato sotto
Linux con il comando "at", mentre sotto Windows ho dovuto scrivere un
launcher apposta scritto in C altrimenti il processo PHP rimane appeso
inesorabilmente. Questa è la parte tricky di tutto il discorso e che
rende l'implementazione fortemente dipendente dal sistema.
- Dato il ticket, si può ricostruire l'oggetto OfflineJob
$job = new OfflineJob($ticket);
e sondare lo stato del processo batch (starting, running, finished),
recuperare lo stato di avanzamento, il codice di uscita, lo stdout,
stderr e gli eventuali file prodotti, oppure si può fermare il processo.
Ovviamente, questo può tornare utile per mostrare in modo asincrono
all'utente lo stato di avanzamento dei suoi jobs e per consentire di
stoppare quelli voluti.
Ciao,
___
/_|_\ Umberto Salsi
\/_\/ www.icosaedro.it
[toc] | [prev] | [next] | [standalone]
| From | Leonardo Serni <lserni@gmail.com> |
|---|---|
| Date | 2019-01-28 20:22 +0100 |
| Subject | Re: Mostrare subito la pagina (batch process) |
| Message-ID | <oflu4etp07jc805aq7olrbdb9s4ttca8bv@L.Serni> |
| In reply to | #22529 |
On Mon, 28 Jan 2019 15:07:00 +0100, Umberto Salsi <salsi@icosaedro.it> wrote:
>Linux con il comando "at", mentre sotto Windows ho dovuto scrivere un
>launcher apposta scritto in C altrimenti il processo PHP rimane appeso
>inesorabilmente.
Sotto Windows forse si può usare l'interfaccia CLI di SCHTASKS:
$date = date('H:i:s', time() + 5);
SCHTASKS /CREATE /RU utente /RP password /TN "nome task" /TR "COMANDO" /SC
ONCE /ST {$date}
Leonardo (non sono sicuro di /SC)
--
"You all presumably know why" :-) :-(
[toc] | [prev] | [next] | [standalone]
| From | Greg <greg@alicie.com> |
|---|---|
| Date | 2019-01-25 23:35 +0100 |
| Message-ID | <q2g30h$kp5$1@solani.org> |
| In reply to | #22513 |
Il 25/01/19 15:51:25 g4b0 ha scritto: Ho risolto metà del problema con questa riga: header( "Location: index.php" ); Quando la mail è stata inviata non appare piu la pagina bianca con scritto "clicca qui" ma subito alla pagina dove voglio che vada. Mi resta un problemino che lo spiego in apposito post piu sopra. Grazie:) -- Greg
[toc] | [prev] | [next] | [standalone]
| From | Leonardo Serni <lserni@gmail.com> |
|---|---|
| Date | 2019-01-26 20:31 +0100 |
| Message-ID | <c6dp4e1fctlmdqoel8efs98dfbsodr546f@L.Serni> |
| In reply to | #22510 |
On Thu, 24 Jan 2019 18:17:27 +0100, Greg <greg@alicie.com> wrote: >Ho pagina che serve solo per mandare un paio di mail e subito dopo appare un link da clikkare per proseguire la >navigazione. >il codice con il testo da visualizzare è posto prima dei comandi mail, ma fintanto che che le mail non sono partite non >appare nulla. >C'è un modo per visualizzare subito la pagina senza aspettare l'esito delle mail? Grazie Il sistema più semplice **e portabile** è farlo in AJAX. Hai la pagina di partenza in HTML. In questa ci metti il pulsante che fa partire le mail, ma gli fai effettuare una chiamata AJAX. Dopo che lei è partita, puoi fare quel che ti pare: far comparire il link da cliccare o qualcos'altro e magari un cursore di "attendere prego". Il file chiamato via AJAX lo proteggi con ignore_user_abort(), e gli fai restituire lo stato dell'invio magari in JSON via json_encode(). Quindi: - l'utente clicca - succede subito qualcosa (decidi tu cosa) - quando le mail sono davvero partite succede qualcos'altro, o anche nulla Leonardo -- "You all presumably know why" :-) :-(
[toc] | [prev] | [standalone]
Back to top | Article view | it.comp.www.php
csiph-web