repertoire de base d'un site web

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : repertoire de base d'un site web

par Ryle » 26 oct. 2007, 10:03

En fait non, __FILE__ contient le chemin complet du fichier contenant la déclaration __FILE__, donc le script inclus.
dirname(__FILE__) == './' seulement pour le script racine et les fichiers inclus contenus dans le même dossier de le script racine.
Vivi absolument mais dans la mesure ou on cherchait à définir un chemin absolu pour inclure un fichier, c'est qu'on était nécessairement situés au niveay du script racine :)

Pas mieux en revanche pour les '\n' :?
C'est vous parait dans l'esprit PHP ?
Toutafé ! :)
Par contre pour être tranquille, si jamais tu changeais de serveur ou que la config de celui-ci évolue, je te recommande d'utiliser les tag "<?php" au lieu des shorts open tags "<?", et de coller un point-virgule au bout de l'instruction ;)

par Steph35 » 26 oct. 2007, 08:20

Bonjour,

Finalement j'ai trouvé une solution qui a l'air de bien fonctionner sur mon PC. A voir chez mon hebergeur. Je vous tiens au courant.
<? include ($_SERVER["DOCUMENT_ROOT"]."/generic/menu.php") ?>

C'est vous parait dans l'esprit PHP ?

Je viens de verifier sur free et ca fonctionne :P

par Tracker » 26 oct. 2007, 01:34

[...] Avec dirname(__FILE__) tu vas récupérer le dossier du script incluant (que tu obtiendrais aussi bien avec " ./ ") [...]
En fait non, __FILE__ contient le chemin complet du fichier contenant la déclaration __FILE__, donc le script inclus.
dirname(__FILE__) == './' seulement pour le script racine et les fichiers inclus contenus dans le même dossier de le script racine.

test1.php
<?php
header('content-type: text/plain');
echo 'racine ./:'.realpath('./')."\n";
echo 'racine __FILE__:'.realpath(dirname(__FILE__))."\n";

include 'forum/test2.php';
?>
forum/test2.php
<?php
echo 'include ./:'.realpath('./')."\n";
echo 'include __FILE__:'.realpath(dirname(__FILE__))."\n";
?>
Résultat
(identiques)
racine ./: L:\server\wstore\wroot\app1
racine __FILE__: L:\server\wstore\wroot\app1

(différents)
include ./: L:\server\wstore\wroot\app1
include __FILE__: L:\server\wstore\wroot\app1\forum

(racine serveur)
$_SERVER['DOCUMENT_ROOT']: L:\server\wstore\wroot

DOCUMENT_ROOT correspond effectivement à la racine du serveur quelque soit le chemin de la page appellée, donc oubliez dirname(__FILE__) et './'


Tracker.
[ps]
Le truc que je trouve quand même étrange en php, c'est que pour être rendue comme un saut de ligne la séquence \n (et surement d'autres) doit forcement être inscrite dans une chaine "interprétée". Pour résumer:
- "\n" fonctionne
- '\n' fonctionne pas ??!!

par Ryle » 25 oct. 2007, 23:51

C'est pas vraiment un chemin global ça... :-k

Avec dirname(__FILE__) tu vas récupérer le dossier du script incluant (que tu obtiendrais aussi bien avec " ./ "), du coup tu es quand même obligé de spécifier un chemin relatif après, et c'est à priori pas le but :)

Avec le document root, tu peux retrouver le répertoire web et ainsi spécifier une adresse globale indépendante du dossier dans lequel le script qui est exécuté ;)

par Victor BRITO » 25 oct. 2007, 19:14

Pour construire le chemin absolu d'un fichier appelé à partir de celui d'un autre, tu peux procéder ainsi :
<?php
include (dirname (__FILE__).'/generic/menu.php');
?>

par Steph35 » 25 oct. 2007, 17:33

j'ai la variable suivante :
SERVER["DOCUMENT_ROOT"] => d:/perso/easyphp1-8/www

Ca devrait dont marcher non ?

par Ryle » 25 oct. 2007, 16:36

Regarde dans ce cas les valeurs disponibles dans $_SERVER (via un phpinfo() par exemple) tu devrais trouver une variable qui correspond à ton besoin.. de mémoire je dirais DOCUMENT_ROOT, à vérifier :)

par Steph35 » 25 oct. 2007, 16:22

effectivement ca fonctionne comme cela avec un chemin relatif.

Ma problematique est que l'include que j'utilise "generic/menu.php" represente le menu de mon site et je suis susceptible de l'appeler partout dans l'arboresence de mon site (par exemple dans magasin/theme1.php). C'est pour cela que j'ai besoin d'un chemin absolu.

Est ce que cela est possible en PHP (comme ca l'est en JSP) ?

par Ryle » 25 oct. 2007, 14:11

Lorsque tu fais appel a la fonction include, tu travailles sur le système de fichier (donc en local sur le serveur) et non sur l'url demandée dans le navigateur.

La racine "/" n'a donc pas la même valeur. Dans une url, c'est la racine de ton domaine, mais dans le système de fichier, c'est la racine de ton disque (ici d:\) du coup le fichier ne peut être trouvé.

Tu peux utiliser un chemin relatif au dossier courrant en utilisant "./" ou en ne spécifiant rien.
<?php
  include "generic/menu.php";
// ou bien 
  include "./generic/menu.php";
?>

repertoire de base d'un site web

par Steph35 » 25 oct. 2007, 13:53

Bonjour,

Je viens de commencer mon site en PHP et contrairement à d'habitude la racine du site n'a pas l'air d'être mon repertoire "www" où est installé mon "easyphp" à savoir "D:\perso\EasyPHP1-8\www". En effet j'ai créé une page "accueil.php" dans mon repertoire de base "www" avec un "<? include "/generic/menu.php" ?>" et il ne trouve pas mon fichier "D:\perso\EasyPHP1-8\www\generic\menu.php". J'ai l'erreur suivante :


Warning: main(/generic/menu.php): failed to open stream: No such file or directory in d:\perso\easyphp1-8\www\accueil.php on line 9

Warning: main(): Failed opening '/generic/menu.php' for inclusion (include_path='.;D:\perso\EASYPH~1\\php\pear\') in d:\perso\easyphp1-8\www\accueil.php on line 9

Une idée sur la question ? Je dois definir mon repertoire racine (genre document_root) dans un fichier de conf ? Ce n'est pas fait dans l'instal de base ?

Merci