Ich hatte kürzlich den Fall, dass ich den korrekten MIME-Type einer Datei in PHP ermitteln wollte. Um den korrekten MIME-Type zu ermitteln, sollte dieser aus dem Header der jeweiligen Datei gelesen werden. Leider bietet PHP keine Möglichkeit dies mit dem Standard-Funktionsumfang herauszubekommen.
Ich habe mich dann kurzerhand auf die Google-Suche nach einer passenden Möglichkeit gemacht und bin recht schnell auf die fileinfo-Extension von Ilia Alshanetsky im PECL-Repository gestoßen.
Da ich meine Website lokal auf einem Mac mit OS X 10.5 entwickle und die gesamte Server-Umgebung mit MacPorts installiert habe, verlief die eigentlich einfache Installation der fileinfo-Extension leider nicht ganz ohne Probleme.
Hier eine Schritt-für-Schritt-Anleitung, wie man die Erweiterung installiert:
Schritt 1:
Zunächst sollte man prüfen, ob man bei seiner MacPorts PHP-Istallation die PEAR-Erweiterung mit installiert hat. Dazu kann man sich die Konfiguration des Ports ansehen, mit:
$ sudo port installed | grep php5
Als Ergebnis sollte dann etwa folgendes stehen:
php5 @5.2.6_1+apache2+imap+macosx+mysql5+pear+tidy (active)
Schritt 2:
Um die Extension ohne Fehler zu installieren, muss das fink-Package auf dem Rechner installiert sein. Und über das fink-Package werden dann die Pakete file-shlibs und file-dev installiert.
Das Fink-Package kann als .dmg-Datei hier heruntergeladen werden:
http://www.finkproject.org/download/
Die Installation des Paketes erfolgt über das Installer-Package im Image (.pkg-Datei). Nach erfolgreicher Installation, sollte man den FinkCommander noch ins Programme-Verzeichnis seines Macs kopieren. Dieser liegt auf dem Image im Verzeichnis ‘FinkCommander’. Der FinkCommander ist ein leicht zu bedienendes GUI-Tool für die Installation weiterer Fink-Pakete.
Im FinkCommander nach der Installation in die Suche einfach die beiden Pakete (file-shlibs und file-dev) eingeben und die Pakete installieren lassen.
Schritt 3:
Als nächstes “versuchen” wir die fileinfo-Extension ganz normal zu installieren:
$ sudo /opt/local/bin/pecl install fileinfo
Bei der Installation wird dann beim Versuch die Konfiguration zu erstellen folgende Fehlermeldung erscheinen:
"configure: error: Please reinstall the libmagic distribution"
Die Neuinstallation der libmagic Distribution ist natürlich nicht notwendig, da das config-Script die Bibliothek einfach nicht finden kann. Daher müssen wir dieses Script nun anpassen:
$ sudo vi /private/tmp/pear/download/Fileinfo-1.0.4/configure
Wir suchen im VI die Zeile, in der die SEARCH_PATH-Variable deklariert wird, im VI mit:
/SEARCH_PATH
Diese Zeile muss angepasst werden von
SEARCH_PATH="/usr/local /usr /usr/share/file"
auf:
SEARCH_PATH="/usr/local /usr /usr/share/file /sw"
Nach dem Speichern dieser Ä„nderung, können wir die Konfiguration noch einmal starten:
$ sudo /private/tmp/pear/download/Fileinfo-1.0.4/configure
Die Konfiguration sollte nun ohne Probleme durchlaufen.
Schritt 4:
Nun muss die Extension noch kompiliert werden:
$ cd /private/tmp/pear/download/Fileinfo-1.0.4/
$ sudo make
Und dann erfolgt die Installation der Extension:
$ sudo make install
Die Extension-Datei ‘fileinfo.so’ wurde nun in das Extension-Verzeichnis der PHP-Installation kopiert:
/opt/local/lib/php/extensions/no-debug-non-zts-20060613
Schritt 5:
Nun muss die Extension noch in PHP eingebunden und aktiviert werden. Dazu muss folgende Zeile in die php.ini eingetragen werden:
extension=fileinfo.so
Es muss auch sichergestellt sein, dass die Extension gefunden wird, daher muss das in der php.ini angegebene Verzeichnis für Extensions überprüft werden. Dieses steht standardmäßig auf “./”. In diesem Fall muss es auf den obigen Pfad angepasst werden:
extension_dir="/opt/local/lib/php/extensions/no-debug-non-zts-20060613"
php.ini speichern!
Schritt 6:
Damit die Ąnderungen wirksam werden, muss der Apache neu gestartet werden:
$ apache2ctl graceful
Schritt 7:
Jetzt kann man die Extension mit folgendem PHP-Code kurz testen:
$file = '...put some readable file path here...';
$handle = finfo_open( FILEINFO_MIME );
$mime_type = finfo_file( $handle, $file );
echo $mime_type;
Wenn eine Ausgabe erzeugt wird, war die Installation erfolgreich!
Bei Fragen oder Korrekturhinweisen bitte gern ein Posting machen!
Wer die PHP-Klasse vom Google-Projekt JSMin, einer PHP-Portierung des von Douglas Crockford entwickelten JavaScript-Minimizers, benutzt, wurde veilleicht schon einmal mit der folgenden Fehlermeldung konfrontiert:
Lösung für Windows Vista Business und Windows Vista Ultimate:
Lösung für Windows Vista Home Basic und Windows Vista Home Premium:


