IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Notice: Undefined variable


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut Notice: Undefined variable
    Bonjour,

    j'ai réalisé un fichier qui contient les chemins vers les divers dossiers de mon site web, afin de pouvoir rappeler ces variables plutôt que de réécrire tout le chemin à chaque fois, ce fichier se présente comme suit :

    paths.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    	$pathimages		= $_SERVER['DOCUMENT_ROOT'].'system/images/';
    	$pathclasses	= $_SERVER['DOCUMENT_ROOT'].'system/classes/';
    	$pathcss		= $_SERVER['DOCUMENT_ROOT'].'system/css/';
    	$pathfunctions	= $_SERVER['DOCUMENT_ROOT'].'system/functions/';
    	$pathtemplates	= $_SERVER['DOCUMENT_ROOT'].'system/templates/';
    ?>
    mais lorsque que j'essaye de rappeler ces variables dans un autre fichier (en ayant au préalable fait un require sur paths.php, j'ai l'erreur "
    Notice: Undefined variable: _CSS" ou autre selon la variable. Par exemple rien qu'un fichier tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    	require_once($_SERVER['DOCUMENT_ROOT'].'paths.php');
    	echo '<link rel="stylesheet" type="text/css" href='.$_CSS.'"style.css">';
    ?>
    Bon c'est un truc que j'ai fait pour tester mais je sais pas trop ce qui ne va pas même si je pense que c'est un truc tout bête.

  2. #2
    Inactif
    Inscrit en
    Octobre 2008
    Messages
    826
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 826
    Par défaut
    pour ce genre de chose je te conseil de faire comme moi, en utilisant des constantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    define ("ROOT", "$_SERVER['DOCUMENT_ROOT']");
    Les constante servent a sa.

    Et aussi, a la place de comme tu as fait.

    Je te coneil de faire comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define ("ROOT", "c:/wamp/www/");
    define ("IMG", "c:/wamp/www/img");
    Comme sa il ne risque pas d'y avoir une erreur.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut
    Je veux utiliser les constantes système car je ne veux rien avoir à changer dans les fichiers quand je passe du site en local au site en ligne ! Par contre les constantes ça a l'air de mieux fonctionner, mais je ne comprends quand même pas pourquoi ça ne fonctionne pas avec les variables, à cause de leur portée ?

  4. #4
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    Ben, pour ton problème, $_CSS vient d'où ? PHP ne peut pas deviner ce qui te passe par la tête, si tu n'as jamais défini ce que vaut $_CSS, il ne va pas te sortir une valeur quelconque.

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Notice: Undefined variable: _CSS
    Php indique que cette variable n'est pas définie, donc n'existe pas.
    Soit elle n'est pas créée, soit elle se trouve dans un fichier non inclus, ou inclus après quelle soit exploitée.
    Fait le point la dessus.


    Attention tout de même, car il y a au moins 2 types de chemins, l'un orienté coté client (le navigateur) qui lui réclame une URL, et les chemins "physiques" pour le coté serveur.
    Il ne faut pas confondre ces 2 aspects :
    client (Navigateur) / serveur (hébergeur)

    Un navigateur ne saura quoi faire avec un $_SERVER['DOCUMENT_ROOT'], c'est un chemin qu'il ne connait pas, il n'est pas installé sur lse serveur, mais il se trouve très loin, chez l'internaute, le visiteur.
    Pour indiquer où ce trouve un fichier sur ton hébergeur (serveur), il lui faut une URL.


    Après ça, dans les 2 cas il y aura un choix à faire, soit indiquer un chemin absolu, soit un chemin relatif.


    Donc pour importer une feuille de style CSS, ou un fichier Javascript, il faut indiquer une URL, peu importe que ce soit un chemin absolu ou relatif (c'est exactement comme pour les liens).


    A savoir aussi qu'un $_SERVER['DOCUMENT_ROOT'] peu ne pas retourner un chemin "physique" correcte. C'est rare à mon avis, mais ça peut être le cas.
    Utiliser ce code est théoriquement plus fiable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dirname(dirname(__FILE__))
    Aussi, les include() et autre require() sont directement liés aux include_path(), il peut être intéressante d'exploiter la fonction set_include_path().
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // ceci :
    set_include_path(get_include_path().PATH_SEPARATOR.dirname(dirname(__FILE__)));
     
    // Ou ça
    set_include_path(get_include_path().PATH_SEPARATOR.$_SERVER['DOCUMENT_ROOT']);
    En somme, on définirait quelques chemins clés (physiques), 1 ou 2, qui permettra d'indiquer des chemins absolus pour inclure, donc plus simples.

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    433
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 433
    Par défaut
    Oui dsl j'étais fatigué quand j'ai posté c'est pas la bonne version que j'ai mis c'est

    echo '<link rel="stylesheet" type="text/css" href='.$_CSS.'"style.css">';

    dans la nouvelle version.

    Il existe pas une fonction pour connaitre l'URL de la racine du serveur ? $_SERVER['HTTP_HOST'] peut-être ?

    Je ne sais pas si je peux modifier l'include path mon hébergeur c'est free et je ne sais pas comment accéder aux fichiers de configuration.

  7. #7
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par Gaetch Voir le message
    Il existe pas une fonction pour connaitre l'URL de la racine du serveur ? $_SERVER['HTTP_HOST'] peut-être ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SERVER['SERVER_NAME']
    ce n'est pas une fonction voir http://www.developpez.net/forums/d88...e/#post5050862

Discussions similaires

  1. [MySQL] Notice: Undefined variable: prenom in c:\documents and settings\stagiaire10\mes docum
    Par fofina dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 15/10/2007, 00h18
  2. Notice: Undefined variable: id in
    Par dynam dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 11/09/2007, 17h12
  3. Notice: Undefined variable
    Par oranoutan dans le forum Langage
    Réponses: 19
    Dernier message: 21/12/2005, 22h28
  4. Notice: Undefined variable
    Par kayn dans le forum Langage
    Réponses: 2
    Dernier message: 03/10/2005, 20h44
  5. Réponses: 3
    Dernier message: 22/09/2005, 11h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo