Script "einfacher" machen?

aargau

Erfahrenes Mitglied
Ich habe für meine Partypage ein Script Programmiert, das die Fotografen nicht alle Bilder einzeln Hochladen müssen. Nun ist dieses Script leider etwas lastig und bei meinem Server kommt es so entweder zu einem Timeout oder ein Fatal Error weil der Arbeitsspeicher überschritten wurde. Nun wollte ich Fragen ob man dies etwas einfacher gestallten kann, das es vieleicht nicht so viel Last braucht?

Das scipt macht Folgendes:
Ordner erstellen
Bilder auslesen, einzeln in DB schreiben
Verkleiner
Thumb erstellen

PHP:
<?php
	if ($_SESSION['user_status'] == 2)
	{
include("access/connect.php") ;
$pfad_of_pic = $_POST["pfad"] ;
$event = $_GET["event"] ;
$uploaddir = "fotos/".$pfad_of_pic ;
$pfad_of_pic = $uploaddir ;
 $dir = "img/event/".$event."/pic/" ;
 $dir1 = "img/event/".$event."/thumb/" ;
 $ip = getenv("REMOTE_ADDR");
   mkdir($dir,0777,TRUE);
      mkdir($dir1,0777,TRUE);
$handle = opendir($pfad_of_pic);
while ($file = readdir ($handle)) {
    if($file != "." && $file != "..") {        
 $filename = $file ;
// Bilder Verkleinern , Thumbs
 if($filename)
		{
$sql = "SELECT idv FROM eventpic WHERE pic like '$dir$filename'"; 
$result = mysql_query ($sql); 

if (mysql_num_rows ($result) == 0) 
			{
$fileinfos = getimagesize("$uploaddir/$filename");  
$type = $fileinfos[2]; // 2 = JPG  

if ($type != 2)  
{  
unlink("$uploaddir/$filename"); // Löschen  
echo "Fehler! Das Bild ist kein Bild des Types JPG! " ; exit ;
}  

$size = getimagesize("$uploaddir/$filename");  
$width = $size[0];  
$height = $size[1];  
if($width > 510)
{
$width_tn = 510;  
$height_tn = intval($height * $width_tn / $width);  

$picture = ImageCreateFromJPEG("$uploaddir/$filename");  
$picture_tn = ImageCreateTrueColor($width_tn,$height_tn);  
ImageCopyResampled($picture_tn,$picture,0,0,0,0,$width_tn,$height_tn,$width,$height);  

ImageJPEG($picture_tn, $dir.$filename,95);
} else 
{ 
copy("$uploaddir/$filename","$dir$filename") ;
}

$size1 = getimagesize("$uploaddir/$filename");  
$width1 = $size1[0];  
$height1 = $size1[1]; 
$width_tn1 = 170;  
$height_tn1 = intval($height1 * $width_tn1 / $width1);  

$picture1 = ImageCreateFromJPEG("$uploaddir/$filename");  
$picture_tn1 = ImageCreateTrueColor($width_tn1,$height_tn1);  
ImageCopyResampled($picture_tn1,$picture1,0,0,0,0,$width_tn1,$height_tn1,$width1,$height1);  
ImageJPEG($picture_tn1,"$dir1$filename",95);


$sql = "INSERT INTO eventpic (pic, thumb ,event ,ip) VALUES".
"('$dir$filename', '$dir1$filename', '$event', '$ip')"; 
  mysql_query ($sql); 
echo "Eingetragen: Bild: $dir$filename Thumb: $dir1$filename<br>" ; 
			}}
		} else {
			echo "Fehler beim eintragen von $filename<br>" ; 
		}
}
}

?>
 
hmm das schon, aber dann müsste ich sie entweder bereits auf dem PC immer auf die richtige Grösse anpassen oder aber danach dies auch wieder tun, was dann +/- auf das gleiche kommt. Im moment hab ich es ja so, das er überprüft ob das bild schon in der DB ist oder nicht. Somit kann man das Script einfach nochmals laden und dann werden auch die restlichen Bilder Verkleinert und Eingetragen.
 
Ich hab mir jetzt deinen Code mal etwas näher angesehen. Warum gibst du, nachdem du das Thumbnail erstellst hast die Bilddaten nicht wieder frei (aus dem Arbeitsspeicher)? imagedestroy() sollte dein Problem beseitigen.
 
habe kein Rootserver, daher kann ich an der php.ini nichts ändern... Das Time Out steht auf 30Sukunden.

Die idee mit dem Imagedestroy() werde ich versuchen. Dies würde wohl zumindest das Arbeitsspeicherproblem lösen :)
 
Zurück