phpbar.de logo

Mailinglisten-Archive

[php] Prüfen auf Binär- oder Textdatei

[php] Prüfen auf Binär- oder Textdatei

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Don Jul 6 12:07:33 CEST 2006


Hallo! :-)

Am Donnerstag, 6. Juli 2006 10:15 schrieb Tobias Neumann:
> Hallo,
> ich wüsste nun spontan kein Befehl, aber man könnte die erste Zeile
> auslesen und dann die ersten x Zeichen auf ein Alphabet prüfen,
> welches nur aus Buchstaben und Zahlen besteht.
>
> Wäre zumindest eine mögliche (in?)effiziente Lösung.

Die Unterscheidung Text / Binär läuft einem bei Windows und Linux ja 
normalerweise nicht über den Weg. Bisher habe ich nur damit zu tun 
gehabt, wenn ich Dateien per FTP übertragen habe oder mit PHP Dateien 
geöffnet habe.

Windows ordnet Dateien meines Wissens aufgrund der Dateiendung und der 
Zuordnung der Dateiendung zu einem Programm dem passenden Programm zu. 
Linux geht ähnlich vor, guckt aber wohl auch noch in die Datei und 
liest für die korrekte Zuordnung den Content-Type aus.

In PHP gibt es die folgende Funktion, mit der Du den MIME-Content-Type 
der Datei bestimmen kannst:

	http://de3.php.net/manual/en/function.mime-content-type.php

Dann müßtest Du halt mal die MIME-Types durchgehen und intern in Deinem 
Skript eine Zuordnung zu Text bzw. binär vornehmen:

	http://www.iana.org/assignments/media-types/

MIME-Types, die mit "text/" beginnen, kannst Du auf jeden Fall schon mal 
eindeutig als Text betrachten. :-) Die anderen Gruppen mußt Du dann 
sorgfältig durchgehen. application/xhtml+xml ist z.B. ebenfalls Text, 
genauso wie image/svg+xml.

Ansonsten kannst Du auch einmal bei Wikipedia gucken:

	http://de.wikipedia.org/wiki/Bin%C3%A4rdatei

Da steht zu lesen: "Grundsätzlich zählen alle Dateien zu Binaries, die 
keinen lesbaren Text enthalten. Für die meisten der heute verwendeten 
8-Bit-Zeichensätze gilt: nicht lesbare Sonderzeichen sind Zeichen mit 
ASCII-Werten von 0 bis 31 und lesbare Zeichen sind Zeichen mit Werten 
von 32 bis 126. Die Lesbarkeit von Zeichen mit Werten ab 127 ist 
abhängig vom verwendeten Zeichensatz."

Wenn Du danach gehst, mußt Du nur gucken, ob Du in der Datei eines 
dieser Zeichen zwischen 0 und 31 findest. Nur auf das Null-Byte zu 
prüfen, könnte u.U. nicht ausreichen, weil ich gelesen habe - keine 
Ahnung, ob das wirklich stimmt, weil ich mich mit diesen Details noch 
nie beschäftigt habe -, daß es auch Binärdateien geben kann, die das 
Null-Byte nicht enthalten.


Viele Grüße

Lutz

php::bar PHP Wiki   -   Listenarchive