Как скомпилировать и подключить PHP к Apache

Четверг, Январь 20th, 2011 | Linux, Из жизни, Программирование

1 звезда2 звезд3 звезд4 звезд5 звезд (2 голосов, средний: 5.00 из 5)
Loading ... Loading ...

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

Хотя нет, я избавлю от завываний и просто поведаю:

  1. как подружить только что скомпилированный PHP с apache;
  2. куда положить и где прописать самописное расширение, чтобы оно было доступно из php скрипта запущенного под управлением apache.

Итак, вводные:

  1. у нас есть исходники PHP;
  2. исходники расширения для PHP;
  3. установленный и настроенный apache2.

Начнем с компиляции PHP. Нам необходимо его скомпилировать и установить, чтобы в последствии наше расширение свободно встало и не вызвало никаких конфликтов. К этой идеи я пришел не сразу сначала пару раз словил вот такую ошибку

» undefined reference to `_zval_ptr_dtor_wrapper’ «, причем вылезла он в логи apache (это существенный момент, ибо я очень долго не мог понять почему мое расширение не загружалось, а заглянуть в логи apache как-то сразу не догадался, скорее всего это было из-за недостатка опыта). Логи apache обычно держит (если вы их не переопределили) в /var/log/apache2/error.log. Следить за его изменением удобно при помощи команды:

tail -f -n20 /var/log/apache2/error.log

Итак, я уже писал как собирать PHP из исходников. Сейчас мы будем его собирать так, чтобы он смог сразу подружиться с apache2. Для этого нам необходимо передать дополнительный параметр к ./configure, но для начала давайте займемся поиском скрипта apxs2 (для apache 1.x он называется apxs):

sudo find / -name apxs2

Вот описание apxs2. Если команда find ничего не нашла, то это легко поправимо, достаточно поставить пакет apache2-threaded-dev (или аналогичный, у меня ubuntu поэтому пакет так называется):

sudo apt-get install apache2-threaded-dev

Повторим поиск. Путь до apxs2 у меня оказался вот таким /usr/bin/apxs2.

Перед тем как мы начнем собирать php необходимо остановить запущенный apache:

sudo apache2ctl stop

Итак, переходим в папку с исходниками PHP. Процесс сборки PHP я уже описывал, поэтому без лишних слов:

./buildconf --force
./configure --with-apxs2=/usr/bin/apxs2 --enable-debug
sudo make clean
sudo make
sudo make install


Обязательно, не забудьте сделать make clean!.

Я не стал писать других параметров к ./configure, дабы сфокусироваться на проблеме компиляции и подключения PHP к apache (хотя другие опции безусловно нужны!).

Параметр –enable-debug я написал потому, что именно она мне помогла определить места где мое расширение умудрялось убить поток открытый apache для обработки запроса (благодаря этому параметру в случае ошибки вы получите чуть больше нежели Segmentation fault ;) ).

Далее переходим в папку расширения, его надо перекомпилировать:

phpize
./configure --enable-dbadapter
sudo make clean
sudo make
sudo make install

Уже почти закончили, теперь надо прописать наше расширение в php.ini, нас интересует тот php.ini, который загружается php, который подключен к apache (не очень красиво сказано, зато четко отражает суть). Как найти этот php? Есть два способа:

  1. sudo find / -name php.ini и выбрать подходящий;
  2. запустить apache, и вывести скриптом phpinfo(), в графе «Configuration File (php.ini) Path» вы найдете папку в которой лежит заветный php.ini (у меня это оказалось /usr/local/lib).

У меня в /usr/local/lib php.ini не оказалось, поэтому я его просто создал. Дописываем в php.ini в самый конец вот такую строчку:

extension=ext.so

где ext.so – ваше расширение.

Запускаем apach (или перезапускаем, в зависимости от того какой способ определения местоположения php.ini вы выбрали):

sudo apachectl start

Для перезапуска вместо start используйте restart.

Вот и все собственно, надеюсь я сэкономил вам время!

P.S. я совсем недавно познакомился с линуксом, поэтому мог сказать что-то не по феншую!



Комментариев нет.

Оставить отзыв

Сначала зарегистрируйтесь.

Поиск по блогу