Cette section couvre les erreurs les plus communes pouvant se produire lors de la compilation de PHP.
Il faut avoir le logiciel GNU autoconf d'installé pour générer le
script configure à partir de configure.in. Il suffit de lancer
./buildconf à la racine du répertoire des sources
après avoir récupéré celles-ci à partir du serveur Git. (De plus, à
moins de lancer configure avec l'option
--enable-maintainer-mode, le script configure ne sera
pas automatiquement reconstruit si configure.in
est mis à jour, obligeant à le faire à la main lorsque
configure.in est mis à jour. Une conséquence de
ceci est que l'on trouve des choses telles que @VARIABLE@ dans le
Makefile après que configure ou config.status soit
lancé.)
Il faut spécifier au script de configuration (configure) l'emplacement du répertoire où sont les sources de Apache. Cela signifie qu'il faut spécifier --with-apache=/chemin/vers/apache et pas --with-apache=/chemin/vers/apache/src.
./configure), vous
rencontrez une erreur semblable à celle-ci :
Il faut s'assurer de bien avoir lu les instructions d'installation et d'avoir flex et bison d'installés pour compiler PHP. Selon le système, il faudra installer bison et flex à partir de sources ou bien de paquets, tel qu'un RPM.
Il est possible de forcer le script configure à chercher les fichiers d'en-tête à des endroits non-standard en passant des options supplémentaires au préprocesseur C et à l'éditeur de liens, par exemple :
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
yytname undeclared.
Il faut mettre à jour la version de bison. La dernière version se trouve sur » http://www.gnu.org/software/bison/bison.html.
Certaines anciennes versions de make ne déplacent pas correctement les versions compilées des fichiers dans le répertoire functions. Essayez de lancer cp *.o functions et de relancer make pour voir si le problème est résolu. Si tel est le cas, il est recommandé de mettre à jour la version de GNU make.
Jetez un oeil à la ligne de lien et il faut s'assurer que toutes les bibliothèques nécessaires ont été incluses à la fin. Celles qui manquent probablement sont '-ldl' et les bibliothèques relatives aux bases de données dont vous voulez le support.
Des personnes nous ont rapporté qu'elles devaient ajouter '-ldl' immédiatement après libphp4.a lors de la compilation avec Apache.
Cela signifie que le module PHP n'est pas chargé, pour une raison ou pour une autre. Avant de chercher de l'aide ailleurs, il convient de vérifier ces quelques points :
/chemin/vers/le/binaire/httpd -l
Si mod_php4.c n'apparaît pas dans la liste,
c'est que le bon binaire n'est pas utilisé. Il faut trouver et installer
correctement le bon binaire.
Apache .conf. Ce devrait être :
AddType application/x-httpd-php .php
Il faut aussi s'assurer que cette ligne Addtype n'est pas dissimulée dans
un contexte de <Virtualhost> ou <Directory> qui
l'empêcherait de s'appliquer à l'emplacement des scripts.
--activate-module=src/modules/php4/libphp4.a,
mais ce fichier n'existe pas, alors je l'ai changé pour
--activate-module=src/modules/php4/libmodphp4.a et ça
ne fonctionne pas. Qu'est-ce qui se passe ?
Il est à noter que le fichier libphp4.a n'est pas supposé exister. Le processus apache le créera !
--activate-module=src/modules/php4/libphp4.a
on me répond que mon compilateur n'est pas conforme aux normes ANSI.
C'est un mauvais message d'erreur de Apache qui n'apparaît plus dans des versions plus récentes.
Il y a trois choses à vérifier ici. Tout d'abord, quand Apache crée le script Perl apxs, il s'interrompt parfois en étant compilé sans le bon compilateur ou les bonnes options. Trouvez le script apxs (lancez la commande which apxs), qui se trouve souvent à /usr/local/apache/bin/apxs ou bien /usr/sbin/apxs. Éditez-le et vérifiez que des lignes similaires sont présentes :
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_.
Pendant le make, si des problèmes sont rencontrés identiques à celui-ci :
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
Le système est défectueux. Il faut corriger les fichiers /usr/include en installant un paquet glibc-devel qui correspond à la version de la glibc. Cela n'a rien à voir avec PHP. Pour s'en convaincre, essayer ceci :
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
make, j'obtiens une erreur de
ce style :
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',
qu'est-ce qui ne va pas ?
Tout d'abord, il est important de savoir que ce n'est qu'un
Warning et pas une erreur fatale. Comme c'est souvent la
dernière erreur vue lors du make, ça a l'air d'une
erreur fatale, mais ça n'en est pas une. Bien sûr, si le
compilateur est configuré pour stopper à chaque Warning, ça en deviendra une.
Notez aussi que le support de MySQL est activé par défaut.
Note:
À partir de PHP 4.3.2, le texte suivant apparaît après la compilation (make) :
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
Il est possible de jeter un oeil au fichier config.nice dans le répertoire source ou sinon simplement exécuter un script
<?php phpinfo(); ?>Il faut s'assurer que la bibliothèque GD et PHP sont liés aux mêmes bibliothèques (libpng, par exemple).
L'utilisation d'utilitaires non-GNU pour compiler PHP peut poser
problème. Il faut s'assurer de bien utiliser des outils GNU pour être certain
que la compilation arrive à terme. Par exemple, sous Solaris,
utiliser les versions SunOS BSD-compatible ou Solaris de
sed ne fonctionnera pas, mais utiliser les versions
GNU ou Sun POSIX (xpg4) de sed fonctionnera. Liens :
» GNU sed, » GNU
flex et » GNU bison.