Die PHP-Extension fileinfo unter Mac OS X (MacPorts) installieren

»  Erstellt in Mac OS X Leopard,Nützliches by Holger Woltersdorf, Sonntag, 27. Juli 2008

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)

Wenn ‘+pear’ in dieser Zeile steht, dann ist das PEAR-Paket mit installiert. Ist das nicht der Fall, muss der PHP5-Port noch einmal neu mit dem ‘+pear’-Argument installiert werden.

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!


 
RSS-Feed - Alle Beiträge RSS-Feed - Kommentare

Juli 2008
M D M D F S S
« Mai   Sep »
 123456
78910111213
14151617181920
21222324252627
28293031