ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
481
481
EMPFEHLEN
-
Hallo!
Ich habe ein Bilduploadscript, das mir den Bildupload ermöglicht, und falls die Datei größer als 200*200 Pixel ist, ein kleines draus macht.
Alles in allem funktioniert das Script auch!
Allerdings hab ich da ein Problem mit meinem Server: Und zwar wenn das Bild ungefähr 2 MB überschreitet, läuft der 16 MB Speicher über!
Ich bekomme dann die Meldung "Allowed Size..
Hier mal das ganze Script:
Kann mir da jemand weiterhelfen? Vielleicht kennt ihr auch ein Script mit den gleichen Funktionen (Bild resize, Dateinnamenänderung) das "richtig" funktioniertPHP-Code:<?php
include("../db/config2.php");
// Grundeinstellungen festlegen
$pref_device = "bilder/"; // Uploadpfad (absolut) vom Root aus gesehen
$pref_maxsize = 16777216; // Maximale Dateigroesse in Bytes (KB x 1024)
$max_x = 200; // maximale bildbreite in px
$max_y = 200; // maximale bildhoehe in px
$pref_maxlength = 40; // Maximale Laenge des Dateinamens inklusive Dateiendung
$userid = $_GET["userid"]; //UserID aus URL lesen
if (isset($_FILES['userpic'])) {
$filename = $_FILES['userpic']['name'];
$file = $_FILES['userpic']['tmp_name'];
#################################################################
### dateigröße anpassen ###
// bild verkleinern, wenn zu groß
$tmpfile[1] = $file;
for($i=1;;$i++){
$file_size = filesize($tmpfile[$i]);
if($file_size > $pref_maxsize){
$tmpfile[$i+1] = tempnam($pref_device, $filename.'_'.$i);
// bildinfo
$picnfo = GetImageSize($tmpfile[$i]);
$new_width = $picnfo[0] / 20 * 19;
$new_height = $picnfo[1] / 20 * 19;
// leeres bild erzeugen
$destimg = ImageCreateTrueColor($new_width, $new_height) or die("problem in creating empty image");
// temp. bild einlesen
switch ($picnfo[2]) {
case 1:
$srcimg = ImageCreateFromGIF($tmpfile[$i]) or die("Problem In opening Source Image");
break;
case 2:
$srcimg = ImageCreateFromJPEG($tmpfile[$i]) or die("Problem In opening Source Image");
break;
case 3:
$srcimg = ImageCreateFromPNG($tmpfile[$i]) or die("Problem In opening Source Image");
break;
default:
die ("extension not supported. only jpg, jpeg, gif and png!");
}
// verkleinertes temp. bild ins leere bild kopieren
ImageCopyResized($destimg, $srcimg, 0, 0, 0, 0, $new_width, $new_height, $picnfo[0], $picnfo[1]) or die("Problem In resizing");
// speichern
switch ($picnfo[2]) {
case 1:
ImageGIF($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
break;
case 2:
ImageJPEG($destimg,$tmpfile[$i+1],60) or die("Problem In outputting");
break;
case 3:
ImagePNG($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
break;
}
// temp datei löschen
unlink ($tmpfile[$i]);
}
else{
break;
}
}
$picnfo = GetImageSize($tmpfile[$i]);
### bildmaße anpassen ###
// neue ausmaße berechnen, falls zu groß
if ($picnfo[0] > $max_x){
$newwidth = $max_x;
$resize = true;
}
else{
$newwidth = $picnfo[0];
$resize = false;
}
$newheight = round($picnfo[1] / $picnfo[0] * $newwidth);
if ($newheight > $max_y) {
$newheight = $max_y;
$newwidth = round($newheight * $picnfo[0] / $picnfo[1]);
$resize = true;
}
if ($resize == true){
// neue temp datei anlegen
$tmpfile[$i+1] = tempnam($pref_device, $filename.'_'.$i);
// leeres bild erzeugen
$destimg = ImageCreateTrueColor($newwidth,$newheight) or die("Problem In Creating image");
// temp. bild einlesen
switch ($picnfo[2]) {
case 1:
$srcimg = ImageCreateFromGIF($tmpfile[$i]) or die("Problem In opening Source Image");
break;
case 2:
$srcimg = ImageCreateFromJPEG($tmpfile[$i]) or die("Problem In opening Source Image");
break;
case 3:
$srcimg = ImageCreateFromPNG($tmpfile[$i]) or die("Problem In opening Source Image");
break;
default:
die ("extension not supported. only jpg, jpeg, gif and png!");
}
// verkleinertes temp. bild ins leere bild kopieren
ImageCopyResized($destimg,$srcimg,0,0,0,0,$newwidth,$newheight,$picnfo[0],$picnfo[1]) or die("Problem In resizing");
// speichern
switch ($picnfo[2]) {
case 1:
ImageGIF($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
break;
case 2:
ImageJPEG($destimg,$tmpfile[$i+1],60) or die("Problem In outputting");
break;
case 3:
ImagePNG($destimg,$tmpfile[$i+1]) or die("Problem In outputting");
break;
}
// temp datei löschen
unlink ($tmpfile[$i]);
$i++;
}
$usertmpfile = $tmpfile[$i];
$verkleinerungen = $i - 1;
#################################################################
// Daten entsprechend Grundeinstellungen ueberpruefen
// Sonderzeichen bearbeiten
$filename = strtr($filename, "ÄÖÜäöü", "AOUaou"); // Deutsche Umlaute umwandeln
$filename = strtr($filename, "ß", "s"); // SZet umwandeln
$filename = str_replace(" ","_",$filename); // Leerzeichen durch _ ersetzen
// Dateiname zu lang?
if (strlen($filename) > $pref_maxlength) die ("Der Dateiname ist zu lang! Maximal $pref_maxlength Zeichen erlaubt!");
// Datei existiert bereits? Umbenennen!
if (file_exists($pref_device.$filename)) {
$ext = substr(strrchr($filename,"."),1);
for ($i = 1;;) {
$filename = str_replace ('.'.$ext, '', $filename);
$filename .= '_'.$i.'.'.$ext;
if (!file_exists($pref_device.$filename)) break;
else {
$filename = str_replace ('_'.$i.'.'.$ext, '', $filename);
$filename = $filename . '.'.$ext;
$i++;
}
}
}
// Datei in Zielverzeichnis verschieben und CHMOD auf 604 setzen
copy ($usertmpfile,$pref_device.$filename);
// temp datei löschen
unlink ($usertmpfile);
chmod($pref_device.$filename, 0604);
echo 'Die Datei wurde erfolgreich ';
if($verkleinerungen > 1) echo 'nach '.$verkleinerungen.' Verkleinerungen ';
echo 'hochgeladen!<br /><br />';
userpic_up($userid,$filename);
}
else {
echo <<<form
<form enctype="multipart/form-data" method="post">
<input type="file" name="userpic" class="login"/>
<input type="submit" name="confirm" value="upload" class="login"/>
</form>
form;
}
?>
-
Probiere mal die Ressourcen, die bei der Generierung der neuen Grafiken verwendet wird, mit der imagedestroy()-Funktion wieder freizugeben.
Markus Wulftange
-
Hi,
meinst Du die generierung der Leeren Bilder oder die der richtigen Bilder? Vielleicht kannst Du mir den ## Teil davon schicken, wo die Funktion hin soll...
-
Der Aufruf der Funktion ist nach der Ausgabe oder Speicherung der Grafik sinnvoll, wenn die Daten also nicht mehr benötigt. Ähnlich tust du es ja auch schon mit der temporären Variable.
Markus Wulftange
-
ok, danke... Das werde ich mal ausprobieren!
Allerdings kann ich das jetzt nicht testen, weil der Speicher von meinem Server durch den Support hochgeschraubt wurde... Mal sehen wann die das wieder runtermachen, dann kann ich es testen!
Trotzdem Danke schonmal,
für weitere Tipps, oder andere Scripts bin ich aber weiterhin offen!
-
16.02.06 23:33 #6CIX88 Tutorials.de GastzugangWenn man Bilder erzeugt sollte der dadurch belegte Speicher auch wieder frei gemacht werden.für weitere Tipps, oder andere Scripts bin ich aber weiterhin offen!
Siehe ImageDestroy().
Weiterhin auch beachten, dass große Bilder (Breite und Höhe) sehr viel Speicher für die GDlib verbrauchen.
Beispiele, hmmm:
http://www.cix88.de/cix_php/tonne/bi...ize_upload.php
-
Hi, danke für Deine Tipps,
mit dem Upload Script aus dem Link komm ich nur nicht ganz klar....
Könntest Du mir da mal weiterhelfen?
Muss ich da jetzt ne Funktion eingeben oder nicht? Und wenn ja welche!PHP-Code://
// Function aufrufen, zB:
//
// PicResize (OriginalDatei, Pfad + NeueDatei, Breite, Höhe, Qualität bei JEPG, Hintergrundfarbe)
//
Ähnliche Themen
-
Speicher läuft voll mit StreaReader Hilfe!!
Von exiter28 im Forum .NET DatenverwaltungAntworten: 6Letzter Beitrag: 06.01.11, 10:44 -
PHP: JPEG-Bild-Upload, dann thumb speichern und komprimiertes Bild
Von flukas im Forum PHPAntworten: 3Letzter Beitrag: 01.03.09, 15:03 -
upload über upload.aspx
Von NightPain im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 25.07.06, 18:19 -
Speicher läuft voll
Von Primax im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 01.12.03, 16:51 -
Großes Bild für wenig Speicher
Von M@DZG@ im Forum PhotoshopAntworten: 2Letzter Beitrag: 07.09.03, 00:23





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren