Php Script unendlich lahm ?!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Php Script unendlich lahm ?!

    Hi Leute

    hab folgendes problem:
    das script unten benutzt zwei tables in ner datenbank:

    media mit etwa 7000 einträgen und
    categories mit etwa 400 einträgen

    das script läuft durch einen verzeichnisbaum mit etwa 7000 files (eben das was in media auch drinsteht) drinnen und fragt dazu die jeweilige 'kategorie', sprich den Ordner auf dem Server welcher in categories definiert wird ab - ist eigetnlich ganz gut ersichtlich ausm script.

    Jetzt aber das problem: das script brauch KRAAASSSS lange zum ausführen - etwa 3 minuten. Hab ich da grundlegend was falsch gemacht oder ist das einfach so lahm?!

    danke für eure hilfe - hier ist der code...


    PHP-Code:
    //
    // STEP 3
    // Mediafiles Updaten und einfügen
    //

    if ($step==3)
        {
        echo 
    "<u><font face=Verdana size=2 color=green><b>Step 3:</b> Show me what you've got! Spidering Mediafiles</u></font><br> <br>";

        
    #echo "<b>Category-Database <font color=red>happily</font> destroyed - now rebuilding...</b><br><br>";

        
    rekursiv_mediafiles($basedir);
        }



    function 
    rekursiv_mediafiles($root)
        {

        
    chdir($root);
        
    $folder opendir($root);

        while (
    $verz readdir($folder))
            {
            if (
    is_dir($verz) && $verz != ".." && $verz != ".")
                {
                
    $path$root;
                
    $newroot "$root/$verz";

                  
    rekursiv_mediafiles($newroot);
                  
    chdir($root);
                 }

              elseif(!
    is_dir($verz))
                  {
                  if (
    substr($verz02)!="t_")
                    {

                    
    $query_exsist "SELECT * FROM media WHERE path = '$path/$verz'";
                    
    $query_exsist mysql_query($query_exsist);
                    
    #$query_exsist = mysql_fetch_row($query_exsist);

                    
    if (mysql_num_rows($query_exsist)=='0')
                        {
                        
    $path$root;
                        
    $query"SELECT id FROM categories WHERE path = '$path'";
                        
    $query_parent_id mysql_query($query);
                        if (
    mysql_num_rows($query_parent_id)>0)
                            {
                            
    $parent_id mysql_result($query_parent_id,0,id);
                            }
                            else {
                            
    $parent_id="0";
                            }
                        
    $query_insert=mysql_query("INSERT INTO media (id,cat_id,path,caption) VALUES ('','$parent_id','$path/$verz','')");
                        echo 
    "<b>$verz</b> - added<br>";
                        }
                    else
                        {
                        
    $path$root;
                        
    $query"SELECT * FROM categories WHERE path = '$path'";
                        
    $query_parent_id mysql_query($query);

                        if (
    mysql_num_rows($query_parent_id)>0)
                            {
                            
    $parent_id mysql_result($query_parent_id,0,id);
                            }
                        else {
                            
    $parent_id="0";
                            }

                        
    $query_update mysql_query("UPDATE media SET cat_id = '$parent_id' WHERE path = '$path/$verz'");
                        echo 
    "<b>$verz</b> - updated<br>";
                        }

                    }
                }
            }
        
    closedir($folder);
        } 

    danke für eure hilfe
    -------------------------
    padauz es ist kaputt

  • #2
    Ich denke mal, da kann man was machen!

    Schmeiß alle SQL-Abfragen aus der rekursiven Routine raus.
    Mache dafür lieber eine SQL Abfrage am Anfang, und übergebe
    das Ergebniss (zB als Array) der Routine. Dann kannst du später
    in der Routine einfach im Array nachschauen, OHNE SQL-Abfrage.

    dann vermeide unnötige Befehle
    PHP-Code:
    {
                
    $path$root;
                
    $newroot "$root/$verz";

                  
    rekursiv_mediafiles($newroot);
                  
    chdir($root);
                } 
    kann man auch kurz machen:
    PHP-Code:
    {
                
    rekursiv_mediafiles("$root/$verz");
                
    chdir($root);

    außerdem mußt du nicht ins Verzeichniss gehen mit chdir()
    um irgendwelche Daten zu erhalten.

    zB. kurz rekursiv die Dateigrößen aufaddiert
    PHP-Code:
    function get_size$folder )
    {
        
    $handle opendir$folder );
        
    $size 0;
        while ( 
    $file readdir $handle ) ) {
            if ( 
    $file != "." && $file != ".." && is_file(  $folder "/" $file ) ) {
                
    $size += filesize$folder "/" $file );
            } elseif ( 
    $file != "." && $file != ".." && is_dir(  $folder "/" $file ) ) {
                
    $size+=get_size($folder "/" $file);
            } 
        } 
        
    closedir$handle );
        return 
    $size;


    echo 
    get_sizedirname__FILE__ ) ); 
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

    Kommentar

    Lädt...
    X