Visualizzazione dei risultati da 1 a 4 su 4

Discussione: query in time-out

  1. #1

    query in time-out

    Il mio problema è questo ho una catella che contiene circa 6000 cartelle e all'intreno di ogni cartella ci sono dei file.
    Perciò devo aprire ogni cartella e leggere i file che ci sono dentro e quindi interrogare il DB ogni volta
    Io devo verificare se il path di ogni file è presente in un DB e se non è presente cancellare il file.
    Io ho fatto una prova con questo script

    Codice PHP:
    $db mysql_connect("localhost","user","pass");
    mysql_select_db("dati",$db);
    $dirn="../messages";
            
    $dir=@opendir($dirn);
    @
    rewinddir($dir);
       while(
    false!==($file = @readdir($dir)) ) {
    if(
    $file!="." && $file!=".." )
    {
    $dirn1="$dirn/$file";
    $dir1=@opendir($dirn1);
    @
    rewinddir($dir1);
       while(
    false!==($file1 = @readdir($dir1)) ) {
    if(
    $file1!="." && $file1!=".." )
    {
            
    $pro="$dirn1/$file1";
            
            
    $requete "select utente from messages where foto_path='$pro'";
            
    $result mysql_query ($requete,$db);
            
    $article =mysql_fetch_object($result);
            
    mysql_free_result($result);

            
            
            if(
    $article=="")
            echo 
    "il file $pro non c'è 
    "
    ;
            
    //unlink($v);  
            
            
    }
    }

    }


    Il problema è che non mi fa nessun errore ma va avanti per moltissimo tempo ma non termina l'esecuzione dello script.
    Vorrei sapere come poter ottimizzare la cosa rendendo tutto più leggero
    Grazie KK

  2. #2
    Lo script va in time out perchè i file da analizzare (cartelle e file) sono tantissimi! Il limite massimo di default è di 30 secondi e dubito che in così poco tempo lo script riesca a fare quello che ti serve.

    Ci sono cmq alcune soluzioni.
    La prima potrebbe essere quella di effettuare un primo passaggio e di memorizzare il path di tutti i file in un db.
    Il confronto tra path, quindi, andrebbe fatto sul db direttamente.

    Dovresti seguire più o meno questa procedura:
    1) Analizzi il filesystem e lo memorizzi sul db (per ogni path inserisci un record nel db)
    2) Lanci un altro script che estrae dal db il filesystem precedentemente creato e i path che vuoi conservare memorizzando il tutto in due array
    3) Esegui il confronto tra i due array per vedere quali file vanno cancellati
    4) Cancelli i file

    I passaggi sono questi. Ovviamente, come detto, non puoi eseguirli tutti in una volta.
    Io ti consiglio di eseguire prima il il passaggio n°1, in un secondo momento esegui i pssaggi 2, 3 e 4. In questo modo dovresti farcela. Se cmq non ci riesci allora studieremo un altro metodo.
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    non ho letto bene il codice, mi pare di capire che fai una query per ogni nome di file....

    farei diversamente. Caricherei in un array i nomi di file, in un altro array quelli estratti dal db,
    poi farei array_diff() e cancellerei tutti i nomi risultanti nella differenza tra array.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    vi ringrazio ho adottato la soluzione di piero e funziona perfettamente ed e' anche molto veloce
    Ciao KK

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 © 2026 vBulletin Solutions, Inc. All rights reserved.