Среда web-разработки на Mac OS X Leopard (часть 1) Среда web-разработки на Mac OS X Leopard (часть 3)
Окт 11

PHP LogoТеперь, после сборки баз данных, пришла пора установить PHP. Я ставил PHP 5.3.0, который в настоящий момент является последней стабильной версией, указанной на сайте PHP. Кроме того сразу стоит отметить, что я опишу именно процесс сборки PHP как CGI-приложения для последующего использования с каким-нибудь proxy-сервером (в моём случае, с nginx), так что если вы планируете собирать его как mod_php для сервера Apache, этот урок вам не подойдёт.
Кроме того, в процессе моей сборки будет задействован менеджер процессов PHP-FPM, который позволяет более тонко управлять процессами PHP, необходимыми для обработки ваших сайтов. Но обо всём по порядку.


Установка библиотек

Итак, для начала нужно определиться, с чем собирать PHP. Лично для моих задач важна поддержка работы с изображениями (GD2) и шрифтами (Type 1 и Freetype), которые, в свою очередь, потребуют установки в систему ряда библиотек. Так что с них, пожалуй, и начнём. Для установки нужных библиотек, воспользуйтесь знакомой по предыдущим постам утилитой из пакета MacPorts и выполните в терминале следующее.

sudo port install gd2

Эта команда установит в систему библиотеки для работы с графикой (в число которых входят libjpeg, libpng, libfreetype, libxpm и ряд других, необходимых для GD). Теперь установим t1lib (если поддержка шрифтов Adobe™ Type 1 вам не требуется. пропустите этот шаг, но тогда потом уберите из конфигурации PHP, которая будет описана ниже, опцию --with-t1lib)

sudo port install 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-fpm-0.6-5.3.0/generate-fpm-patch && cd php-5.3.0 && patch -p1 < ../fpm.patch && ./buildconf --force && mkdir fpm-build

Вот и всё, подготовительный этап закончен, теперь можно конфигурировать и собирать PHP. Как и в случае с базами данных, чтобы ознакомиться со списком всех доступных при конфигурации опций, нужно выполнить команду ./configure с параметром --help, находясь в каталоге с исходниками PHP.

./configure --help

После того, как определились, запускаете конфигуратор с нужными параметрами. В описываемом случае я устанавливаю PHP в директорию /usr/local/php-5.3.0, а также указываю местоположение необходимых мне библиотек:

./configure --enable-fpm --prefix=/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". Если же есть какие-то ошибки, внимательно читайте, что именно не устраивает конфигуратор, или задавайте вопросы.
Если конфигурация завершилась нормально, запускайте компиляцию:

make

Если и после этого ошибки отсутствуют (как я вам тогда завидую!), можно устанавливать PHP:

sudo make install

Тут уже проблем возникнуть попросту не должно. Теперь, чтобы запустить PHP, потребуется произвести начальную конфигурацию PHP-FPM. С этим менеджером процессов сразу поставляется стартовая конфигурация, но в ней закомментированы поля, отвечающие за пользователя и группу, от имени которого должен работать PHP. Чтобы исправить этот недочёт, откройте любым текстовым редактором, который умеет сохранять plain-text файлы (ни в коем случае не Word!!!) файл php-fpm.conf, расположенный в директории /usr/local/php-5.3.0/etc/. Например так:

sudo vim /usr/local/php-5.3.0/etc/php-fpm.conf

И найдите там такие строки:

<value name="user">
<value name="group">

Уберите с них комментарии, и укажите нужное значение (я использую www).
Осталось сделать пару последних штрихов:
скопируйте файл с дефолтными настройками из директории с исходниками в директорию с установленным PHP

sudo cp php.ini-development /usr/local/php/lib/php.ini

создайте ссылку на ваш PHP (я это делаю исключительно для удобства, этот шаг необязательный)

sudo ln -s /usr/local/php-5.3.0 /usr/local/php

Вот и всё, теперь можно запускать PHP.

sudo /usr/local/php/bin/php-cgi --fpm

Чтобы убедиться, что он запущен, можно поискать его в процессах:

sudo ps aux | grep php-cgi

Чтобы остановить все запущенные процессы (например, при изменении настроек), нужно выполнить следующую команду

sudo killall php-cgi

