php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.06.2009, 16:34  
J4E
Neuer Benutzer
 
Registriert seit: 25.06.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
J4E befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Anzeigeproblem von JPG nach File-Upload: MIME Typ text/html statt image/jp

Hallo ihr Lieben,

ich bin brandneu in diesem Forum und richte mich leider als erstes direkt mit einer Frage an euch Ich habe bereits seit 2 Tagen gegoogelt und mich in diesem und anderen Foren umgeschaut, konnte mein Problem aber leider noch nicht selber lösen. Bitte entschuldigt, wenn diese Frage bereits gestellt wurde und ich mich zu dumm angestellt haben sollte eine Antwort zu finden!!!

Ich habe nach Anleitung eines Forums ein kurzes PHP Script für einen File-Upload (Ziel: Grafik-Upload) erstellt (klappt auch wunderbar), stoße nun aber auf ein Problem, an dem ich verzweifele:

Ich lade eine JPG Datei per FORM hoch und möchte sie danach anzeigen lassen. Das Problem ist, dass die Datei nach dem Upload von meinen Browsern (FF, IE) als text/html gewertet wird und nicht als image/jpeg (Rechtsklick auf den angezeigten "Platzhalter" der Grafik -> Eigenschaften -> Typ: text/html) und daher nicht angezeigt werden kann.

Als (MIME) Kontrollfunktionen habe ich bisher GetImageSize und exif_imagetype versucht, die mir beide bestätigen, dass es sich um eine JPG Datei handelt.

Ich entschuldige mich im Vorfeld für diese (wahrscheinlich total) simple Frage, über die die meisten von euch sicher lachen werden: Muss/Kann ich irgendwo "manuell" angeben/ändern, als welcher MIME-Typ die Datei gespeichert werden soll, damit meine Browser diese auch als Grafik erkennen und anzeigen können?

Für Denkanstöße, Tipps oder Hilfe bin ich euch allen sehr dankbar, weil ich wirklich keinen Rat mehr weiss Für meinen schlechten Coding-Stil bitte ich um Verzeihung (bin Anfänger).

Lange Rede kurzer Sinn, anbei ein Auszug aus dem Script:

PHP-Code:
<?
  
// FORM
  
echo "<form action='' method='post' enctype='multipart/form-data'>";
    echo 
"<input type='file' name='upload' size='25' accept='image/jpeg'>";
    echo 
"<input type='submit' value='Hochladen'>";
    echo 
"<input name='post' type='hidden' value='post'>";
  echo 
"</form>";

  
$post         $_POST['post'];
  
$upload_path  "TEST/";
  
$upload_size  102400;

  if (
$post == "post") {
    
// PRÜFE FILETYP
    
$dateityp GetImageSize($_FILES['upload']['tmp_name']);
    
// KONTROLLE DES MIME TYPEN
    
echo "MIME Typ = " $dateityp[2] . "<br>";
    if(
$dateityp[2] != 0) {
      
// PRÜFE GRÖSSE
      
if($_FILES['datei']['size'] < $upload_size) {
        
// VERSCHIEBE BEI ERFOLG
        
$filename $upload_path $_FILES['upload']['name'];
        
move_uploaded_file($_FILES['upload']['tmp_name'], $filename);
        echo 
"ERFOLG: Das Bild wurde erfolgreich nach $filename hochgeladen<br>";
      }
      
// FILE ZU GROSS
      
else echo "FEHLER: Das Bild darf nicht größer als $upload_size Bytes sein<br>";
    }
    
// FILE KEIN BILD 
    
else echo "FEHLER: Bitte nur Bild-Dateien hochladen<br>";

    
// KONTROLLE OB DATEI VORHANDEN
    
if (file_exists($filename)) echo "Die Datei $filename wurde an der angegebenen Position gefunden<br>";
    
// KONTROLLE DES MIME TYPEN
    
if (exif_imagetype($filename) == IMAGETYPE_JPEG) echo "Das Bild $filename ist vom Typ JPG<br>";
    
// ANZEIGE DES BILDES
    
echo "<img src='" $filename "' style='vertical-align: middle; border-color: #F0F0B4;'>";
  }
?>
J4E ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.06.2009, 16:41  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Hallo ich ahbe mal ein kleinen Code geschrieben den ich in meinem Tut auf meiner Seite noch einbringen muss.

