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 »