Установка PHP 5.3 на Snow Leopard
В очередной раз обновил свой MacBook Pro 15”, и как обычно понадобилось установить PHP не стандартной конфигурации. Обычно я использовал MacPorts для установки необходимых мне пакетов, но он ужасен.
Минуточку. А вообще зачем мне все это? Ведь, скажите вы, в Snow Leopard уже есть установленный и готовый к работе PHP 5.3. Поэтому привожу примерный список почему я собираю PHP ручками:
На этот раз я решил использовать Homebrew для установки необходимых пакетов. Автор этой утилиты гордо называет свой проект: “The missing package manager for OS X” и я в чем-то согласен. Главный принцип состоит в том чтобы не делать лишнего. Если какие-то пакеты, библиотеки уже находятся в системе, он будет использовать их.
Установка Homebrew это очень простое занятие, достаточно запустить в консоли
ruby -e "$(curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb)"
и после этого назначить права доступа
sudo chown -R $USER:staff /usr/local
Для того чтобы обновлять пакеты нужно поставить git
brew install git
После этого все обновления происходят через команду
brew update
Теперь приступим к установки необходимых пакетов для нашего PHP, разумеется начнем с MySQL 5.5
brew install mysql
после установки MySQL нужно будет выполнить инструкции которые подскажет Homebrew, затем ставим оставшиеся пакеты
brew install libjpeg
brew install gmp
brew install mcrypt
brew install gettext
brew install icu4c
brew install libxml2
Остается дело за конфигурацией и установкой PHP, берем последнюю версию с сайта, на момент написания статьи была версия 5.3.6, распаковываем и начинаем конфигурацию
env EXTRA_LIBS="-lstdc++" ./configure --prefix=/usr/local/php
--with-apxs2=/usr/sbin/apxs
--with-layout=GNU
--enable-calendar
--enable-ftp
--enable-bcmath
--enable-mbstring
--enable-mbregex
--with-icu-dir=/usr/local/Cellar/icu4c/4.4.1
--enable-intl
--enable-cli
--enable-sockets
--enable-soap
--with-gettext=/usr/local/Cellar/gettext/0.18.1.1
--with-bz2
--with-zlib
--enable-zip
--with-gd
--with-jpeg-dir
--with-png-dir=/usr/X11
--with-xpm-dir
--with-freetype-dir=/usr/X11
--enable-exif
--with-gmp
--with-mcrypt
--with-mysql=mysqlnd
--with-pdo-mysql=mysqlnd
--with-mysql-sock=/tmp/mysql.sock
--with-curl
--with-openssl
--with-libxml-dir=/usr/local/Cellar/libxml2/2.7.7
--with-xsl=/usr
--with-xmlrpc
--enable-sqlite-utf8
--enable-shmop
--enable-pcntl
--enable-sysvmsg
--enable-sysvsem
--enable-sysvshm
ну а далее как обычно
make
sudo make install
На этом установка заканчивается.
В конце хочу показать ошибки, с которыми я сталкивался при компиляции PHP, возможно это поможет тем кто ищет работающий вариант установки.
Проблема с конфликтом intl и libxml2, была решена с помощью установки последней версии libxml2, ошибка выглядела так:
In file included from /opt/local/include/unicode/utypes.h:36,
from /usr/local/src/php-5.3.6/ext/intl/grapheme/grapheme.h:21,
from /usr/local/src/php-5.3.6/ext/intl/php_intl.h:26,
from main/internal_functions.c:47:
/opt/local/include/unicode/umachine.h:308: error: redefinition of typedef ‘UChar’
/usr/include/libxml2/libxml/encoding.h:41: error: previous declaration of ‘UChar’ was here
make: *** [main/internal_functions.lo] Error 1
Проблема с установкой intl в 64 битном режиме, была решена с помощью “env EXTRA_LIBS=”-lstdc++”“, ошибка выглядела так:
Undefined symbols for architecture x86_64:
"___gxx_personality_v0", referenced from:
Dwarf Exception Unwind Info (__eh_frame) in msgformat_helpers.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [libs/libphp5.bundle] Error 1
Были еще какие-то ошибки, но их я уже не записал.
Надеюсь будет полезно, по-крайней мере я точно посмотрю в эту статью еще не раз ;)