На этом можно заканчивать, поскольку теперь у вас установлен PHP.
Безусловно, в этом уроке описано далеко не всё. Например, PHP-FPM можно собрать как самостоятельное приложение, и управлять процессом запуска PHP через него. А можно обойтись и вовсе без FPM. Как бы там ни было, я не ставил своей целью рассказать ВСЁ, поскольку это не имеет смысла: необходимую информацию можно почерпнуть как на официальном сайте PHP, так и на страницах PHP-FPM. Но я всё же рассчитываю, что данная статья покажет, в каком направлении искать, и кому-то сильно сэкономит время.

Ну а в следующей статье, как и обещал, напишу про nginx, memcached и xdebug.

Если этот блог нравится Вам настолько, что Вы хотели бы перечислить его автору денег, просто сделайте это, нажав на кнопку Donate:

Спасибо в любом случае. :)

Связанные записи

метки: , , , , , ,

оценка:
НеинтересноИнтересно - рейтинг: +8, голосов: 10

Комментарии к статье “Среда web-разработки на Mac OS X Leopard (часть 2)”

  1. KsenZ

    Отличная статья, жду с нетерпением следующих :)

  2. RabFack

    Очень интересно!!!
    Однако хотелось бы увидеть все для простого использования в apache.
    Почему Вы выбрали именно этот вид установки?
    Просто я свичер 2-дневного пользования

  3. admin

    KsenZ
    Материалы давно готовы, осталось придать им законченный вид с нормальным форматированием :) Так что скоро

    RabFack
    Однако хотелось бы увидеть все для простого использования в apache.
    Принцип, в общем-то, тот же. Нужно скачать исходники Apache, и собрать PHP как mod_php для этого веб-сервера, после чего собрать сам Apache, указав на необходимость использования PHP в качестве модуля + поправить httpd.conf (или .htaccess, в зависимости от предпочтений)

    Почему Вы выбрали именно этот вид установки?
    Потому что мне больше нравится лёгкий nginx, нежели большой и громоздкий Apache. Хотя, это, конечно, в конечном итоге всё это лишь вопрос настроек и личных предпочтений :)

    Просто я свичер 2-дневного пользования
    Поздравляю с переходом на Mac :)
    На самом деле, то что Вы свитчер мало что меняет в обсуждаемом вопросе. Ещё будучи пользователем Windows мне, в принципе, пару раз доводилось выполнять всё то же самое на машинах с Linux и FreeBSD :) Но это всё лишь для разработки, а на production-сервера я обычно со своим уставом не лезу, предоставляя эти вещи профессионалам :)

  4. KsenZ

    А я так и не смог поставить php-fpm, лезут ошибки при конфигурации php, после применения патча :(

  5. admin

    Опишите, какие именно ошибки.

  6. KsenZ

    http://paste.org.ru/?x90suj

    и висит…

  7. admin

    KsenZ, что-то очень странное у вас происходит, я с таким не сталкивался, и не могу понять навскидку, в чём конкретно проблема.

    Попробуйте выполнить всё с нуля (если ещё не попробовали)
    Попробуйте выполнить в каталоге с PHP команду make distclean (тоже помогает иногда) перед конфигурированием

  8. KsenZ

    С нуля пробывал, 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

  9. KsenZ

    Хотя врятли… Это из-за патча, т.к. без него все собирается на ура

  10. KsenZ

    По идее я и просто апачем обойдусь, просто очень хотелось попробывать nginx, хвалят его :) Попробую через порты…

  11. admin

    Попробуйте собрать PHP-FPM как отдельный бинарник, который будет управлять процессами php-cgi

  12. KsenZ

    Вообщем скачал патч в формате .diff.gz, и сделал как в руководстве на сайте:

    gzip -cd php-5.3.0-fpm-0.5.12.diff.gz | patch -d php-5.3.0 -p1

    ну и потом естевственно ./configure –enable-fpm………
    и все пошло нормально :)

  13. admin

    Это более старая версия патча, но с ней мне тоже приходилось не так давно собирать PHP и всё отлично работает.
    Странно, что не сработало с новым патчем.

    Как бы там ни было, рад, что всё благополучно разрешилось :) Мои поздравления.

  14. KsenZ

    >>Как бы там ни было, рад, что всё благополучно разрешилось :) Мои поздравления.

    Спасибо :) Жду продолжения…

    Эх, как же я хочу себе настоящий макбук… Я на OS X всего около 2-х недель, влюблен по уши :) Менять не собираюсь, хоть и “Хакинтош” подглючивает переодически… хочется настоящий макбук чтоб не глючило…

  15. junkies

    KsenZ у меня такая же ошибка, пробовал 2 патча php-fpm-0.6-5.3.1 и php-fpm-0.6-5.3.0
    может это из за того что у нас Snow Leo?)

  16. KsenZ

    >>может это из за того что у нас Snow Leo?)

    нет, у меня 1.5.8

  17. KsenZ

    Куда то все пропали…

  18. junkies

    я конечно выражаю благодарность автору, но не вижу смысла в этом мануале, тк возникают ошибки (по крайней мере у 2х, остальные не описали ничего вовсе)

  19. Rodion Baskakov

    > junkies

    В этом руководстве явно указано, что оно для системы Mac OS X Leopard. Про Snow Leopard пока ничего сказать не могу, потому что не проверял данное руководство на этой системе. Указанная Вами в предыдущей части ошибка говорит о том, что в Snow Leopard, по всей видимости, поменялась структура дерева настроек, и исследовать данную проблему более полно я смогу лишь сегодня вечером, получив доступ к Snow Leopard.

    Что же касается бессмысленности, о которой Вы говорите, то каждый решает для себя сам, насколько ему это нужно. Любая сборка чревата вероятностью ошибки. Более того, даже вполне скомпилированные приложения иногда ведут себя непредсказуемо на одинаковых системах. Кстати, что касается сборки: я компилировал PHP по одной и той же схеме на 3-х системах Mac OS X Leopard с одинаковыми обновлениями, и в одном из случаев тоже получил ошибку, на исследование которой ушло 2-3 дня. Но в двух других случаях всё прошло без проблем. Это не значит, что руководство неполное: оно описывает общий случай, который и должен происходить, а всех возможных проблем оно избежать не поможет.

    Так что я считаю, что смысл в данном руководстве есть, поскольку оно показывает, в какую сторону нужно двигаться и какие шаги предпринимать.

  20. junkies

    2 Rodion Baskakov:
    ну да, я погорячился, смысл есть, но что то както не юзабетельно, возможно это из за snow, но и у KsenZ были проблемы с php-fpm

  21. Rodion Baskakov

    junkies

    смысл есть, но что то както не юзабетельно

    Я время от времени наталкиваюсь на крики о помощи от пользователей разнообразных решений “из коробки”, типа MAMP или XAMP. Поверьте, идеальных решений просто не существует, поскольку всегда найдётся тот, у кого что-то не работает, и кому что-то не нравится.

  22. SashaBorandi

    Помогите и мне!

    Вродебы собрал все… но при запуске:
    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.

    Что бы это значило?

  23. SashaBorandi

    Вре я разобрался неправельно указал ключь…

    sudo /usr/local/php/bin/php-cgi –fpm

  24. Nikolay Kharitonov

    KsenZ, ошибка связана с некоторыми изменениями в поведении autoconf новых версий (2.60+), которые по умолчанию установлены в 10.6 (и, возможно, в 10.5). Ошибка приводит к тому, что buildconf генерирует некошерный configure и таким образом портит всю малину.
    Подробности: http://bugs.php.net/bug.php?id=50291
    Варианты решения — попытаться сдаунгрейдить autoconf (не рекомендую) или использовать отдельную сборку по второму варианту, описанному в документации к php-fpm.

  25. Rodion Baskakov

    Николай, Вы всё правильно описали. Я в этом случае поступал следующим образом:
    - ставил из MacPorts старый autoconf213
    - системный бинарник autoconf переименовывал в autoconf_bak
    - на место системного autoconf делал симлинк на бинарник установленного из портов autoconf213
    - формировал конфиг через ./buildconf (теперь уже без ошибок)
    - возвращал всё на свои места

  26. monex.com

    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.

  27. floyd

    captivating@prosodic.takings” rel=”nofollow”>.…

    tnx for info!!…

  28. dale

    astronaut@mystified.beveled” rel=”nofollow”>.…

    ñïñ!!…

  29. fredrick

    meg@induction.organised” rel=”nofollow”>.…

    благодарствую!!…

Написать отзыв

Подписаться именем или OpenID