Visualizzazione risultati 1 fino 7 di 7

Discussione: Come velocissare lo show della pagina?

  1. #1
    L'avatar di netgreg
    netgreg non è connesso Utente giovane
    Data registrazione
    24-11-2007
    Residenza
    Brescia
    Messaggi
    79

    Predefinito Come velocissare lo show della pagina?

    Salve a tutti,
    ho un frammento di codice che carica una pagina php e subito dopo manda una mail. Il mio problema è che la pagina non appare finchè non è partita la mail. C'è un modo per forzare lo show della pagina prima dell'invio? Grazie

    header( "Location: pagina.php" );
    mail($dest, "Oggetto", $messaggio, $intestazioni);

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Codice PHP:
    header( "Location: pagina.php" );
    mail($dest, "Oggetto", $messaggio, $intestazioni);
    Se usi header per "cambiare pagina", il codice che si trova dopo di esso non verrà mai eseguito, in teoria. A seconda della configurazione del server potrebbe verificarci una concomitanza di coincidenze per cui venga eseguito comunque, ma non è qualcosa su cui fare affidamento.

    Tecnicamente puoi mostrare la pagina prima di chiamare la funzione mail, e lavorando con funzioni come flush, ob_flush e ob_clean per inviare il contenuto HTML prima del completamento dell'esecuzione dello script, ma non la trovo una grande idea.

    Piuttosto se hai realmente bisogno di velocità devi rendere l'invio della mail asincrono utilizzando AJAX in JavaScript: anziché chiamare una pagina PHP che invii la mail e reindirizzi, fai partire una chiamata AJAX verso una pagina PHP che invii solo la mail. La successiva redirezione può avvenire sempre tramite JavaScript.

    I suggerimenti che do più spesso:


  3. #3
    L'avatar di netgreg
    netgreg non è connesso Utente giovane
    Data registrazione
    24-11-2007
    Residenza
    Brescia
    Messaggi
    79

    Predefinito

    Non conosco Ajax se non di nome, quindi non oso avventurarmi. Ho provato a usare la funzione in questo modo, non ci sono errori perà la pagina appare DOPO l'invio della mail. Esempio preso dal manuale.

    header( "Location: pagina.php" );
    flush();
    mail($dest, "Oggetto", $messaggio, $intestazioni);

    Oppure c'è qualcosa meglio di header per mostrare subito la pagina?

  4. #4
    L'avatar di netgreg
    netgreg non è connesso Utente giovane
    Data registrazione
    24-11-2007
    Residenza
    Brescia
    Messaggi
    79

    Predefinito

    Anche in questa forma la pagina appare DOPO che la mail è partita. Che strano...

    echo "<script type='text/javascript'>";
    echo "location.href='pagina.php';";
    echo "</script>";
    mail($dest, "Oggetto", $messaggio, $intestazioni);

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Devi entrare nel meccanismo di come lavora una pagina web generata in PHP.
    Innanzitutto header("Location: pagina.php"); non mostra una nuova pagina: indica al browser che, quando ha finito di caricare la pagina corrente, dovrà caricarne un'altra. E per dire di aver terminato il caricamento della pagina corrente dovrà attendere una "risposta definitiva dal server", il quale la darà solo dopo aver concluso tutte le operazioni, incluso l'invio della mail.

    Diverso è invece mostrare effettivamente la pagina, senza redirezione, prima di inviare la mail:
    Codice PHP:
    include "pagina.php";
    flush();
    mail($dest, "Oggetto", $messaggio, $intestazioni);
    non è la soluzione più intelligente del mondo, ma mi sembra l'unica percorribile se intendi simulare un comportamento asincrono in PHP.

    Altrimenti c'è appunto AJAX. Nasce apposta per realizzare operazioni come quella di cui hai bisogno, non c'è ragione di rinunciare a utilizzarlo, soprattutto da quando librerie come jQuery lo hanno reso ancor più semplice.

    Esempio preso dal manuale.
    Quale manuale consiglia questo? Tutti gli esempi che ho visto su PHP.net bloccano esplicitamente l'esecuzione dello script con una exit dopo aver inviato un header location (il che ha senso: se intendi forzare lo spostamento verso un'altra pagina che senso ha continuare l'esecuzione dello script?).

    I suggerimenti che do più spesso:


  6. #6
    L'avatar di netgreg
    netgreg non è connesso Utente giovane
    Data registrazione
    24-11-2007
    Residenza
    Brescia
    Messaggi
    79

    Predefinito

    //non è la soluzione più intelligente del mondo, ma mi sembra l'unica percorribile se intendi simulare un comportamento asincrono in PHP.

    Non sarà intelligente, ma funziona, e tanto mi basta, per cui ti mando un bel grazie :)

    // Quale manuale consiglia questo? Tutti gli esempi che ho visto su PHP.net bloccano esplicitamente l'esecuzione dello script

    Non saprei dire, era un guida sul web che comprare sempre nelle ricerche su php, ho consultato davvero tanti siti, ma solo qui ho trovato la soluzione, e mi do dello stupido, avrei dovuto arrivarci subito e da solo che include era una soluzione.

    Forse lo avevo trovato qui:
    https://www.php.net/manual/en/function.flush.php

  7. #7
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Prego! Ma non darti dello stupido

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •