Как скомпилировать и подключить PHP к Apache
Четверг, Январь 20th, 2011 | Linux, Из жизни, Программирование
Сейчас я расскажу о двух дневном ужасе, который я пережил пытаясь подключить собственноручно написанное расширение для PHP.
Хотя нет, я избавлю от завываний и просто поведаю:
- как подружить только что скомпилированный PHP с apache;
- куда положить и где прописать самописное расширение, чтобы оно было доступно из php скрипта запущенного под управлением apache.
Итак, вводные:
- у нас есть исходники PHP;
- исходники расширения для PHP;
- установленный и настроенный 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? Есть два способа:
- sudo find / -name php.ini и выбрать подходящий;
- запустить 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. я совсем недавно познакомился с линуксом, поэтому мог сказать что-то не по феншую!
Свежие записи
Наиболее интересные
- Взлом паролей пользователей ОС Windows - 61 голосов,




(4.82) - Как поставить Windows и Linux Ubuntu на нетбук - 27 голосов,




(4.96) - Чтение и запись в XML фаил (C#) - 24 голосов,




(4.75) - Решение СЛАУ. Метод Гаусса с выбором главного элемента - 19 голосов,




(4.37) - Можно ли играя в Линейку (Lineage II) заработать реальных денег? - 16 голосов,




(3.44) - Назначение клавиши Scroll Lock! А вы знаете зачем она? - 15 голосов,




(4.67) - Нахождение НОД и НОК без лишних слов - 14 голосов,




(4.21) - Раздавая файлы через торренты можно заработать?! - 13 голосов,




(3.15) - Как подключить Firebird в C# или «жарптица в решете» - 11 голосов,




(4.55) - Генерация лабиринта - 10 голосов,




(5.00)
Рубрики
- Закладки (4)
- Из жизни (34)
- Linux (6)
- Заработок (6)
- Игры (3)
- Тайм менеджмент (2)
- Программирование (52)
- Юмор (7)
Архивы
- Январь 2011 (3)
- Декабрь 2010 (2)
- Сентябрь 2010 (13)
- Август 2010 (4)
- Июль 2010 (5)
- Июнь 2010 (7)
- Апрель 2010 (6)
- Март 2010 (11)
- Февраль 2010 (24)
- Январь 2010 (12)
- Октябрь 2009 (1)
- Сентябрь 2009 (1)





