Re Solaris
I was able to compile PHP 5.0.4 under Solaris 2.6 but I had to use gcc to do it. The source is not compatible with the Solaris C preprocessor. I did not have to install any of the gnu utilities (like sed etc) to get it to compile. It clean compiled & linked immediately using gcc 3.3.2.
Problemi di installazione
Questa sezione raccoglie i più comuni errori che avvengono durante l'installazione.
- Ho l'ultima versione di PHP e uso l'accesso anonimo a Git, ma non c'è nessuno script per la configurazione!
- Ho problemi nel configurare PHP per farlo lavorare con Apache. Dice che è impossibile trovare il file httpd.h, ma questo è nel percorso che ho specificato!
- Durante la configurazione di PHP (./configure), si può incontrare un errore simile al seguente: checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
- Quando avvio Apache ottengo il seguente messaggio: fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
- Quando eseguo la configurazione, un messaggio di errore mi dice che non è possibile trovare file inclusi o librerie per GD, gdbm o qualche altro pacchetto!
- Quando cerco di compilare il file language-parser.tab.c, un messaggio di errore mi dice yytname undeclared.
- Quando eseguo make sembra che vada tutto bene, ma lo script si blocca quando cerca di creare un collegamento all'applicazione finale, un messaggio di errore dice che non è possibile trovare alcuni file.
- Quando linko PHP, un messaggio di errore mi avvisa di parecchie undefined reference.
- Non riesco a capire come installare PHP con Apache 1.3.
- Ho seguito le istruzioni per installare Apache come modulo sotto UNIX, ma il browser mi mostra il codice dei miei script PHP o mi viene chiesto di salvare la pagina PHP sul disco.
- Un messaggio di errore mi dice di usare: --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?
- Quando provo ad installare Apache con PHP come modulo statico usando --activate-module=src/modules/php4/libphp4.a un messaggio di errore mi dice che il mio compilatore non è compatibile con ANSI.
- Quando provo ad installare Apache usando --with-apxs ricevo uno strano messaggio di errore.
- Quando eseguo make, ricevo errori nei microtime e un sacco di errori RUSAGE_.
- Quando si compila il PHP con MySQL, la configurazione viene eseguita correttamente, ma durante il make si ottiene un errore simile al seguente: ext/mysql/libmysql/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysql/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp', che cosa c'è di sbagliato?
- Voglio aggiornare il mio PHP. Dove posso trovare la linea di ./configure che è stata usata per creare la mia attuale versione di PHP?
- Quando si compila il PHP con la libreria GD, si ottiene dei strani errori di compila oppure dei segfault durante l'esecuzione.
- Quando si compila il PHP sembra di avere errori casuali, tipo blocchi. Se interessa sto utilizzando Solaris.
- Ho l'ultima versione di PHP e uso l'accesso anonimo a Git, ma non c'è nessuno script per la configurazione!
-
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.)
- Ho problemi nel configurare PHP per farlo lavorare con Apache. Dice che è impossibile trovare il file httpd.h, ma questo è nel percorso che ho specificato!
-
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 .
-
Durante la configurazione di PHP (./configure), si può incontrare un
errore simile al seguente:
checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up
-
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.
- Quando eseguo la configurazione, un messaggio di errore mi dice che non è possibile trovare file inclusi o librerie per GD, gdbm o qualche altro pacchetto!
-
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:
Se usi una variante di csh come shell di login (perché?), il codice diventa:CPPFLAGS=.I/percorso/da/includere LDFLAGS=-L/percorso/per/la/libreria ./configureenv CPPFLAGS=-I/percorso/da/includere LDFLAGS=-L/percorso/per/la/libreria ./configure
- Quando cerco di compilare il file language-parser.tab.c, un messaggio di errore mi dice yytname undeclared.
-
Devi aggiornare la tua versione di Bison. Puoi trovare l'ultima versione su » http://www.gnu.org/software/bison/bison.html.
- Quando eseguo make sembra che vada tutto bene, ma lo script si blocca quando cerca di creare un collegamento all'applicazione finale, un messaggio di errore dice che non è possibile trovare alcuni file.
-
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.
- Quando linko PHP, un messaggio di errore mi avvisa di parecchie undefined reference.
-
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.
- Non riesco a capire come installare PHP con Apache 1.3.
-
Installare PHP insieme con Apache 1.3 è veramente semplice. Segui queste istruzioni:
- Scarica l'ultima distribuzione di Apache 1.3 da » http://httpd.apache.org/download.cgi.
- Estrai prima l'archivio gzip e poi quello tar dove preferisci, per esempio in /usr/local/src/apache-1.3.
- Compila PHP per la prima volta eseguendo: ./configure --with-apache=/<percorso>/apache-1.3 Sostituisci <percorso> con il percorso che porta alla cartella di Apache 1.3
- Scrivi make seguito da make install per installare PHP e copiare i file necessari alla distribuzione di Apache.
- Cambia il percorso delle cartelle fino al tuo /<percorso>/apache-1.3/src e modifica il file di Configuration. Aggiungi al file la riga seguente: AddModule modules/php4/libphp4.a.
- Scrivi: ./configure seguito da make.
- Ora dovresti avere un eseguibile httpd abilitato per PHP!
Nota: puoi anche usare il nuovo script ./configure di Apache. Leggi le istruzioni nel file README.configure presente nella tua distribuzione di Apache. Leggi anche il file INSTALL nella distribuzione di PHP.
- Ho seguito le istruzioni per installare Apache come modulo sotto UNIX, ma il browser mi mostra il codice dei miei script PHP o mi viene chiesto di salvare la pagina PHP sul disco.
-
Questo significa che il modulo PHP non viene invocato correttamente per una qualche ragione. Prima di cercare ulteriore aiuto controlla tre cose:
- Assicurati che l'httpd binario che stai eseguendo sia quello nuovo che hai appena installato. Per fare ciò prova ad eseguire: /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.
- Assicurati di aver aggiunto il corretto Myme Type ad uno dei tuoi file 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.
- Infine sappi che il percorso predefinito del file di configurazione di Apache 1.2 è diverso da quello di Apache 1.3. Dovresti controllare che il file a cui stai aggiungendo la linea AddType sia effettivamente letto. Puoi inserire appositamente un errore di sintassi nel file httpd.conf o effettuare qualche altro cambiamento che ti farà capire se il file è correttamente letto.
- Un messaggio di errore mi dice di usare: --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!
- Quando provo ad installare Apache con PHP come modulo statico usando --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.
- Quando provo ad installare Apache usando --with-apxs ricevo uno strano messaggio di errore.
-
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:
Se vedi scritto esattamente questo, hai trovato il problema: queste linee potrebbero contenere spazi o altri valori sbagliati, come 'q()'. Cambia le linee precedenti come segue:my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
Il secondo problema possibile potrebbe solo essere una particolare distribuzione di Red Hat 6.1 e 6.2. L'unità degli script apxs in Red Hat non è funzionante. Cerca una linea simile a questa: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
Se trovi una linea identica a quella precedente, cambiala come segue:my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
Infine, se hai riconfigurato o reinstallato Apache, aggiungi un make clean al processo dopo ./configure e prima di make.my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
- Quando eseguo make, ricevo errori nei microtime e un sacco di errori 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:
Se ricevi messaggi d'errore, allora i tuoi file include sono in disordine.$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
- Quando si compila il PHP con MySQL, la configurazione viene eseguita correttamente, ma durante il make si ottiene un errore simile al seguente: ext/mysql/libmysql/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysql/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).
- Voglio aggiornare il mio PHP. Dove posso trovare la linea di ./configure che è stata usata per creare la mia attuale versione di PHP?
-
Puoi cercare nel file config.nice nel sorgente della tua attuale installazione di PHP o eseguire questo semplice script:
Nella prima parte della pagina risultante è mostrata la linea ./configure usata durante la precedente installazione di PHP.<?php phpinfo(); ?>
- Quando si compila il PHP con la libreria GD, si ottiene dei strani errori di compila oppure dei segfault durante l'esecuzione.
-
Essere certi che la libreria GD e PHP condividano le medesime librerie (ad esempio libpng).
- Quando si compila il PHP sembra di avere errori casuali, tipo blocchi. Se interessa sto utilizzando Solaris.
-
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.
My problem was actually with mod_dav (which referred me here). Since they took the time to point people here, I thought I'd go ahead and add my two cents worth and expand on the above since it obviously affects PHP as well. I am running Fedora Core 3, Apache 2.0.53, & PHP 5.03. Apache and PHP were built from source.
The first suggestion in section 13 above was close, but not exactly what I needed. jimsteele's suggestion would have worked, but you would have to do it every time you use APXS. What I did was copy these lines:
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE';
my $CFG_LD_SHLIB = 'gcc';
my $CFG_LDFLAGS_SHLIB = q(-shared);
and pasted them in the configuration section of my apxs file. Worked like a champ.
The configure script of PHP 5.3.0 has some test lines that use expr with the option --, my expr (version 2.0) does not except --. This causes a run of error messages from the shell like:
./configure: line 2xxx: test: =: unary operator expected
expr: syntax error
I used buildconf --force to see if it would fix this.
While it resulted in a quit different file, it still had the lines of code with expr -- in it.
When building PHP 5.3.x for Apache 2.4.x you may get an error in the apxs query for the MPM_NAME.
This is because the apxs included in Apache 2.4.x doesn't recognize that query anymore.
To resolve this issue one should modify the PHP configure file to use the right MPM module used by Apache.
To know the used MPM you can execute this command: apachectl -t -D DUMP_MODULES | grep mpm
Then, edit the PHP configure file, search for the APXS_MPM variable and force its value to prefork, event or worker according to the value returned by the previous command.
Hope it helps.
-
Fabio
@ anca-phpdoc at anca dot tv:
You can use ./configure --with-libxml-dir=/path_to_xml2-config
For the configure newbies among us:
If you update or reinstall any of the libraries used to compile in a different directory than they started out, you will need to make sure that you update the config.cache file (or re-generate it) so that configure will not look in the wrong place for the information.
On Mac OS X, for example, I updated my libxml using Fink. Fink placed the files in the /sw directory. However, php was still looking for important libxml files (such as xml2-config) in the old directory (/usr/bin/xml2-config). After updating config.cache with the new value of the xml2-config path, I was able to compile correctly.
If the option --with-apsx2=/path/to/apxs seems to have absolutely no effect and if the configure script ignores the Apache 2.x support, try to shutdown your Apache server (/path/to/bin/apachectl stop) and retry.
It worked here.
I post here because I was unable to find the information on the web.
I hope it will help someone.
Let say you have 2 apache ruuning, on one you want to have disable_functions set and on the other one you don't.
In fact I have (one) solution compiling two differents php modules with differents path to php.ini
using :
--with-config-file-path=/etc/php5 (for the first one)
--with-config-file-path=/etc/php5.nonchroote (for the second one)
for the second one I do not use "make install" but just
"cp .libs/libphp5.so /usr/lib/apache/1.3/libphp5.nonchroote.so"
Then you have to change the
LoadModule php5_module /usr/lib/apache/1.3/libphp5.nonchroote.so in the second httpd.conf
If you have customized your Apache to lie about its version number, you may need to edit configure to skip the version number check. Just /APACHE_VERSION in configure to find the instance(s) where configure checks to make sure you have the right combination of --with-apxs or --with_apxs2 and Apache 1.3 or 2.0. Assuming you're smart enough to remember which version of Apache you have, you can just delete or comment out the version check and continue to march.
Note on PHP5 setup under RedHat 7
Sometimes php5 fails to build with the following message:
[root@www bin]# ./php5
./php5: error while loading shared libraries: unexpected reloc type 0x80
Below is the configure script used:
# PHP5 CLI build, CGI/SAPI disabled
# Created by configure
'./configure' \
'--enable-libxml' \
'--with-mysql=/path_to_mysql' \
'--with-libxml=/path_to_my_libxml' \
'--program-suffix=5' \
'--disable-cgi' \
"$@"
I used the following trick to get round this:
0. If it is not a clean installation, run 'make clean' to get rid of improperly compiled files
1. run ./configure with required options
2. edit makefile:
2.1 find any LDFLAGS or PROGRAM_LDFLAGS definition
2.2 append -lstdc++ to the end of it
3. Run 'make'
4. Run 'make install'
5. Enjoy!!!
Compiling mod_php4 port on a clean freeBSD 4.8 install for Apache2 needed FOR_APACHE2= yes manually inserted into Makefile prior to version check.
Defining the right environment variables for my Apache "make" invocation allowed the correct "apxs" file to be generated for me. Your mileage may vary.
cd ../apache_1.3.22
CFLAGS_SHLIB="-fpic -DSHARED_MODULE" \
LD_SHLIB=gcc \
LDFLAGS_MOD_SHLIB="-shared" \
make
When you have installed PHP5 as a package from your distribution source list, such as yast or apt and want to upgrade the probably out of date PHP5 version make sure:
1. Apache-develope tools are installed so that you have APXS(2)
2. make a clean install which means:
make distclean
./configure --with-apxs2=/usr/sbin/apxs2 and other options
make && make test && make clean install
This will take a while, the make test basically tests your php installation if it passes all the bug reports, as of now about 8600.
Those thre lines will take a while longer! So dont panic, but read the output!
This should ensure, that you have .so files again (because of the APXS and that you have established a relation between the apache and php. Obviously you needed to deinstall the mod_php5 first. I would highly recommend to train this and verify that you have all the required kernel source files and compiler stuff on a virtual machine before doing that on your productive server!
