Image-Upload, jpeg will nicht, warum?
Phil
- php
Huhu!
Ich habe ein kleines Problem, ich habe folgendes Uploadscript
<?php
if(!isset($_FILES['picurl'])) {
?>
<html>
<head>
<title>TITEL</title>
</script>
</head>
<body>
<center><h3>Bild hochladen</h3></center>
<p>
Hier kannst du ein News-Bild hochladen. Bitte achte darauf, dass das Bild die optimale Größe von 181 Pixeln Breite und 138 Pixeln Höhe besitzt.<br />
Als Dateitypen sind jg(e)g, gif und png erlaubt.
</p>
<form action="uploadpic.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="max_file_size" value="1232896">
<input type="file" name="picurl" size="30" accept="image/*"><p>
<input type="submit" value="hochladen">
</p>
</form>
</body>
</html>
<?
} else {
if($_FILES['picurl']['type']!="image/jpeg" && $_FILES['picurl']['type']!="image/gif" && $_FILES['picurl']['type']!="image/png") {
die("Ausgewählte Datei ist keine gültige Bilddatei<br><a href="uploadpic.php">zurück</a>");
} elseif($_FILES['picurl']['size']>1232896) {
die("Bild ist zu groß (>1 MB), bitte verkleinern<br><a href="uploadpic.php">zurück</a>");
} elseif(file_exists("newsimages/".$_FILES['picurl']['name'])) {
echo '<b>Dateiupload nicht möglich: Datei "'.$_FILES['picurl']['name'].'" schon vorhanden!</b><br><a href="uploadpic.php" target="fenster">zurück</a>';
} else {
if($hoch=move_uploaded_file($_FILES['picurl']['tmp_name'], "newsimages/".$_FILES['picurl']['name'])) {
echo 'Bild hochgeladen!';
} else {
echo $_FILES['picurl']['error'];
}
}
}
?>
und das funktioniert auch wunderbar, nur der Upload von jpg-Dateien funzt nicht. Es kommt immer die Meldung, dass das keine gültige Bilddatei sei.
Aber der mime-type von jpg ist doch "image/jpeg", oder?
CU
Phil
Hallo!
Aber der mime-type von jpg ist doch "image/jpeg", oder?
Nein! Er lautet image/pjpeg.
Das hättest Du aber auch raus finden können, in dem Du Dir den Inhalt von $_FILES['picurl']['type'], nach einem Upload einer JPD-Datei, angeschaut hättest.
MfG, André Laugks
Moin Moin !
Aber der mime-type von jpg ist doch "image/jpeg", oder?
Nein! Er lautet image/pjpeg.
Einspruch: http://www.iana.org/assignments/media-types/image/ sagt: image/jpeg und nennt RFC2045 und RFC2046.
IANA ist *verbindlich*.
In RFC2045, Abschnitt 4.2. "Image Media Type":
A media type of "image" indicates that the body contains an image.
The subtype names the specific image format. These names are not
case sensitive. An initial subtype is "jpeg" for the JPEG format
using JFIF encoding [JPEG].
Das hättest Du aber auch raus finden können, in dem Du Dir den Inhalt von $_FILES['picurl']['type'], nach einem Upload einer JPD-Datei, angeschaut hättest.
Das sagt nur aus, was Dein Browser als MIME-Type für *.jp[e]g benutzt. image/pjpeg soll wohl sowas wie "progressive jpeg" sein. Ich hab das schon an verschiedenen Stellen gesehen, anscheinend verdreht irgendeine Software die MIME-Types in einigen Browsern. Technisch ist es jedoch irrelevant, ob ein JPEG progressiv codiert ist oder nicht, diese Tatsache sollte im JPEG-Header stehen und braucht nicht durch einen eigenen, nicht registrierten MIME-Type gekennzeichnet werden.
Ein frisch installiertes System sollte image/jpeg benutzen, nicht image/pjpeg.
Alexander
Hallo!
Einspruch: http://www.iana.org/assignments/media-types/image/ sagt: image/jpeg und nennt RFC2045 und RFC2046.
Was http://www.iana.org/assignments/media-types/image/ schreibt, interessiert so, als ob in China ein Reissack umfällt.
Es wird nun mal "image/pjpeg" geliefert und fertig! Was bringt es, wenn RFCyxz "image/jpeg" sagt, aber "image/pjpeg" geliefert wird.
IMHO liefert mein Grafikprogramm auch keine progressives JPEG.
Dann muß eben eine ODER-Abfrage eingebaut werden, für pjpeg oder jpeg.
Ein frisch installiertes System sollte image/jpeg benutzen, nicht image/pjpeg.
Kann ich von dem User erwarten, daß ein frisches System installiert hat?
MfG, André Laugks
hi,
Einspruch: http://www.iana.org/assignments/media-types/image/ sagt: image/jpeg und nennt RFC2045 und RFC2046.
Was http://www.iana.org/assignments/media-types/image/ schreibt, interessiert so, als ob in China ein Reissack umfällt.
im gegenteil, dass was _du_ sagtest,
Aber der mime-type von jpg ist doch "image/jpeg", oder?
Nein! Er lautet image/pjpeg.
sollte unter möglichst vielen reissäcken vergraben werden.
es mag sein, dass in der praxis andere werte auftauchen - daraus jedoch die aussage
Nein! Er lautet image/pjpeg.
herzuleiten, ist absurd.
gruss,
wahsaga
Hallo!
es mag sein, dass in der praxis andere werte auftauchen - daraus jedoch die aussage
Na also, und was zählt nun? Was interessiert, was irgendwo geschrieben steht, wenn es in der Praxis nicht anwendbar ist.
Phil hat sich noch nicht gemeldet, also scheint es jetzt wohl zu funktionieren.
MfG, André Laugks
Hallo!
image/pjpeg.
ich wie schon gesagt, dann muß halt nach image/pjpeg oder image/jpeg getragt werden und zusätzlich für die Sicherheit noch mit GetImageSize(), wie schon Sven schrieb.
MfG, André Laugks
Moin!
if($_FILES['picurl']['type']!="image/jpeg" && $_FILES['picurl']['type']!="image/gif" && $_FILES['picurl']['type']!="image/png") {
die("Ausgewählte Datei ist keine gültige Bilddatei<br><a href="uploadpic.php">zurück</a>");
Du verläßt dich auf die Userangabe, es würde sich um eine Grafikdatei handeln! Sowas ist grob fahrlässig, denn es ist problemlos möglich, schädliche Programme ebenso als Bild hichzuladen.
Wenn du prüfen willst, ob die gesendeten Bytes des Uploads ein gültiges Grafikformat sind, ignoriere die MIME-Angabe (die basiert idR auf der Dateiendung, nicht auf einer Formatprüfung), sondern nutze die Möglichkeiten von getimagesize().
- Sven Rautenberg