Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    sleep() mostra tutto insieme

    ciao a tutti,
    non riesco a capire perchè se utilizzo questo codice
    Codice PHP:
                echo "<img src='immagine-di-attesa.gif";
                
    sleep(3); 
    l'immagine venga stampata dopo 3 secondi e non prima.

    in pratica vorrei che quando si apre la pagina venga visualizzata l'immagine di attesa per 3 secondi.

    ---------------------------
    danielix05

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il tag img devi chiuderlo e ti manca anche un apice dopo il nome del file.
    Non so se dipenda da questo, ma di certo sono 2 errori.

  3. #3
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,648
    Non funzionerebbe in ogni caso. Devi usare javascript.

  4. #4
    già.... non è un problema di errore mio nel trascrivere il tag img... non funziona cmq

    vorrei capire il perchè.


    rispetto a javascript che strada dovrei percorrere?
    ---------------------------
    danielix05

  5. #5
    PHP viene interpretato ed eseguito dal server che AL TERMINE DELL'ESECUZIONE manda l'output al browser.

    sleep() ferma l'esecuzione (del server) per un tot di secondi ma l'output che questo genera sarà inviato (tutto insieme) al termine dell'esecuzione.

    ERGO: come ti è stato suggerito devi usare Javascript; non vorrei sbagliarmi ma tale effetto con jquery lo chiamano "lazy loading" (prova...).
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  6. #6
    non è vero che l'output viene inviato al termine dell'esecuzione, anzi generalmente è il contrario ... è una cosa che uso spesso ^^

    per farlo, a parte la correttezza dell'html, devi disabilitare l'output buffering e forzare il flush tramire www.php.net/flush

  7. #7
    Originariamente inviato da daniele_dll
    non è vero che l'output viene inviato al termine dell'esecuzione, anzi generalmente è il contrario ... è una cosa che uso spesso ^^

    per farlo, a parte la correttezza dell'html, devi disabilitare l'output buffering e forzare il flush tramire www.php.net/flush
    MMM... mi sfugge qualcosa.

    se io faccio
    Codice PHP:
    echo '1';
    sleep(5);
    echo 
    '2'
    il tempo di caricamento sarà 5 secondi e mi compare simultaneamente tutto l'output (12).

    ho provato cose anche di questo tipo con analoghi risultati (mi "compare" tutto in una volta):
    Codice PHP:
    <?php
    ob_start
    ();
    for(
    $i=0$i 5$i++) 

        echo 
    $i ' '
        
    ob_flush(); 
        
    flush(); 
        
    sleep(1); // tot 5 sec
    }
    ?>
    forse c'è qualcosa nel php.ini che mi sfugge? illuminatemi...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Secondo la documentazione invia i dati al webserver prina che l'esecuzione dello script finisca. Tranne che sei su window o usi gzip come compressione.
    Mi sa che la userò pure io...

  9. #9
    se non hai ne ob_start ne altri handler per l'output (mi ero dimenticato di mettere in elenco gzip) e fai il flush (o hai l'implicit flush attivato) allora l'output lo devi vedere subito

    il motivo per il quale non vedi nulla non è che php non lo invia ma è perché i browser, per motivi "prestazionali", se non hanno scaricato un po di materiale non iniziano a fare il parsing della pagina

    http://www.daccii.it/private/test-flush.php

    codice:
    <?php
    
    // stampa un po di roba inutile
    echo str_repeat(' ', 4096);
    
    for($i = 0; $i < 10; $i++)
    {
        echo $i . '&deg; stringa stampata a video
    ';
        flush();
        sleep(1);
    }
    
    ?>
    In una situazione reale, in realtà, il problema non c'è perché prima di fare operazioni di qualsiasi tipo tramite questo meccanismo hai già inviato il resto della pagina

  10. #10

    non funziona :-(

    la pagina di daniele_dll come vediamo funziona ma nel mio script no

    questo è lo schema che sto seguendo:

    Codice PHP:
    <?php include('../config.php'); ?>
    <head>
    ....varie intestazioni, css, ecc
    </head>

    <body>

    <div style="background-image: url(../images/sfondo_int.gif); color: #FFFFFF; font-weight: bold; padding: 0px; font-size: 20px; height: 25px;">
        Inserimento Cliente
    </div>

    <div style="border:1px solid; margin:0px auto; padding-top:15px; width:80%;">

        <form action="" method="post">
        
            Dal:
                <input type="text" name="periodosoggiornodal" id="periodosoggiornodal" class="formtext" value="<?php if(isset($_POST['periodosoggiornodal'])) echo $_POST['periodosoggiornodal']; ?>" size="9" />
            
            n. giorni:
                <select name="ngiorni">
                    <option value="-1">stagionale</option>
                <?php for($ng=1$ng<=30$ng++){ ?>
                    <option value="<?php echo $ng?>"><?php echo $ng?></option>
                <?php ?>
                </select>
                

            <input type="submit" value="ricerca" class="formbutton" />
        </form>






    <?php
        
    if(isset($_POST['periodosoggiornodal'])){

    //METTO L'ESEMPIO PROPOSTO QUI PER TESTARLO
    #echo str_repeat(' ', 4096);
    ob_start();
    for(
    $i 0$i 10$i++)
    {
        echo 
    $i '° stringa stampata a video
    '
    ;
        
    ob_flush();
        
    flush();
        
    sleep(1);
    }

    // FINE ESEMPIO

            
    $primogiorno $_POST['periodosoggiornodal'];
                list(
    $dd$mm$yyyy) = explode('/'$primogiorno);
            
    $primogiorno mktime(2,0,0,$mm$dd$yyyy);

            
    $mysqlc->query("SELECT * FROM TAB1 WHERE id = '".$_GET['id']."';");
            
    $result mysql_fetch_array($mysqlc->resultMYSQL_ASSOC);

                for(
    $day=1$day<=$_POST['ngiorni']; $day++){

                    
    $query_check "SELECT id FROM tab1 WHERE fila='".$result['rec1']."' AND rec2='".$result['rec2']."' AND day = '$primogiorno' AND stato = 0";
                    
    $result_check mysql_query($query_check) or die (mysql_error());
                    
    $check mysql_fetch_assoc($result_check);
                    if(
    mysql_num_rows($result_check) == 1){
                        
                        echo 
    date('d-m-Y',$primogiorno) ." ok! ".$check['idbook']."
    "
    ;
                        echo 
    "-------->"$check['fila'] ." / "$check['filaALIASposto'] ."<hr />";
                        
                        
    $primogiorno $primogiorno 86400;
                    }else{
                        echo 
    date('d-m-Y',$primogiorno) ." KO! ".$check['idbook']."
    "
    ;

                        
    $primogiorno $primogiorno 86400;
                    } 
    // END IF
                
    // END FOR
                
                
    echo "[img]/progressBarLong_1.gif[/img]";

    }
    ?>

    </div>

    </body>
    ---------------------------
    danielix05

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.