Problème d'include

Résolu
the_mouette Messages postés 13 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 27 mars 2007 - 27 déc. 2005 à 21:34
the_mouette Messages postés 13 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 27 mars 2007 - 28 déc. 2005 à 14:50
Bonjour tout le monde,

voilà, j'ai une page index, qui en fonction des paramètres passés après l'url affiche une page différente dans la partie centrale (un div).

d'un autre côté j'ai plusieurs classes que j'instancie dans une de mes pages inclue.

en général, la page inclue s'affiche sans problème, mais il se trouve que je ne peux pas instancier les éléments de ma classe, l'erreur retournée est :
Fatal error: Class 'maClasse' not found

et pourtant mes fichiers sont biens inclus, j'ai vérifié avec get_included_files()...

je ne sais pas quoi faire... des idées? des choses à tester?

merci d'avance!

8 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2005 à 14:43
Re. Petit extrait de la doc :


Si les Gestionnaires d'URL
sont activés dans PHP (ce qui est le cas par défaut),
vous pouvez localiser le fichier avec une URL (via HTTP ou
bien avec un gestionnaire adapté : voir Annexe M
pour une liste des protocoles), au lieu d'un simple chemin
local. Si le serveur distant interprète le fichier comme du code
PHP, des variables peuvent être transmises au serveur distant
via l'URL et la méthode GET. Ce n'est pas, à strictement
parler, la même chose que d'hériter du contexte de variable.
Le fichier inclus est en fait un script exécuté à distance,
et son résultat est inclus dans le code courant.

Bref : je n'ai jamais eu l'idée saugrenue d'inclure des fichiers de MON serveur, sur MON serveur, avec une url. Mais je suppose que tu te retrouves alors dans ce cas : ce qui est renvoyé est le HTML généré par le serveur distant, non pas le code php. Donc, variables, fonctions, classes, constantes...ne sont pas définies dans la page appelante (à moins de les passer par les méthodes GET ou POST).
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
28 déc. 2005 à 00:26
Salut,

tes fichiers qui contiennnent ta classe sont bien inclus avant la déclaration de l'objet ou de la chasse héréditaire ?

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
0
the_mouette Messages postés 13 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 27 mars 2007
28 déc. 2005 à 00:47
oui, ils sont bien inclus avant...
en fait, même les constantes définies dans mes fichiers avec les classes ne sont pas interprétées...

je comprends vraiement pas ce qui ce passe, j'ai fait des includes avec des chemins relatifs et avec des chemins absolus... rien n'y fait...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
28 déc. 2005 à 08:09
Salut,

envoie une portion de ton code ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2005 à 10:05
Hello,

bah, c'est clairement un problème d'inclusion (en tous cas ça y ressemble beaucoup). Et sans doute de chemin d'inclusion.

Mettons que tu aies :

www/site/classes/maClasse.cls.php
www/site/inc/pageIncluse.php
www/site/index.php

et que dans pageIncluse.php tu aies ceci :
<?php
require_once ('../cls/maClasse.cls.php');
$oClasse = new maClasse ();
?>

et que dans index.php tu aies :
<?php
require_once ('inc/pageIncluse.php');
$oClasse -> fonctionLambda ();
?>

tu auras une erreur dans index.php.
Parce que l'inclusion est fausse, à partir de ce fichier : maClasse.cls.php va être cherchée ici :
www/cls/maClasse.cls.php

D'où l'intérêt de définir un fichier d'inclusions, avec des constantes par exemple, définissant les chemins par rapport au root (par exemple).
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2005 à 10:10
oups :
je reprends, qques erreurs d'écriture :

www/site/cls/maClasse.cls.php
www/site/inc/pageIncluse.php
www/site/index.php
Dans maClasse.cls.php:
<?php
class maClasse {

function maClasse () {
}

function lambda () {
echo 'trucmuche';
}
}
?>
et que dans pageIncluse.php tu aies ceci :
<?php
require_once ('../cls/maClasse.cls.php');
$oClasse = new maClasse ();
?>

et que dans index.php tu aies :
<?php
<?php
require_once ('inc/pageIncluse.php');
$oClasse -> lambda ();
?>
?>
0
the_mouette Messages postés 13 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 27 mars 2007
28 déc. 2005 à 14:09
Merci Malalam, mais le soucis n'est pas là je pense...

attention ca va être un peu long...

j'ai mis des chemins absolus : "http://localhost/monsite/inc/maClasse.php" définis à partir d'une constante myHOME= "http://localhost/monsite/", elle même définie dans un fichier inclu dans ma page d'index :

/index.php :
<?
include(http://localhost/monsite/inc/outils.php);
// tout mon code pour faire ma gestion de page... (en-tête, menus... en fct de la session)
include(myHOME."inc/maPage.php");
?>

/inc/oulils.php :
<?
//definitions
define("myHOME", "http://localhost/monsite/");

//fichiers utiles
include(myHOME."inc/messagesErreur.php");
include(myHOME."inc/identifiants_mySQL.php");
include(myHOME."inc/fonctions_utiles.php");
?>

/inc/maPage.php :
<?
include(myHOME."classes/maClasse1.php");
$var =new maClasse1($param);
?>


et pour finir :
/classes/maClasse1.php inclut d'autres classes, en fontion de la variable myHOME.

dans ce cas, l'erreur trouvée est myHOME not defned
quand j'utilise un chemin absolu avec http://.... j'ai toujours aucune constante utilisable dans maClasse1 et dans les "sous classes"

et get_included_files() ne me renvoie aucun des fichiers inclus dans outils.php
mais ca je pense que c'est normal, ils sont compris dans outils.php.
par contre mes constates devraient être utilisables non?

Merci à vous tous, parce que là je suis perdu...
0
the_mouette Messages postés 13 Date d'inscription dimanche 16 janvier 2005 Statut Membre Dernière intervention 27 mars 2007
28 déc. 2005 à 14:50
merci bien!
0
Rejoignez-nous