php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.09.2007, 16:39  
Benutzer
 
Benutzerbild von odaa
 
Registriert seit: 09.08.2004
Beiträge: 73
PHP-Kenntnisse:
Anfänger
odaa
Standard Bildupload - Probleme mit JPEGs

Hallo!
Solche Bilduploads hab ich eigentlich schon öfter gecodet und irgendwann haben sie auch immer funktioniert ^^
Diesmal will das ganze aber nicht so richtig: Sowohl im IE als auch Firefox funktioniert der Upload von JPEGs nicht, der von GIFs aber wunderbar.
Ich verstehs einfach nicht.
Hier mein Code:

PHP-Code:
// Hinweis: uploadedfile ist die Variable für das hochzuladende Bild
// $mid ist die Mitgliedsnummer und $time die Zeit.... is aber eig. unwichtig ;)

if ($_FILES['uploadedfile']['type'] == "image/pjpeg" or $_FILES['uploadedfile']['type'] == "image/gif" or $_FILES['uploadedfile']['type'] == "image/jpeg") {
if (
$_FILES['uploadedfile']['type'] == "image/pjpeg" or $_FILES['uploadedfile']['type'] == "image/jpeg") { $extension ".jpg"; }
else { 
$extension ".gif"; }
$time time();
$f count($filename) + 1;
$file "fotos/vorschau/".$mid."-".$time.$extension;
$filename[] = "$mid-$time$extension";

if (
is_uploaded_file($uploadedfile) && copy($uploadedfile$file)) {

$imgsize=GetImageSize("$file");
$groesse filesize($file);
if (
$imgsize[0] > 500 OR $imgsize[1] > 500) {
// Bild verkleinern
}
elseif (
$groesse 307200) {
$nachricht "
\n
\n[b]Ihr Bild ist größer als 300 KB

und konnte daher leider nicht hochgeladen werden.[/b]"
;
unlink($file);
}
else {
$nachricht "
\n
\n[b]Das Bild wurde erfolgreich hochgeladen![/b]"
;
}
}
else {
$nachricht "
\n
\n[b]Es ist ein Fehler aufgetreten,

Ihr Bild konnte leider nicht hochgeladen werden.[/b]"
;
}
}
else {
$nachricht "
\n
\n[b]Es ist ein Fehler aufgetreten:

Ihr Bild ist nicht im GIF- oder JPEG-Format.[/b]"
;

Beim testen bekomme ich also immer die letzte Fehlermeldung, dass mein Bild weder GIF- noch JPEG-Format wäre. -_-

Schonmal danke für eure Antworten!
odaa
odaa ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 21.09.2007, 18:42  
CIX88
Gast
 
Beiträge: n/a
Standard

Was sagt denn print_r($_FILES); ?

PS:
Dein Script sieht etwas merkwürdig aus ....
Warum benutzt du nicht gleich GetImageSize, um zu testen, ob es ein Bild ist oder nicht ?
 
Alt 21.09.2007, 18:45  
Erfahrener Benutzer
 
Benutzerbild von phpdummi
 
Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse:
Anfänger
phpdummi ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo odaa,

Ich verstehe nicht ganz was die ersten if-Blöcke überhaupt machen sollen?!
Eingerückt sieht dein Code übrigens so aus:
PHP-Code:
<?php

// Hinweis: uploadedfile ist die Variable für das hochzuladende Bild 
// $mid ist die Mitgliedsnummer und $time die Zeit.... is aber eig. unwichtig  

if ($_FILES['uploadedfile']['type'] == "image/pjpeg" or
    
$_FILES['uploadedfile']['type'] == "image/gif" or
    
$_FILES['uploadedfile']['type'] == "image/jpeg")
{    
    if (
$_FILES['uploadedfile']['type'] == "image/pjpeg" or
        
$_FILES['uploadedfile']['type'] == "image/jpeg")
    {
        
$extension ".jpg";
    } else
    {
        
$extension ".gif";
    }
    
    
$time time(); 
    
$f count($filename) + 1
    
$file "fotos/vorschau/".$mid."-".$time.$extension
    
$filename[] = "$mid-$time$extension"

    if (
is_uploaded_file($uploadedfile) && copy($uploadedfile$file))
    { 
        
$imgsize=GetImageSize("$file"); 
        
$groesse filesize($file);
        if (
$imgsize[0] > 500 OR $imgsize[1] > 500)
        { 
            
// Bild verkleinern
        
} elseif ($groesse 307200)
        { 
            
$nachricht "
\n
\n[b]Ihr Bild ist größer als 300 KB

                        und konnte daher leider nicht hochgeladen werden.[/b]"

            
unlink($file); 
        } else
        { 
            
$nachricht "
\n
\n[b]Das Bild wurde erfolgreich hochgeladen![/b]"

        } 
    } else
    { 
        
$nachricht "
\n
\n[b]Es ist ein Fehler aufgetreten,
 
                    Ihr Bild konnte leider nicht hochgeladen werden.[/b]"

    } 
} else

    
$nachricht "
\n
\n[b]Es ist ein Fehler aufgetreten:
 
                Ihr Bild ist nicht im GIF- oder JPEG-Format.[/b]"

}
.. nicht gerade "schön" dieses Gewusel ..
Ich sehe keine Debug-Schritte. In welchen Block von diesem if-Monster kommst du überhaupt?
Zum Thema Debugging hat Zergling eine recht nützliche Debug-Klasse zur Verfügung gestellt:
http://phpfriend.de/forum/ftopic60534.html#428113

Vielleicht hilf es dir noch mal die grundlegenden Dinge für Uploads nachzulesen:
http://www.php.net/manual/de/features.file-upload.php

Dort steht weiter unten eine wesentlich komfortablere Lösung den File-Type zu prüfen ...
phpdummi ist offline  
Alt 21.09.2007, 19:24  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von phpdummi
In welchen Block von diesem if-Monster kommst du überhaupt?
Na in den letzten else Zweig.

Da hilft nur die Ausgabe von $_FILES['uploadedfile']['type'] oder eine Luxus-Kristallkugel aus dem Wahrsagerladen weiter.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 22.09.2007, 17:36  
Benutzer
 
Benutzerbild von odaa
 
Registriert seit: 09.08.2004
Beiträge: 73
PHP-Kenntnisse:
Anfänger
odaa
Standard

phpdummis eintrag muss ich erst noch überdenken , aber
Zitat:
Zitat von Der_Gerhard
Da hilft nur die Ausgabe von $_FILES['uploadedfile']['type'] oder eine Luxus-Kristallkugel aus dem Wahrsagerladen weiter.
Hab ich gemacht: Bei GIF-Bildern zeigt er das gewünschte an - bei JPGs gar nichts. Eben das ist das große Mysterium
odaa ist offline  
Alt 22.09.2007, 17:46  
Clan
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von CIX88
Was sagt denn print_r($_FILES); ?
Poste mal bitte die Ausgabe von print_r($_FILES)
 
Alt 22.09.2007, 19:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Bildupload - Probleme mit JPEGs

Zitat:
Zitat von odaa
funktioniert der Upload von JPEGs nicht, der von GIFs aber wunderbar
Rein von der Logik her müsste der Fehler dann in der Mime-Type-Abfrage liegen, denn nur hier unterscheidest du zwischen GIF und JPG. Kann man da nicht selbst drauf kommen?
Zergling-new ist offline  
Alt 23.09.2007, 14:06  
Benutzer
 
Benutzerbild von odaa
 
Registriert seit: 09.08.2004
Beiträge: 73
PHP-Kenntnisse:
Anfänger
odaa
Standard

Zitat:
Zitat von Clan
Zitat:
Zitat von CIX88
Was sagt denn print_r($_FILES); ?
Poste mal bitte die Ausgabe von print_r($_FILES)
Array ( [uploadedfile] => Array ( [name] => test.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 ) )



Zitat:
Rein von der Logik her müsste der Fehler dann in der Mime-Type-Abfrage liegen, denn nur hier unterscheidest du zwischen GIF und JPG. Kann man da nicht selbst drauf kommen?
Aber enctype="multipart/form-data" hab ich doch angegeben. Oder ist das nicht das, was du meinst?
odaa ist offline  
Alt 23.09.2007, 14:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Nein, ich meinte damit, dass dein PHP-Skript zwischen GIF und JPG ja nur hier unterscheidet:
Zitat:
PHP-Code:
<?php
if ($_FILES['uploadedfile']['type'] == "image/pjpeg" or
    
$_FILES['uploadedfile']['type'] == "image/gif" or
    
$_FILES['uploadedfile']['type'] == "image/jpeg")
{    
    if (
$_FILES['uploadedfile']['type'] == "image/pjpeg" or
        
$_FILES['uploadedfile']['type'] == "image/jpeg")
    {
        
$extension ".jpg";
    } else
    {
        
$extension ".gif";
    } 
?>
Rein logisch kann der Fehler nur der sein, dass $_FILES["uploadedfile"]["type"] eben keinem der angegebenen Mime-Types entspricht. Und deine Ausgabe
Zitat:
Array ( [uploadedfile] => Array ( [name] => test.jpg [type] => [tmp_name] => [error] => 2 [size] => 0 ) )
bestätigt das ja. Natürlich kann es auch noch daran liegen, dass du unglückliche Beispieldateien zum Testen gewählt hast, aber zunächst solltest du eben den Fehler an der naheliegenden Stelle suchen.

http://de.php.net/features.file-upload
Zitat:
$_FILES['userfile']['type']

The mime type of the file, if the browser provided this information. An example would be "image/gif". This mime type is however not checked on the PHP side and therefore don't take its value for granted.
Die "type" Angabe ist also für die Katz. Du kannst mit getimagesize() den Grafiktyp herausfinden:
http://de.php.net/getimagesize
PHP-Code:
<?php
list ($width$height$filetype, ) = getimagesize($uploadedFile);
switch (
$filetype) {
case 
IMAGETYPE_JPG:
  echo 
"es ist ein JPG";
  break;
/*
[url]http://de.php.net/manual/en/ref.image.php#image.constants[/url]
IMAGETYPE_GIF (integer)
IMAGETYPE_JPEG (integer)
IMAGETYPE_PNG (integer)
IMAGETYPE_SWF (integer)
IMAGETYPE_PSD (integer)
IMAGETYPE_BMP (integer)
IMAGETYPE_WBMP (integer)
IMAGETYPE_XBM (integer)
IMAGETYPE_TIFF_II (integer)
IMAGETYPE_TIFF_MM (integer)
IMAGETYPE_IFF (integer)
IMAGETYPE_JB2 (integer)
IMAGETYPE_JPC (integer)
IMAGETYPE_JP2 (integer)
IMAGETYPE_JPX (integer)
IMAGETYPE_SWC (integer)
*/
}
?>
Zergling-new ist offline  
Alt 23.09.2007, 14:34  
Benutzer
 
Benutzerbild von odaa
 
Registriert seit: 09.08.2004
Beiträge: 73
PHP-Kenntnisse:
Anfänger
odaa
Standard

Hm, aber kann ich getimagesize() nicht erst anwenden, wenn die Datei bereits hochgeladen wurde?
odaa ist offline  
 


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
Firefox / IE - Probleme HTML, Usability und Barrierefreiheit 5 20.07.2009 17:04
Probleme bei Speicherung von serialize() Strings Manni2k PHP Tipps 2006 13 15.10.2006 15:06
Probleme mit mbstring extension unter Debian HStev Server, Hosting und Workstations 3 30.08.2006 20:55
Problem mit Bildupload 2wuck PHP Tipps 2006 2 03.07.2006 07:05
Probleme mit Rechteverteilung chmod() per script!!!??? Funky_ PHP Tipps 2006 7 17.06.2006 17:10
Probleme bei der Installation von Turck MMCache tomx992 PHP-Fortgeschrittene 2 27.09.2005 20:31
[Erledigt] Probleme beim Datenupload zu meiner Datenbank Datenbanken 3 05.09.2005 19:47
[Erledigt] Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
probleme mit .php?id=WERT PHP Tipps 2005-2 7 21.07.2005 20:02
[Erledigt] hilfe! probleme mit... PHP Tipps 2005 4 12.04.2005 22:55
[Erledigt] CSV Größe macht Probleme mit php PHP Tipps 2005 5 15.03.2005 21:29
Zwei Rechner ins Netz - Router - Hub - Probleme... imported_Ben Off-Topic Diskussionen 37 13.01.2005 21:36
Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
[Erledigt] Probleme mit Fremdsprachen HTML, Usability und Barrierefreiheit 2 21.09.2004 17:11
PHP Bilder in DB / Probleme bei Änderung PHP-Fortgeschrittene 1 05.06.2004 11:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sonderzeichen im bildupload, firefox upload jpg

Alle Zeitangaben in WEZ +1. Es ist jetzt 08:56 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.