pRoPh3t
27.07.2006, 19:55:27
hallo leute,
bin gerade dabei meine page weiter zu basteln und bin auf zwei sachen gestoßen die mir fragen aufwerfen.
1. der datei typ ($_FILES['XXX']['type']) im ie und firefox
nach einem upload lasse ich mir die inhalte von $_file ausgeben, darunter befindet sich ja auch der file typ, ich habe nun festgestellt, das beim hochladen ein und des selben bildes (einmal im ie und einmal im firefox) zwei verschiedene werte angezeigt werden. zwar handelt es sich beide male um ein image jedoch wird der typ unterschiedlich angegeben.
im ie:
type: image/pjpeg
im firefox:
type: image/jpeg
wie ihr sehen könnt wird dem typ im ie noch ein p vorrangestellt, dies ist zwar nicht weiter wild für mein script jeodoch würde mich der grund dieser erscheinung interessieren :)
2. anzeigen des hochgeladenen bildes
auf meiner seite kann man im punkt profil, wie sollte es auch anders sein, sein profil betrachten. darunter findet man, falls angegeben auch seinen avatar. auf der selben seite wo das bild angezeigt wird befindet sich auch das formular zum bearbeiten seine angaben, unter anderem kann hier auch ein neuer avatar hochgeladen werden. funktioniert im firefox auch alles wunderbar, klick auf aktualisieren und das bild wird hochgeladen und nach beendigung auch dierekt aktualisiert angezeigt. im internet explorer hingegen wird so lange der alte avatar angezeigt bis ich auf den button "seite neu laden" klicke, erst dann wird der neue avatar angezeigt. dazu muss ich sagen das der neue avatar natürlich den alten überschreibt und den gleichen namen erhält. meine vermutung ist nun das der ie die namen der bilder checkt und, falls dieses bild schon im chache vorhanden ist, dieses nicht erst vom webserver lädt sondern aus seinem temp verzeichnis lädt.
meine frage ist nun, ob es eine möglichkeit gibt, dieses verhalten des ie zu umgehen.
ich glaube zwar nicht das ein auszug meines scriptes von belangen ist, für leute die es interessiert poste ich es trotzdem (dazu muss gesagt werden das es sich nur um das gerüsst handelt, abfragen der bild abmessung und größe und sicherheitsrelevante sachen sind noch nicht eingebunden)
//prüfen ob das oploadfeld einen wert hat
if ( $_FILES['avatar']['error'] == "0" ) {
//prüfen ob das destinationsverzeihnis vorhanden ist, wenn nicht dann wird es mit mkdir() angelegt
if( ! is_dir("gfx/user_img/$session_id/") ) {
mkdir("gfx/user_img/$session_id/", 0777);
}
//hier wird das destinationsverzeichnis in einer variabel hinterlegt
$path = "gfx/user_img/".$session_id."/";
//hier wird der typ des bildes bestimmt, entweder jpg oder gif und der dateinamen in einer variabel hinterlegt
switch( $_FILES['avatar']['type'] ) {
case "image/pjpeg" || "image/jpeg":
$img = "avatar.jpg";
break;
case "image/gif":
$img = "avatar.gif";
break;
}
//speichern des bildes in verzeichnis $uploaddir mit dem dateinamen $img
move_uploaded_file($_FILES['avatar']['tmp_name'], $path . $img);
}
print 'clientname: '.$_FILES['avatar']['name'].'<br>';
print 'type: '.$_FILES['avatar']['type'].'<br>';
print 'size: '.$_FILES['avatar']['size'].'<br>';
print 'tmp name: '.$_FILES['avatar']['tmp_name'].'<br>';
print 'error: '.$_FILES['avatar']['error'].'<br>';
ich freue mich schon auf eure antworten
mfg
matthias
bin gerade dabei meine page weiter zu basteln und bin auf zwei sachen gestoßen die mir fragen aufwerfen.
1. der datei typ ($_FILES['XXX']['type']) im ie und firefox
nach einem upload lasse ich mir die inhalte von $_file ausgeben, darunter befindet sich ja auch der file typ, ich habe nun festgestellt, das beim hochladen ein und des selben bildes (einmal im ie und einmal im firefox) zwei verschiedene werte angezeigt werden. zwar handelt es sich beide male um ein image jedoch wird der typ unterschiedlich angegeben.
im ie:
type: image/pjpeg
im firefox:
type: image/jpeg
wie ihr sehen könnt wird dem typ im ie noch ein p vorrangestellt, dies ist zwar nicht weiter wild für mein script jeodoch würde mich der grund dieser erscheinung interessieren :)
2. anzeigen des hochgeladenen bildes
auf meiner seite kann man im punkt profil, wie sollte es auch anders sein, sein profil betrachten. darunter findet man, falls angegeben auch seinen avatar. auf der selben seite wo das bild angezeigt wird befindet sich auch das formular zum bearbeiten seine angaben, unter anderem kann hier auch ein neuer avatar hochgeladen werden. funktioniert im firefox auch alles wunderbar, klick auf aktualisieren und das bild wird hochgeladen und nach beendigung auch dierekt aktualisiert angezeigt. im internet explorer hingegen wird so lange der alte avatar angezeigt bis ich auf den button "seite neu laden" klicke, erst dann wird der neue avatar angezeigt. dazu muss ich sagen das der neue avatar natürlich den alten überschreibt und den gleichen namen erhält. meine vermutung ist nun das der ie die namen der bilder checkt und, falls dieses bild schon im chache vorhanden ist, dieses nicht erst vom webserver lädt sondern aus seinem temp verzeichnis lädt.
meine frage ist nun, ob es eine möglichkeit gibt, dieses verhalten des ie zu umgehen.
ich glaube zwar nicht das ein auszug meines scriptes von belangen ist, für leute die es interessiert poste ich es trotzdem (dazu muss gesagt werden das es sich nur um das gerüsst handelt, abfragen der bild abmessung und größe und sicherheitsrelevante sachen sind noch nicht eingebunden)
//prüfen ob das oploadfeld einen wert hat
if ( $_FILES['avatar']['error'] == "0" ) {
//prüfen ob das destinationsverzeihnis vorhanden ist, wenn nicht dann wird es mit mkdir() angelegt
if( ! is_dir("gfx/user_img/$session_id/") ) {
mkdir("gfx/user_img/$session_id/", 0777);
}
//hier wird das destinationsverzeichnis in einer variabel hinterlegt
$path = "gfx/user_img/".$session_id."/";
//hier wird der typ des bildes bestimmt, entweder jpg oder gif und der dateinamen in einer variabel hinterlegt
switch( $_FILES['avatar']['type'] ) {
case "image/pjpeg" || "image/jpeg":
$img = "avatar.jpg";
break;
case "image/gif":
$img = "avatar.gif";
break;
}
//speichern des bildes in verzeichnis $uploaddir mit dem dateinamen $img
move_uploaded_file($_FILES['avatar']['tmp_name'], $path . $img);
}
print 'clientname: '.$_FILES['avatar']['name'].'<br>';
print 'type: '.$_FILES['avatar']['type'].'<br>';
print 'size: '.$_FILES['avatar']['size'].'<br>';
print 'tmp name: '.$_FILES['avatar']['tmp_name'].'<br>';
print 'error: '.$_FILES['avatar']['error'].'<br>';
ich freue mich schon auf eure antworten
mfg
matthias