Snow Leopard und Apache, PHP und MySQL

Die Veröffentlichung von Apples neuer Betriebssystem-Version Snow Leopard hat für Web-Entwickler auch einige Neuerungen mitgebracht. Unter anderem wurde auch der Apache und die PHP-Version aktualisiert. Wer wie ich nicht MAMP verwendet, hat eventuell ebenfalls eine böse Überraschung erlebt: Die angepasste Apache-Konfiguration und alle PHP-Einstellungen sind nach einem Update einfach weg, bzw. zurückgesetzt.Nach wie vor lässt sich der docroot des Webservers über ein http://localhost/~username aurufen, aber PHP läuft dort nicht mehr und ein installiertes MySQL unter /usr/local/ ist auf den ersten Blick auch nicht mehr da. Was ist passiert?

Der neue Apache

Der Apache Webserver wurde auf die Version 2.2.11 aktualisiert. Damit wurden jedoch die Einstellungen in der httpd.conf und vor allem unter /extra/httpd-vhosts.conf zurückgesetzt. Das bedeutet, trotz eines mitgelieferten PHP 5.3 funktionieren PHP-Dateien im docroot unter /Users/{username}/Sites/ erstmal nicht. Eine Abhilfe schafft ein kurzer Sprung in die Konsole, um in der Apache-Konfiguration das Laden des PHP-Moduls wieder zu aktivieren (Bei solchen Sachen lohnt es sich, immer mal ein Backup der aktuellen Konfiguration anzulegen):

#~> sudo cp /private/etc/apache2/httpd.conf .~/backup/httpd.conf.20090909.001
#~> sudo vi /private/etc/apache2/httpd.conf

In der Datei suchen wir nach der Zeile, in der das PHP-Modul geladen wird. Die Zeile muss etwa so aussehen:

#LoadModule php5_module    libexec/apache2/libphp5.so

Durch Entfernen des vorangestellten #-Zeichens und einem Neustart des Apaches wird nun das PHP-Modul geladen. Danach sollte eine im docroot des Webservers abgelegte PHP-Datei mit dem Aufruf der Funktion phpinfo() brav die nagelneue Version 5.3 anzeigen.

Aktivieren der php.ini

Bei einem Blick in die Aufstellung in der PHPInfo stellen wir fest, dass keine php.ini-Datei geladen wird. Stattdessen verwendet das Modul die Standardeinstellungen. Im Verzeichnis /private/etc/ finden wir aber mehrere inaktive Versionen, die wir schnell aktivieren können:

#~> ls /private/etc/php.in*
/private/etc/php.ini.default
/private/etc/php.ini-5.2-previous
/private/etc/php.ini.default-5.2-previous
#~> cd /private/etc/
#~> sudo cp php.ini.default php.ini
#~> sudo chmod u+w php.ini
#~> sudo apachectl restart

Jetzt können wir an der Datei Änderungen vornehmen. Eine wichtige Neuerung in PHP5.3 ist sicherlich das Date/Timezone-Objekt. Das wirft nämlich massenweise Kompatibilitätsfehler aus, wenn Applikationen noch mit den date()-Funktionen von PHP5.2 und kleiner arbeiten. Um diese Fehler zu verhindern, sollte in der php.ini zumindest die Standard-Timezone gesetzt werden. Die unterschiedlichen Angaben (für Europa) findet man in der PHP-Dokumentation. Man öffnet die php.ini, sucht die Definition für date.timezone im Abschnitt [date], setzt den Wert entsprechend (bei mir Europe/Berlin) und kommentiert die Zeile aus. Nach Speichern der Datei und eines Neustarts des Apaches sollten die Fehler verschwunden sein. Ich rate jedoch jedem Entwickler, sich die Definition des neuen Date/Timezone-Objektes anzusehen.

MySQL

Ich hatte vorher eine eigene MySQL-Installation unter /usr/local/mysql laufen. /mysql war dabei ein symbolischer Link auf die Bibliotheken unter mysql-5.0.1a-osx10.5-x86. Das Snow Leopard Update hat zwar die Bibliotheken wiederhergestellt, aber den symbolischen Link vergessen:

#~> cd /usr/local/
#~> sudo ln -s mysql-5.0.1a-osx10.5-x86 mysql

Nebenbei sollte ich die MySQL-Version vielleicht auch einmal aktualisieren – zunächst mal klappt aber wieder der Zugriff über den Client.PHP kann aber noch nicht auf MySQL zugreifen. Zunächst sind in der php.ini die entsprechenden mysql-Module freizuschalten (im Bereich Dynamic Extensions). Danach erscheint der Abschnitt MySQL zwar wieder brav in der phpinfo, es konnte jedoch immer noch keine Verbindung zur lokalen Datenbank hergestellt werden. Das liegt daran, das in der php.ini.default der Wert für das mysql.default_socket auf /var/mysql/mysql.sock steht. In meiner Installation liegt das Socket aber unter /private/tmp/mysql.sock. Schnell den Wert ändern, Apache neu starten und der Zugriff auf die lokale MySQL-DB klappt wieder:

mysql.default_socket = /private/tmp/mysql.sock
mysqli.default_socket = /private/tmp/mysql.sock

Von meinen virtuellen Hosts hatte ich ausreichend Backups, darum war die Wiederherstellung der httpd-vhosts.conf nicht so schwer. Wer lokale TLDs verwendet und die Zugriffe durch Einträge in der /private/etc/hosts ermöglicht, muss übrigens die hosts-Datei nicht noch einmal anfassen: Die Einträge darin werden von Snow Leopard übernommen.

Danke für die Hilfe

Sehr viel geholfen haben mir dabei die Einträge von tady im WordPress-Forum und der Artikel Snow Leopard: Umstiegshürden eines Web-Entwicklers in Wookkies Blog. Danke dafür.

Dieser Beitrag wurde unter Apache Webserver, Mac OS X, MySQL, PHP, Tipps & Tricks abgelegt und mit , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

