OVH Cloud OVH Cloud

Fonctionne dans body, erreurs dans entete

4 réponses
Avatar
Dominique Ottello
Bonjour,

Tous mes fichiers php ont comme structure :

<?php
$titre="Mon titre";
$charset="iso-8859-1";
$dossier="../"; // Niveau pour retourner à la racine du site
$style[0]="general";
$style[1]="..."; // Autres fichiers CSS éventuels
include($dossier.'inc/entete.php');
include($dossier.'inc/...'); // Autres includes éventuels
echo "</head>\n";
echo "<body>\n";
...
echo "</body>\n";
echo "</html>\n";
?>

Le fichier entete.php est :

<?php
header("content-type:text/html; charset=$charset");
session_start();
ob_start('ob_gzhandler');
echo "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN'
'http://www.w3.org/TR/html4/strict.dtd'>\n";
echo "<html>\n";
echo "<head>\n";
echo "<META http-equiv='content-type' content='text/html;
charset=$charset'>\n";
echo "<META http-equiv='Content-Language' content='fr'>\n";
echo "<TITLE>$titre</TITLE>\n";
foreach($style as $filecss)
{echo "<link rel='StyleSheet' type='text/css'
href='".$dossier.$filecss.".css'>\n";}
?>

Comme je voulais m'affranchir du remplissage « à la main » de la
variable $dossier, j'ai effectué des essais pour en arriver à
l'expression (sur une seule ligne) :

for
($i=2,$dossier="",$sub=substr($_SERVER['SCRIPT_FILENAME'],strlen($_SERVER['DOCUMENT_ROOT']));$i<substr_count($sub,'/');$i++,$dossier.="../");

qui, à priori, fonctionne correctement lorsqu'elle se trouve dans le
corps des pages, entre <body> et </body>. (Y'a peut-être plus simple
pour obtenir le même résultat).

Là où le bât blesse c'est lorsque je remplace la ligne $dossier="../"
par l'expression ci-dessus ; ça ne fonctionne pas et me sort plein
d'erreurs en mode distant alors qu'en local (Apache et Wamp5 sous
Windows XP) cela fonctionne bien.

Sans erreur : http://aviatechno.free.fr/vilgenis/essais_dir.php
Avec erreur : http://aviatechno.free.fr/vilgenis/essais_dir1.php

Comment faire pour que la variable $dossier soit remplie dynamiquement
en fonction du niveau d'arborescence du fichier php à l'intérieur du
site.

Merci.
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.free.fr
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr

4 réponses

Avatar
Dominique Ottello
Dominique Ottello écrivait :

Là où le bât blesse c'est lorsque je remplace la ligne $dossier="../"
par l'expression ci-dessus ; ça ne fonctionne pas et me sort plein
d'erreurs en mode distant alors qu'en local (Apache et Wamp5 sous
Windows XP) cela fonctionne bien.


Problème résolu.

Les erreurs provenaient du fait que DOCUMENT_ROOT avait des valeurs
différentes en local et en distant, du fait d'une « mauvaise »
configuration d'Apache.
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.free.fr
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr

Avatar
Dominique Ottello
Dominique Ottello écrivait :

Problème résolu.

Les erreurs provenaient du fait que DOCUMENT_ROOT avait des valeurs
différentes en local et en distant, du fait d'une « mauvaise »
configuration d'Apache.


Bien que pas directement lié à PHP, mais plutôt à la configuration
d'Apache, je pense nécessaire d'apporter quelques précisions.

Voila les résultats sur le *vrai* site :

SCRIPT_FILENAME=/var/www/free.fr/3/4/aviatechno/vilgenis/essais_dir1.php
DOCUMENT_ROOT=/var/www/free.fr/3/4/aviatechno

donc,
substr($_SERVER['SCRIPT_FILENAME'],strlen($_SERVER['DOCUMENT_ROOT']))
donne, comme résultat : /vilgenis/essais_dir1.php

En local, avec Wamp et Apache configurés par défaut :
SCRIP_FILENAME=g:/wamp/www/aviatechno/vilgenis/essais_dir1.php
DOCUMENT_ROOT=g:/wamp/www

donc, le résultat du "substr" susmentionné
donne comme résulat : /aviatechno/vilgenis/essais_dir1.php
avec, comme on peut le voir, un niveau supplémentaire, ce qui fausse les
calculs d'arborescence.

J'ai configure httpd.conf pour lui ajouter mes sites virtuels et, entre
autres, "aviatechno" :

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot G:/Wamp/www/aviatechno/
ServerName aviatechno
</VirtualHost>

<VirtualHost *:80>
DocumentRoot G:/Wamp/www/
ServerName localhost
</VirtualHost>

Le "/" final de DocumentRoot est indispensable pour *simuler* un
fonctionnement similaire au site réel.

Pour un fonctionnement identique, il faudrait remplacer :
DocumentRoot G:/Wamp/www/ du ServerName localhost
par
DocumentRoot G:/Wamp/www/aviatechno

Mais, alors, je n'ai plus d'accès *directs* à mes autres sites virtuels.

--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit nouveau,
même si c'est pire qu'avant et cela de toute évidence. Montherlant
Technologie aéronautique : http://aviatechno.free.fr

Avatar
FreakDev
salut,

tant mieux si ton problème est résolu, mais j'aurais voulu savoir par
simple curiosité qu'est ce qu'avait comme valeur la variable
$_SERVER['DOCUMENT_ROOT'] quand tu mettais le script PHP entre les
balises <body> ???

paske ça me parait être une sacré curiosité que la valeur de
$_SERVER['DOCUMENT_ROOT'] change en fonction de sa "position" par
rapport au HTML de la page :s

++
Avatar
Dominique Ottello
"FreakDev" écrivait :

tant mieux si ton problème est résolu, mais j'aurais voulu savoir par
simple curiosité qu'est ce qu'avait comme valeur la variable
$_SERVER['DOCUMENT_ROOT'] quand tu mettais le script PHP entre les
balises <body> ???

paske ça me parait être une sacré curiosité que la valeur de
$_SERVER['DOCUMENT_ROOT'] change en fonction de sa "position" par
rapport au HTML de la page :s


En fait, il y avait *aussi* une erreur dans l'interprétation des
résultats due au fait que dans l'entête le script était : essais_dir.php
et dans le corps : essais_dir1.php et, bien sûr, avec une différence
entre les deux ; Ô, une petite différence : un "-1" dans le premier qui
n'existait pas dans le second.

Il n'y a rien de pire à trouver que les défauts par soi-même créés !
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.free.fr
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr