Теперь, после сборки баз данных, пришла пора установить PHP. Я ставил PHP 5.3.0, который в настоящий момент является последней стабильной версией, указанной на сайте PHP. Кроме того сразу стоит отметить, что я опишу именно процесс сборки PHP как CGI-приложения для последующего использования с каким-нибудь proxy-сервером (в моём случае, с nginx), так что если вы планируете собирать его как mod_php для сервера Apache, этот урок вам не подойдёт.
Кроме того, в процессе моей сборки будет задействован менеджер процессов PHP-FPM, который позволяет более тонко управлять процессами PHP, необходимыми для обработки ваших сайтов. Но обо всём по порядку.
Установка библиотек
Итак, для начала нужно определиться, с чем собирать PHP. Лично для моих задач важна поддержка работы с изображениями (GD2) и шрифтами (Type 1 и Freetype), которые, в свою очередь, потребуют установки в систему ряда библиотек. Так что с них, пожалуй, и начнём. Для установки нужных библиотек, воспользуйтесь знакомой по предыдущим постам утилитой из пакета MacPorts и выполните в терминале следующее.
Эта команда установит в систему библиотеки для работы с графикой (в число которых входят libjpeg, libpng, libfreetype, libxpm и ряд других, необходимых для GD). Теперь установим t1lib (если поддержка шрифтов Adobe™ Type 1 вам не требуется. пропустите этот шаг, но тогда потом уберите из конфигурации PHP, которая будет описана ниже, опцию --with-t1lib)
Сборка PHP с патчем FPM
Теперь необходимо скачать исходники PHP и PHP-FPM. На странице с доступными пакетами выбираете тот, который вам необходим (в описываемом мною случае, 5.3.0), скачиваете (ориентирйтесь на надпись Complete Source Code), распаковываете директорию php-5.3.0. Теперь с сайта PHP-FPM нужно скачать менеджер процессов для той версии PHP, которую вы планируете устанавливать (в описываемом мною случае, php-fpm-0.6-5.3.0) и после скачивания, распаковываете его рядом с исходниками PHP.
Откройте терминал и перейдите в директорию, которая содержит папки с исходниками указанных продуктов. Нужно создать патч FPM, применить его к исходникам PHP, а затем подготовить место для необходимых при сборке файлов. Все необходимые для этого команды я привожу одной строкой, которую вы можете выполнить в терпинале:
Вот и всё, подготовительный этап закончен, теперь можно конфигурировать и собирать PHP. Как и в случае с базами данных, чтобы ознакомиться со списком всех доступных при конфигурации опций, нужно выполнить команду ./configure с параметром --help, находясь в каталоге с исходниками PHP.
После того, как определились, запускаете конфигуратор с нужными параметрами. В описываемом случае я устанавливаю PHP в директорию /usr/local/php-5.3.0, а также указываю местоположение необходимых мне библиотек:
--with-zlib --enable-bcmath --enable-calendar --with-curl \
--with-libxml-dir --enable-exif --with-pcre-dir --enable-ftp \
--with-gd=/opt/local/ --with-jpeg-dir=/opt/local/ --with-png-dir=/opt/local/ \
--with-freetype-dir=/opt/local/ --with-t1lib=/opt/local/ \
--enable-gd-native-ttf --with-gettext=/opt/local/ --enable-mbstring --enable-mbregex \
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-pdo-mysql=/usr/local/mysql --with-pdo-pgsql=/usr/local/pgsql --with-pgsql=/usr/local/pgsql \
--enable-sqlite-utf8 --with-xmlrpc --with-xsl --with-xpm-dir=/usr/X11 --with-iconv=shared,/opt/local/
О нормальном завершении конфигурации можно судить по тому, что у вас на экране терминала отсутствует слово Error и присутствует предложение "Thank you for using PHP". Если же есть какие-то ошибки, внимательно читайте, что именно не устраивает конфигуратор, или задавайте вопросы.
Если конфигурация завершилась нормально, запускайте компиляцию:
Если и после этого ошибки отсутствуют (как я вам тогда завидую!), можно устанавливать PHP:
Тут уже проблем возникнуть попросту не должно. Теперь, чтобы запустить PHP, потребуется произвести начальную конфигурацию PHP-FPM. С этим менеджером процессов сразу поставляется стартовая конфигурация, но в ней закомментированы поля, отвечающие за пользователя и группу, от имени которого должен работать PHP. Чтобы исправить этот недочёт, откройте любым текстовым редактором, который умеет сохранять plain-text файлы (ни в коем случае не Word!!!) файл php-fpm.conf, расположенный в директории /usr/local/php-5.3.0/etc/. Например так:
И найдите там такие строки:
<value name="group">
Уберите с них комментарии, и укажите нужное значение (я использую www).
Осталось сделать пару последних штрихов:
скопируйте файл с дефолтными настройками из директории с исходниками в директорию с установленным PHP
создайте ссылку на ваш PHP (я это делаю исключительно для удобства, этот шаг необязательный)
Вот и всё, теперь можно запускать PHP.
Чтобы убедиться, что он запущен, можно поискать его в процессах:
Чтобы остановить все запущенные процессы (например, при изменении настроек), нужно выполнить следующую команду
На этом можно заканчивать, поскольку теперь у вас установлен PHP.
Безусловно, в этом уроке описано далеко не всё. Например, PHP-FPM можно собрать как самостоятельное приложение, и управлять процессом запуска PHP через него. А можно обойтись и вовсе без FPM. Как бы там ни было, я не ставил своей целью рассказать ВСЁ, поскольку это не имеет смысла: необходимую информацию можно почерпнуть как на официальном сайте PHP, так и на страницах PHP-FPM. Но я всё же рассчитываю, что данная статья покажет, в каком направлении искать, и кому-то сильно сэкономит время.
Ну а в следующей статье, как и обещал, напишу про nginx, memcached и xdebug.
Спасибо в любом случае. :)


Окт 11, 2009 в 10:36
Отличная статья, жду с нетерпением следующих :)
Окт 11, 2009 в 23:27
Очень интересно!!!
Однако хотелось бы увидеть все для простого использования в apache.
Почему Вы выбрали именно этот вид установки?
Просто я свичер 2-дневного пользования
Окт 12, 2009 в 00:42
KsenZ
Материалы давно готовы, осталось придать им законченный вид с нормальным форматированием :) Так что скоро
RabFack
Однако хотелось бы увидеть все для простого использования в apache.
Принцип, в общем-то, тот же. Нужно скачать исходники Apache, и собрать PHP как mod_php для этого веб-сервера, после чего собрать сам Apache, указав на необходимость использования PHP в качестве модуля + поправить httpd.conf (или .htaccess, в зависимости от предпочтений)
Почему Вы выбрали именно этот вид установки?
Потому что мне больше нравится лёгкий nginx, нежели большой и громоздкий Apache. Хотя, это, конечно, в конечном итоге всё это лишь вопрос настроек и личных предпочтений :)
Просто я свичер 2-дневного пользования
Поздравляю с переходом на Mac :)
На самом деле, то что Вы свитчер мало что меняет в обсуждаемом вопросе. Ещё будучи пользователем Windows мне, в принципе, пару раз доводилось выполнять всё то же самое на машинах с Linux и FreeBSD :) Но это всё лишь для разработки, а на production-сервера я обычно со своим уставом не лезу, предоставляя эти вещи профессионалам :)
Окт 12, 2009 в 10:53
А я так и не смог поставить php-fpm, лезут ошибки при конфигурации php, после применения патча :(
Окт 12, 2009 в 11:04
Опишите, какие именно ошибки.
Окт 12, 2009 в 11:31
http://paste.org.ru/?x90suj
и висит…
Окт 12, 2009 в 14:35
KsenZ, что-то очень странное у вас происходит, я с таким не сталкивался, и не могу понять навскидку, в чём конкретно проблема.
Попробуйте выполнить всё с нуля (если ещё не попробовали)
Попробуйте выполнить в каталоге с PHP команду make distclean (тоже помогает иногда) перед конфигурированием
Окт 12, 2009 в 15:46
С нуля пробывал, make distclean не помогает…
может дело в:
ksenzs-x51l-v:php-5.3.0 ksenz$ ./buildconf –force
Forcing buildconf
using default Zend directory
buildconf: checking installation…
buildconf: autoconf version 2.64 (ok)
buildconf: Your version of autoconf likely contains buggy cache code.
Running cvsclean for you.
To avoid this, install autoconf-2.13.
rebuilding configure
Окт 12, 2009 в 15:50
Хотя врятли… Это из-за патча, т.к. без него все собирается на ура
Окт 12, 2009 в 16:00
По идее я и просто апачем обойдусь, просто очень хотелось попробывать nginx, хвалят его :) Попробую через порты…
Окт 12, 2009 в 16:14
Попробуйте собрать PHP-FPM как отдельный бинарник, который будет управлять процессами php-cgi
Окт 12, 2009 в 16:49
Вообщем скачал патч в формате .diff.gz, и сделал как в руководстве на сайте:
gzip -cd php-5.3.0-fpm-0.5.12.diff.gz | patch -d php-5.3.0 -p1
ну и потом естевственно ./configure –enable-fpm………
и все пошло нормально :)
Окт 12, 2009 в 17:02
Это более старая версия патча, но с ней мне тоже приходилось не так давно собирать PHP и всё отлично работает.
Странно, что не сработало с новым патчем.
Как бы там ни было, рад, что всё благополучно разрешилось :) Мои поздравления.
Окт 12, 2009 в 17:20
>>Как бы там ни было, рад, что всё благополучно разрешилось :) Мои поздравления.
Спасибо :) Жду продолжения…
Эх, как же я хочу себе настоящий макбук… Я на OS X всего около 2-х недель, влюблен по уши :) Менять не собираюсь, хоть и “Хакинтош” подглючивает переодически… хочется настоящий макбук чтоб не глючило…
Окт 12, 2009 в 20:18
KsenZ у меня такая же ошибка, пробовал 2 патча php-fpm-0.6-5.3.1 и php-fpm-0.6-5.3.0
может это из за того что у нас Snow Leo?)
Окт 12, 2009 в 20:55
>>может это из за того что у нас Snow Leo?)
нет, у меня 1.5.8
Окт 16, 2009 в 00:45
Куда то все пропали…
Окт 17, 2009 в 11:59
я конечно выражаю благодарность автору, но не вижу смысла в этом мануале, тк возникают ошибки (по крайней мере у 2х, остальные не описали ничего вовсе)
Окт 17, 2009 в 13:15
> junkies
В этом руководстве явно указано, что оно для системы Mac OS X Leopard. Про Snow Leopard пока ничего сказать не могу, потому что не проверял данное руководство на этой системе. Указанная Вами в предыдущей части ошибка говорит о том, что в Snow Leopard, по всей видимости, поменялась структура дерева настроек, и исследовать данную проблему более полно я смогу лишь сегодня вечером, получив доступ к Snow Leopard.
Что же касается бессмысленности, о которой Вы говорите, то каждый решает для себя сам, насколько ему это нужно. Любая сборка чревата вероятностью ошибки. Более того, даже вполне скомпилированные приложения иногда ведут себя непредсказуемо на одинаковых системах. Кстати, что касается сборки: я компилировал PHP по одной и той же схеме на 3-х системах Mac OS X Leopard с одинаковыми обновлениями, и в одном из случаев тоже получил ошибку, на исследование которой ушло 2-3 дня. Но в двух других случаях всё прошло без проблем. Это не значит, что руководство неполное: оно описывает общий случай, который и должен происходить, а всех возможных проблем оно избежать не поможет.
Так что я считаю, что смысл в данном руководстве есть, поскольку оно показывает, в какую сторону нужно двигаться и какие шаги предпринимать.
Окт 17, 2009 в 17:31
2 Rodion Baskakov:
ну да, я погорячился, смысл есть, но что то както не юзабетельно, возможно это из за snow, но и у KsenZ были проблемы с php-fpm
Окт 18, 2009 в 02:46
junkies
смысл есть, но что то както не юзабетельно
Я время от времени наталкиваюсь на крики о помощи от пользователей разнообразных решений “из коробки”, типа MAMP или XAMP. Поверьте, идеальных решений просто не существует, поскольку всегда найдётся тот, у кого что-то не работает, и кому что-то не нравится.
Ноя 8, 2009 в 21:14
Помогите и мне!
Вродебы собрал все… но при запуске:
sudo /usr/local/php/bin/php-cgi –fpm
Выдает вот это:
Status: 404 Not Found
X-Powered-By: PHP/5.3.0
Content-type: text/html
No input file specified.
Что бы это значило?
Ноя 9, 2009 в 07:09
Вре я разобрался неправельно указал ключь…
sudo /usr/local/php/bin/php-cgi –fpm
Июль 1, 2010 в 10:13
KsenZ, ошибка связана с некоторыми изменениями в поведении autoconf новых версий (2.60+), которые по умолчанию установлены в 10.6 (и, возможно, в 10.5). Ошибка приводит к тому, что buildconf генерирует некошерный configure и таким образом портит всю малину.
Подробности: http://bugs.php.net/bug.php?id=50291
Варианты решения — попытаться сдаунгрейдить autoconf (не рекомендую) или использовать отдельную сборку по второму варианту, описанному в документации к php-fpm.
Июль 1, 2010 в 10:58
Николай, Вы всё правильно описали. Я в этом случае поступал следующим образом:
- ставил из MacPorts старый autoconf213
- системный бинарник autoconf переименовывал в autoconf_bak
- на место системного autoconf делал симлинк на бинарник установленного из портов autoconf213
- формировал конфиг через ./buildconf (теперь уже без ошибок)
- возвращал всё на свои места
Дек 22, 2010 в 14:09
My solution is to have multiple versions of PHP running which can be configured on a per virtual host basis specifically PHP 5.2.10 5.3 with Apache 2.2.12 and MySQL 5.1.36. I compiled the software on a Mac but the instructions should work with little or no modification on most nix flavors..Disclaimer This is what my dev setup is on my local machines MBP Mac Pro and what works for me. They can all be downloaded for free with the ..I like putting what I compile in a parent directory opt for clarity and to not affect any built in OS X files.