PHP-Code:
<?php
/*
------------------------------------------------------------------------
 bilder upload
------------------------------------------------------------------------
*/
if(isset($_POST['send']))
{
 
//zielpfad zum ordner wo das bild gespeichert wird / anpassen!
 
$upload_path "http://localhost/upload/images/";
 
 
$image_string $_FILES['file']['name']; //kompletter string der datei aus dem datei upload feld
 
 
$img_kb $_FILES['file']['size']; //bildgröße des hochzuladenden bildes holen
 
$image_size 2000 1024//maximale datei größe in kb festlegen
 
 
$max_breite 1024//maximal zulässige breite des bildes festlegen
 
$max_hoehe 768//maximal zulässige höhe des bildes festlegen
 
 
$image_mase getimagesize($_FILES['file']['tmp_name']); //array bilden mit breite und höhe des bildes
 
 
$img_breite $image_mase[0]; //breite des hochzuladenden bildes holen
 
$img_hoehe $image_mase[1]; //höhe des hochzuladenden bildes holen
 
 /*
 ------------------------------------------------------------------------
  ermitteln des Dateinamens nach dem letzten im string vorkommenden
  punkt
 ------------------------------------------------------------------------
 */
 
$image_end strrchr($image_string,'.');
 
 
/*
 ------------------------------------------------------------------------
  ermitteln der zeichenlänge des strings der aus strrchr übrig
  bleibt und die dateiendung wieder spiegelt
 ------------------------------------------------------------------------
 */
 
$sub_count strlen($image_end);
 
 
/*
 ------------------------------------------------------------------------
  hier holen wir uns nun den datei namen, den brauchen wir für die 
  bevorstehende namens prüfung auf zeichenvorkommnisse
 ------------------------------------------------------------------------
 */
 
$image_name substr($image_string0, -$sub_count);
 
 
/*
 ------------------------------------------------------------------------
  whitelist endungs array für bilder
 ------------------------------------------------------------------------
 */
 
$end_arr = array('.jpg','.JPG','.jpeg','.gif','.png');
 
 
/*
 ------------------------------------------------------------------------
  bilddatei gegen die whitelist der bilderendungen checken
 ------------------------------------------------------------------------
 */
 
if(!in_array($image_end,$end_arr))
 {
  
$error['end_false'] ='endung falsch du lump';
 }
 
 
/*
 ------------------------------------------------------------------------
  prüfen des datenamens auf verbotene zeichen es dürfen nur zeichen
  a-z A-Z 0-9 . _ - vorkommen
 ------------------------------------------------------------------------
 */
 
if(!preg_match("#^([a-z0-9\._-]+)$#",$image_name))
 {
  
$error['name_false'] ='name hat verbotene zeichen du lump';
 }
 
 
/*
 ------------------------------------------------------------------------
  prüfen ob die breite des bildes größer als der maximal zulässige
  breitenwert ist
 ------------------------------------------------------------------------
 */
 
if($img_breite $max_breite)
 {
  
$error['breite_false'] ='das bild ist zu breit maximal '.$max_breite.' px';
 }
 
 
/*
 ------------------------------------------------------------------------
  prüfen ob die hoehe des bildes größer als der maximal zulässige
  hoehenwert ist
 ------------------------------------------------------------------------
 */
 
if($img_hoehe $max_hoehe)
 {
  
$error['hoehe_false'] ='das bild ist zu hoch maximal '.$max_hoehe.' px';
 }
 
 
/*
 ------------------------------------------------------------------------
  prüfen der maximal zulässigen kb größe des bildes
  2 MB maximal
 ------------------------------------------------------------------------
 */
 
if($img_kb $image_size)
 {
  
$error['size_false'] ='das bild ist zu groß maximal '.$image_size.' kb';
 }
 
 
/*
 ------------------------------------------------------------------------
  keine fehler dann wird der upload ausgeführt
 ------------------------------------------------------------------------
 */
 
if(!$error)
 {
  
//upload ausführen mit weiterleitung auf wunschdatei
  
move_uploaded_file($_FILES['file']['tmp_name'],$upload_path.$_FILES['file']['name']);
  
header('Lacation: http://localhost/upload/index.php'); //anpassen
  
  //ne test asugabe falls alles fehlerfrei abläuft aber kein upload erzeugt werden soll
  
echo 'Alles Ok damit - <a href="http://localhost/uplload/index.php">Zurück</a>';
 }
}
?>
<?php
/*
------------------------------------------------------------------------
 wenn fehler gefunden werden dann werden die hier ausgegeben
------------------------------------------------------------------------
*/
if(isset($_POST['send']) && count($error) > 0)
{
 echo 
'Upload Fehler!<br />';
 
 foreach(
$error as $msg)
 {
  echo 
$msg.'<br />';
 }
}
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="file" /><br />
<input type="submit" name="send" value="Hochladen" />
</form>
Vieleiht hilft es dir weiter.

