Назад | Перейти на главную страницу

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

Я использую 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 никогда не устанавливался на этом компьютере.

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

Моя проблема заключалась в том, что я построил 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 просто компилирует новые символы, чего явно недостаточно ;-)

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

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

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

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

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

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

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

для тех из вас, кто сталкивается с ошибкой 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: поддерживаемые версии bison для регенерации парсеров 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 install bison

затем сделайте distclean, затем ./configure ... затем сделайте затем make -i install

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

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