# [apache]n'execute pas le php (résolu)

## Pixys

Bonjour,

je refais un peu de développement web en ce moment, j'ai donc (ré)installé apache. 

J'ai déjà une erreur étrange qui ne m'arrivait pas "avant" (il y a 2 ans) : quand je lance apache j'ai ça

```
Warning: DocumentRoot [/var/www/localhost/htdocs] does not exist
```

 or j'ai pas souvenir d'avoir du le créer. C'est pas dramatique en soit puisque j'utilise un virtualHost pour faire mon développement sur une partition dédiée.

Quand je veux exécuter un script php, il me renvoie le code sans exécuter le script. Voilà les flags pour apache :

```
www-servers/apache-2.2.11-r2  USE="ssl -debug -doc -ldap (-selinux) -sni -static -suexec -threads" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias -asis -auth_digest -authn_dbd -cern_meta -charset_lite -dbd -dumpio -ident -imagemap -log_forensic -proxy -proxy_ajp -proxy_balancer -proxy_connect -proxy_ftp -proxy_http -substitute -version" APACHE2_MPMS="-event -itk -peruser -prefork -worker"
```

et pour php :

```
dev-lang/php-5.2.10-r1  USE="apache2 berkdb bzip2 calendar cjk cli crypt gd gdbm hash iconv ipv6 json mysql ncurses nls pcre readline reflection session spl ssl truetype unicode xml xmlreader xmlwriter xpm zip zlib (-adabas) -bcmath (-birdstep) -cdb -cgi -concurrentmodphp -ctype -curl -curlwrappers -db2 -dbase (-dbmaker) -debug -discard-path -doc (-empress) (-empress-bcs) (-esoob) -exif -fastbuild (-fdftk) -filter (-firebird) -flatfile -force-cgi-redirect (-frontbase) -ftp -gd-external -gmp -imap -inifile -interbase -iodbc (-java-external) -kerberos -kolab -ldap -ldap-sasl -libedit -mcve -mhash -msql -mssql -mysqli -oci8 -oci8-instant-client -odbc -pcntl -pdo -pic -posix -postgres -qdbm -recode -sapdb -sharedext -sharedmem -simplexml -snmp -soap -sockets (-solid) -spell -sqlite -suhosin (-sybase) (-sybase-ct) -sysvipc -threads -tidy -tokenizer -wddx -xmlrpc -xsl -yaz"
```

je ne vois pas trop ce qui ne va pas...

merci de votre aide  :Wink: Last edited by Pixys on Fri Jul 17, 2009 6:54 pm; edited 1 time in total

----------

## xaviermiller

as-tu fait un dispatch-conf pour mettre à jour /etc/conf.d/apache2 ?

il doit contenir quelque chose du genre

```
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5"

```

----------

## Pixys

oui j'ai fait un etc-update mais c'est curieux, mon /etc/conf.d/apache2 contient ça :

```
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE"
```

 et même en rajoutant "-D PHP5" ça ne change rien...

Ca ne serait pas une histoire de module par hasard ? je ne trouve aucune mention d'un module pour php dans /etc/apache2/httpd.conf. Ne devrait-il pas y avoir un module pour php ?

----------

## DuF

De base, tu ne peux pas avoir le module php pour apache qui fonctionne si tu ne le lui passes pas en paramètre dans le fichier /etc/conf.d/apache2 

```
APACHE2_OPTS="-D PHP5"

```

C'est le minimum requis pour tes tests.

Ensuite regarde dans les logs d'apache s'il arrive à charger le module php au démarrage d'apache.

----------

## Pixys

j'ai testé en ne mettant que ça : 

```
APACHE2_OPTS="-D PHP5" 
```

 dans /etc/conf.d/apache2

maintenent il râle quand je le relance : 

```
root@pegase $ /etc/init.d/apache2 restart

* Stopping apache2...

httpd (no pid file) not running                                                                                                                                                                                                          [ok]

* Starting apache2...

no listening sockets available, shutting down

Unable to open logs
```

 et dans /var/log/apache2/error_log je n'ai rien d'intéressant : 

```
[Wed Jul 15 18:36:55 2009] [notice] caught SIGTERM, shutting down

```

----------

## DuF

 *Pixys wrote:*   

> j'ai testé en ne mettant que ça : 
> 
> ```
> APACHE2_OPTS="-D PHP5" 
> ```
> ...

 

Tu peux ajouter ceux que tu avais précédemment, ça ne devrait pas changer grand chose.

 *Pixys wrote:*   

> maintenent il râle quand je le relance : 
> 
> ```
> root@pegase $ /etc/init.d/apache2 restart
> 
> ...

 

Quand je vois ça, je me dis il y a 3 problèmes :

1. - Il ne trouve pas le fichier pid qui lui permet de connaitre le pid du process apache2 en cours et de déterminer si le serveur tourne ou pas.

2. - Le port sur lequel souhaite démarré apache2 (par défaut le 80, mais peut être as-tu une configuration spécifique) n'est pas disponible car déjà utilisé.

3. - Il n'est pas en mesure d'ouvrir ses logs, sans doute pour la même raison que le 1.

Déjà, vérifier les répertoires/fichiers de destinations des logs et s'assurer que les droits sont corrects et que l'utilisateur (apache ou http suivant ta conf) a les droits d'accès sur ces répertoires.

Ensuite pour le 2. il te dit qu'il n'a pas pu démarrer apache car le socket est déjà utilisé, tapes la commande suivante : 

```
netstat -an | grep LISTEN
```

Et regarde si dans les ports tu as le tiens. Si tu ne l'a pas, remplaces "LISTEN" par le numéro de port que tu utilises.

Une fois que c'est fait, arrêtes le process qui utilises ce port et essaie de redémarrer proprement ton apache2. Pour déterminer quel process utilises le port 80 par exemple, utilises la commande suivante : 

```
fuser -u -n tcp 80
```

Cela te donnera un résultat du genre : 

```
80/tcp:            11144(apache2)
```

Où la valeur 11144 représente dans l'exemple le PID du process et ce qui est entre parenthèse le nom de l'utilisateur qui détient ce process.

Cdt,

----------

## Pixys

@DuF : merci pour l'aide.

j'ai viré mon virtualHost et réinstallé apache. J'ai créée le répertoire /var/www/localhost/htdocs car il n'existait pas, j'y ai mis un fichier index.php.

dans /etc/conf.d/apache2 j'ai bien 

```
APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D LANGUAGE -D PHP5"
```

Ma configuration est donc des plus banales (écoute sur le port 80, etc.)

Je démarre apache, je n'ai plus les précédentes erreurs mais il n'execute toujours pas le php.

Maintenant dans /var/log/apache2/access_log j'ai ceci :

```
127.0.0.1 - - [15/Jul/2009:20:32:26 +0200] "GET / HTTP/1.1" 200 535

127.0.0.1 - - [15/Jul/2009:20:32:26 +0200] "GET /icons/blank.gif HTTP/1.1" 403 276

127.0.0.1 - - [15/Jul/2009:20:32:26 +0200] "GET /icons/unknown.gif HTTP/1.1" 403 278

127.0.0.1 - - [15/Jul/2009:20:32:26 +0200] "GET /favicon.ico HTTP/1.1" 404 268

127.0.0.1 - - [15/Jul/2009:20:32:28 +0200] "GET /index.php HTTP/1.1" 200 81

127.0.0.1 - - [15/Jul/2009:20:32:29 +0200] "GET /favicon.ico HTTP/1.1" 404 268

127.0.0.1 - - [15/Jul/2009:20:32:29 +0200] "GET /favicon.ico HTTP/1.1" 404 268

127.0.0.1 - - [15/Jul/2009:20:32:37 +0200] "GET /index.php HTTP/1.1" 304 -

127.0.0.1 - - [15/Jul/2009:20:35:41 +0200] "GET / HTTP/1.1" 200 535

127.0.0.1 - - [15/Jul/2009:20:35:41 +0200] "GET /icons/blank.gif HTTP/1.1" 403 276

