Mime-Typ prüfen
Lothar
- php
0 Mathias Brodala0 Tom0 Mathias Brodala0 Tom
0 Lothar
hallo,
leider wird bei der Erstellung der Variable $_FILES[name]['type'] bei einem Upload nicht wirklich der Mime-Typ geprüft. Man kann eine Datei boesesprogramm.exe in nettesbild.gif umbenennen und damit etwaige Prüfungen mit $_FILES[name]['type'] ausschalten.
mime_content_type() scheint nicht mehr richtig unter php5 zu funktionieren. Welche anderen Möglichkeiten gibt es, den tatsächlichen Inhalt einer raufgeladenen Datei zu prüfen?
Viele Grüße
Lothar
Hallo Lothar.
leider wird bei der Erstellung der Variable $_FILES[name]['type'] bei einem Upload nicht wirklich der Mime-Typ geprüft. Man kann eine Datei boesesprogramm.exe in nettesbild.gif umbenennen und damit etwaige Prüfungen mit $_FILES[name]['type'] ausschalten.
mime_content_type() scheint nicht mehr richtig unter php5 zu funktionieren.
Tut hier brav seinen Dienst. Was führt dich zu deiner Annahme? Auf dem Server muss sich für diese Funktion natürlich eine möglichst aktuelle /etc/magic.mime befinden.
Welche anderen Möglichkeiten gibt es, den tatsächlichen Inhalt einer raufgeladenen Datei zu prüfen?
Das Systemkommando „file“ über system() nutzen.
Einen schönen Sonntag noch.
Gruß, Mathias
Hello,
mime_content_type() scheint nicht mehr richtig unter php5 zu funktionieren.
Tut hier brav seinen Dienst. Was führt dich zu deiner Annahme?
Die Doku? http://www.php.net/manual/en/function.mime-content-type.php
Die aktuell durchgeführten Installationen? (Die Funktion fehlt einfach)
Alternativen sind getimagesize() und
die Prüfung auf 00h (also den binärwert 00000000).
Der sollte in keiner Textdatei vorkommen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo Tom.
mime_content_type() scheint nicht mehr richtig unter php5 zu funktionieren.
Tut hier brav seinen Dienst. Was führt dich zu deiner Annahme?
Die Doku? http://www.php.net/manual/en/function.mime-content-type.php
Und was dort führt dich zu der Annahme, dass diese Funktion nicht mehr richtig funktionierte? Nur weil sie missbilligt ist, stellt sie nicht gleich ihren Dienst ein.
Die aktuell durchgeführten Installationen? (Die Funktion fehlt einfach)
Hier verrichtet ein aktuelles PHP 5.2.2 seinen Dienst und die Funktion existiert und ist problemfrei nutzbar.
Einen schönen Sonntag noch.
Gruß, Mathias
Hello,
mime_content_type() scheint nicht mehr richtig unter php5 zu funktionieren.
Tut hier brav seinen Dienst. Was führt dich zu deiner Annahme?
Die Doku? http://www.php.net/manual/en/function.mime-content-type.php
Und was dort führt dich zu der Annahme, dass diese Funktion nicht mehr richtig funktionierte? Nur weil sie missbilligt ist, stellt sie nicht gleich ihren Dienst ein.
Die aktuell durchgeführten Installationen? (Die Funktion fehlt einfach)
Hier verrichtet ein aktuelles PHP 5.2.2 seinen Dienst und die Funktion existiert und ist problemfrei nutzbar.
Das passt soch alles nicht zusammen. Entweder, die Funktion ist deprecated und in PHP 5.1.irgendwas deshalb nicht mehr enthalten, oder sie ist in 5.2.irgendwas aus irgendwelchen Gründen nicht mehr enthalten oder doch wieder oder doch nicht immer oder aber doch manchmal, wenn das System montags installiert wird. Kann auch sein, dass ich mich beim Wochentag geirrt habe.
Dieses Gehampel geht jedenfalls schon eine Weile, was ich nicht verstehe. Der Wert uns Nutzen dieser Funktion ist so immens, dass man ohne ihre Existenz ungestraft gar keine Funktionen zum Fileupload anbieten dürfte.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo Tom.
Hier verrichtet ein aktuelles PHP 5.2.2 seinen Dienst und die Funktion [mime_content_type] existiert und ist problemfrei nutzbar.
Das passt soch alles nicht zusammen. Entweder, die Funktion ist deprecated und in PHP 5.1.irgendwas deshalb nicht mehr enthalten, …
Woher hast du dies denn? In Bezug auf besagte Funktion wird im Changelog zu PHP 5.1.0 lediglich eine einzige Änderung erwähnt:
Fixed bug #33829 (mime_content_type() returns text/plain for gzip and bzip files). (Derick)
Von einer Entfernung aus dem PHP-Sprachbestand ist in dieser und den Folgeversionen bis jetzt nirgends die Rede.
… oder sie ist in 5.2.irgendwas aus irgendwelchen Gründen nicht mehr enthalten oder doch wieder oder doch nicht immer oder aber doch manchmal, wenn das System montags installiert wird. Kann auch sein, dass ich mich beim Wochentag geirrt habe.
Bei mir war es ein Sonntag, vielleicht liegt es daran?
Einen schönen Sonntag noch.
Gruß, Mathias
echo $begrüßung;
Das passt soch alles nicht zusammen. Entweder, die Funktion ist deprecated und in PHP 5.1.irgendwas deshalb nicht mehr enthalten, oder sie ist in 5.2.irgendwas aus irgendwelchen Gründen nicht mehr enthalten [...]
Warum sie deprecated ist, steht doch im Handbuch: This function has been deprecated as the PECL extension Fileinfo provides the same functionality (and more) in a much cleaner way.
Ausblick auf Version 6: Fileinfo soll direkter Bestandteil von PHP werden.
echo "$verabschiedung $name";
Hallo
ich habe es jetzt so versucht
<?php
if (!function_exists("mime_content_type"))
{
function mime_content_type($filename)
{
echo "existiert nicht";
$ergebnis = finfo_open(FILEINFO_MIME);
$ergebnis = finfo_file($ergebnis, $filename);
finfo_close($ergebnis);
$ergebnis = explode(';', $ergebnis);
return $ergebnis[0];
}
}
else echo "existiert";
echo mime_content_type('php.gif') . "\n";
echo mime_content_type('test.php');
?>
PHP meldet (auf dem Webspace)
existiert nicht
Fatal error: Call to undefined function: finfo_open() in ...
Lokal unter Win XP kommt erst gar keine Ausgabe außer
existiert
Wenn ich lokal in der php.ini
mime_magic.debug = On setze, kommt es zur Ausgabe
existiert
Warning: mime_content_type() [http://www.php.net/mime_magic]: mime_magic not initialized
Demnach geht weder das eine (mime_content_type), noch das andere (finfo).
Hallo Lothar.
PHP meldet (auf dem Webspace)
existiert nicht
Fatal error: Call to undefined function: finfo_open() in ...
War zu erwarten, da die Fileinfo-Erweiterung nicht installiert ist.
Wenn ich lokal in der php.ini
mime_magic.debug = On setze, kommt es zur Ausgabeexistiert
Warning: mime_content_type() [http://www.php.net/mime_magic]: mime_magic not initializedDemnach geht weder das eine (mime_content_type), noch das andere (finfo).
Ersteres dürfte daran hängen, dass dir die bereits genannte magic.mime-Datei fehlt oder falsch referenziert wurde.
Was liefert ein phpinfo() diesbezüglich? Unter „Loaded Modules“ muss natürlich „mod_mime_magic“ genannt sein und der Schlüssel „mime_magic.magicfile“ muss auf eine existente magic.mime-Datei verweisen.
Einen schönen Montag noch.
Gruß, Mathias
echo $begrüßung;
Ersteres dürfte daran hängen, dass dir die bereits genannte magic.mime-Datei fehlt oder falsch referenziert wurde.
Was liefert ein phpinfo() diesbezüglich? Unter „Loaded Modules“ muss natürlich „mod_mime_magic“ genannt sein und der Schlüssel „mime_magic.magicfile“ muss auf eine existente magic.mime-Datei verweisen.
Nein, das ist nicht die richtige Stelle. Du hast eine Angabe der im Apachen geladenen Module gefunden. Die sind für PHP uninteressant. So ein Block sollte vorhanden sein, und wenn die zweite Zeile genauso aussieht, dann müsste die Direktive in der letzten Zeile angepasst werden.
mime_magic
mime_magic support => invalid magic file, disabled
Directive => Local Value => Master Value
mime_magic.debug => Off => Off
mime_magic.magicfile => C:\php5\magic.mime => C:\php5\magic.mime
echo "$verabschiedung $name";
Hallo
mime_magic
mime_magic support => invalid magic file, disabled
Directive => Local Value => Master Value
mime_magic.debug => Off => Off
mime_magic.magicfile => C:\php5\magic.mime => C:\php5\magic.mime
»»
Habe lokal jetzt mal den Webserver neu installiert, hat aber auch nichts gebracht. Scheint doch was mit PHP5 zu tun zu haben.
mime_magic.debug => Off => Off
mime_magic.magicfile => C:\xampp\php\extras\magic.mime => C:\xampp\php\extras\magic.mime
Auf dem Webserver im Netz kann ich aber eh nichts ändern, da gibt es beide Funktionen nicht.
Liegt es am falschen Verzeichnis von mime_magic.magicfile?
Gruß
Lothar