Questa sezione raccoglie i più comuni errori che avvengono durante l'installazione.
Per generare lo script di configurazione dal file configure.in occorre avere
il pacchetto autoconf di GNU installato sul PC. Si esegua
./buildconf nella cartella di livello più alto dopo aver
ottenuto i sorgenti dal server Git. (A meno che si esegua configure
con l'opzione --enable-maintainer-mode
, lo
script di configurazione non ricostruirà automaticamente lo script quando il file
configure.in è aggiornato, quindi occorre accertarsi di farlo
manualmente quando ci si accorge che il file configure.in è cambiato.
Un sintomo di questo problema è la presenza di elementi come a @VARIABLE@ nel Makefile dopo aver eseguito
la configurazione o il config.status.)
Nello script di configurazione/setup occorre specificare il percorso della cartella di livello più alto di Apache, quindi si deve scrivere --with-apache=/path/to/apache e non --with-apache=/path/to/apache/src.
./configure
), si può incontrare un
errore simile al seguente:
Leggere attentamente le istruzioni di installazione e ricordarsi che per compilare il PHP occorre disporre sia di flex sia di bison. In base al proprio sistema si dovrà installare bison e flex dai sorgenti o da pacchetti tipo RPM.
Puoi ordinare allo script di configurazione di cercare di gli header e le librerie anche in posizioni non standard specificando flag addizionali da passare al preprocessore C, come:
CPPFLAGS=.I/percorso/da/includere LDFLAGS=-L/percorso/per/la/libreria ./configure
env CPPFLAGS=-I/percorso/da/includere LDFLAGS=-L/percorso/per/la/libreria ./configure
yytname undeclared
.
Devi aggiornare la tua versione di Bison. Puoi trovare l'ultima versione su » http://www.gnu.org/software/bison/bison.html.
Qualche vecchia versione di make non mette le versioni compilate dei file nelle cartelle giuste. Prova ad eseguire cp *.o functions e quindi e rieseguire make e controlla se il messaggio di errore compare ancora. Se dovesse continuare ad apparire avrai bisogno di scaricare una versione più recente di make GNU.
Controlla la linea relativa al link ed assicurati che tutte le librerie appropriate siano state incluse alla fine dello script. Le librerie più comuni che tu possa aver scordato sono le '-ldl' e quelle relative al supporto di qualche database che hai incluso.
Qualcuno che aveva problemi a linkare Apache ha risolto aggiungendo '-ldl' subito dopo libphp4.a.
Questo significa che il modulo PHP non viene invocato correttamente per una qualche ragione. Prima di cercare ulteriore aiuto controlla tre cose:
/percorso/per/il/file/eseguibile/httpd -l
Se nell'elenco non compare mod_php4.c,
significa che non stai eseguendo il
binario giusto: trova ed installa il binario corretto.
Apache .conf
. Dovrebbe essere:
AddType application/x-httpd-php .php
Assicurati anche che questa linea AddType non sia nascosta all'interno
di un <Virtualhost> o di un blocco di <Directory> che
possa impedire l'applicazione al percorso dei tuoi script di prova.
--activate-module=src/modules/php4/libphp4.a
, ma questo file non
esiste, quindi l'ho cambiato in --activate-module=src/modules/php4/libmodphp4.a
ma il tutto non funziona. Che succede?
Nota che si presume che il file libphp4.a non esista ancora. Sarà un processo di Apache a crearlo!
--activate-module=src/modules/php4/libphp4.a
un messaggio di errore mi dice che il mio compilatore non è compatibile con ANSI.
Questo è un messaggio d'errore ingannevole di Apache, un bug che è stato corretto nelle versioni più recenti.
Per risolvere questo problema devi controllare tre cose. Per iniziare, per qualche ragione, quando Apache installa gli script Perl apxs, ogni tanto finisce senza il compilatore appropriato e le variabili flag. Trova il tuo script apxs (prova il comando which apxs), ogni tanto lo trova in /usr/local/apache/bin/apxs o in /usr/sbin/apxs. Aprilo e cerca linee simili a queste:
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
RUSAGE_
.
Se durante la parte di installazione che riguarda make hai incontrato problemi simili a questi, significa che il tuo sistema ha qualche problema:
microtime.c: In function `php_if_getrusage': microtime.c:94: storage size of `usg' isn't known microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function) microtime.c:97: (Each undeclared identifier is reported only once microtime.c:97: for each function it appears in.) microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function) make[3]: *** [microtime.lo] Error 1 make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/master/php-4.0.1/ext' make: *** [all-recursive] Error 1
Hai bisogno di fissare alcuni tuoi file in /usr/include installando un pacchetto glibc-devel che corrisponda al tuo glibc. Questo non ha assolutamente niente a che fare con PHP. Per controllare se il tuo problema dipende da questo, prova questo semplice test:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
make
si ottiene un errore simile al seguente:
ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function
my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the
use of tempnam' is dangerous, better use mkstemp',
che cosa c'è di sbagliato?
Primo, è importante realizzare che questo è un
Warning
e non un errore fatale. Poiché spesso questo
è l'ultimo messaggio visibile durante il make
,
sembra indicare un errore fatale, ma non lo è. Certamente, se
si imposta il compilatore ad uscire anche sui warning, questo lo farà.
Ricordarsi inoltre, che il supporto per MySQL è abilitato per default.
Nota:
Dal PHP 4.3.2, sarà visualizzato il seguente testo dopo il completamento della compila (make):
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
Puoi cercare nel file config.nice nel sorgente della tua attuale installazione di PHP o eseguire questo semplice script:
<?php phpinfo(); ?>
Essere certi che la libreria GD e PHP condividano le medesime librerie (ad esempio libpng).
L'uso di utility non GNU per la compila del PHP può creare problemi. Occorre
essere certi di utilizzare i tool GNU per essere certi della corretta compila
del PHP. Ad esempio, con Solaris, l'utilizzo
di SunOS BSD-compatibile con la versione di Solaris di sed
crea dei problemi, ma
utilizzando la versione GNU o Sun POSIX (xpg4) di sed
non si avranno problemi. Riferimenti: » GNU sed,
» GNU flex e
» GNU bison.