PHP 5.3.1 Undefined Symbol: ошибка OnUpdateLong при запуске Apache

9

Я использую Ubuntu 8.04 на этом сервере. У меня был установлен PHP 5.2 через менеджер пакетов. Я удалил его, чтобы установить PHP 5.3.1 вручную. Я построил пакеты так

./configure --prefix=/opt/php --with-mysql --with-curl=/usr/bin --with-apxs2=/usr/bin/apxs2
make
make install

Это установленный PHP 5.3.1 в / opt / php /

$ php -v
PHP 5.3.1 (cli) (built: Dec  7 2009 10:51:14) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies

Однако, когда я пытаюсь запустить Apache, я получаю это.

 # /etc/init.d/apache2 restart
 * Restarting web server apache2       
  apache2: Syntax error on line 185 of /etc/apache2/apache2.conf: 
  Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: 
  Cannot load /usr/lib/apache2/modules/libphp5.so into server: 
  /usr/lib/apache2/modules/libphp5.so: undefined symbol: OnUpdateLong
                                                                     [fail]

Есть идеи, что вызывает эту ошибку? Все ссылки, которые я вижу, имеют отношение к созданию пакетов php5 для php4 и т.п. PHP4 никогда не был установлен на этом компьютере.

baudtack
источник

Ответы:

11

на самом деле, то, что сказал Джеймс Хакетт, было более или менее тем, что сработало для меня.

Моя проблема заключалась в том, что я построил PHP до того, как установил Apache (я собрал PHP из последней магистрали и установил Apache2 через APT).

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

  1. make distclean на источник PHP
  2. ./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2
  3. make && make install

и все работало просто отлично.

Очевидно, капитан скрывался от меня, потому что, если вы просто переделали без make distclean && configure, make просто компилирует новые символы, чего явно недостаточно ;-)

изготовленном
источник
3

У меня была такая же проблема, и я удалил исходный каталог php, заново распаковал архив, а затем снова скомпилировал, и все заработало нормально.

Ранее я установил php в этой системе без apache, а затем попытался переустановить php из того же исходного каталога с другими настройками конфигурации.

Джеймс Хакетт
источник
1

Вы создали php5, но не восстановили связь между apache и php5. Так как вы используете mod_php5, он не работает (логично).

Вы можете запускать php-скрипт благодаря fastcgi (я полагаю, что ваш встроенный вручную php 5.3.1 в порядке), но в любом случае я рекомендую вам действовать по-другому.

Довольно неприятно создавать программное обеспечение вручную на рабочем сервере. Более того, PHP5 - это большая часть программного обеспечения, вы действительно не должны делать это в целях обслуживания и безопасности.

Правильный способ добиться этого, если вам действительно нужна эта версия, - это сделать бэкпорт пакета. (да, упаковка!)

Это требует немного знаний упаковки и времени. Вы можете получить источники пакетов с помощью:, apt-get source php5если у вас есть источник deb-src в /etc/apt/sources.list

zecrazytux
источник
Это не рабочий сервер. Это просто наш сервер разработки, и я пытаюсь выяснить, что, если что-нибудь php 5.3 сломает в нашей системе.
Бодтак
1
«Довольно неприятно создавать программное обеспечение вручную на производственном сервере. Более того, PHP5 - это большая часть программного обеспечения, вам действительно не следует делать это в целях обслуживания и безопасности». В большинстве дистрибутивов это единственный способ оставаться в курсе. Например, в Ubuntu стабильная версия 5.2.10 поддерживается только в репозиториях, выпущенных еще в июне 2009 года. Лично я считаю, что использование пре-пакетов сопряжено с большей угрозой безопасности, поскольку в них встроено множество дополнительных функций, которые вы, возможно, не сможете использовать. нужно и может раздеться, если вы сами их построите. Плюс вы можете быть в курсе.
Энди Шеллам
1

для тех из вас, кто испытывает ошибку zend_parse_paramater от apache2 при загрузке libphp5.so:

/apache2.conf: синтаксическая ошибка в строке 1 файла /etc/apache2/mods-enabled/php5.load: невозможно загрузить /usr/lib/apache2/modules/libphp5.so на сервер: / usr / lib / apache2 / modules / libphp5.so: неопределенный символ: zend_parse_parameters

взгляните на вывод ./configure. если вы получите сообщение о чем-то похожем на:

configure: warning: поддерживаются версии зубров для регенерации парсеров Zend / PHP: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (найдено: нет).

попробуйте установить bison: sudo apt-get установить bison

затем сделайте distclean затем ./configure ... затем сделайте затем сделайте -i установить

http://www.linuxforums.org/forum/redhat-fedora-linux-help/87975-configuring-php-work-apache.html


источник
Необходимо пересобрать Zend-парсеры, только если вы каким-то образом изменили исходный код PHP. Я никогда не устанавливал бизонов на производственных серверах, и у меня никогда не было проблем.
Энди Шеллам
0

Как указал @zecrazytux, вы установили соответствующие пакеты apache-dev? PHP вполне мог бы построить без них, даже если бы вы сказали, где они. Вам нужно посмотреть на вывод ./configure.

staticsan
источник