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 :

probleme d'inclusion de classe [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut probleme d'inclusion de classe
    bonjour, je me retrouve face a un probleme de gestion de fichier tous bete


    voici l'arborescence de mon projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    |   archi.txt
    |   Connexion.inc.php
    |   index.php
    |   
    +---Accueil
    |       Accueil.php
    |       
    +---Admin
    |       index.php
    |       
    +---Article
    |       ajout.php
    |       Article.inc.php
    |       edit.php
    |       formAjout.php
    |       formEdit.php
    |       listeArticle.php
    |       suppression.php
    |       texte.php
    |       
    |           
    +---Design
    |   |   
    |   +---auth
    |   |       bas.PNG
    |   |       connect.PNG
    |   |       disconnect.PNG
    |   |       haut.PNG
    |   |       panel.PNG
    |   |       
    |   +---bouton
    |   |       Connect.PNG
    |   |       disconnect.PNG
    |   |       
    |   \---images
    |           back.png
    |           
    +---Droit
    |       Droit.inc.php
    |       
    +---Rubrique
    |       ajout.php
    |       formAjout.php
    |       formEdit.php
    |       ListeRubrique.php
    |       Rubrique.inc.php
    |       suppression.php
    |       
    +---Utilisateur
    |       auth.php
    |       deconnexion.php
    |       md5.js
    |       Utilisateur.inc.php
    |       validationMD5.php
    |
    mon probleme est comme je l'ai dit tous bete.
    Mon fichier index.php inclu par exemple utilisateur.inc.php
    celui si inclu connexion.inc.php.

    mais, le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once("../connexion.inc.php")
    ne fonctionne pas, normale vue que "utilisateur est pour php a la racine"

    j'ai vue pas mal de solution, j'aimerai savoir, pour vous laquel est la bonne?

    j'ai bien sur regarder autoload, mais je n'ai pas tous compris

  2. #2
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    J'ai eu les mêmes soucis, perso j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once dirname(__FILE__).'/monfichier.inc.php';
    De là à dire que c'est la meilleure solution, je m'en garderai bien
    Linio

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Linio Voir le message
    J'ai eu les mêmes soucis, perso j'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once dirname(__FILE__).'/monfichier.inc.php';
    De là à dire que c'est la meilleure solution, je m'en garderai bien
    rapide, merci

    pour le probleme, c'est vraiment un point faible de php...
    je ne comprend pas pourquoi ils ne font pas comme en C ou en java...

    enfin, j'ai deja essayer ton systeme, mais je pense comme toi, il doit y avoir mieux

  4. #4
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    J'avoue ne pas avoir non plus bien suivi la logique d'insertion des fichiers dans php. Après j'avoue que le sujet m'intéressant assez peu, j'ai trouvé un moyen pour le faire, et comme ça marchait bien en toute situation, j'ai pas été cherché bien plus loin. Je ne sais pas s'il y a une méthode plus efficace. Plus propre en revanche...?
    Après tout on veut insérer un fichier par rapport au fichier que l'on connait donc utiliser la location du fichier courant n'est pas si stupide...
    J'aurais fait nativement dans ce sens là mais bon je fais pas php.
    Linio

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    si quelqu'un a mieux, ça me rendrai service, je n'aime pas se systeme

  6. #6
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    Pourtant cette solution n'a rien de bizzare, prendre le dossier associé au script courant.

    Vous avez également la possibilité de modifier include_path pour mettre des chemins de fichier absolus.

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    J'aime bien le principe de définir une constante qui indique la racine du site dans le fichier de boostrap. Une constante étant globale, elle est ensuite accessible partout. Autre avantage, en cas de changement d'arborescence "parente", il suffit de changer la valeur de cette constante.

    Exemple :
    Code php dans index.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define ('ROOT', './');
    require ROOT.'Utilisateur/Utilisateur.inc.php';

    Code php dans Utilisateur.inc.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    require ROOT.'connexion.inc.php';

    Dernier avantage : ça pète si la constante n'est pas définie, donc si vous ne passez pas par le bootstrap.
    On peut même ainsi défiinir un petit code de sécurité au début des fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!defined(ROOT)) exit("accès interdit");
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par jml94 Voir le message
    J'aime bien le principe de définir une constante qui indique la racine du site dans le fichier de boostrap. Une constante étant globale, elle est ensuite accessible partout. Autre avantage, en cas de changement d'arborescence "parente", il suffit de changer la valeur de cette constante.
    pour l'instant, je trouve que ta methode est la meilleur


    include_path n'est pas toujours modifiable, je suis sur un hébergement mutualisé je n'ai donc pas acces au php.ini
    a moins qu'il y ai une autre methode de le modifier (avec un methode php) c'est mort

  9. #9
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Hum...

    Ou comment avoir envie de se faire des nœuds au cerveau.

    Bon courage...
    Linio

  10. #10
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Tony_ducrocq Voir le message
    include_path n'est pas toujours modifiable, je suis sur un hébergement mutualisé je n'ai donc pas acces au php.ini
    a moins qu'il y ai une autre methode de le modifier (avec un methode php) c'est mort
    set_include_path, en début de script marche très bien sur la plupart des mutualisés.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  11. #11
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Linio Voir le message
    Hum...

    Ou comment avoir envie de se faire des nœuds au cerveau.

    Bon courage...
    Si je puis me permettre, moins de noeuds qu'en utilisant dirname.
    Tout simplement parce qu'avec la technique de ROOT, il suffit de réfléchir sur une arborescence fixe. Il n'y a pas besoin de connaître l'emplacement du fichier réalisant l'inclusion.
    Enfin, si ce fichier incluant est déplacé pour une raison ou une autre, cela ne remet pas en cause l'inclusion, encore une fois parce que celle-ci se base sur la racine du site.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    je ne vois pas trop le besoin de modifier le path

    a part ça, pouvez vous continuer vos propositions

  13. #13
    Membre averti Avatar de Linio
    Inscrit en
    Octobre 2005
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 431
    Points : 332
    Points
    332
    Par défaut
    Tout à fait d'accord avec vous jml94, mais je pense que chaque besoin a une solution appropriée.
    Si on fait un site professionnel avec des centaines de pages la votre sera clairement plus appropriée, si on se retrouve comme il semble être le cas ici avec l'impossibilité d'accéder à certaines ressources de son serveur, on fait "avec les moyens du bord".

    De facto j'avoue n'avoir que "peu" de fichiers inclus, d'où ma méthode, moins contraignante, mais après comme je le précisais, je ne doutais pas qu'il existait mieux, comme vous l'avez très justement démontré.
    Linio

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    j'ai un petit probleme dans l'implementation de la solution avec les constantes

    j'ai en faite 4 pages sur lesquelles je navigue

    index.php
    auth.php (la page de connexion)
    déconnexion.php
    Admin.php


    mon probleme est que je construit bien les constantes dans ces 4 fichiers
    puis je fais appel au classe a partir de ces fichiers mais, j'ai cette erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Notice: Use of undefined constant ROOT - assumed 'ROOT' in C:\wamp\www\Utilisateur\Utilisateur.inc.php on line 2
     
    Warning: require_once(ROOTConnexion/Connexion.inc.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\Utilisateur\Utilisateur.inc.php on line 2
     
    Fatal error: require_once() [function.require]: Failed opening required 'ROOTConnexion/Connexion.inc.php' (include_path='.;C:\php5\pear') in C:\wamp\www\Utilisateur\Utilisateur.inc.php on line 2
    je ne comprend pas trop...

  15. #15
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(ROOTConnexion/Connexion.inc.php)
    Ca c'est pas bon.
    Il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once ROOT . 'Connexion.inc.php';
    PAS de guillemets autour de ROOT...
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    j'ai bien ecris cela, d'ailleurs, ça marche quand je suis sur l'index...

    plus simplement,
    lorsque j'accede a mon site je suis sur index.php, celui ci inclus la classe Utilisateur.inc.php
    j'ai un bouton de connexion me dirigent (sans inclure) vers auth.php
    je redefini donc la constante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    define ('ROOT', './');
    require_once( ROOT.'Utilisateur/Utilisateur.inc.php');
    voici se que tu peut trouver comme include dans utilisateur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    require_once( ROOT.'Connexion/Connexion.inc.php');
    require_once( ROOT.'Droit/Droit.inc.php');
    le message d'erreur dit que la constante ROOT n'existe pas, je pense donc que php essaye de la transformer en chaine d'ou le faite
    que sur le message d'erreur on ne voit pas la '

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    voici le code de mon fichier auth.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
    	define ('ROOT', './');
    	require_once( ROOT.'Utilisateur/Utilisateur.inc.php');
     
    	if(! Utilisateur::estConnecte() ){
    		$form=Utilisateur::formulaireConnexion("Utilisateur/validationMD5.php");
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>
    		Connect
    	</title>
     
    	<link rel="stylesheet" type="text/css" href="../Design/auth.css" media="all" />
     
    <body>
     
    <div id="centre">
    <div id="haut"></div>
    <div id="panel">
    <div id="form">
    <?php
    	echo $form;	
    ?>
     
    </div>
    </div>
    <div id="bas"></div>
    </div>
     
    </body>
    </html>
    <?php
    	}
    	else
    		header('Location: '.ROOT);	
    ?>
    bon, je pense pas que vous ayez besoin de tous ça, mais bon ^^


    EDIT: j'ai trouvé, l'erreur venait que la constante devais aussi etre redefini dans validationMD5.php

  18. #18
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Tony_ducrocq Voir le message
    j'ai trouvé, l'erreur venait que la constante devais aussi etre redefini dans validationMD5.php
    Ce qui sous-entend que ce fichier est éxécuté directement, sans passer par le bootstrap.

    J'imagine alors que cette fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form=Utilisateur::formulaireConnexion("Utilisateur/validationMD5.php");
    fait une redirection ( à l'aide de header(location...) ) vers ce script.

    RQ : pour garder l'esprit de flexibilité, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $form=Utilisateur::formulaireConnexion(ROOT."Utilisateur/validationMD5.php");
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 67
    Points : 33
    Points
    33
    Par défaut
    effectivement, c'est bien ça
    je te remercie, je viens de finir l'implementation de ta solution

    a part ça, pourrai tu vite fait m'expliquer comment marche autoload
    j'ai lu pas mal de truc dessus, mais c'est pas toujours clair, mais c'est souvent tres long

  20. #20
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Mon verbe laissant un peu à désirer, je te propose de compulser l'excellent article de Julien Pauli sur le sujet : http://julien-pauli.developpez.com/t...r/autoloaders/
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.2] probleme d'inclusion de classe dans fichier php
    Par diblasio dans le forum Langage
    Réponses: 1
    Dernier message: 08/12/2009, 18h26
  2. Probleme d'inclusion d'un container d'une classe dans une autre
    Par Tavarez59 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 30/03/2007, 22h41
  3. [RMI] Probleme pour retrouver la classe implementée.
    Par Koko22 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 16/09/2004, 19h15
  4. Probleme de lecture de classe
    Par wkd dans le forum Composants
    Réponses: 5
    Dernier message: 21/05/2004, 15h20
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

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