ich überlasste wohl meinen Server, aber weiß nicht warum

BMo

Mitglied
Hi Leute,
ich hab ein kleines Script geschrieben, das Bilder aus einem Ornder auf dem Server ausließt und daraus eine Galerie bastelt.
Das Problem ist, dass das ganze bei Bild 27, manchmal 28 oder auch 29 aufhört.
Dies lässt mich darauf schließen, dass der Abbruch wohl irgendwie mit der Auslastung des Server zusammenhängt.

Ich zeig euch einfach mal ein Stück testCode:
PHP:
$dh = opendir( $dirname ) or die("Der Ordner ist nicht vorhanden oder er ist leer!");
				if ($dh){
					while ( $file = readdir( $dh ) ) {
						if ($file != '.' && $file != '..' && $file != '.htaccess'&& $file != 'index.htm'&& $file != 'Thumbs.db') {
							  $me=($dirname.$file);//pfad und Datei
							  $methumb = ($dirname."tn_".$file);
							  $extension = array_pop(explode(".", $file));
							  $extension = strtolower($extension);
							  if(($extension=="jpeg"||$extension=="jpg"||$extension=="tif"||$extension=="gif"||$extension=="png"||$extension=="bmp")&&strpos($file,"tn_")===false){
								    quadThumb( $me,  $methumb , 70 );	// Thumbs erstellen
									$vorschaubild='<img border="1" style="border-color:#000000; border-style:solid; border-width:1px;" width="70" hspace="5" vspace="5" src="'.$methumb.'" alt="Vorschaubild"><input name="bild'.($bildzahl).'" type="hidden" value="'.$me.'">';
									echo '<td align="center">'.$vorschaubild.'</td>';
.......

nun hier die Tumb Funktion nach dem Tutorial von http://www.traum-projekt.com/
PHP:
//create thumbnails von Copyright (C) http://www.traum-projekt.com/forum/73-workshops-und-tutorials/106336-tutorial-einfaches-galerie-script-thumbnail.html

function quadThumb( $Bild, $ThumbDateiname, $ThumbKantenLaenge )
{
	// Masse ermitteln
	$OriginalBildInfo   = getimagesize( $Bild );
	$OriginalBildBreite = $OriginalBildInfo[0];
	$OriginalBildHoehe  = $OriginalBildInfo[1];
	$OriginalKantenLaenge = $OriginalBildBreite < $OriginalBildHoehe ? $OriginalBildBreite : $OriginalBildHoehe;
	// Temporaeres Bild vom Original erzeugen
	$system=explode('.',$Bild);
	if (preg_match('/png|PNG/',$system[sizeof($system)-1])){
		$TempBild=imagecreatefrompng($Bild);
	}else if (preg_match('/gif|GIF/',$system[sizeof($system)-1])){
		$TempBild=imagecreatefromgif($Bild);
	}else if (preg_match('/jpg|jpeg|JPG|JPEG|jpg/',$system[sizeof($system)-1])){
		$TempBild=imagecreatefromjpeg($Bild);
	}else{
		$TempBild=imagecreatefromjpeg($Bild);
	}
	// Neues Bild erstellen
	$NeuesBild = imagecreatetruecolor( $OriginalKantenLaenge, $OriginalKantenLaenge );
	// Originalbild in neues Bild einfügen
	if ($OriginalBildBreite > $OriginalBildHoehe)
	{
		imagecopy( $NeuesBild, $TempBild, 0, 0, round( $OriginalBildBreite-$OriginalKantenLaenge )/2, 0, $OriginalBildBreite, $OriginalBildHoehe );
	}
	else if ($OriginalBildBreite <= $OriginalBildHoehe )
	{
		imagecopy( $NeuesBild, $TempBild, 0, 0, 0, round( $OriginalBildHoehe-$OriginalKantenLaenge )/2, $OriginalBildBreite, $OriginalBildHoehe );
	}
	
	$Thumbnail = imagecreatetruecolor( $ThumbKantenLaenge, $ThumbKantenLaenge );
	imagecopyresampled( $Thumbnail, $NeuesBild, 0, 0, 0, 0, $ThumbKantenLaenge, $ThumbKantenLaenge, $OriginalKantenLaenge, $OriginalKantenLaenge );
	// Neues Bild ausgeben
	if (preg_match("/png/",$system[sizeof($system)-1])){
		imagepng( $Thumbnail, $ThumbDateiname);
	} 
	if (preg_match("/gif/",$system[sizeof($system)-1])){
		imagejpeg( $Thumbnail, $ThumbDateiname);
	}else {
		imagejpeg( $Thumbnail, $ThumbDateiname); 
	}
	imagedestroy( $Thumbnail );
	imagedestroy( $TempBild );
	imagedestroy( $NeuesBild );
	
}

Was mach ich falsch? Was kann ich tun?
Danke!
 
Wieso kopierst du erst das Original um dann erst von der Kopie eine Miniatur zu erzeugen? Und erzeugst du die Miniaturen bei jedem Aufruf oder nur einmalig?
 
Ja,stimmt, ich hatte mal vor noch das orginalbild zu verkleinern.
Jetzt schaffe ich es zumindest auf 34 Bilder.
Aber bei 400Bilder noch nicht so toll.
PHP:
function quadThumb( $Bild, $ThumbDateiname, $ThumbKantenLaenge )
{
	// Masse ermitteln
	$OriginalBildInfo   = getimagesize( $Bild );
	$OriginalBildBreite = $OriginalBildInfo[0];
	$OriginalBildHoehe  = $OriginalBildInfo[1];
	$OriginalKantenLaenge = $OriginalBildBreite < $OriginalBildHoehe ? $OriginalBildBreite : $OriginalBildHoehe;
	// Temporaeres Bild vom Original erzeugen
	$system=explode('.',$Bild);
	if (preg_match('/png|PNG/',$system[sizeof($system)-1])){
		$TempBild=imagecreatefrompng($Bild);
	}else if (preg_match('/gif|GIF/',$system[sizeof($system)-1])){
		$TempBild=imagecreatefromgif($Bild);
	}else if (preg_match('/jpg|jpeg|JPG|JPEG|jpg/',$system[sizeof($system)-1])){
		$TempBild=imagecreatefromjpeg($Bild);
	}else{
		$TempBild=imagecreatefromjpeg($Bild);
	}
	// Neues Bild erstellen
		
	$Thumbnail = imagecreatetruecolor( $ThumbKantenLaenge, $ThumbKantenLaenge );
	imagecopyresampled( $Thumbnail, $TempBild, 0, 0, 0, 0, $ThumbKantenLaenge, $ThumbKantenLaenge, $OriginalKantenLaenge, $OriginalKantenLaenge );
	// Neues Bild ausgeben
	if (preg_match("/png/",$system[sizeof($system)-1])){
		imagepng( $Thumbnail, $ThumbDateiname);
	} 
	if (preg_match("/gif/",$system[sizeof($system)-1])){
		imagejpeg( $Thumbnail, $ThumbDateiname);
	}else {
		imagejpeg( $Thumbnail, $ThumbDateiname); 
	}
	imagedestroy( $Thumbnail );
	imagedestroy( $TempBild );	
}
Ich hab etwas rechachiert und bin auf folgenden Beitrag gekommen:
http://www.tutorials.de/forum/newreply.php?do=newreply&noquote=1&p=1691821

Da ich keine ini-änderungen durchführen kann, würde es etwas bringen, das script zu splitten?
 
Noch einmal zu meiner zweiten Frage: Erzeugst du die Miniaturen bei jedem Aufruf oder nur einmalig?
 
nun, das Script ist nur für einen Admin gedacht.
Dieser läd in einen Ordner Bilder hoch und gibt den Pfad im Script an.
Im zweiten Schritt werden die Tumbs einmalig erzeugt und der Admin bekommt eine Vorschauansicht, in der er noch Titel unter die Bilder schreiben kann.
Danach speichert er und die Galerie wird übernommen.
Also erzeug ich die tumbs nur einmal.
In meiner Schleife(siehe oben) wird zudem überprüft, ob das Bild schon ein Tumb ist:
)&&strpos($file,"tn_")===false), dann brauch ich es nämlich nicht mehr erzeugen.
Grüße
 
Ja, du könntest an den ini Werten drehen, grundsätzlich wäre es m. E. n. ratsamer das Skript in mehreren Schritten ablaufen zu lassen.

Denn 400 Bilder zu bearbeiten und dann Thumbnails davon zu erstellen mit PHP ist frisst halt Ressourcen.Der Abbruch findet wahrscheinlich statt, aufgrund der max_execution_time. Oder eben, wenn die Bilder zu groß sind (Achtung, PHP arbeitet mit unkomprimierten Bildern, die können extrem groß werden), dann betrifft es das memory_limit.

/edit:
Übrigens, wir sind keine Vollzeitforenbenutzer, also brauchst du nicht bereits nach einer Stunde deinen Beitrag zu pushen, das verstößt hier auch gegen die Netiquette.
 
Zurück