Nachdem ich lange Zeit zum Entwickeln von PHP Anwendungen MAMP benutzt habe, gefiel mir doch irgendwan das ganze nicht mehr! Warum sollte ich denn MAMP installieren, wenn doch das meiste schon mit Mac OS 10.5 (Leopard) installiert wird?

Was nicht jeder weiß: Bei Mac OS 10.5 ist standardmäßig schon Apache2 und PHP5 installiert. Manchem mag das schon reichen, aber früher oder später braucht man doch meist eine Datenbank. Häufig kommt MySQL zum einsatz, die es auch als fertiges Build für Mac OS gibt.

Mir fehlte nun noch memcached und die passende PHP Erweiterung memcache, welche sich aber auch beide leicht einrichten lassen, wenn man über mache Stolpersteine bescheid weiß!

Ich werde in meinen Beispielen immer den Editor vim benutzen. Natürlich kann man genau so gut jeden anderen Editor benutzen!

Apache2

Der Apache2 Webserver muss nicht weiter konfiguriert werden, die Websites liegen standardmäßig unter:

/Library/WebServer/Documents bzw. /Users/<username>/Sites

zugreifen kann man dann über:

http://localhost/ bzw. http://localhost/~<username>/

PHP5

Als erstes aktiviert man nun PHP5 in der Apache2 Konfiguration:

$ sudo vim /etc/apache2/httpd.conf

Nun sucht man nach dieser Zeile

#LoadModule php5_module        libexec/apache2/libphp5.so

und entfernt das Kommentarzeichen am Anfang

LoadModule php5_module        libexec/apache2/libphp5.so

speichert die Datei wieder ab und beendet den Edtitor (unter vim :wq).
Nun starten wir den Apache2 neu, damit PHP5 geladen wird. Neustarten kann man den Server mit dem Befehl:

$ sudo apachectl restart

Um zu testen ob PHP wie gewünscht arbeitet, legt man eine Datei in seinem Webverzeichnis mit folgendem Inhalt an:

<?php phpinfo(); ?>

Diese speichert man z.B. als info.php. Ruft man diese nun über den Webserver auf (z.B. http://localhost/info.php) sollten Informationen über die PHP Installation angezeigt werden.

MySQL

Die Installation von MySQL verläuft sehr reibungslos. Dafür läd man einfach das passende Disc Image (dmg) runter http://dev.mysql.com/downloads/mysql/5.1.html#macosx-dmg
Danach muss ma nur noch den Installer durchlaufen lassen.

Da die Pfade für mysqld unter Mac etwas anders sind als üblich sollte man noch einen Symlink einrichten, damit Anwendungen wie phpMyAdmin usw. auch auf MySQL zugreifen können:

$ sudo mkdir /var/mysql/
$ sudo chown _mysql /var/mysql
$ sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Um den MySQL Server zu starten, kann man einfach in die Systemsteuerung gehen und unter MySQL den Server starten. Alternativ kann man den Server auch aus dem Terminal mit dem folgenden Befehl steuern (wobei start oder stop zu wählen ist):

$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start|stop

phpMyAdmin

Wer gerne phpMyAdmin nutzen möchte läd dies einfach von der Autorenseite nach: http://www.phpmyadmin.net/home_page/downloads.php und entpackt es ins Webverzeichnis.

Man sollte nun nur noch das root Passwort ändern, da dieses standardmäßig nicht gesetzt ist!

memcached

Auch wenn man nach einigem Suchen ein Installationsscript findet, was verspricht alles notwendige runterzuladen und zu installieren, sollte man von diesem Abstand nehmen. Das hört sich zwar sehr gut an, doch werden meist veraltete Versionen der Programme installiert.

Die aktuellen Sourcen von memcached und libevent (welches von memcached benötigt wird) lassen sich einwandfrei unter Mac OS X kompilieren und installieren!

In meinem Beispiel verwende ich die zur Zeit aktuellen Sourcen. Man sollte aber immer die aktuellste stable build benutzen!

Die aktuellen Sourcen von libevent ( http://www.monkey.org/~provos/libevent/ ) runterladen

Danach müssen die Sourcen noch wie folgt entpackt und compiliert werden:

$ tar xzf libevent-1.4.9-stable.tar.gz
$ cd libevent-1.4.9-stable
$ ./configure
$ make
$ sudo make install

Für memcached die Sourcen hier ( http://www.danga.com/memcached/download.bml ) runterladen

Wieder entpacken und compilieren

$ tar xzf memcached-1.2.6.tar.gz
$ cd memcached-1.2.6
$ ./configure
$ make
$ sudo make install

Danach ist memcached einsatzbereit!
Starten kann man den Dienst z.B. mit:

$ sudo /usr/local/bin/memcached -d -l 127.0.0.1 -m 32 -p 11211 -u nobody

PHP Extension memcache

Um memcached auch in PHP nutzen zu können braucht man die PHP Extension memache. Diese kann man ganz einfach kompilieren, wenn man weiß, dass der Apache2 und PHP5 unter Mac OS 10.5 standardmäßig als 64bit binaries kompiliert wurden. Denn dementsprechend muss man auch 64bit extensions kompilieren.

Hierfür läd man sich als erstes die Sourcen von memcache ( http://pecl.php.net/package/memcache ) herrunter.
Danach werden die Sourcen wie folgt entpackt und kompiliert:

$ gunzip -c memcache-2.2.4.tgz | tar -xvf -
$ cd memcache-2.2.4

Nun erstellt muss man dem Compiler sagen, dass man eine 64bit Version benötigt:

$ export CCFLAGS=”-arch x86_64″

Nun wie üblich kompilieren:

$ ./configure
$ make
$ sudo make install

Zur Sicherheit kann man noch testen, ob das erstellen der 64bit Version erfolgreich war, indem man folgenden Befehl ausführt:

$ file modules/memcache.so

Dabei sollte eine Ausgabe wie diese erscheinen (wichtig ist das 64bit!):

modules/memcache.so: Mach-O 64-bit bundle x86_64

Nun muss der Apache noch einmal neugestartet werden, damit das Modul geladen wird. Ob das ganze geklappt hat kann man nun sehen, indem man wieder die info.php vom Anfang aufruft und auf der Seite nach “memcache” sucht. Es sollte nun eine eigene Sektion geben, die über die Einstellungen für memcache informiert. Falls diese Sektion nicht vorhanden ist bitte unten bei den Tipps zum Fehler beheben schauen!

Nun sollte die PHP Erweiterung memcache verfügbar sein. Man kann nun eine php Testdatei mit folgendem Inhalt erzeugen:

<?php
$memcache = new Memcache;
$memcache->connect(‘localhost’, 11211) or die (“Could not connect”);

$version = $memcache->getVersion();
echo “Server’s version: “.$version.”<br/>\n”;

$tmp_object = new stdClass;
$tmp_object->str_attr = ‘test’;
$tmp_object->int_attr = 123;

$memcache->set(‘key’, $tmp_object, false, 10) or die (“Failed to save data at the server”);
echo “Store data in the cache (data will expire in 10 seconds)<br/>\n”;

$get_result = $memcache->get(‘key’);
echo “Data from the cache:<br/>\n”;

var_dump($get_result);
?>

Herzlichen Glückwunsch alles ist fertig eingerichtet!


Fehlerbehebung

Falls die memcache Sektion in der info.php nicht vorhanden ist kann es sein, dass das PHP Modul nicht richtig geladen werden konnte. Um dies genauer zu untersuchen hilft ein Blick in das Apache log:

$ tail -f /var/log/apache2/error_log

Mit diesem Befehl wird die Logdatei kontinuierlich angezeigt. Man kann also beobachten welche Einträge wärend des Startens des Apache erzeugt werden!

Typische Fehlermeldung:
PHP Warning:  PHP Startup: Unable to load dynamic library ‘/usr/lib/php/extensions/no-debug-non-zts-20060613/memcache.so’ – (null) in Unknown on line 0

Lösungsansätze:

  • Das Modul ist nicht passend für den Apache Server (evtl. keine 64bit Version kompiliert?).
  • Die Datei existiert nicht / ist nicht lesbar?

2 Kommentare »

Kommentar gepostet am Freitag den 18.09.2009 um 11:19 von Vinai

Cooler Post :)
Bin durch google drauf gestoßen.
Eine Kleinigkeit: bei dem pecl memcached Modul ist kein configure Script dabei.
Nach dem Entpacken muss erst phpize in dem Source-Verzeichnis ausgeführt werden.
Dann ganz normal mit ./configure weitermachen.

Gruß,
Vinai

Kommentar gepostet am Freitag den 18.09.2009 um 13:54 von matthias

Hey danke dir Vinai,

inzwischen benutze ich auch kein Memcached mehr und würde nur noch MySQL nachinstallieren und SequelPro (http://www.sequelpro.com/) statt phpmyadmin installieren. SequelPro arbeitet direkt lokal mit dem MySQLd und die Arbeit geht viel schneller und ohne Zeitüberschreitungen von der Hand. Apache und PHP sind eh in recht aktuellen Versionen beim OS dabei.

Matthias

Kommentar schreiben zu Apache2 + PHP + MySQL + memcached unter Mac OS 10.5,
geschrieben am Samstag den 07.02.2009 um 18:15 von matthias