127.0.0.1 - - [15/Jul/2009:20:35:41 +0200] "GET /icons/unknown.gif HTTP/1.1" 403 278

```

et dans /var/log/apache2/error_log

```
[Wed Jul 15 20:32:15 2009] [notice] Apache/2.2.11 (Unix) configured -- resuming normal operations

[Wed Jul 15 20:32:26 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/localhost/icons, referer: http://localhost/

[Wed Jul 15 20:32:26 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/localhost/icons, referer: http://localhost/

[Wed Jul 15 20:32:26 2009] [error] [client 127.0.0.1] File does not exist: /var/www/localhost/htdocs/favicon.ico

[Wed Jul 15 20:32:29 2009] [error] [client 127.0.0.1] File does not exist: /var/www/localhost/htdocs/favicon.ico

[Wed Jul 15 20:32:29 2009] [error] [client 127.0.0.1] File does not exist: /var/www/localhost/htdocs/favicon.ico

[Wed Jul 15 20:35:28 2009] [notice] caught SIGTERM, shutting down

[Wed Jul 15 20:35:31 2009] [notice] Apache/2.2.11 (Unix) configured -- resuming normal operations

[Wed Jul 15 20:35:41 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/localhost/icons, referer: http://localhost/

[Wed Jul 15 20:35:41 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/localhost/icons, referer: http://localhost/

```

donc j'ai plus de problème de pid ou autre mais toujours pas de php.

C'est curieux, il ne me semble pas que c'est été aussi difficile la dernière fois que j'ai configuré apache.

----------

## netfab

Hello,

Que donne :

```

$ cat /etc/apache2/modules.d/70_mod_php5.conf

```

----------

## DuF

En complément de ce qu'indique netfab, que donne les commandes suivantes : 

```
locate libphp5.so

```

A titre d'information, chez moi j'obtiens la réponse suivante : 

```

/usr/lib64/apache2/modules/libphp5.so

```

L'idée étant que tu aies quelque chose d'équivalent.

Ensuite que donne la commande suivante sur l'emplacement de libphp5.so chez toi ?

```
equery belongs /usr/lib64/apache2/modules/libphp5.so

[ Searching for file(s) /usr/lib64/apache2/modules/libphp5.so in *... ]

dev-lang/php-5.2.10 (/usr/lib64/apache2/modules/libphp5.so)

```

J'ai mis à titre d'exemple ce que cela donne comme résultat chez moi.

Si avec ça, toujours pas d'élément, alors je n'aurai pas beaucoup d'autre proposition que de passer le niveau de log à debug du LogLevel dans le fichier /etc/apache2/modules.d/00_default_settings.conf.

----------

## Pixys

```
pegase pixys # locate libphp5.so

/usr/lib64/apache2/modules/libphp5.so

pegase pixys # equery belongs /usr/lib64/apache2/modules/libphp5.so

 * Searching for /usr/lib64/apache2/modules/libphp5.so ...

dev-lang/php-5.2.10-r1 (/usr/lib64/apache2/modules/libphp5.so)

```

en passant les logs en debug j'ai ceci dans error_log :

```
[Thu Jul 16 01:31:23 2009] [info] mod_unique_id: using ip addr 127.0.0.1

[Thu Jul 16 01:31:24 2009] [info] mod_unique_id: using ip addr 127.0.0.1

[Thu Jul 16 01:31:25 2009] [notice] Apache/2.2.11 (Unix) configured -- resuming normal operations

[Thu Jul 16 01:31:25 2009] [info] Server built: Jul 15 2009 20:02:43

[Thu Jul 16 01:31:25 2009] [debug] prefork.c(1009): AcceptMutex: sysvsem (default: sysvsem)

[Thu Jul 16 01:31:33 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/localhost/icons, referer: http://localhost/

[Thu Jul 16 01:31:33 2009] [error] [client 127.0.0.1] client denied by server configuration: /var/www/localhost/icons, referer: http://localhost/

```

----------

## DuF

A tout hasard, que donne la commande suivante : 

```
grep -i php /emplacement/des/logs/apache2/*
```

Suivant où sont placés tes logs, adaptes la commande, ce qu'il serait intéressant c'est de trouver lors du démarrage du serveur apache, s'il charge correctement le mod_php.

----------

## yohann

salut,

comme l'a demandé netfab, peut tu donner le contenu du fichier /etc/apache2/modules.d/70_mod_php5.conf 

c'est lui qui defini le handler à utiliser par apache pour les fichier .php.

----------

## Pixys

 *DuF wrote:*   

> A tout hasard, que donne la commande suivante : 
> 
> ```
> grep -i php /emplacement/des/logs/apache2/*
> ```
> ...

 

les seuls logs que j'ai sont ceux donnés dans mon pot précédent.

 *yohann wrote:*   

> 
> 
> peut tu donner le contenu du fichier /etc/apache2/modules.d/70_mod_php5.conf
> 
> 

 

Je n'ai pas ce fichier, à mon avis il est là le problème... Pourtant, j'ai bien "php" et "apache2" dans mes useflags.

----------

## yohann

ça pourrait résoudre le pb si le fichier existe

```
cp /usr/portage/dev-lang/php/files/70_mod_php5.conf-apache2-r1 /etc/apache2/modules.d/70_mod_php5.conf && /etc/init.d/apache2 restart
```

----------

## Pixys

Ça m'a bien créé le fichier70_mod_php5.conf mais rien, c'est incroyable, ça ne fonctionne toujours pas, je comprends pas...

----------

## yohann

a la limite tu peux essayer de virer les ifdefine et ifModule dans ce fichier, redemarer apache, et regarder à nouveau les log d'erreur, qui ne devrait pas manquer d'apparaitre.

sinon j'ai regarder, j'utiliser la meme version d'apache, mais  la version 5.2.10 de php au lieu de la r1 pour toi.

Bonne chance

----------

## Pixys

aucune erreur, c'est comme si apache n'était pas au courant qu'il était sensé exécuter du php...

je vais devoir me rabattre sur Nginx mais ça m'embête un peu car il ne supporte pas les .htaccess or j'en ai besoin pour le Zend framework.

----------

## Kazuya

Hello,

est ce que le php fonctionne bien ? (c'est une question un peu bête mais bon...) 

Par exemple, en exécutant un fichier php en ligne de commande avec php-cli ?  (en ayant le use flag "cli" d'activé dans php...)

----------

## Pixys

oui, aucun soucis, php fonctionne parfaitement en console.

----------

## netfab

Hello,

Fais voir ton emerge --info, et réinstalle apache et php, puis fais un etc-update. Il y a forcément quelque chose qui ne vas pas. D'après l'ebuild, si php a été compilé avec les use apache2 et -concurrentmodphp, alors le fichier 70_mod_php5.conf devait être installé, or il ne l'etait pas.

Tu as vérifié le log de compilation/d'installation de php s'il n'y a pas eu un problème ? Je remarque ceci dans la phase postinst :

```

   # Update Apache2 to use mod_php

   if use apache2 ; then

      "${ROOT}/usr/sbin/php-select" -t apache2 php5 > /dev/null 2>&1

      exitStatus=$?

      if [[ ${exitStatus} == 2 ]] ; then

         php-select apache2 php5

      elif [[ ${exitStatus} == 4 ]] ; then

         ewarn

         ewarn "Apache2 is configured to load a different version of PHP."

         ewarn "To make Apache2 use PHP v5, use php-select:"

         ewarn

         ewarn "    php-select apache2 php5"

         ewarn

      fi

   fi

```

Essaye peut-être d'exécuter : php-select apache2 php5

----------

## Pixys

Ça y est ça fonctionne malheureusement, je ne peux pas expliquer pourquoi : je n'ai pas changé mes useflags.

Lors du etc-update la seule modification effectuée concerne le fichier /etc/apache2/modules.d/00_default_settings.conf, la mise à jour a repassé le LogLevel à warn à la place de debug...

J'y comprends rien et mon problème n'aidera malheureusement personne.

Merci à tous pour l'aide et les suggestions apportées, ça fait vraiment plaisir.

----------

