Uploadscript Probleme mit MIME-Typen
Paul
- php
Hallo,
ich habe ein paar Probleme mit meinem Uploadscript.
Ich schaue nach dem Upload ob es sich um einen der von mir erlaubten Dateitypen handelt...
$type = $_FILES['file']['type'];
// eraubte Dateitypen
if(($type != "application/pdf") &&
($type != "image/gif") &&
($type != "application/msword") &&
($type != "image/tiff") &&
($type != "image/jpeg") &&
($type != "application/zip") &&
($type != "application/mspowerpoint") &&
($type != "text/rtf") &&
($type != "text/plain") &&
($type != "application/msexcel") &&
($type != "image/psd")) {
$err[] = "<b>Der Dateityp scheint nicht genemigt zu sein.<b>";
}
Ich habe keine Probleme *.jpg - Bilder hoch zu laden. Bei meinem Bruder funktioniert es jedoch nicht. *.jpg, *.psd, *.zip kann er nicht hoch laden, wogegen *.doc, *.pdf funktioniert.
Sind nun meine MIME-Typ Angaben falsch? Ist es vom Browser abhaengig, oder warum funktioniert es bei meinem Bruder weder im IE noch im FF?
Bin fuer jede Hilfe Dankbar...
$_FILES['userfile']['type']
funktioniert nur wenn der Browser diese Information zur Verfügung stellt.
siehe http://www.php.net/manual/de/features.file-upload.php#features.file-upload.post-method
Mfg Jan
Hallo,
Ich habe keine Probleme *.jpg - Bilder hoch zu laden.
JPGs musste du leider doppelt prüfen, nämlich einmal auf "image/jpg" und einmal auf "image/pjpeg", das von manchen Browsern verwendet wird.
Viele Grüße!
_Dirk
Hello,
Sind nun meine MIME-Typ Angaben falsch? Ist es vom Browser abhaengig, oder warum funktioniert es bei meinem Bruder weder im IE noch im FF?
Browser können lügen.
Und das scheint hier der Fall zu sein.
_Überprüfe_ lieber den Dateityp, anstatt ihn zu glauben.
Je nach Installationseinstellungen hat PHP eine fertige Funktion dafür
mime_content_type() http://de2.php.net/manual/de/function.mime-content-type.php
oder auch nicht.
Wenn Du dann ein entsprechend eingerichtetes Linux hast, kanns Du die Funktion noch selber bauen:
if(!function_exists('mime_content_type'))
{
function mime_content_type($filename)
{
$filepath = realpath($filename);
$_mime = array();
// Spaces werden maskiert, weil sie sonst trennen
$filepath = str_replace(" ","\ ",$filepath);
exec ("file -bi $filepath", $_mime, $error);
if (($error) or (count($_mime) != 1)) return false;
if (strpos($_mime[0], "can't stat") !== false)
{
$mime = "Typ unbekannt";
}
elseif (strpos($_mime[0], "can't read") !== false)
{
$mime = "Datei nicht lesbar";
}
elseif (strpos($_mime[0], "can't ") !== false)
{
$mime = "unbekannter Fehler";
}
else
{
$mime = trim($_mime[0]);
}
return $mime;
}
}
Mit Hilfe dieser Funktion kannst Du den MIME-Type dann auf dem Server kontrollieren.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
jedoch muss ich dazu die Datei erst auf dem Server speichern, oder?
Wuerde gerne bevor ich die Datei speicher ueberpruefen um was es sich da handelt...
Hi,
jedoch muss ich dazu die Datei erst auf dem Server speichern, oder?
Wuerde gerne bevor ich die Datei speicher ueberpruefen um was es sich da handelt...
Die Datei ist bereits auf dem Server gespeichert.
cu,
Andreas
Hello,
jedoch muss ich dazu die Datei erst auf dem Server speichern, oder?
Wuerde gerne bevor ich die Datei speicher ueberpruefen um was es sich da handelt...
HTTP ermöglichst beim Post das Mitsenden von Files im HTTP-Body.
Die Daten der Datei weren dabei im Header des Bodyabschnittes übertragen.
Der Apache speichert diese "Anhänge" nun in einem Temp-Dir und übergibt die Meta-Daten des Files an das Environment der PHP-Programm-Instanz, die sie dann an das Script weiterleiten in $_FILES
Apache und PHP arbeiten hier so zusammen, dass die PHP-Instanz das File wieder aus dem Temp-Dir entfernt, wenn der Parser die Kontrolle zurückgibt (also das Script beendet/abgebrochen wurde).
Wenn Du die Datei behalten willst, musst Du sie aus dem Temp-Dir in ein permanantes Dir kopieren.
Die Scriptlaufzeit max_execution_time beginnt übrigens erst nach dem Ende des Uploads. Für diesen ist die Maximale Upload Zeit max_input_time zuständig.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom