[PHP] Uploader muckt rum

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Ragnaroek, 27. November 2008 .

Schlagworte:
  1. 27. November 2008
    Uploader muckt rum

    Hallo,

    ich habe ein kleines Problem und zwar folgendes:

    In meinem Usercenter können User ein Anzeigebild (Avatar) hochladen.

    Dies geschieht über dieses Formular:
    HTML:
    <div id="inhalt3">
     <h1>Usercenter - Anzeigebild &auml;ndern</h1>
     <a href="index.php?nav=myaccount">zur&uuml;ck zur &Uuml;bersicht</a><br /><br />
     aktuelles Foto:<br />
     {FOTO}<br />
     <br />
     <form action="index.php?nav=user&do=saveavatar" method="post" enctype="multipart/form-data" name="step1" id="step1">
     <label>neues Foto:
     <input type="file" name="Foto" id="foto" title="Laden Sie hier ein Foto von Ihnen hoch."/>
     </label>
     <br />
     (max 2MB, nur *.jpg, *.jpeg Dateien, *.gif, wird auf 200x200px verkleinert)
     <br />
     <br />
     <input type="submit" name="speichern" id="speichern" value="speichern" title="Speichern der &Auml;nderungen."/>
     </form><br /><br />
     <form action="index.php?nav=user&do=delavatar" method="post" name="delete">
     <label>
     <input name="deleter" type="checkbox"/> Anzeigebild l&ouml;schen
     </label><br />
    
     <label>
     <input type="submit" name="loeschen" id="loeschen" value="l&ouml;schen" />
     </label>
     <br />
     </form>
    </div>
    
    Wie es sich bei einem Uploadscript gehört ist "enctype="multipart/form-data"" gesetzt.

    Wenn nun in der Datei user.php dieser Verweis (nav=user&do=saveavatar) aufgerufen wird, funktioniert das zwar bei mir aufm Lokalhost, jedoch nicht auf meinem Webserver.

    Dort lädt der irgendwie ins Unendliche und gibt nur einen weißen Bildschirm aus. Es werden keine Fehlermeldungen oder so angezeigt.

    Die Datei wird allerdings auf den Server mit den Rechten, die mittels CHMOD gesetzt wurden, hochgeladen!


    Hier der Code aus der user.php:
    PHP:
         #############################
        //Anzeigebild speichern/hochladen
        #############################
                
    case  'saveavatar' :
                    
    //checken ob das Formular abgeschickt wurde
                    
    if(isset( $_POST [ 'speichern' ]))
                    {
                        
    //Avatar des Users
                        
    if( $_FILES [ 'Foto' ][ 'tmp_name' ] !=  "" )
                        {
                            
    //Nur Jpg und Gif erlaubt
                            
    if( $_FILES [ 'Foto' ][ 'type' ] ==  "image/jpeg"  OR  $_FILES [ 'Foto' ][ 'type' ] ==  "image/jpg"  OR
                               
    $_FILES [ 'Foto' ][ 'type' ] ==  "image/pjpeg"  OR  $_FILES [ 'Foto' ][ 'type' ] ==  "image/gif" )
                            {
                            
    //MAX 2 MB
                                
    if( $_FILES [ 'Foto' ][ 'size' ] <  2147483648 )
                                {
                                    
    //hochladen des Fotos mit der upload_foto funktion
                                    
    $foto  upload_foto ( $_FILES [ 'Foto' ][ 'tmp_name' ],  $_FILES [ 'Foto' ][ 'type' ],  "design/images/user_pics/" );
                                    if(
    $foto  !=  "false" )
                                    {
                                        
    //Name des Bildes
                                        
    if( $_FILES [ 'Foto' ][ 'type' ] ==  "image/jpeg"  OR  $_FILES [ 'Foto' ][ 'type' ] ==  "image/jpg"  OR
                                           
    $_FILES [ 'Foto' ][ 'type' ] ==  "image/pjpeg" )
                                        {
                                            
    $neuer_name  "design/images/user_pics/" . $_SESSION [ 'u_id' ]. ".jpg" ;
                                        }
                                        else
                                        {
                                            
    $neuer_name  "design/images/user_pics/" . $_SESSION [ 'u_id' ]. ".gif" ;
                                        }
                                        
                                        
    //ermitteln des alten Bildes
                                        
    $altesbild_sql  mysql_query ( "SELECT `Foto` FROM `benutzer_daten`
                                                                    WHERE `users_BenutzerID` = '"
    . $_SESSION [ 'u_id' ]. "'" );
                                        
                                        
    //Wenn vorhanden, wird es gelöscht
                                        
    if( mysql_num_rows ( $altesbild_sql ) ==  1 )
                                        {
                                            
    $altesbild_res  mysql_fetch_array ( $altesbild_sql );
                                            
                                            
    //löschen des alten Bildes, wenn gefunden
                                            
    if( file_exists ( $altesbild_res [ 0 ]))
                                            {
                                                
    //löschen
                                                
    unlink ( $altesbild_res [ 0 ]);
                                            }
                                        }
                                        
                                        
    //Updaten der Datenbank
                                        
    $update_foto  mysql_query ( "UPDATE `benutzer_daten` SET `Foto` = '" . $neuer_name . "' 
                                                                    WHERE `users_BenutzerID` = '"
    . $_SESSION [ 'u_id' ]. "'" );
                                        
    //Umbennen des Fotos
                                        
    rename ( $foto $neuer_name );
                                        
                                        
    //Laden der Templatefile - gibt die Erfolgsmeldung zurück
                                        
    $save_tmp_file  "design/templates/user_speichern.html" ;
                                        
    $save_template  = new  template ( $save_tmp_file );
                        
                                        
    //Ausgabe der Erfolgsmeldung (TEMPLATE)
                                        
    $inhalt  $save_template -> returnTemplate ();    
                                    }
                                    else
                                    {
                                        
    //Fehler - CHMOD konnte nicht gesetzt werden
                                        
    $reg_tmp_file  "design/templates/error.html" ;
                                        
    $reg_template  = new  template ( $reg_tmp_file );                
                                        
    $reg_template -> ersetzen ( 'ERROR' ,
                                        
    'Das Foto <b>' . $_FILES [ 'Foto' ][ 'name' ]. '</b> konnte nicht hochgeladen werden!<br /><br />
                                                                          <a href="javascript:history.back();">zurück</a>'
    );
                                        
    $inhalt  $reg_template -> returnTemplate ();    
                                    }
                                }
                                else
                                {
                                    
    //Fehler - größer als 2 MB
                                    
    $reg_tmp_file  "design/templates/error.html" ;
                                    
    $reg_template  = new  template ( $reg_tmp_file );                
                                    
    $reg_template -> ersetzen ( 'ERROR' ,
                                    
    'Das Foto <b>' . $_FILES [ 'Foto' ][ 'name' ]. '</b> ist größer als 2 MB!<br /><br />
                                                                      <a href="javascript:history.back();">zurück</a>'
    );
                                    
    $inhalt  $reg_template -> returnTemplate ();    
                                }
                            }
                            else
                            {
                                
    //Fehler Falsches Format
                                
    $reg_tmp_file  "design/templates/error.html" ;
                                
    $reg_template  = new  template ( $reg_tmp_file );                
                                
    $reg_template -> ersetzen ( 'ERROR'
                                
    'Das Foto <b>' . $_FILES [ 'Foto' ][ 'name' ]. '</b> hat kein gültiges Format!<br /><br />
                                                                  <a href="javascript:history.back();">zurück</a>'
    );
                                
    $inhalt  $reg_template -> returnTemplate ();    
                            }
                        }
                    }
                    else
                    {
                        
    //Aufrufen der Seite ohne Formular abzuschicken
                        
    $reg_tmp_file  "design/templates/error.html" ;
                        
    $reg_template  = new  template ( $reg_tmp_file );                
                        
    $reg_template -> ersetzen ( 'ERROR' '<b>Sie haben einen ungültigen Verweis aufgerufen!</b><br /><br />
                                                      <a href="javascript:history.back();">zurück</a>'
    );
                        
    $inhalt  $reg_template -> returnTemplate ();    
                    }
                break;
    Hier die "upload_foto"-Funktion

    PHP:
    function  upload_foto ( $filename $type $path )
    {
        
    //$path
        //liefert das Verzeichnis - ob das Bild von einem User oder Unternehmen hochgeladen wird!
        
        //eindeutiger zufallsname für das Bild!
        
    $zufallsname  md5 ( uniqid ( rand (),  TRUE ));
        
        
    $endung  'JPG' ;
        
        if(
    $type  ==  "image/jpeg"  OR  $type  ==  "image/jpg"     OR  $type  ==  "image/pjpeg" )
        {
            
    $name  $zufallsname . ".jpg" ;
        }
        else
        {
            
    $name  $zufallsname . ".gif" ;
            
    $endung  'GIF' ;
        }
        
        
    //Verschieben
        
    if( move_uploaded_file ( $filename $path . $name ))
        {    
            
    //schreib- und leserechte für das bild 
            //sonst fehler auf servern mit hohen sicherheitseinstellungen
            
    if( chmod ( $path . $name 0755 ))
            {
                
    //Bildmaße ermitteln
                
    $abmessungen  getimagesize ( $path . $name );
                
                
    //Die Datei
                
    $file  $path . $name ;
                
                
    $width_orig  $abmessungen [ 0 ];
                
    $height_orig  $abmessungen [ 1 ];
                
                
    //Maximale Höhe des neuen Bildes!
                
    $width_neu  200 ;
                
    $height_neu  200 ;
                
                
    //name des Bildes
                
    $thumb_name  $path . $name ;
                
                
    //Erzeugen eines neuen Bildes mit den Abmessungen
                
    $image_neu  imagecreatetruecolor ( $width_neu $height_neu );
                
                if(
    $endung  ==  "JPG" )
                {
                    
    $image_alt  imagecreatefromjpeg ( $file );
                    
    imagecopyresized ( $image_neu $image_alt 0 0 0 0 $width_neu $height_neu $width_orig $height_orig );
                        
                    
    imagejpeg ( $image_neu $thumb_name 100 );
                }
                else
                {
                    
    $image  imagecreatefromgif ( $file );
                    
    imagecopyresized ( $image_neu $image_alt 0 0 0 0 $width_neu $height_neu $width_orig $height_orig );

                    
    imagegif ( $image_neu $thumb_name 100 );
                }
                
                return 
    $thumb_name ;
            }
            
    //Schreibrechte vergeben fehlgeschlagen
            
    else
            {
                return 
    false ;
            }
        }
        
    //Bild hochladen fehlgeschlagen
        
    else
        {
            return 
    false ;
        }
    }
    Weiß jemand vielleicht woran das liegt, dass der Upload auf dem Webserver nicht klappt?

    Vielen, vielen herzlichen Dank für eure Hilfe!

    Bin über jeden Beitrag sehr dankbar!

    BW geht raus!

    Gruß
    Rag
     
  2. 27. November 2008
    AW: Uploader muckt rum

    weiße, leere seite? schreib ganz oben mal:
    PHP:
    error_reporting ( E_ALL | E_STRICT );
    PHP:
    //MAX 2 MB
    if( $_FILES [ 'Foto' ][ 'size' ] <  2147483648 )
    das sind 2GB nicht 2MB

    PHP:
    if( $foto  !=  "false" )
    gibst du da wirklich false als string zurück? ich sehe da ein bool false

    fix das mal und probiers nochmal
     
  3. 27. November 2008
    AW: Uploader muckt rum

    Wow!!

    Das ging ja mal schnell!!

    BW hast du!

    Zu den Problemen:
    1. Größe: 2097152 = 2 MB? Hab mich da wohl mal grausam verrechnet. (1024x1024x2)
    2. error_reporting füge ich hinzu
    3. Stimmt... da habe ich wohl das falsche Dateiformat... da kann garkein Fehler ausgegeben werden...

    Lauter Schlampigkeitsfehler.

    Ich werde sie mal beheben und dann hier bescheid geben!

    Thx

    Gruß
    Rag


    EDIT:

    Habe das mal gemacht;

    Leider keine Veränderung
     
  4. 29. November 2008
    AW: Uploader muckt rum

    hmm, is das script lokal oder auf nem server/webspace?
    kann gut sein das, wie hier ja schonmal wer bei sich selber festgestellt hat, an deiner konfig was falsch is.

    erstell mal eine neue php-datei und schreib das rein:
    PHP:
    <? php phpinfo ();  ?>
    lads sie hoch und poste den link, oder schicks mir per pn falls du ned willst das es jeder lesen kann.
     
  5. 30. November 2008
    AW: Uploader muckt rum

    Habe hier mal mein Script ausgelagert aufm Server:

    http://skull.iw-h.de/test/

    Er kennt die Funktionen imagecreate() und imagecreatetruecolor() nicht....

    Habe mich bereits an den Support gewendet.

    Das liegt dann wohl eher nicht an meinem Script, oder?

    Gruß
    Rag
     
  6. 30. November 2008
    AW: Uploader muckt rum

    Salute,


    Nein, liegt nicht an Deinem Skript - vielmehr an den PHP-Settings von deinem Hoster.
    Um Image-Funktionen nutzen zu können brauchts die gd-extension.
    Link: PHP: GD - Manual

    Grüße,
    MArc
     
  7. 30. November 2008
    AW: Uploader muckt rum

    Gut

    Dann hat IW-H da wohl was vergessen.

    Habe soeben ein SupportTicket abgeschickt und der Betreiber (ist auch hier im Forum unterwegs) behebt das Problem bereits.


    Vielen Dank!

    @MArc: bw hast du auch =)


    Edit:
    Das script läuft jetzt
     
  8. 1. Dezember 2008
    AW: Uploader muckt rum

    Upload von Gif geht doch nicht -.-

    PHP:
    <? php
    error_reporting
    ( E_ALL  E_STRICT );
    ini_set ( 'display_errors' TRUE );

    if(isset(
    $_POST [ 'speichern' ]))
    {
    $zufallsname  md5 ( uniqid ( rand (),  TRUE ));

    if(!
    $abmessungen  getimagesize ( $_FILES [ 'Foto' ][ 'tmp_name' ]))
    {
        echo 
    "abmessungen" ;
        die();
    }

    $format  $abmessungen [ 2 ];

    if(
    $abmessungen [ 2 ] ==  2 )
    {
        
    $name  $zufallsname . ".jpg" ;
        
    $endung  'jpg' ;
    }
    elseif(
    $abmessungen [ 2 ] ==  1 )
    {
        
    $name  $zufallsname . ".gif" ;
        
    $endung  'gif' ;
    }
    else
    {
        echo 
    "Format: " . $format ;
        die();
    }

    $name  $zufallsname . "." . $endung ;

    if(!
    move_uploaded_file ( $_FILES [ 'Foto' ][ 'tmp_name' ],  "img/" . $name ))
    {
        echo 
    "move" ;
        die();
    }

    if(!
    chmod ( "img/" . $name 0644 ))
    {
        echo 
    "chmod" ;
        die();
    }

    $file  "img/" . $name ;

    $breite  $abmessungen [ 0 ];
    $hoehe  $abmessungen [ 1 ];

    $breite_neu  200 ;
    $hoehe_neu  200 ;

    switch(
    $endung )
    {
        case 
    "jpg" :
        
            
    //Erzeugen eines neuen Bildes mit den Abmessungen
            
    $image_neu  imagecreatetruecolor ( $breite_neu $hoehe_neu );
            if(!
    $image_neu )
            {
                echo 
    "true color" ;
                die();
            }
            
            
    $image_alt  imagecreatefromjpeg ( $file );
            
            if(!
    $image_alt )
            {
                echo 
    "create" ;
                die();
            }
            
            if(!
    imagecopyresized ( $image_neu $image_alt 0 0 0 0 $breite_neu $hoehe_neu $breite $hoehe ))
            {
                echo 
    "copy" ;
                die();
            }
                
            if(!
    imagejpeg ( $image_neu $file 100 ))
            {
                echo 
    "image" ;
                die();
            }
        break;
        
        case 
    "gif" :
            
    //Erzeugen eines neuen Bildes mit den Abmessungen
            
    $image_neu  imagecreate ( $breite_neu $hoehe_neu );
            if(!
    $image_neu )
            {
                echo 
    "imagecreate" ;
                die();
            }
            
            
    $image_alt  imagecreatefromgif ( $file );
            
            if(!
    $image_alt )
            {
                return 
    "create" ;
                die();
            }
            
            if(!
    imagecopyresized ( $image_neu $image_alt 0 0 0 0 $breite_neu $hoehe_neu $breite $hoehe ))
            {
                return 
    "copy" ;
                die();
            }
                
            if(!
    imagegif ( $image_neu $file 100 ))
            {
                return 
    "image" ;
                die();
            }
        break;
        
        default:
            echo 
    "Switch" ;
            die();
        break;
    }

    if (
    $_FILES [ 'Foto' ][ 'error' ] !=  UPLOAD_ERR_OK ) {
        echo 
    'Upload Fehlernummer: '  $_FILES [ 'datei' ][ 'error' ];
        die();
    }
    echo 
    'Typ: ' . $endung . '<br><img src="' . $file . '">' ;
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>

    <head>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
        <meta name="author" content="">

        <title>Untitled 1</title>
    </head>

    <body>
        <h1>Usercenter - Anzeigebild &auml;ndern</h1>
         <form action="index.php" method="post" enctype="multipart/form-data" name="step1" id="step1">
            <label>neues Foto:
            <input type="file" name="Foto" id="foto" title="Laden Sie hier ein Foto von Ihnen hoch."/>
            </label>
            <br />
          (max 2MB, nur *.jpg, *.jpeg Dateien, *.gif, wird auf 200x200px verkleinert)
          <br />
          <br />
          <input type="submit" name="speichern" id="speichern" value="speichern" title="Speichern der &Auml;nderungen."/>
        </form>
    </body>
    </html>
    findet wer den fehler? =(

    Jpg gehen, gif nicht!

    zu testen:
    http://skull.iw-h.de/test/index.php

    thx
    gruß
    rag
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.