PHP 5.3.1 Niezdefiniowany symbol: Błąd OnUpdateLong podczas uruchamiania Apache

9

Używam Ubuntu 8.04 na tym serwerze. Miałem PHP 5.2 zainstalowane za pomocą menedżera pakietów. Usunąłem go, aby ręcznie zainstalować PHP 5.3.1. Tak zbudowałem pakiety

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

To zainstalowało PHP 5.3.1 w / 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

Jednak gdy próbuję uruchomić Apache, dostaję to.

 # /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]

Wszelkie pomysły, co powoduje ten błąd? Wszystkie referencje, które widzę, mają związek z budowaniem pakietów php5 dla php4 lub podobnych. PHP4 nigdy nie zostało zainstalowane na tym komputerze.

baudtack
źródło

Odpowiedzi:

11

w rzeczywistości to, co powiedział James Hackett, mniej więcej działało dla mnie.

Mój problem polegał na tym, że zbudowałem PHP przed zainstalowaniem Apache (zbudowałem PHP z najnowszego łącza i zainstalowałem Apache2 przez APT).

Więc kiedy napotkałem błąd, że Apache napotkał niezdefiniowany symbol (moduł, który nie został znaleziony, to dowolne btw.), Zrobiłem następujące:

  1. make distclean na źródle php
  2. ./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2
  3. make && make install

i wszystko działało dobrze.

Oczywiście kapitan ukrywał się przede mną, ponieważ jeśli przerobisz go bez zrobienia distclean && configure, po prostu skompiluj nowe symbole, co oczywiście nie wystarczy ;-)

Zbudowany
źródło
3

Miałem ten sam problem i usunąłem katalog źródłowy php, rozpakowałem ponownie archiwum, a następnie skompilowałem ponownie i wszystko działało dobrze.

Wcześniej instalowałem php w tym systemie bez apache, a następnie próbowałem ponownie zainstalować php z tego samego katalogu źródłowego z różnymi ustawieniami konfiguracji.

James Hackett
źródło
1

Zbudowałeś php5, ale nie odbudowałeś kleju między Apache i php5. Ponieważ używasz mod_php5, nie działa (logicznie).

Możesz być w stanie uruchomić skrypt php dzięki fastcgi (zakładam, że twoje wbudowane php 5.3.1 jest w porządku), ale i tak zalecam działanie w inny sposób.

Bardzo nieprzyjemne jest ręczne tworzenie oprogramowania na serwerze produkcyjnym. Ponadto PHP5 jest dużym oprogramowaniem, więc nie powinieneś tego robić w celach konserwacyjnych i bezpieczeństwa.

Prawidłowym sposobem na osiągnięcie tego, jeśli naprawdę potrzebujesz tej wersji, jest przeniesienie pakietu. (tak, opakowanie!)

Wymaga to trochę wiedzy i czasu na pakowanie. Możesz pobrać źródła apt-get source php5pakietów za pomocą: pod warunkiem, że masz źródło deb-src w /etc/apt/sources.list

zecrazytux
źródło
To nie jest serwer produkcyjny. To tylko nasz serwer deweloperów i staram się dowiedzieć, co, jeśli cokolwiek php 5.3 psuje się w naszym systemie.
baudtack,
1
„Bardzo nieprzyjemne jest ręczne tworzenie oprogramowania na serwerze produkcyjnym. Ponadto PHP5 to duże oprogramowanie, naprawdę nie powinieneś tego robić ze względu na konserwację i bezpieczeństwo”. W większości dystrybucji jest to jedyny sposób, aby być na bieżąco. Na przykład Ubuntu ma tylko stabilną wersję 5.2.10 w swoich repozytoriach, które zostały wydane w czerwcu 2009 roku. Osobiście uważam, że korzystanie z pre-pakietów jest bardziej ryzykowne, ponieważ mają wiele dodatkowych rzeczy, których nie możesz potrzebujesz i możesz się rozebrać, jeśli sam je zbudujesz. Dodatkowo możesz być na bieżąco.
Andy Shellam
1

dla tych, którzy doświadczają błędu zend_parse_paramater z apache2, podczas ładowania libphp5.so:

/apache2.conf: Błąd składni w pierwszej linii /etc/apache2/mods-enabled/php5.load: Nie można załadować /usr/lib/apache2/modules/libphp5.so na serwer: / usr / lib / apache2 / modules / libphp5.so: niezdefiniowany symbol: zend_parse_parameters

spójrz na wyjście ./configure. jeśli pojawi się komunikat mówiący coś podobnego do:

configure: ostrzeżenie: obsługiwane są wersje żubra dla regeneracji parserów Zend / PHP: 1,28 1,35 1,75 1,875 2,0 2,1 2,2 2,3 2,4 2,4 (znaleziono: brak).

spróbuj zainstalować bison: sudo apt-get install bison

następnie zrób distclean, a następnie ./configure ... następnie zrób, a następnie zrób -i install

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


źródło
Przebudowanie parserów zend powinno być konieczne tylko wtedy, gdy zmodyfikowałeś w jakiś sposób kod źródłowy PHP. Nigdy nie instalowałem bizona na żadnym serwerze produkcyjnym i nigdy nie miałem problemu.
Andy Shellam
0

Jak wskazał @zecrazytux, czy zainstalowałeś odpowiednie pakiety apache-dev? PHP mógłby zbudować bez nich, nawet jeśli powiedziałeś, gdzie oni są. Musisz spojrzeć na wyjście ./configure.

staticsan
źródło