• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Browserinkompatibles Upload-Script

Status
Für weitere Antworten geschlossen.

Sn0opy

Neues Mitglied
Mache ich eigentlich ungern, aber ich werde in diesem Falle wohl doch mal mein Script später noch posten müssen.

Mein Problem ist sehr verwirrend. Ich habe ein Script erstellt zum hochladen von Bildern. Dabei werden die hochgeladenen Bildern umbenannt in random + alter Name. Dazu wird dann noch ein Thumbnail erstellt, um es auch in Foren in kleiner Ansicht zu verlinken. So weit eigentlich kein Problem, WENN man FF oder Opera nutzt! Im Internetexplorer gibts da komischerweise ein Problem, dass.

Es handelt sich dabei um diese Zeile, die in einem, Switch drin steht:

PHP:
imagecreatefrompng('img/' .$name);

Die Variable "name" kommt von hier:

PHP:
$thename = $_FILES['nfile']['name'];
$name = rand() .$thename;

Der Upload-Teil schaut folgendermaßen aus:

HTML:
<form enctype="multipart/form-data" action="index.php" method="post"> 
	<p><input type="file" name="nfile" size="30" /> <input type="submit" name="nsubmit" value="Upload" /></p>
</form>

Wobei natürlich vor dem ganzen PHP Script eine if-Abfrage ist, die prüft, ob POST denn übergeben wurde.

Dadurch funktionieren logischerweise auch funktionen wie
PHP:
imagesx($src)
nicht mehr, um die Breite auszulesen, wie auch weitere funktionen, die damit arbeiten müssen.

Da man bei dem Script mehrere Dateiformate hochladen soll und somit auch verschiedene Funktionen benutzt werden müssen, habe ich einen Switch eingebaut, der den Type der Datei überprüft. Kleiner Auszug:

PHP:
switch($type) {
	case 'image/jpeg':
		$src = imagecreatefromjpeg('img/' .$name);
		$typeausgabe = '.jpg';
		break;

Wobei ich den Type der Datei mit folgendem hole

PHP:
$type = $_FILES['nfile']['type'];

Die Datei wird in den img/ Ordner verschoben, wie ich feststellen konnte, da ja das Original Bild dort mit move_uplaod_file() hingeschoben wurde. Als Fehler bekomme ich ausschließlich im Internet Explorer folgendes:

Notice: Undefined variable: src in ...\index.php on line 98

In Zeile 98 wird, wie ich oben schon geschrieben habe, die Breite des Bildes ausgelesen.


Ich habe bereits ausprobiert:
- Ein anderes Bildformat zu wählen
- x&y vom Bild zu ändern
- Statt switch einfach if nehmen


Sobald ich Switch oder if komplett wegnehme funktioniert es einwandfrei, aber ich brauche ja eben irgendwo eine Abfrage des Types, um die entsprechende Funktion aufzurufen. Irgendjemand eine Idee?
 
Da liegst du falsch. Auch PHP Scripte können Browserinkompatibel sein. Mir ist vor 10 Minuten die Lösung gekommen, dass ich einfach nochmal den Type ausgebe.

Für die Nachwelt mit dem selben Problem: Der Internet Explorer hat einfach andere Mime Typen hat. Als Beispiel:

Der Mime Type von .png-Dateien ist beim Firefox und Opera immer "image/png". Beim Internet Explorer dagegen ist es "image/x-png". Werd also komplett auf if-Abfragen umsteigeen und einfach abfragen, ob es png oder x-png ist.
 
Das geht doch auch mit switch:
PHP:
case 'image/png':
case 'image/x-png':
    //Wasauchimmer
  break;
So hast du die Möglichkeiten bequem aufgestapelt und das was gemacht wird drunter ;)
 
Wie gesagt nein wenn man "sicher" programmiert dann ist es egal welchen Browser man verwendet!
 
Ich will nun nicht anfangen zu streiten, aber wo ist die Sicherheit, wenn ein Browser einen anderen Mime Typ übermittelt als alle anderen? Das hat meiner Meinung nichts mit Sicherheit o.ä. zu tun, sondern liegt in diesem Fall einfach nur wieder an Microsoft, da die sich nicht an die mitlerweile geltenden Standards halten.

Lasse mich aber gerne eines Besseren belehren, wenn du was anderes meintest.
 
PHP:
$img = getimagesize("/pfad/zum/bild.jpg");

switch($img[2])
{
  case 1: /* GIF */ break;
  case 2: /* JPG*/ break;
  case 3: /* PNG */ break;
  case 6: /* BMP */ break;
  default: die('Bitte nur Bilder der volgenden Formate hochladen (GIF|JPG|PNG|BMP)');
}

Nun belehrt? xD
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben