PHP 5.3.1 Simbolo indefinito: errore OnUpdateLong all'avvio di Apache


9

Sto eseguendo Ubuntu 8.04 su questo server. Avevo installato PHP 5.2 tramite il gestore pacchetti. L'ho rimosso per installare PHP 5.3.1 a mano. Ho creato i pacchetti in questo modo

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

Questo PHP 5.3.1 installato in / 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

Tuttavia, quando provo ad avviare Apache ottengo questo.

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

Qualche idea su cosa sta causando questo errore? Tutti i riferimenti che posso vedere hanno a che fare con la creazione di pacchetti php5 per php4 o simili. PHP4 non è mai stato installato su questa macchina.

Risposte:


11

in realtà, ciò che James Hackett ha detto è stato più o meno ciò che ha funzionato per me.

Il mio problema era che avevo creato PHP prima di installare Apache (ho creato PHP dall'ultimo trunk e installato Apache2 tramite APT).

Quindi, quando ho riscontrato l'errore che Apache ha riscontrato un simbolo indefinito (il modulo che non viene trovato è arbitrario tra l'altro), ho fatto quanto segue:

  1. make distclean sulla fonte php
  2. ./configure --prefix=/usr/local/php-5.3-svn --with-apxs2=/usr/bin/apxs2
  3. make && make install

e tutto ha funzionato bene.

Il capitano ovvio si nascondeva da me, ovviamente poiché se rifacevi senza fare distinti && configura, fai semplicemente compilare i nuovi simboli che ovviamente non sono abbastanza ;-)


3

Ho avuto lo stesso problema e quello che ho fatto è stato cancellare la mia directory dei sorgenti php, riestrarre il tarball e poi compilare di nuovo e tutto ha funzionato bene.

In precedenza avevo installato php su questo sistema senza apache e poi avevo provato a reinstallare php dalla stessa directory di origine con impostazioni di configurazione diverse.


1

Hai creato php5 ma non hai ricostruito la colla tra apache e php5. Dato che stai usando mod_php5, fallisce (logico).

Potresti essere in grado di eseguire script php grazie a fastcgi (suppongo che il tuo php 5.3.1 incorporato sia ok), ma comunque ti consiglio di agire in un altro modo.

È piuttosto brutto creare un software a mano su un server di produzione. Inoltre PHP5 è un grande pezzo di software, si dovrebbe davvero non farlo per scopi di manutenzione e di sicurezza.

Il modo corretto per raggiungere questo obiettivo, se hai davvero bisogno di quella versione, è di eseguire il backport del pacchetto. (sì, confezione!)

Richiede un po 'di conoscenza e tempo di confezionamento. Puoi ottenere i sorgenti di packaging con apt-get source php5:, purché tu abbia una fonte deb-src in /etc/apt/sources.list


Non è un server di produzione. È solo il nostro server di sviluppo e sto cercando di capire cosa, se qualcosa php 5.3 si romperà nel nostro sistema.
baudtack,

1
"È piuttosto sgradevole costruire un software manualmente su un server di produzione. Inoltre PHP5 è un grosso software, non dovresti farlo per motivi di manutenzione e sicurezza." Nella maggior parte delle distribuzioni è l'unico modo per rimanere aggiornati. Ubuntu, ad esempio, ha solo 5.2.10 come stabile nei suoi repository che è stato rilasciato nel giugno 2009. Personalmente trovo più un rischio per la sicurezza usare i pre-pacchetti perché hanno un sacco di roba extra in cui potresti non bisogno e può spogliarsi se li costruisci tu stesso. Inoltre puoi tenerti aggiornato.
Andy Shellam,

1

per quelli di voi che riscontrano l'errore zend_parse_paramater da apache2, durante il caricamento di libphp5.so:

/apache2.conf: errore di sintassi nella riga 1 di /etc/apache2/mods-enabled/php5.load: impossibile caricare /usr/lib/apache2/modules/libphp5.so nel server: / usr / lib / apache2 / modules / libphp5.so: simbolo indefinito: zend_parse_parameters

dai un'occhiata all'output ./configure. se ricevi un messaggio che dice qualcosa di simile a:

configura: avviso: versioni bisonte supportate per la rigenerazione dei parser Zend / PHP: 1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 (trovato: nessuno).

prova a installare bison: sudo apt-get install bison

quindi fare distclean quindi ./configure ... quindi fare quindi make -i install

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


Dovrebbe essere necessario ricostruire i parser zend solo se hai modificato il codice sorgente PHP in qualche modo. Non ho mai installato Bison su alcun server di produzione e non ho mai avuto problemi.
Andy Shellam,

0

Come indicato da @zecrazytux, hai installato i pacchetti apache-dev appropriati? PHP avrebbe potuto costruire senza di loro, anche se gli hai detto dove fossero. Devi guardare l'output ./configure.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.