[AlternC-dev] un DOCUMENT_ROOT correct malgré le mod_vhost_alias

Retour à l'archive de la liste
Le site d'AlternC
Google Custom Search

olivier olivier at picapo.com
Lun 9 Jan 01:25:48 CET 2006


Salut,
une astuce pour fortement atténuer les problèmes qui peuvent survenir à
l'installation de certaines applications php utilisant la variable
d'environnement DOCUMENT_ROOT.
Il s'agit d'un patch pour l'ensemble des scripts php d'un serveur
utilisant le mod_vhost_alias et sa directive VirtualDocumentRoot dans la
config apache. (1 et 2)
En effet, dans le cas d'alternc, DOCUMENT_ROOT est fixé
à /var/alternc/bureau/ (peut varier selon la version d'alternc).
Or idéalement, ce devrait être /var/alternc/dns/g/www.gnu.org/ (la
racine du site www.gnu.org) selon le domaine

Le correctif est codé de façon à fonctionner sur alternc et
théoriquement tous les cas de figures. Il n'a pas été spécialement testé
donc c'est évidemment sans garantie.

Le principe est de corriger les 3 variables erronées de PHP qui sont
$DOCUMENT_ROOT, $_SERVER["DOCUMENT_ROOT"] et
$HTTP_SERVER_VARS['DOCUMENT_ROOT'], de façon systématique avant chaque
exécution d'un script php. Ceci grâce à l'option auto_prepend_file de
php.ini

Nous créons donc /var/alternc/document_root.php par exemple : 
<?php 
$DOCUMENT_ROOT = 
substr($_SERVER["PATH_TRANSLATED"],
0,strlen($_SERVER["PATH_TRANSLATED"])
-strlen($_SERVER["SCRIPT_NAME"]));

$HTTP_SERVER_VARS['DOCUMENT_ROOT'] = $DOCUMENT_ROOT;
$_SERVER['DOCUMENT_ROOT'] = $DOCUMENT_ROOT;
?>

En prenant bien soin de ne pas laisser d'espace après "?>" !

Pour l'activer, ouvrir /etc/php4/apache/php.ini (ou equivalent)
et donner la valeur suivante à auto_prepend_file :
auto_prepend_file = var/alternc/document_root.php

Après un reload d'apache, les variables php seront corrigées.
Sachez cependant que la variable d'environnement Apache reste
incorrecte, et cela crée une incohérence. Il n'est à ma connaissance pas
possible de changer cette variable au niveau apache, ni dans la conf ni
dans un .htaccess. Et c'est justement dans l'utilisation des
RewriteEngine/Rule/Cond que -- peut-être -- l'incohérence créera un
problème.

Et pour finir, je n'ai appliqué ce "patch" sur aucune de mes
installations Alternc (si ce n'est un test local), pour ne pas perturber
les applis php déjà bidouillées pour parer au mauvais document_root
(certaines versions de spip, dotclear, dokuwiki,...).

J'ai beau le tourner dans tous les sens, ça me parait assez cradingue,
quand même... (Peut être que la vraie solution se trouve du coté de
mod_vhs * :)

Amis masshostmasters, bonne année ;)


Olive

* il est vrai que mes affinités avec son auteur ne sont pas étrangères
aux forces qui me poussent à dégager mod_vhost_alias :p




Plus d'informations sur la liste de diffusion Dev