Klaus: Funktion funktioniert nicht richtig

Guten Tag,

ich habe folgende Funktion:

  
	public function readimages($date)  
	{	  
		define(dir,"media/aufmacher/$date/");  
		$dir = "media/aufmacher/$date/";  
		  
		// read out files	  
		if(!$verz = @opendir($dir))  
		$this->images = '';  
		  
		$files = array();  
	  
		while(false !== ($file = @readdir($verz))) {  
			$files[] = $file;  
		}  
		  
		$fa = array();  
	  
		foreach($files as $f) {  
			if($f != ".." and $f != "." and strpos($f,"thumbs") === false and $f != $dir and is_dir($f) === false)  
			array_push($fa,$f);  
		}  
		  
		$files = $fa;  
	  
		arsort($files,SORT_NUMERIC);  
		  
		$this->images = NULL;  
		  
		foreach($files as $file)  
		{  
			if(!$this->params['all_images'])  
			$this->images = "<img src=\"http://".$_SERVER['SERVER_NAME']."/".$dir.$file."\" alt=\"$file\" />";  
			else  
			$this->images .= "<img src=\"http://".$_SERVER['SERVER_NAME']."/".$dir.$file."\" alt=\"$file\" />";  
		}  
		  
		return $this->images;  
	}  
	  
	function seterror($session = false)  
	{				  
		if($session["error"]["deal"]["text"])  
		{  
			$this->session = $session;  
			$this->error = $session["error"]["deal"]["text"];  
			echo $this->error;  
		}  
		elseif($this->error)  
		{  
			$_SESSION["error"]["deal"]["text"] = $this->error;  
			echo $this->error;  
		}  
	}  
  

wenn ich diese aktiviere, dann funktioniert mein eMail versand leider nicht mehr, wir sind nun soweit gekommen, dass wir wissen, dass diese Funktion den Fehler verursacht. Wir haben auf unserem Server PHP Version 5.3.3 laufen.

Seht ihr vielleicht ein Fehler?

  1. Mahlzeit Klaus,

    wenn ich diese aktiviere,

    Was verstehst Du unter dem "Aktivieren" einer Funktion?

    dann funktioniert mein eMail versand leider nicht mehr,

    Inwiefern? Was genau funktioniert nicht mehr?

    wir sind nun soweit gekommen, dass wir wissen, dass diese Funktion den Fehler verursacht.

    Wir seid "Ihr" darauf gekommen?

    Wir haben auf unserem Server PHP Version 5.3.3 laufen.

    Und was sonst noch so?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Hallo,

      Inwiefern? Was genau funktioniert nicht mehr?

      es werden nach dem Kauf keine eMails verschickt und es wird kein Eintrag in der Datenbank gemacht.

      wir sind nun soweit gekommen, dass wir wissen, dass diese Funktion den Fehler verursacht.

      Wir seid "Ihr" darauf gekommen?

      der Aufruf dieser Funktion wird so gemacht:

        
      	if(!$this->noimage)  
      	$this->readimages($w_out->dgd_datum);  
        
      
      

      wenn wir diesen Aufruf deaktiveren, dann funktioniert der eMail versand + das Eintragen in die Datenbank wieder. Also kann es ja nur an der readimages liegen.

      1. wenn wir diesen Aufruf deaktiveren, dann funktioniert der eMail versand + das Eintragen in die Datenbank wieder. Also kann es ja nur an der readimages liegen.

        Dann würde ich mal schauen, ob da nicht was hilfreiches im error-log steht.

        Jörg Reinholz

  2. Hallo,
    Bin mir nicht sicher, aber könnte mir vorstellen, dass das hier nicht passt:

      
    define(dir,"media/aufmacher/$date/");  
    
    

    "dir" müsste entweder ein Variablenname oder ein String sein.

    Da die anweisung aber eh überflüssig ist, würde ich sie mal rausnehmen und schauen was dann los ist.

    Alternativ dazu mal ins error-Log des Webservers gucken?

    Viele Grüße,
    Jörg

  3. Moin,

    public function readimages($date)  
    

    {
    define(dir,"media/aufmacher/$date/");
    $dir = "media/aufmacher/$date/";

      
    Danach wurde ja schon gefragt …  
      
    
    > ~~~php
    
    		// read out files	  
    
    >		if(!$verz = @opendir($dir))  
    >		$this->images = '';  
    > 		  
    >		$files = array();  
    >	  
    >		while(false !== ($file = @readdir($verz))) {  
    >			$files[] = $file;  
    >		}
    
    

    Was passiert hier, wenn opendir fehlgeschlagen ist und $verz dem entsprechend kein gültiges Verzeichnis-Handle? Mir scheint, dass dieser Fehlerfall nicht (korrekt) behandelt wird.

    	$fa = array();  
    
      foreach($files as $f) {  
      	if($f != ".." and $f != "." and strpos($f,"thumbs") === false and $f != $dir and is_dir($f) === false)  
      	array_push($fa,$f);  
      }
    
      
    Warum findest diese Auswahl erst hier statt? Du kannst die Dateinamen doch schon direkt in der readdir-Schleife prüfen/aussortieren.  
      
    
    > ~~~php
    
    		$files = $fa;  
    
    >	  
    >		arsort($files,SORT_NUMERIC);  
    > 		  
    >		$this->images = NULL;
    
    

    Wenn opendir oben fehlgeschlagen ist, ist $this->images = ''. Und im folgenden wird es gefüllt. Kann es hierbei zu unerwarteten Ergebnissen kommen? Und auch dieser Code könnte bereits in der obigen readdir-Schleife passieren.

    	foreach($files as $file)  
    
      {  
      	if(!$this->params['all_images'])  
      	$this->images = "<img src=\"http://".$_SERVER['SERVER_NAME']."/".$dir.$file."\" alt=\"$file\" />";  
      	else  
      	$this->images .= "<img src=\"http://".$_SERVER['SERVER_NAME']."/".$dir.$file."\" alt=\"$file\" />";  
      }  
        
      return $this->images;  
    

    }

      
    Du missachtest beim Zusammenbauen der Links übrigens [Kontextwechsel](http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel).  
      
    
    > ~~~php
    
    	function seterror($session = false)  
    
    >	{				  
    >		if($session["error"]["deal"]["text"])  
    >		{  
    >			$this->session = $session;  
    >			$this->error = $session["error"]["deal"]["text"];  
    >			echo $this->error;  
    >		}  
    >		elseif($this->error)  
    >		{  
    >			$_SESSION["error"]["deal"]["text"] = $this->error;  
    >			echo $this->error;  
    >		}  
    >	}  
    > 
    
    

    Und auch bei der Fehlerausgabe wird kein Kontextwechsel beachtet.

    wenn ich diese aktiviere, dann funktioniert mein eMail versand leider nicht mehr, wir sind nun soweit gekommen, dass wir wissen, dass diese Funktion den Fehler verursacht.

    Was heißt „funktioniert nicht mehr“, gibt es vielleicht brauchbare Fehlermeldungen?

    Viele Grüße,
    Robert