Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Hybrid View

  1. #1

    Php che esegue un refresh solo se entro 10 sec non ha caricato la pagina

    Buongiorno.

    Premesso che per molti utenti di questo forum, credo che il mio problema sia davvero banale, passo ad esporvelo:


    ho una pagina (con in testa codice php, per rilevare la nazionalità del visitatore) che a volte, impiega troppo tempo per caricare il contenuto (il resto della pagina, in html).

    In questi casi, vorrei che, se dopo tot secondi ancora non è stata caricata la pagina, venga eseguito un redirect ad un' altra pagina (che avverte il visitatore del ritardo e lo invita ad aspettare alcuni secondi prima di riprovare l'accesso alla pagina).

    Per cercare di fare questo, ho inserito all'inizio del codice php un refresh di pagina a 10 secondi:

    Codice PHP:
    <?php
    header
    ("Refresh: 10; url=/pagina-avviso.html");
    ecc..
    Il refresh funziona, solo che esegue il refresh anche se nel frattempo la pagina (la parte in html) è stata caricata!

    Vorrei che in questo caso, come è ovvio, il refresh non venga eseguito... Come fare?

    Grazie
    E. Barros

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Stavo per risponderti che non era cosi facile ma pensandoci sopra.

    Per vedere come funziona, prima prova cosi com'è. Lo script scrive 'testo' per 4 secondi ma siccome ho messo un delay di 2 secondi deve apparire la pagina test9351b.php.
    Poi rimpiazzi il pippo(2) con pippo(12) per esempio. Apri una nuova pagina e incolli l'indirizzo. Dovresti vedere una marea di testo.

    PS : Sviluppato in poco tempo. Quindi è una bozza e nient'altro.
    Tutti i print o echo devono essere fatti usando $a->print.
    Se altri hanno altre idee sono interessato.

    Codice PHP:
    <?php
    class pippo {
     
     private 
    $time;
     private 
    $delay;
     
     function 
    __construct($delay) {
      
    $this->delay   $delay;
      
    $this->time   = new DateTime('NOW');
     }
     
     function print(
    $string) {
      print 
    $string;
      
    $now  = new DateTime('NOW');
      
    $diff $now->diff($this->time); 
      if (
    $diff->>= $this->delay) {
       
    header("location:test9351b.php");
      }
     }
    }
    $a  = new pippo(2);
    //--- Inizio bufferizzazione (TASSATIVO) 
    ob_start(); 
    // simulazione di una pagina che si carica in 4 secondi ma con un delay di 2 secondi
    $d1  = new DateTime('NOW');
    $end false;
    while (!
    $end) {
     
     
    $a->print('testo<br/>');
     
    $now  = new DateTime('NOW');
     
    $diff $now->diff($d1); 
     if (
    $diff->>= 4) {
      
    $end true;
     }
    }
    //--- Fine bufferizzazione (TASSATIVO) => Invio dei dati al browser
    ob_end_flush();
    file : test9351b.php
    Codice PHP:
    <?php
    print "tempo scaduto";
    Ultima modifica di badaze; 31-08-2017 a 22:44
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Ma non sarebbe meglio indagare e risolvere i problemi che ritardano il caricamento della pagina?

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ovviamente.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Mi chiedevo. E' possibile catturare l'errore scatenato dopo max_execution_time?
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Intanto vi ringrazio per le risposte.

    L'osservazione che avete fatto è esatta: l'evento che causa questo ritardo (a volte), è il servizio di geolocalizzazione che richiamo nel codice, che mi deve dare come risposta la nazionalità del visitatore. Essendo un servizio esterno, gratuito, alcune volte si "impalla" e non mi da alcuna risposta se non dopo parecchi secondi (a volte, anche un minuto)...

    Ecco il motivo per il quale, nel caso il ritardo (di questo servizio di geolocalizzazione) superi i 10 secondi, volevo rimandare ad una semplice pagina html, in cui si avverte il visitatore del momentaneo ritardo e lo si invita a ripetere l'accesso, tramite un link in questa pagina di "avvertimento", link che porta di nuovo alla pagina php.

    Ho pensato che la soluzione più semplice sia quella di fare la pagina in php con solo questo servizio più il refresh, così che se questo servizio mi da una risposta entro 10 secondi, il php richiama la prima pagina del sito (in html) per la normale navigazione; se invece non mi da nessuna risposta, dopo i 10 secondi viene eseguito il refresh alla pagina dell'avvertimento...

    Così dovrebbe funzionare...
    E. Barros

  7. #7
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Quote Originariamente inviata da barros971 Visualizza il messaggio
    Intanto vi ringrazio per le risposte.

    l'evento che causa questo ritardo (a volte), è il servizio di geolocalizzazione che richiamo nel codice, che mi deve dare come risposta la nazionalità del visitatore. Essendo un servizio esterno, gratuito, alcune volte si "impalla" e non mi da alcuna risposta se non dopo parecchi secondi (a volte, anche un minuto)...
    come lo richiami questo servizio esterno?
    è necessario per la corretta visualizzazione della pagina (ad esempio, cambi la lingua a seconda della nazionalità?)

  8. #8
    Si, serve per ottimizzare alcune funzionalità del sito.
    Per richiamarlo, dipende dal tipo di output che vuoi ottenere (Json, CVS, ecc.). Ci sono molti servizi di geolocalizzazione online gratuiti, basta che fai una ricerca su google e li trovi...
    Più difficile è trovare uno di questi servizi gratuiti che non crea problemi (come nel mio caso)...
    E. Barros

  9. #9
    Riguardo al mio problema: ho scoperto che il refresh nella pagina php viene eseguito dopo che la pagina è stata completamente caricata, e non dopo i 10 secondi dal richiamo della pagina (cioè, se la pagina impiega 1 minuto per caricarsi, il refresh avverrà dopo 1 minuto e 10 secondi e non dopo 10" dal momento in cui ho richiamato quella pagina...)

    Io invece ho bisogno di un refresh fisso a 10" dal richiamo della pagina, indipendentemente se nel frattempo ha caricato qualcosa o no. Come fare?
    E. Barros

  10. #10
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Con ajax. Prova prima com'è poi cambia 2000 in 10000 (10 secondi) nella funzione start();

    Con 2000 devi essere reindirizzato alla pagina test9352b.php. Con 10000 (o comunque un valore maggiore di 4) dovresti vedere comparire la scritta Ok.

    test9352c.php impiega 4 secondi per completarsi.

    Codice PHP:
    <!DOCTYPE html>
    <
    html>
    <
    head>
    <
    style type="text/css">
    .
    {border:1px black}
    .
    {background-color:yellow}
    .
    {background-color:green}
    .
    {background-color:blue}
    </
    style>
    <
    script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <script>
    var valoreFinale="";
    function callPage() {
       var res    = Math.random();
       var src    = "";
       var id     = "";
       var param  = '&r='+res;
       $.ajax({
                 url  : 'test9352c.php',
                 type : 'POST',
                 data : param, 
        dataType : 'html'
       }).done(function(html) {valoreFinale = html;$("#pippo").html("Ok");}) ;
    }
    function start() {
     
     callPage();
     setTimeout(
      function () 
      {
       if (valoreFinale=="")
       {
        window.location = 'test9352b.php'
       }
      }
     ,2000);
     // 2000 = 2 secondi
    }
    </script>
    </head>
    <body>
    <div id="pippo"></div>
    <button onclick="start()"/>Clicca</button>
    </body>
    </html> 
    test9352b.php
    Codice PHP:
    <?php
    print "tempo scaduto";
    test9352c.php
    Codice PHP:
    <?php
    // simulazione di una pagina che si carica in 4 secondi 
    $d1  = new DateTime('NOW');
    $end false;
    while (!
    $end) {
     
     print 
    'testo<br/>';
     
    $now  = new DateTime('NOW');
     
    $diff $now->diff($d1); 
     if (
    $diff->>= 4) {
      
    $end true;
     }
    }
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.