kostenloser Webspace werbefrei: lima-city


Suchscript bricht bei unterordner ohne fehler ab...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    Hallo, ich habe ein Suchscript, und wenn ich damit einen Ordner durchsuche, in dem sich kein Unterordner befindet, dann klappt alles wunderbar.
    Wenn es dort aber einen Unterordner gibt, dann bricht das Script ab, ohne ein Fehler oder ähnliches nicht einmal der Text hinter dem Script wird ausgeführt.

    CODE:

    <?php
    error_reporting(E_ALL);
    	if($_POST['suchbegriff'] != "") {
       
    $treffer = array();
    $treffer_final = array();
    $subdirs = array();
       function search($dir) 
       { 
    
    global $treffer, $treffer_final, $subdirs;
    
    
          $dirh=opendir($dir); 
          while($filename=readdir($dirh)) 
          { 
             if($filename!=".." && $filename!=".") 
             { 
                if(is_file($dir.$filename)) 
                {
    	$pos = strpos($filename, $_POST['suchbegriff']);
    	if ($pos === false) {
                }
    else {
    	     $treffer[] = $dir.$filename;
    }
    } 
                elseif(is_dir($dir.$filename)) 
                {
    $subdirs[]=$dir.$filename."/"; 
    	$pos = strpos($filename, $_POST['suchbegriff']);
    	if ($pos === false) {
                } 
    else {
    	     $treffer[] = $dir.$filename;
    }
                  
                } 
             } 
          } 
    foreach($treffer as $ziel) {
    $treffer_final[] = $ziel;
    }
          closedir($dirh); 
    
    
          for($i=0;$i<count($subdirs);$i++) 
          { 
             search($subdirs[$i]);
          } 
    
       } 
    search($rootdir.$_POST['dir']);
    echo"<pre>";
    print_r($treffer);
    print_r($subdirs);
    print_r($treffer_final);
    echo"</pre>";
    
    	}
    ?>


    Beitrag geändert: 19.8.2007 4:59:09 von speedtouch92
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich habe mir erlaubt deinen Code zu kopieren und bei mir zu testen. Ich habe auch gleich eine Lösung deines Problems gefunden.



    <?php 
    error_reporting(E_ALL);
    
    if($_POST['suchbegriff'] != "")
    {     
    	$treffer = array(); 
    	$treffer_final = array(); 
    	$subdirs = array();
    
        //Hauptfunktion der suche
        //Schritt 1: Alle vorhanden Unterordner aufspüren
        //Schritt 2:: Alle nach den gesuchten Dateien durchsuchen
        function search($dir)
        {
        	global $subdirs, $treffer, $treffer_final;
            $subdirs[] = $dir;
        	$dirh = opendir($dir);
            while($filename=readdir($dirh))  
        	{  
        		if($filename!=".." && $filename!=".")  
            	{   
                	if(is_dir($dir.$filename))  
                	{ 
    					$subdirs[]=$dir.$filename."/";
                        searchSubdirs($dir.$filename."/");  
                    } 
    			}  
    		}
            for($i=0;$i<count($subdirs);$i++)  
        	{  
    			findFile($subdirs[$i]); 
        	}
            foreach($treffer as $ziel)
        	{ 
    			$treffer_final[] = $ziel; 
    		}
        }
        
        //Durchsucht auschließlich die Ordner und prüft ob dort Unterordner enthalten sind
        function searchSubdirs($dir)
        {
        	global $subdirs;
        	$dirh = opendir($dir);
            while($filename=readdir($dirh))  
        	{  
        		if($filename!=".." && $filename!=".")  
            	{   
                	if(is_dir($dir.$filename))  
                	{ 
    					$subdirs[]=$dir.$filename."/";
                        searchSubdirs($dir.$filename."/");  
                    } 
    			}  
    		}
            closedir($dirh);
        }
        
        //Durchsucht einen Ordner nach der gesuchten Datei
    	function findFile($dir)  
    	{  
    
    		global $treffer; 
    		$dirh=opendir($dir);  
        	while($filename=readdir($dirh))  
        	{  
        		if($filename!=".." && $filename!=".")  
            	{
            		if(is_file($dir.$filename))  
                	{ 
      					$pos = strpos($filename, $_POST['suchbegriff']); 
        				if ($pos === false)
                    	{ 
                		} 
    					else
                    	{ 
             				$treffer[] = $dir.$filename; 
    					} 
    				}    
    			}  
    		}
        	closedir($dirh);  
    	} 
         
    	search($_POST['dir']);
        
        //Am Ende alles schön auf dem Bildschirm anzeigen 
    	echo"<pre>"; 
    	print_r($treffer); 
    	print_r($subdirs); 
    	print_r($treffer_final); 
    	echo"</pre>"; 
    }
    else
    {
    	echo("Ohne Suchbegriff keine suche :-(");
    }
    ?>


    Es gab keine Fehlermeldung da dein Script den Server überlastet hat. Deine Funktion war so konstruiert, dass es merhfach eine for Schleife erzeugt. Wenn man alle diese Schleifen aufschreiben würde, hätte sich folgendes Bild ergeben:

    for($i=0;$i<count($subdirs);$i++)  //Schleife 1
    {  
        for($i=0;$i<count($subdirs);$i++)  //Schleife 2
        {  
             for($i=0;$i<count($subdirs);$i++)  //Schleife 3
             {  
                   //Es könnten noch mehr folgen 
             }
        }
    }


    Der Fehler ist folgender. Jede for Schleife testet die selbe Bedingung anhand der selben globalen Variable, stimmts? Das ist das Problem: Die Bedingung verändert sich innerhalb der for-Schleife. Denn deine Funktion search hängt ja an $subdirs ja weitere Daten ran, wenn sie Unterordner findet. Somit verändert sich das Ergebnis von count. So was ist nicht zu empfehlen, da sowas schnell auser kontrolle geraten kann und dann hängt sich das Script eben auf.

    Ein weiterer Fehler war, wie du sehen kannst beginnt jede for-schleife mit einer neuen.
    Ist jetzt schwer zu erklären, in einem Handbuch stehen 2 Seiten darüber drinne. Merke dir einfach, dass in einem Script immer nur eine for-Schleife gleichzeitig laufen darf. So ein Bild hier ist für den Server viel besser:

    for(bedingung)
    {  
        //Tu was
    }
    
    for(bedingung)
    {  
        //Tu was
    }


    Der Server wirds dir danken^^

    Solltest du etwas nicht verstanden haben frage einfach.

    mfg draconien

    Beitrag geändert: 19.8.2007 8:24:38 von draconien
  4. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    Danke, alles perfekt.
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!