php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 14.03.2011, 11:45  
Neuer Benutzer
 
Registriert seit: 14.03.2011
Beiträge: 14
PHP-Kenntnisse:
Fortgeschritten
Rockound befindet sich auf einem aufstrebenden Ast
Standard Problem bei Bildverarbeitung -- Internal Server Error

Hallo Leute,

ich bin neu hier und hoffe dass ihr mir bei meinen Problem helfen könnt. Ich habe ein PHP-Script erstellt wo der Kunde mit 3 Schritten eine Galerie erstellen kann.
Schritt 1: Galerie erstellen (funktioniert)
Schritt 2: Bilder hochladen (funktioniert)
Bilder werden in ein Temp Ordner gespeichert um sie im Schritt 3 weiterverarbeiten zu können.

Schritt 3: Ordner mit dem Galerienamen erstellen, Bilder aus dem Temp Ordner auslesen, die Größe Ändern, mit einem Wasserzeichen versehen und dann in den Galerieordner speichern.
Das Script funktioniert zwar und es führt auch alles aus was es ausführen soll, jedoch seitdem ich es am echten Kundenserver einsetze kommt immer nach ein paar Sekunden "500 Internal Server Error". Ich habe mich mit der Hostingfirma in verbindung gesetzt und die haben mir gesagt, dass es nicht am Timeout liegt sondern am Memory. D.h. nach einigen Bildern ist der Memory einfach zu voll und er bricht das Script ab.

Ich hab aber nach jedem imagecreate immer ein imagedestroy. Ich weiß langsam echt nicht mehr weiter.... bitte um Hilfe!!!

Hier der Code von Schritt 3:

PHP-Code:
$album $_POST['album'];
        
$target_path "images/alben/";
        
$neuer_path $target_path.$album."/";
        
$thumbs_path $target_path.$album."/thumbs/";
        
$fh opendir("images/alben/temp"); //Verzeichnis
        
        
$verzeichnisinhalt = array();
        
            while (
true == ($file readdir($fh)))
            {
            if ((
substr(strtolower($file), -3)=="jpg"))   
            {        
                
$verzeichnisinhalt[] = $file;
            }    
            }
            
            
            
            
$Wasserzeichen imagecreatefrompng("images/wasserzeichen.png");
            
            
                for(
$i=0;$i<count($verzeichnisinhalt);$i++)  {
                                    
                    
$bild "images/alben/temp/".$verzeichnisinhalt[$i];
                    
$imagedata getimagesize($bild);        
                    
$breite $imagedata[0];
                    
$hoehe $imagedata[1];
                    
                    
$x 500;
                    
$y intval($hoehe $x $breite);
                    
                    
                    
$img imagecreatefromjpeg($bild);
                    
$thumb imagecreatetruecolor ($x$y);
                    
                    
imagecopyresampled ($thumb$img0,0,0,0,$x,$y,$imagedata[0],$imagedata[1]);
                    
imagejpeg($thumb,$neuer_path.$verzeichnisinhalt[$i],100);
                    
imagedestroy($img);
                    
imagedestroy($thumb);
                    
                    
$bild $neuer_path.$verzeichnisinhalt[$i];
                    
$imagedata getimagesize($bild);        
                    
$breite $imagedata[0];
                    
$hoehe $imagedata[1];
                    
                    
$x 500;
                    
$y intval($hoehe $x $breite);
                    
                    
                    
$img imagecreatefromjpeg($bild);
                    
$thumb imagecreatetruecolor ($x$y);
                    
imagecopy($img$Wasserzeichen,
                    
imagesx($img)-imagesx($Wasserzeichen),
                    
imagesy($img)-imagesy($Wasserzeichen), 00,
                    
imagesx($Wasserzeichen),
                    
imagesy($Wasserzeichen));
                    
imagecopyresampled ($thumb$img0,0,0,0,$x,$y,$imagedata[0],$imagedata[1]);
                    
imagejpeg($thumb,$neuer_path.$verzeichnisinhalt[$i],100);
                    
imagedestroy($img);
                    
imagedestroy($thumb);
                    
                    
$bild2 "images/alben/temp/".$verzeichnisinhalt[$i];
                    
$imagedata getimagesize ($bild2);
                    
                    
$breite $imagedata[0];
                    
$hoehe $imagedata[1];
                    
                    if(
$breite $hoehe) {
                    
$x 150;
                    
$y intval($hoehe $x $breite);
                    } else {
                    
$y 112;
                    
$x intval($breite $y $hoehe);
                    }
                    
                    
                    
$img imagecreatefromjpeg($bild2);
                    
$thumb imagecreatetruecolor ($x$y);
                    
                    
imagecopyresampled ($thumb$img0,0,0,0,$x,$y,$imagedata[0],$imagedata[1]);
                    
imagejpeg($thumb,$thumbs_path.$verzeichnisinhalt[$i],100);
                    
imagedestroy($img);
                    
imagedestroy($thumb);
                    
unlink ("images/alben/temp/".$verzeichnisinhalt[$i]);
                    
                    
                    
$thumbpfad $thumbs_path.$verzeichnisinhalt[$i];
                    
$fotopfad $neuer_path.$verzeichnisinhalt[$i];
                    
                    
$sql "INSERT INTO fotos SET
                            album = '"
.mysql_real_escape_string($album)."',
                            thumb = '"
.mysql_real_escape_string($thumbpfad)."',
                            foto = '"
.mysql_real_escape_string($fotopfad)."'";
                            
mysql_query($sql);    
                
                }
                
            
            
