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

Discussione: Perchè va in loop?

  1. #1

    Perchè va in loop?

    Ho un file .php che legge il contenuto di una directory (si tratta di file .ogg):

    Codice PHP:
    <?
    $d 
    dir("./brani");
    while (
    $e $d->read()) {
     if(
    $e!="." && $e!="..") {
      
    // Questa riga sotto stampa il nome dell'album (della directory(
      // echo "

    <class=\"titolo\">$e[/b]";
     
    $subd dir("./brani/$e");
      while (
    $f $subd->read()) {
       if(
    $f!="." && $f!="..")
        
    // Stampa il percorso del file
        
    echo "$e/$f 
    "
    ;

            
    $percorso "$e/$f";
            
            include (
    "estrai_dati.php");

      }
     }
    }
    ?>
    Dopo che si prende le variabili (nome file e nome directory) includo il file estrai_dati.php per prendere i tag dai file .ogg

    Ecco il file incluso:

    Codice PHP:
    <?
    //function ogg_info($filename) {

    $filename $f;
        
    $fp fopen$filename"r" );
        
    $info = array();
        
    $info['size'] = filesize$filename );
        
    $info['name'] = basename$filename );
        
    $info['path'] = dirname$filename );

        
    $done false;
        while( 
    $done == false ) {
            
    $working fread$fp);
            if( 
    $working == "l" ) {
                
    $working .= fread$fp);
                if( 
    $working == "libVorbis" ) {
                    
    $done true;
                    
    //echo ("sergio");
                
    }
            }
        }

        while( 
    ord$working ) > 31 ) {
            
    $working fread$fp);
        }
        
    $tag "";
        while( 
    $tag != "done" ) {
            
            
    $working "";
            while( ( 
    $working != "=" ) && ( $tag != "done" ) ) { 
                if( 
    ord$working ) > 31 ) {
                    
    $tag .= $working;
                }
                
    $working fread$fp);
                if( 
    $tag == "v" ) {
                    
    $tag .= "o".fread$fp);
                if( ( 
    substr_count$tag"vorbis" ) == ) && ( substr_count$tag"BCV" ) == ) ) {
                        
    $tag "done";
                    } else {
                        
    fseek$fp, ( ftell$fp ) - 10 ) );
                    }
                }
            }

            if( 
    $tag != "done" ) {
                
    $working fread$fp);
                while( 
    ord$working ) > 31 ) {
                    
    $title .= $working;
                    
    $working fread$fp);
                }
                
    $info[$tag] = $title;
                
    $tag "";
                
    $title "";
            }
        }
        
    fclose$fp );
        
        
    //print_r($info);
         
    return $info;
    ?>
    Se "eseguo" il file il processore va al 100%, la pagina non si carica, insomma va in loop.
    Perchè?

    Se eseguo il file per estrarre i dati dandogli un file unico funziona...

    Sergej
    :: Il Deposito
    Canti di protesta politica e sociale
    Archivio di testi e accordi

  2. #2
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    vedo un sacco di sentinelle dei while controlla che prima o poi diventino false altrimenti è ovvio il loop...
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  3. #3
    Ehm, ti puoi spiegare meglio?
    Non conosco troppo di php, ho provato a mettere insieme questi due script non fatti da me

    Sergej
    :: Il Deposito
    Canti di protesta politica e sociale
    Archivio di testi e accordi

  4. #4
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    italia........1

    allora hai quelle scrittine
    while(->sentinella<-){->codice<-}
    ora il codice viene eseguito fintantochè la sentinella ha valore vero (TRUE) quindi se nn diventa mai falsa resti in quel ciclo in eterno.. nn so cosa faccia lo script e dipende dal sistema il comportamento da assumere, in particolare potresti trovarti in situazioni di blocco del processore in pratica il processo si impossessa del pc...
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  5. #5
    Beh, l'effetto è che il processore va al 100%, la pagina non viene caricata e sono costretto a "killare" e riavviare apache.

    Esiste un modo per sapere quale è il punto in cui va in loop?

    Sergej
    :: Il Deposito
    Canti di protesta politica e sociale
    Archivio di testi e accordi

  6. #6
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    studiare il codice, eliminare porzioni gradualmente aspettando l'evento negativo... tale processo fa parte dell'ultimo punto dello sviluppo del software e in gergo è detto debugging.. se hai paura metti delle bandierine (tecnica alternativa di debug) che marchino i vari cicli.. l'ultima flag mostrata a video ti fa da cartina tornasole per il problema (ti dice dov'è il problema)....
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  7. #7
    Ok, ci proverò
    Grazie!
    :: Il Deposito
    Canti di protesta politica e sociale
    Archivio di testi e accordi

  8. #8
    Si pianta nel primo ciclo "while"...
    :: Il Deposito
    Canti di protesta politica e sociale
    Archivio di testi e accordi

  9. #9
    Utente di HTML.it L'avatar di luke83
    Registrato dal
    Jul 2000
    Messaggi
    1,217
    adesso sai che il problema è lì.. controlla quei due if annidati nn setterai mai la $done a true e lui si incaponisce su quel ciclo... giustamente....
    ..::Luca::..
    » "se nn riesci a venirene a capo.. usa il tasto INVIO" © 2005 Luke83
    » "letta la documentazione, spazio all'immaginazione.." © 2006 Luke83
    [frasi random] - [Lucopedia] - [laFetta]

  10. #10
    Scusa la mia ignoranza, ma quello script, se gli mando in pasto un singolo file e non $filename funziona!
    :: Il Deposito
    Canti di protesta politica e sociale
    Archivio di testi e accordi

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.