PHP

OSX 10.6 - Snow Leopard PHP 5.3.6

Beim Einrichten eines neuen Macs habe ich wieder einmal alles neu compiliert und dabei gleich die aktuelle PHP Version genommen: PHP 5.3.6 mit Freetype Support.

Voraussetzungen

Zunächst muss man einige benötigte Bibliotheken installieren. Download von:

Entpacken in /usr/local/src. Mit make install werden die Bibliotheken nach /usr/local/lib kopiert.

libjpg

./configure --enable-shared
make
make install

libpng

./configure --enable-shared
make
make install

pcre

./configure  --enable-utf8 --enable-unicode-properties --disable-shared --enable-static
make
make install DESTDIR=/usr/local/src/pcre-8.12/pcre-local

Wenn diese nicht mit UTF-8 Support compiliert werden, gibt es den folgenden Fehler beim Aufruf von preg_replace:

preg_replace(): Compilation failed: unknown option bit(s) set at offset 0

libmcrypt

./configure --enable-shared
make
make install

Mögliche Änderung im PHP Source

Zunächst gelang mir das compilieren nur mit folgender Änderung. Später ging es ohne diese mit dem komplett unveränderten Sourcecode.

Editieren von ext/iconv/iconv.c

#define iconv libiconv

ändern in:

#define iconv iconv

Compilieren

cd /usr/local/src/php-5.3.6

MACOSX_DEPLOYMENT_TARGET=10.6
CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-arch x86_64 -g -Os -pipe"
CXXFLAGS="-arch x86_64 -g -Os -pipe"
LDFLAGS="-arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

./configure \
--with-iconv-dir=/usr \
--with-libiconv-prefix=/usr \
--with-iconv=/usr \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--disable-dependency-tracking \
--sysconfdir=/private/etc \
--with-apxs2=/usr/sbin/apxs \
--enable-cli \
--with-config-file-path=/etc \
--with-libxml-dir=/usr \
--with-openssl=/usr \
--with-kerberos=/usr \
--with-zlib=/usr \
--enable-bcmath \
--with-bz2=/usr \
--enable-calendar \
--with-curl=/usr \
--enable-exif \
--enable-ftp \
--with-gd \
--with-jpeg-dir=/usr/X11R6 \
--with-png-dir=/usr/X11R6 \
--with-freetype-dir=/usr/X11R6 \
--with-xpm-dir=/usr/X11R6 \
--with-ldap=/usr \
--with-ldap-sasl=/usr \
--enable-mbstring \
--enable-mbregex \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock=/tmp/mysql.sock \
--with-iodbc=/usr \
--enable-shmop \
--with-snmp=/usr \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-xmlrpc \
--with-xsl=/usr \
--with-pcre-regex=/usr/local/src/pcre-8.12/pcre-local/usr/local \
--enable-zip \
 --with-mcrypt

Dann make

make

Und nun mache ich kein make install sondern kopiere das php Modul zum apache (und die http.conf anpassen):

cp libs/libphp5.so /usr/libexec/apache2/libphp5.3.6.so

Und siehe da - Freetype support klappt nun:

Erstellt: 03/2011| Geändert: 10/2015

Nachtrag

Der oben beschrieben Vorgang funktionierte auf einen neuen Mac. Auf meinen "alten" MacBook Pro auf dem schon jede Menge Software installiert wurde über die Jahre hat es nicht geklappt. Die Fehlermeldung ist immer wieder libiconv oder iconv in allen Variationen. Alle Tips aus dem Internet haben nichts gebracht.

Letztlich hat es alles damit zu tun welche Bibliotheken in diversen Verzeichnissen herumliegen. Wie es dann funktioniert hat:

Macports

Macports komplett deinstallieren

pkg-config

pkg-config deinstallieren:

rm /usr/local/bin/pkg-config
rm /usr/local/share/man/man1/pkg-config.1
rm /usr/share/zsh/4.3.9/functions/_pkg-config

Diese Programm hat den Compiliervorgang komplett durcheinandergebracht, glaube ich.

Bibliotheks-Ordner /usr/local/lib

Zunächst habe ich den Ordner umbenannt, dass er nicht mehr gefunden wird. Dann die oben genannten Pakete installiert. Ergebniss: nur noch diese Pakete liegen in /usr/local/lib

/usr/lib/libpcre*

Die pcre Bibliotheken habe ich temporär verschoben. Andernfalls werden diese veralteten verwendet.

Der config cache...