Gruß litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Alt 26.06.2009, 14:37  
J4E
Neuer Benutzer
 
Registriert seit: 25.06.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
J4E befindet sich auf einem aufstrebenden Ast
Standard Leider hilft es nicht weiter...

Hallo litter,

erstmal vielen lieben Dank für deine Antwort. Ich habe den Code getestet, komme aber leider zum gleichen Ergebnis. Deine Code-Version klappt so weit auch reibungslos bis auf 2 kleine Fehlerchen, die sich eingeschlichen haben^^:
  • preg_match: im Suchstring werden Großbuchstaben als Fehler gewertet
  • header: bei "Location" hat sich ein kleiner Typo eingeschlichen

Allerdings kann ich die Datei nach dem Upload ebenfalls nicht anzeigen lassen, da mir meine Browser ebenfalls sagen, dass die Datei vom MIME Typ text/html sei...

Hat vlt. sonst noch wer Vorschläge wodurch dieser Fehler entstehen kann? Wie gesagt, mein Script klappt ebenfalls problemlos (Upload) nur kann ich meine Grafik-Dateien nicht anzeigen lassen!

Trotzdem vielen Dank für deine Mühe!

LG, J4E
J4E ist offline  
Alt 26.06.2009, 16:02  
Benutzer
 
Registriert seit: 09.04.2008
Beiträge: 60
keinplanvonnix befindet sich auf einem aufstrebenden Ast
Standard

ich vermute mal dass bei deinem server magic_quotes on sind. beim speichern den dateinamen mit stripslashes(dateiname) bearbeiten und dann sollte es funktionieren.
keinplanvonnix ist offline  
Alt 26.06.2009, 20:06  
J4E
Neuer Benutzer
 
Registriert seit: 25.06.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
J4E befindet sich auf einem aufstrebenden Ast
Standard Stripslashes

Hallo keinplanvonnix,

erstmal auch dir ein Danke für die Antwort. Allerdings bin ich mir nach Sichtung der Referenz für den stripslashes Befehl nicht sicher, ob du mein eigentliches Problem verstanden hast, daher nochmal eine genaue Erklärung:

Der Datei-Upload funktioniert einwandfrei!!! Ich bekomme die Datei auf meinen Webspace hochgeladen - die Dateigröße stimmt auch überein - so weit ist alles prima. Zu Testzwecken habe ich sie mit meinem FTP Programm wieder runtergeladen und kann sie dann auch ohne Probleme wieder anzeigen lassen.

Wenn ich allerdings aus meinem Script heraus versuche, die hochgeladene Grafik mit dem HTML <img> Befehl anzeigen zu lassen, dann bekomme ich nur einen "Platzhalter" für eine nicht-anzeigbare Datei angezeigt, obwohl die Datei existiert (Prüfung mit file_exists ist erfolgreich!) und nicht beschädigt ist. Ein Rechtsklick auf diesen "Platzhalter" (Eigenschaften) verrät mir aber, dass der Browser sie als MIME-Typ text/html erkennt, und nicht wie es sein sollte als image/jpeg und sie vermutlich deshalb auch nicht anzeigen mag. Eine MIME-Typ Prüfung beim Upload habe ich wie oben bereits beschrieben durchgeführt, der ergibt, dass die Datei beim Upload korrekt als image/jpeg erkannt wird. An irgendeiner Stelle (nach dem Upload) wird also aus mir unerfindlichen Gründen der MIME-Typ in text/html geändert, oder sollte es etwa an meinen Browsern liegen (funktioniert bei mir weder mit FF3 noch mit IE7)?

Ich bin weiterhin für jegliche Anregung bzw Hilfe dankbar!

LG, J4E
J4E ist offline  
Alt 26.06.2009, 22:59  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Habs eben mal bei mir probiert, funktionierte einwandfrei. Mach doch mal einen screen.

Was ist denn dein filetype output???

P.S.:
Vielleicht noch den mime type beim upload weiter einschränken (z.b. für jpg 2, png 3).
__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline  
Alt 27.06.2009, 14:18  
J4E
Neuer Benutzer
 