10 Antworten auf Snow Leopard und Apache, PHP und MySQL

  1. Robert sagt:

    HiDanke für die Tips… Ich habe das Problem, dass ich vorher keine MySQL selber installiert hatte, jetzt auf Snow Leopard “upgegradet” haben und nicht weiss, ob MySQL mit Snow Leopard installiert wird oder nicht?Ich habe verscheidenes gelesen. Wird MySQL mitinstalliert?Wenn nein, welche Version von MySQL.com kann man auf Snow Leopard installieren?Vielen Dank für deine Hilfe!

  2. Oliver sagt:

    Ich finde derzeit keinerlei Hinweise auf eine Installation von MySQL. In den offiziellen Specs (die wie immer sehr dürftig sind), steht MySQL unter Dienste – was immer das heissen mag (vielleicht weiss ein Leser mehr?).Im Blog von Thorsten Puzich findet sich eine weitere Anleitung zur Installation von MySQL. Irgendwie kann ich mir nicht vorstellen, das eine MySQL-Server-Variante mitgeliefert wurde. Ich kann mir auch nicht vorstellen, wie das mit den Lizenzen vereinbar wäre.

  3. potato sagt:

    Erst einmal vielen dank für den hervorragenden beitrag – hat mir garantiert etliche stunden gespart.@beide vor-frager:mysql ist natürlich nicht dabei. m.w. nur in den servervarianten von os x. die entsprechenden downloadpakete bekommt ihr von der offiziellen mysql-seite, und das baste: ihr könnt nun eine 64-bit version laufen lassen. meiner meinung nach sind die grafischen frontends für die mysql-verwaltung größtenteils schrott; ein wenig terminal-erfahrung schadet niemandem ;-) – ansonsten phpmyadmingrußjan

  4. Stefan sagt:

    Danke für den super Beitrag. Nur leider habe ich dadurch meinen MySQL Server nicht wieder ans laufen bekommen. Lt. Systemeinstellung läuft er zwar, aber ich kann mich nicht Verbinden (#2002 – Der Server antwortet nicht. (evtl. ist auch der Socket des lokalen MySQL-Servers nicht korrekt konfiguriert)).Der Socket liegt unter /private/tmp/mysql.sock, das habe ich so auch in der php.ini eingestellt.Was mache ich falsch?GrußStefan

  5. Oliver sagt:

    Hm, das ist aus der Entfernung wirklich, wirklich schwer zu sagen. Zunächst mal solltest Du prüfen, ob tatsächlich ein mysqld-Prozess läuft. Dazu kannst Du im Terminal nach dem Prozess greppen:> ps aux | grep mysqldDas sollte einen laufenden MySQL-Server liefern. Danach solltest Du versuchen, Dich mit dem Kommandozeilen-Client zu verbinden. Bei mir liegt er unter /usr/local/mysql/bin/mysql. Damit verbinde ich mich im Terminal mit dem Server. Wenn das funktioniert, musst Du prüfen, ob die php.ini, in der Du die Einstellungen gemacht hast, auch tatsächlich geladen wird. Das machst Du am besten mit einer phpinfo(); (in der Dir übrigens auch die verwendeten Sockets angezeigt werden).Der nächste Check gilt dann Deinem Verbindungsaufruf und dem Benutzer den Du verwendest: Hat der Benutzer die entsprechenden Rechte, nutzt Du localhost zur Verbindung? Welchen Port verwendet Dein Server, welchen Dein Client, usw.

  6. Stefan sagt:

    Vielen dank für die schnelle Hilfe. Die MySQL-Konsole hat sich zu /tmp/mysql.sock verbunden und nicht zu /private/tmp/mysql.sockObwohl dies nur eine Verknüpfung ist funktionierts jetzt, wenn ich die php.ini ebenfalls auf /tmp/mysql.sock änder. Klingt komisch, is’ aber so ;-)Also nochmal, vielen vielen Dank!

  7. willi_lausebub sagt:

    Hallo Steffan,Das Verzeichnis “/tmp” ist auch nur eine Verknüpfung auf das Verzeichniss “/private/tmp”.Ist eine super Anleitung, werde diese auf jeden Fall in meine Favoriten aufnehmenAber ich habe da noch mal eine andere Frage. Als Admin kann ich auf der Konsole mit mysql arbeiten aber als User nicht.

  8. willi_lausebub sagt:

    Hallo Olliver, vergiss die letzte Frage, Problem hat sich erledigt ich hatte die “./bash_profile” vergessen.Für alle anderen ich meine die Angabe für die Umgebungsvariablen.Ich hatte dort den Eintrag” export PATH=$PATH:/usr/local/mysql/bin “vergessen. für die Kopierfreunde, bitte die (” “) beim kopieren weglassen.gruss der lausebub

  9. Stephan sagt:

    Hallo,Ich habe jetzt schon mehre Seiten durchforstet und bin eigentlich immer auf die selbe Prozedur zum aktivieren von PHP gestossen … aber es läuft bei mir nicht. Es wird immer wieder das Script im Klartext angezeigt, der PHP Interpreter läuft nicht.Was habe ich vergessen wenn ich in der httpd.conf die PHP Zeile entkommentiert habe und den Apache neu starte?

  10. salome sagt:

    Ich muss mich jetzt auch einmal ganz herzlich bedanken. Bei jedem neuen Upgrade von Mac OS X (also diesmal bei Lion) muss ich mit den Apache Einstellungen von Neuem beginnen. Hätte ich nicht diese Seite als Sicherheitsnetz, wäre ich verloren. Ich betreue nämlich die Site nur, habe aber nur eine oberflächliche Ahnung von THML, gar keine von php, deshalb ist mir diese Anleitung unverzichtbar.Immer vergesse ich nämlich einen Teil der auszuführenden Prozesse. Diesmal: php ini-Aktivierung.
    Danke!
    Salome

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>