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

»  Erstellt in Mac OS X Leopard, Nützliches von Holger Schöttle, 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!


Update: Google jsmin.php und magic_quotes_runtime

»  Erstellt in Nützliches, Sonstiges von Holger Schöttle, Dienstag, 29. Januar 2008

Ich musste heute feststellen, dass der im vorherigen Beitrag beschriebene Workaround nur die halbe Wahrheit ist. Dies hat zwei Gründe:

  1. Es ist nicht die magic_quotes_runtime Option allein, die den Input manipluliert.
  2. Die oben beschriebene Ableitung funktioniert nicht, da der Kontext des Objekts beim statischen Zugriff auf die minify()-Methode noch immer den Original-Konstruktor verwendet.

Wie man im PHP-Manual nachlesen kann, ergibt sich eine neue Situation für den Input, wenn neben magic_quotes_runtime auch die Option magic_quotes_sybase aktiviert ist. Dann werden die Quotations nicht durch Backslashes escaped sondern in weitere Single-Quotes eingebettet. D.h. es passiert folgendes:

$input = "Hier steht ein 'Text' und so";

Daraus wird dann bei nur magic_quotes_runtime aktiviert:

$input = "Hier steht ein \'Text\' und so";

und bei aktivierten magic_quotes_runtime und magic_quotes_sybase:

$input = "Hier steht ein ''Text'' und so";
(jeweils 2 Single-Quotations vor und nach dem Wort "Text")

Somit bringt die Lösung mit der Verwendung von stripcslashes() relativ wenig. Mit zwei weiteren Zeilen Code allerdings kann man auch dieses Problem lösen. Hier nun auch gleich die korrekte Ableitung der JSMin-Klasse:

<?
/**
 * Klasse, die von JSMin erbt
 */
class JSMinimizer extends JSMin
{
    /**
     * Überladener Konstruktor
     *
     * @param string $input Input (JavaScript-Code)
     */
    public function __construct( $input )
    {
        if ( get_magic_quotes_runtime() && ini_get( 'magic_quotes_sybase' ) )
            $input = str_replace( "''", "'", $input );
        elseif ( get_magic_quotes_runtime() )
            $input = stripcslashes( $input );

        parent::__construct( $input );
    }

    /**
     * Komprimiert JavaScript-Code
     *
     * @param string $input Input (JavaScript-Code)
     * @return string Komprimierter Output
     */
    public static function minify( $input )
    {
        $jsmin = new JSMinimizer( $input );
        return $jsmin->min();
    }
}
?>

Hier noch der Link zur entsprechenden Info auf php.net
http://de.php.net/manual/de/ref.info.php#ini.magic-quotes-runtime


Google jsmin.php und magic_quotes_runtime

»  Erstellt in Nützliches, Sonstiges von Holger Schöttle, Samstag, 26. Januar 2008

JavaScript CompressionWer 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:

Uncaught Exception: Unterminated string literal. [0]
jsmin.php on line 94

Diese Fehlermeldung ist zurückzuführen auf die Überprüfung von Unix-Linefeeds (ord($str) == 10) im übergebenen JavaScript-Code. Diese wiederum werden verursacht durch zwei aufeinander folgende einfache Anführungszeichen. Nun sollte man sich die Frage stellen, woher kommen diese Anführungszeichen in einer JavaScript-Datei, die sonst wunderbar funktioniert? Das Problem ist die PHP-Einstellung “magic_quotes_runtime”. Ist diese eingeschaltet, so werden einige Passagen im JavaScript durch PHP automatisch quotiert.

Nun gibt es drei Möglichkeiten diesem Problem mit einer Lösung beizukommen:

  1. Einfach die Einstellung “magic_quotes_runtime” generell abschalten
    (in der php.ini oder per .htaccess im DOCUMENT_ROOT).
  2. Die Einstellung per .htaccess nur in dem Order, in dem die jsmin.php liegt abschalten.
    (php_value magic_quotes_runtime 0)
  3. Den Konstruktor der Klasse überschreiben, um einen Kompatibilitätsmodus zu erhalten, der es erlaubt die JSMin-Klasse zu verwenden, egal ob magic_quotes_runtime eingeschaltet ist, oder nicht. Wie man das macht, wird nachfolgend erklärt:

Überschreiben des Konstruktors von JSMin

<?
/**
 * Klasse, die von JSMin erbt
 */
class JSMinimizer extends JSMin
{
    /**
     * Überladener Konstruktor
     *
     * @param string $input Input (JavaScript-Code)
     */
    public function __construct( $input )
    {
        if ( get_magic_quotes_runtime() )
            $input = stripcslashes( $input );

        parent::__construct( $input );
    }
}
?>

Es empfiehlt sich an dieser Stelle eine neue Klasse anzulegen, die von der JSMin-Klasse erbt, da man sonst diesen Workaround in jeder neuen Version von JSMin wieder eintragen müsste. Wobei zu hoffen ist, dass die Entwickler von JSMin (PHP) den Workaround mit in die nächste Version ihrer Klasse aufnehmen. Informiert sind sie jedenfalls.

Weitere Verweise zu JSMin:


Color up your Shell on Mac OS X > 10.3

»  Erstellt in Mac OS X Leopard, Nützliches von Holger Schöttle, Samstag, 17. November 2007

Um seiner Shell unter Mac OS X > 10.3 Farben zu verleihen, müssen folgende Zeilen in eines der Sell-Start-Scripts geschrieben werden (z.B. ~/.bash_profile).

export TERM="xterm-color"
export CLICOLOR="true"
export LSCOLORS="exfxcxdxbxegedabagacad"

Die Farben für die einzelnen Ansichten (insgesamt 11) werden jeweils als Zahlenpaar für Vorder- und Hintergrund als Zahlenkolonne in die Umgebungsvariable LSCOLORS geschrieben.

Unterschied zur normalen Farbeinstellung auf älteren Shells ist, dass der Befehl “ls –color=auto” hier nicht mehr funktioniert, sodass man die oben beschriebenen Weg gehen muss, um wieder Farbe in die Shell-Welt zu bringen.Die

Definition der Farben und der Reihenfolge findet man hier:
http://www.macosxhints.com/article.php?story=20031025162727485


Samba Zugriff unter Windows Vista

»  Erstellt in Nützliches, Windows Vista von Holger Schöttle, Samstag, 1. September 2007

Problem:
Will man mit einem Windows Vista Rechner auf Samba-Shares z.B. eines Linux-Rechners zugreifen, wobei eine Samba-Version < 3.0 eingesetzt wird, erhält man keinen Zugriff auf die Samba-Shares. Stattdessen wird eine Windows Fehlermeldung angezeigt, dass die Netzwerkressource nicht verfügbar ist oder gefunden werden kann. Äußerlich macht es sogar den Anschein, dass der Name des Rechners mit den Samba-Shares in der Netzwerkumgebung nicht aufgelöst werden kann, da er dort ebenfalls nicht angezeigt wird.

Lösung:
Um unter Windows Vista Zugriff auf Samba-Shares (zum Beispiel auf einem Linux-Server) bzw. auf den Rechner selbst zu erhalten, muss das Samba-Anmeldeprotokoll auf einen anderen Kompatibilitätsmodus umgestellt werden, da Windows Vista eine neuere Version dieses Protokolls verwendet. Für diesen Vorgang gibt es zwei Möglichkeiten, die sich aus den verschiedenen Windows Vista Versionen ergeben. Der einfachste Weg die Umstellung vorzunehmen führt über die Lokalen-Sicherheitsrichtlinien in der Computer-Verwaltung, auch bekannt unter der Anwendung ’secpol.msc’. Da diese Anwendung bzw. dieses Snap-In allerdings unter den Versionen Windows Vista Home Basic und Windows Vista Home Premium nicht zur Verfügung stehen, muss man hier den Weg über die Registry gehen, wo es dann gilt den Kompatibilitätsmodus in einem Registry-Schlüssel umzustellen. Nachfolgend sind die beiden Vorgehensweisen beschrieben:

Windows Vista LogoLösung für Windows Vista Business und Windows Vista Ultimate:

Rufen Sie die Konsole der Lokalen Sicherheitsrichtlinien auf:
Start » Eingabeleiste » secpol.msc (eingeben und ENTER)

Öffnen Sie die Sicherheitsoptionen über:
Lokale Richtlinien » Sicherheitsoptionen

Rechts findet sich dann eine Einstellung namens ‘Netzwerksicherheit: LAN-Manager-Authentifizierungsebene’, rufen Sie diese mit einem Doppelklick auf und wählen Sie die Option ‘LM-und NTLM-Antworten senden (NTLMv2-Sitzungssicherheit verwenden)’ im angezeigten Auswahlfeld.

Klicken Sie ‘OK’ und schließen Sie die Konsole wieder.
Nun sollte ein Zugriff auf die Samba-Shares wieder funktionieren.

Samba-LogoLösung für Windows Vista Home Basic und Windows Vista Home Premium:

Öffnen Sie den Registry-Editor:
Start » Eingabeleiste » regedit.exe (eingeben und ENTER)

Rufen Sie die Einstellungen unter folgendem Pfad auf:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

Dort findet sich eine Einstellung namens ‘LMCompatibilityLevel’, diese sollte standardmäßig, den Wert ‘3′ haben.

Ändern Sie diese Einstellung auf den Wert ‘1′ und schließen Sie den Registry-Editor.
Nun sollte ein Zugriff auf die Samba-Shares wieder funktionieren.

Gegebenenfalls ist es nötig einen Neustart des Betriebssystems durchzuführen, sollten die neuen Einstellungen nicht gleich übernommen werden.


Sony Vaio Recovery Partition entfernen

»  Erstellt in Alltag, Nützliches, Windows Vista von Holger Schöttle, Samstag, 14. April 2007

Ich habe mir vor ca. 2 Wochen ein Sony Vaio VGN N21Z gekauft. Ein Notebook, das mit seinem Preis-Leistungsverhältnis wirklich überzeugt. Neben einem mobilen Intel Core 2 Duo mit 1,73 GHz und 2 GB Arbeitsspeicher kann das 15,4 Zoll Notebook auch mit einer 100 GB Festplatte und dem Microsoft Windows Vista Home Premium Betriebssystem aufwarten. Außerdem ist das Design schön schlicht in weiß und silber gehalten.

Was mich sofort nach dem ersten Einschalten erheblich gestört hat, war, dass das komplette Betriebssystem von Sony gebrandet wurde. So war in nahezu jedem Explorer-Fenster und Systemsteuerungsmenü ein Sony bzw. Vaio Schriftzug zu sehen. Außerdem hat Sony jede Menge Software vorinstalliert, die man entweder nach einer gewissen Testphase hätte kaufen müssen oder die ziemlich weit ins System eingreift bzw. den Rechner an sich mit unnützen Tools zumüllt.

Um diesen Misstand zu ändern, habe ich mich dann recht schnell entschlossen das System mit der mitgelieferten Windows Vista DVD neu aufzusetzen. Gesagt getan. DVD rein geschoben, Rechner neu gebootet und Windows neu installiert. Bereits bei der Installation ist mir aufgefallen, dass von den versprochenen 100 GB Festplatte nur rund 74 zur Verfügung standen. Ich weiß, dass es bei größeren Platten meist zu geringeren Speicherkapazitäten kommt, als angegeben, aber 26 GB erschien mir dann doch recht viel. Nichtsdestotrotz habe ich Windows neu installiert und dann im Datenträger-Manager festgestellt, dass Sony auf der Festplatte eine Recovery-Partition angelegt hat, von der man das komplette System auf den Auslieferungszustand wiederherstellen kann. Da ich diesen Vorgang nicht in Anspruch nehmen werde und ich gern die volle Kapazität der Festplatte nutzen will, habe ich mich auf die Suche nach einem Tool begeben, mit dem ich diese Recovery-Partition löschen und die Windows Partition auf die volle Größe ausweiten kann. (weiterlesen…)


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

März 2010
M D M D F S S
« Okt    
1234567
891011121314
15161718192021
22232425262728
293031