Registriert seit: 25.06.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
J4E befindet sich auf einem aufstrebenden Ast
Standard Screenshot

Hallo rudy,

danke für den guten Tipp, hier erstmal ein Screen von meinem Output inklusive Eigenschaften-Fenster von der anzuzeigenden Grafik:



Der filetype() Check hat file ergeben. Habe die MIME Typen beim upload schon komplett eingeschränkt, aber das hat leider kein positives Resultat ergeben...

Kann das an den chmod Einstellungen des Verzeichnisses liegen? Aber dann würde der Upload doch nicht funktionieren, oder?
J4E ist offline  
Alt 27.06.2009, 14:23  
Erfahrener Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 1.333
Freeaak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

was passiert wenn du die grafik rechtsklickst und anzeigen lässt?
__________________
"Wenn du nicht weißt, was du tust: Machs mit Eleganz!"

(Murphy's Gesetze)
Freeaak ist offline  
Alt 27.06.2009, 16:30  
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

Was passiert, wenn Du die Adresse einfach mal in die Adresszeile des Browsers eingibst?
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 28.06.2009, 01:17  
J4E
Neuer Benutzer
 
Registriert seit: 25.06.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
J4E befindet sich auf einem aufstrebenden Ast
Standard

Ah... darauf bin ich noch gar nicht gekommen. Bei Anzeige der Grafik kommt die folgende Fehlermeldung:

Zitat:
Forbidden

You don't have permission to access xxx/test.jpg on this server.
Apache Server at xxx Port 80
Liegt es dann doch an den chmod Einstellungen? Aber warum kann ich das Bild dann hochladen? Wie müssen denn die Einstellungen dafür gesetzt sein?
J4E 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
Problem mit File Upload b++ PHP Tipps 2006 2 26.04.2006 20:35
File Upload tomtaz PHP Tipps 2006 1 19.04.2006 14:58
File Upload havok PHP Tipps 2006 13 15.03.2006 20:23
file upload & bilder resize PHP Tipps 2006 3 15.02.2006 18:56
File Upload für dateien größer als 1GB b++ PHP Tipps 2006 14 08.02.2006 21:59
File Upload mit mehreren Files PHP-Fortgeschrittene 16 16.01.2006 12:07
Problem mit File Upload PHP Tipps 2007 3 06.11.2005 23:39
File Upload - während upload vorgang anmiertes gif PHP-Fortgeschrittene 4 20.10.2005 18:13
File Upload Server, Hosting und Workstations 2 24.05.2005 17:07
update auf php 5.0.4 robo47 Server, Hosting und Workstations 6 10.04.2005 19:00
File Upload PHP Tipps 2005 5 27.03.2005 17:44
file upload + und pic gleichzeitig verkleinern PHP Tipps 2004-2 3 16.12.2004 08:09
HTML File Upload HTML, Usability und Barrierefreiheit 4 14.09.2004 15:23
File upload PHP-Fortgeschrittene 3 23.08.2004 17:16
[Erledigt] File Upload: PRoblem mit Upload directory PHP Tipps 2004 3 26.06.2004 13:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dateierweiterung stimmt nicht mit dem mime-typ überein., dateierweiterung stimmt nicht mit dem mime-typ überein, mediawiki dateierweiterung stimmt nicht mit dem mime-typ überein., mediawiki dateierweiterung stimmt nicht mit dem mime-typ überein, \dateierweiterung stimmt nicht mit dem mime-typ überein.\, dateierweiterung stimmt nicht mit dem mime-typ überein. mediawiki, \dateierweiterung stimmt nicht mit dem mime-typ überein\, diese datei besteht nicht den mime test, wiki dateierweiterung stimmt nicht mit dem mime-typ überein., mediawiki \dateierweiterung stimmt nicht mit dem mime-typ überein.\, dateierweiterung stimmt nicht mit dem mime-typ überein mediawiki, dateierweiterung stimmt nicht mit dem mime-typ überein. wiki, diese datei besteht nicht den mime test:, mediawiki \dateierweiterung stimmt nicht mit dem mime-typ überein\, wikimedia dateierweiterung stimmt nicht mit dem mime-typ überein., dateierweiterung stimmt nicht mit dem mime-typ , \dateierweiterung stimmt nicht mit dem mime-typ überein., dateierweiterung stimmt nicht mit dem mime typ überein, dateierweiterung stimmt nicht mit dem mime-typ überein wiki, \dateierweiterung stimmt nicht mit dem mime-typ überein\ mediawiki

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:16 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