Robert B.: Funktion funktioniert nicht richtig

Beitrag lesen

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