Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Visualizzare echo in foreach

    ciao!

    c'è una cosa che non ho mai ben capito:
    Codice PHP:
        foreach ($query as $v) {
            
    // ITERO SU RECORD DB
            // FACCIO QUELLO CHE DEVO FARE
            
    sleep(1);
            echo 
    'FATTO<br>';
        } 
    quel echo non si vede ad ogni foreach.
    ma si vedono tutti insieme quando foreach ha finito di iterare sul recordset.
    come posso visualizzare sulla pagina quell'echo dopo ogni ciclo??

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    PHP vive sul server, finché non ha finito di generare la pagina (leggasi: finché non ha terminato la sua esecuzione), questa non viene spedita al client, quindi così niente stampe intermedie.

    Devi usare la funzione ob_flush(), vedi il primo esempio di codice, è praticamente il tuo modificato.

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Eseguendo il codice dell'esempio vedo tutto ma alla fine. Da quello che ho capito il buon funzionamento dipende anche dal OS (Unix vs Windows) ma anche dal browser per non parlare degli anti-virus.
    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

  4. #4
    ciao!

    diciamo che che con ob_flush funziona:
    Codice PHP:
    foreach ($query as $v) {
        
    // ITERO SU RECORD DB
        // FACCIO QUELLO CHE DEVO FARE
        
    echo 'FATTO<br>';
        
    flush();
        
    ob_flush();
        
    sleep(1);

    però come dice badaze, il comportamento è un pò random.
    ad esempio, su firefox all'inizio segue il comportamento che voglio, e poi inizia a fare "a blocchi".
    su chrome è un pò più lineare.
    in entrambi casi sto usando linux.
    però già mi va bene così!

    grazie a entrambi!

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Allora. Lo script funziona (in locale) con Apache per Windows e con Firefox. Per IE bisogna mandare un minimo di 'tot' caratteri perché funzioni. Con 256 non funzionava. Con 1024 o 2048 o 3072 funziona a scatti e con 4096 sembra funzionare correttamente.

    Codice PHP:
    <?php
    header
    'Content-type: text/html; charset=utf-8' );
    echo 
    'Begin6 ...<br />'.PHP_EOL;
    for( 
    $i $i 10 $i++ )
    {
        echo 
    '<!--'.str_repeat("x"2048).'//-->'.PHP_EOL// Da aggiungere per IE
        
    echo $i '<br />'.PHP_EOL;  
        
    flush();
        
    ob_flush();
        
    sleep(1);
    }
    echo 
    'End ...<br />'.PHP_EOL;
    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
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    ma finche non si fa ob_flush(); il buffer anche dal secondo ciclo in poi non viene svuotato giusto ?

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da cassano Visualizza il messaggio
    ma finche non si fa ob_flush(); il buffer anche dal secondo ciclo in poi non viene svuotato giusto ?
    Ho testato con flush() solo e funziona bene. Con ob_flush() solo visualizza 2 righe per 2 righe ! Pensavo ob_flush() funzionasse con ob_start() ! Mah.
    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

  8. #8
    ho provato questo codice qui (una versione ancora più semplice della tua):
    Codice PHP:
    <?php

    echo 'INIZIO<br>';
    for (
    $i 0$i 10$i++) {
        echo 
    $i '<br>';
        
    flush();
        
    ob_flush();
        
    sleep(1);
    }
    echo 
    'FINE';
    su firefox, chromium e qupzilla su linux, funziona alla perfezione.
    se invece levo flush() o ob_flush() (basta uno dei due) non funziona, e l'output si vede tutto alla fine.

    se domani riesco provo su chrome e edge su windows 10.

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Per IE e edge bisogna aggiungere un certo numero di caratteri.
    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.