Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > it.comp.www.php > #22510 > unrolled thread

Mostrare subito la pagina

Started byGreg <greg@alicie.com>
First post2019-01-24 18:17 +0100
Last post2019-01-26 20:31 +0100
Articles 10 — 4 participants

Back to article view | Back to it.comp.www.php


Contents

  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

#22510 — Mostrare subito la pagina

FromGreg <greg@alicie.com>
Date2019-01-24 18:17 +0100
SubjectMostrare 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]


#22511

Fromg4b0 <g4b0@nospam.com>
Date2019-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]


#22512

FromGreg <greg@alicie.com>
Date2019-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]


#22513

Fromg4b0 <g4b0@nospam.com>
Date2019-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]


#22514

FromGreg <greg@alicie.com>
Date2019-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]


#22528

Fromg4b0 <g4b0@nospam.com>
Date2019-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]


#22529 — Re: Mostrare subito la pagina (batch process)

FromUmberto Salsi <salsi@icosaedro.it>
Date2019-01-28 15:07 +0100
SubjectRe: 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]


#22530 — Re: Mostrare subito la pagina (batch process)

FromLeonardo Serni <lserni@gmail.com>
Date2019-01-28 20:22 +0100
SubjectRe: 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]


#22515

FromGreg <greg@alicie.com>
Date2019-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]


#22521

FromLeonardo Serni <lserni@gmail.com>
Date2019-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