Das Abstruse war, dass es trotzdem noch nicht funktioniert hat. Es hat erst funktioniert als ich den gesamten php Source-Ordner gelöscht und neu aus dem Archiv entpackt habe. Es scheint einen Cache zu geben, in dem die Pfade abgelegt sind und trotz neuem ./configure, make clean, make bleibt der Fehler. Evtl reicht auch die Datei config.cache zu löschen, aber das habe ich nicht verifiziert.

Erstellt: 05/2011| Geändert: 10/2015

OSX 10.6 PHP 5.2.17

Ich brauche die Version 5.2.x zusätzlich zur 5.3.x für TYPO3 - nicht alle Extensions funktionieren mit 5.3. Also nochmal compilieren. Im Prinzip wie 5.3 nur mit anderen configure Optionen.

Mögliche Änderung

Zunächst gelang mir das compilieren nur mit folgender Änderung. Später ging es ohne diese mit dem komplett unveränderten Sourcecode (sieheoben "Nachtrag" - gilt auch für hier).

Editieren von ext/gd/libgd/gd_png.c


       if (!png_check_sig (sig, 8)) { /* bad signature */
                return NULL;
        }

ändern in

       if (!png_sig_cmp (sig, 0, 8) == 0) { /* bad signature */
                return NULL;
        }

Compilieren

./configure aufrufen mit:

./configure \
--with-iconv-dir=/usr \
--with-libiconv-prefix=/usr \
--with-iconv=/usr \
--prefix=/usr \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
--disable-dependency-tracking \
--sysconfdir=/private/etc \
--with-apxs2=/usr/sbin/apxs \
--enable-cli \
--with-config-file-path=/etc \
--with-libxml-dir=/usr \
--with-openssl=/usr \
--with-kerberos=/usr \
--with-zlib=/usr \
--enable-bcmath \
--with-bz2=/usr \
--enable-calendar \
--with-curl=/usr \
--enable-exif \
--enable-ftp \
--with-gd \
--with-jpeg-dir=/usr/local \
--with-png-dir=/usr/X11R6 \
--with-freetype-dir=/usr/X11R6 \
--with-xpm-dir=/usr/X11R6 \
--with-ldap=/usr \
--with-ldap-sasl=/usr \
--enable-mbstring \
--enable-mbregex \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-mysql=/usr/local/mysql \
--with-mysql-sock=/tmp/mysql.sock \
--with-pdo-mysql=/usr/local/mysql \
--with-iodbc=/usr \
--enable-shmop \
--with-snmp=/usr \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-xmlrpc \
--with-xsl=/usr \
--with-pcre-regex=/usr/local/src/pcre-8.12/pcre-local/usr/local \
--enable-zip \
 --with-mcrypt

Die ersten 3 Optionen mit iconv sind vielleicht nicht alle nötig. Aber so hat es jedenfalls funktioniert.

Erstellt: 03/2011| Geändert: 10/2015

PHP 5.2 und 5.3 gleichzeitig

Um beide Versionen gleichzeitig zur Verfügung zu haben habe ich folgendes Setup (mein Standard ist PHP 5.2.11):

Konfiguration

Duplizieren der 5.2 Konfiguration

cp /etc/apache2/httpd.conf /etc/apache2/httpd-php53.conf

 In der httpd-php53.conf folgende Einträge:

Listen 80
LoadModule php5_module         libexec/apache2/libphp5.2.11.so

ersetzen mit:

Listen 81
LoadModule php5_module         libexec/apache2/libphp5.3_osx.so

Aufruf

Um den Aufruf komfortabel mittels apachectl zu haben habe ich dieses Skript dupliziert:

cp -p /usr/sbin/apachectl /usr/sbin/apachectl2

In apachectl2 dann 

LAUNCHD_JOB="/System/Library/LaunchDaemons/org.apache.httpd.plist"

ersetzen mit

LAUNCHD_JOB="/System/Library/LaunchDaemons/org.apache.httpd-php53.plist"

Die Datei org.apache.httpd-php53.plist sieht dann folgendermaßen aus (fett markiert sind die Änderungen):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <true/>
    <key>Label</key>
    <string>org.apache.httpd-php53</string>
    <key>OnDemand</key>
    <false/>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/sbin/httpd</string>
        <string>-f</string>
        <string>/etc/apache2/httpd-php53.conf</string>

        <string>-D</string>
        <string>FOREGROUND</string>
    </array>
    <key>SHAuthorizationRight</key>
    <string>system.preferences</string>
</dict>
</plist>

 

Erstellt: 07/2010| Geändert: 10/2015