tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
481
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    maga147 maga147 ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    280
    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:


    PHP-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$srcimg0000$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.$filename0604);
    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;

    }
    ?>
    Kann mir da jemand weiterhelfen? Vielleicht kennt ihr auch ein Script mit den gleichen Funktionen (Bild resize, Dateinnamenänderung) das "richtig" funktioniert
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Probiere mal die Ressourcen, die bei der Generierung der neuen Grafiken verwendet wird, mit der imagedestroy()-Funktion wieder freizugeben.
     
    Markus Wulftange

  3. #3
    maga147 maga147 ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    280
    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...
     

  4. #4
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    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

  5. #5
    maga147 maga147 ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    280
    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!
     

  6. #6
    CIX88 Tutorials.de Gastzugang
    für weitere Tipps, oder andere Scripts bin ich aber weiterhin offen!
    Wenn man Bilder erzeugt sollte der dadurch belegte Speicher auch wieder frei gemacht werden.
    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
     

  7. #7
    maga147 maga147 ist offline Mitglied Brokat
    Registriert seit
    Mar 2005
    Beiträge
    280
    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?

    PHP-Code:
    //
    // Function aufrufen, zB:
    //
    // PicResize (OriginalDatei, Pfad + NeueDatei, Breite, Höhe, Qualität bei JEPG, Hintergrundfarbe)
    // 
    Muss ich da jetzt ne Funktion eingeben oder nicht? Und wenn ja welche!
     

Ähnliche Themen

  1. Speicher läuft voll mit StreaReader Hilfe!!
    Von exiter28 im Forum .NET Datenverwaltung
    Antworten: 6
    Letzter Beitrag: 06.01.11, 10:44
  2. Antworten: 3
    Letzter Beitrag: 01.03.09, 15:03
  3. upload über upload.aspx
    Von NightPain im Forum Visual Basic 6.0
    Antworten: 0
    Letzter Beitrag: 25.07.06, 18:19
  4. Speicher läuft voll
    Von Primax im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 01.12.03, 16:51
  5. Großes Bild für wenig Speicher
    Von M@DZG@ im Forum Photoshop
    Antworten: 2
    Letzter Beitrag: 07.09.03, 00:23