$m_fotos "Die Fotos wurden erfolgreich zum Album ".$_POST['album']." hinzugef&uuml;gt!"
Danke schon mal im vorraus!!!
Rockound ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.03.2011, 12:33  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Rockound Beitrag anzeigen
D.h. nach einigen Bildern ist der Memory einfach zu voll und er bricht das Script ab.

Ich hab aber nach jedem imagecreate immer ein imagedestroy.
Das hilft dir aber wenig, wenn ein Bild bereits ausreicht, um den Speicher aufzubrauchen ...

Wie hoch ist denn das Limit eingestellt, und welche Pixel-Maße haben Bilder mit denen es nicht funktioniert?
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 14.03.2011, 12:42  
Neuer Benutzer
 
Registriert seit: 14.03.2011
Beiträge: 14
PHP-Kenntnisse:
Fortgeschritten
Rockound befindet sich auf einem aufstrebenden Ast
Standard

Nein, es wird nicht nach dem ersten Bild abgebrochen,.. er macht bei Originalbilder mit der Größe von 600px Breite ungefähr 30-50 Stück und dann bricht er ab,.. und wenn man jetzt aber Bilder nimmt wo eines 2-3MB hat, dann bricht er schon nachn 3ten oder 4ten ab.

Laut dem Hoster sind es 92MB Memory.

Es funktioniert also mit jeden Pixelmaßen,.. nur variiert mit der Größe der Bilder auch die Anzahl der Biler die aufeinmal verarbeitet werden können bis der Internal Server Error kommt.
Rockound ist offline   Mit Zitat antworten
Alt 14.03.2011, 12:50  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Dann probier doch mal, lokal memory_get_usage(true) ans Ende der Schleife zu setzen, und schau ob das immer mehr wird, oder halbwegs konstant bleibt.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 14.03.2011, 13:56  
Neuer Benutzer
 
Registriert seit: 14.03.2011
Beiträge: 14
PHP-Kenntnisse:
Fortgeschritten
Rockound befindet sich auf einem aufstrebenden Ast
Standard

Also ich hab das jetzt lokal auf meinem Rechner getestet, und es bleibt immer komplett gleich,...

also was hat das jetzt zu bedeuten?

Geändert von Rockound (14.03.2011 um 14:49 Uhr).
Rockound ist offline   Mit Zitat antworten
Alt 14.03.2011, 15:01  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

dass dein Speicher wohl auf 8 bis 12 MB begrenzt ist - da reicht imagedestroy im Zweifel nicht, weil er zwar das Bild "vernichtet", aber der angeforderte Speicher erst vom garbage_collector freigegeben werden muss. .. Versuch mal mit dem Serverbetreiber zu reden, ob ihr nicht "ein wenig" mehr Speicher bekommen könnt ... und desweiteren musst du wohl deine Software so umschreiben, dass die Bilder nicht alle in einem Rutsch verarbeitet werden, sondern gruppenweise
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 14.03.2011, 15:10  
Neuer Benutzer
 
Registriert seit: 14.03.2011
Beiträge: 14
PHP-Kenntnisse:
Fortgeschritten
Rockound befindet sich auf einem aufstrebenden Ast
Standard

Aber ich hab mit dem Serverbetreiber schon über die Speichergröße gesprochen,.. und er hat mir gesagt das dieser Server 92MB Speicher hat,...
Rockound ist offline   Mit Zitat antworten
Alt 14.03.2011, 15:16  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

einmmal bitte
PHP-Code:
<?PHP
phpinfo
();
als neues Script speichern und aufm Server ausführen - das sollte dir den Stand der Konfiguration bezüglich Speicher und allem andern angeben
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 14.03.2011, 15:22  
Neuer Benutzer
 
Registriert seit: 14.03.2011
Beiträge: 14
PHP-Kenntnisse:
Fortgeschritten
Rockound befindet sich auf einem aufstrebenden Ast
Standard

ok habe ich gemacht,.. ich find in der phpinfo nur eine sache mit memory_limit und das ist "se_memory_limit 1024M" hilft euch das weiter?

weitere vielleicht wichtige Werte:
max_execution_time = -1
post_max_size = 25M
Rockound ist offline   Mit Zitat antworten
Alt 14.03.2011, 15:27  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

versuch mal nur "memory_limit" zu finden ...

ansonsten wirst du wohl vor dem Problem stehen, dass dieser Webserver für mehrere Domains da ist , und der Speicher daher geteilt wird.

max_execution_time ... sehr interessant, da scheint kein Limit zu bestehen ... normal stehen da meist so um die 30 Sekunden ...
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ein unverständliches Server Performance Problem da.eXecutoR PHP-Fortgeschrittene 14 14.02.2011 11:02
500 Internal Server Error gekko PHP Tipps 2010 7 28.09.2010 14:29
500 Internal Server Error gekko PHP Tipps 2010 7 23.09.2010 10:55
[Erledigt] SMTP -&gt; ERROR: Failed to connect to server: Connection refused (111) Broox PHP Tipps 2010 21 11.09.2010 18:54
Problem mit Terneroperator Fehler Parse error: syntax error, unexpected T_RETURN litterauspirna PHP Tipps 2010 5 23.05.2010 17:03
Problem mit Server -Response/Request Schlafbaer Scriptbörse 7 05.04.2010 21:56
[Erledigt] 500 - Internal Server Error (plötzlich) Capfly Server, Hosting und Workstations 2 09.10.2009 18:25
[Erledigt] Apache install geht nicht SteiniKeule Server, Hosting und Workstations 7 27.02.2009 08:40
Problem mit SQLite(bzw. Server) coder Datenbanken 8 18.10.2007 14:51
Oracle Server Problem FireFIghter PHP Tipps 2006 0 02.10.2006 15:02
Problem mit Verbindung von anderem Server Datenbanken 2 08.11.2005 13:43
Internal Server Error PHP Tipps 2004-2 11 24.11.2004 18:44
Internal Server Error Skazi PHP Tipps 2004 2 06.10.2004 22:31
Internal Server Error PHP Tipps 2004 2 09.09.2004 19:07
Server Error bei Suche von Wörtern mit Umlauten PHP Tipps 2004 4 23.06.2004 15:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
internal server error bilddatei, imagejpeg internal server error, php image internal server error, php imagepng error 500 mehr als ein bild, php temp bild erstellen, php imagecreatefromjpeg 500 internal server error, php copy png aus tempverzeichnis, bilder hochladen thumbs schleife timeout, bilder aus ordner auslesen mit wasserzeichen, trotz imagedestroy speicher voll, bildverarbeitung server, php bilder hochladen temp verzeichniss, se_memory_limit apache, imagecreatefromjpeg 500 memory, error nach minibild erstellung

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum