shenron76 Posté 23 Novembre 2012 Posté 23 Novembre 2012 (modifié) Bonsoir, Je me trouve confronté à un problème d'appel de fonction. Sur la page index.php j'ai : <?phprequire ('./fonctions.php');require ('./autres_fonctions.php');?> Le fichier fonctions.php : <?php function existence_bdd($table){ //Le code de la fonction}?> Le fichier autres_fonctions.php : <?php //Module Xrequire ('./modules/mod_X/fonctions.php');?> Le fichier modules/mod_X/fonctions.php : <?php function trier(){ if(existence_bdd('maTable') > 0) { //Blablabla }}?> J'ai donc une succession d'inclusions de plusieurs fichiers dont 2 contiennent des fonctions. En clair une fonction A présente dans un fichier A fait appel à une fonction B présente dans un fichier B. Les fichiers A et B sont en require() sur une page index. Cependant, le script m'affiche l'erreur suivante : Fatal error: Call to undefined function existence_bdd() in /home/blabla/www/modules/mod_X/fonctions.php on line 33 En gros il ne trouve pas la fonction existence_bdd(). Comment faire pour garder un système d'include en faisant en sorte que les fonctions incluses précédemment soient prises en compte dans la fonction d'un script inclue à la suite ? Merci d'avance Modifié 23 Novembre 2012 par shenron76
jcaron Posté 24 Novembre 2012 Posté 24 Novembre 2012 Tu es sûr que la fonction que tu appelles n'est pas définie à l'intérieur d'une classe (i.e. c'est une méthode)? Autre possibilité, une faute de frappe sur le nom de la fonction peut-être? Jacques.
tarte-au-sucre Posté 24 Novembre 2012 Posté 24 Novembre 2012 (modifié) Comme tu l'as développé, tu as effectivement utilisé des require plutôt que des includes. Ce qui signifie que s'il y avait une erreur (du genre fichier introuvable) le script serait en fatal error. On écarte donc cette piste là. Sur quoi codes tu ? J'ai en tête des logiciels comme Eclipse qui permettent d'avoir la certitude que tes fonctions existent, que tu n'as pas fait de faute de frappe, que tu n'as pas "missing semi column", ou un superbe "} not expected " Cela permettrait d'écarter la piste de la faute de frappe ! Ou alors, comme Jacques : peut être les fonctions que tu appelles sont elles dans des classes, en private, ou je ne sais quoi. Modifié 24 Novembre 2012 par tarte-au-sucre
shenron76 Posté 26 Novembre 2012 Auteur Posté 26 Novembre 2012 Bonjour , Tout d'abord, merci pour vos réponses. Les fonctions ne sont pas dans des classes, elles sont comme tel dans deux fichiers différents, ces deux fichiers étant inclus sur lune meme page. J'ai bien vérifié il n'y a pas de fautre de frappe. tarte-au-sucre : comme indiqué dans mon premier post, j'ai bien un "fatal error". Je pense que le problème provient du fait que les 2 fonctions sont dans deux fichiers différents (qui sont inclus sur la même page bien évidemment) mais du coup la fonction faisant appel à l'autre n'arrive pas à la trouver. Y a t il un moyen d'éviter ce soucis ?
Ernestine Posté 26 Novembre 2012 Posté 26 Novembre 2012 Pour commencer, plutôt que de faire des inclusions un peu partout (en l'occurrence dans index.php et dans autres_fonctions.php ) il serait plus propre et plus lisible de toutes les faire au même endroit, c'est à dire dans index.php (ou mieux un autre fichier du genre inclusions.php) : require ('fonctions.php');require ('autres_fonctions.php');require ('modules/mod_X/fonctions.php'); Car si tu fais des inclusions dans différents fichiers, tu vas vite t'y perdre (d'ailleurs tu es déjà perdu).
shenron76 Posté 26 Novembre 2012 Auteur Posté 26 Novembre 2012 Pour commencer, plutôt que de faire des inclusions un peu partout (en l'occurrence dans index.php et dans autres_fonctions.php ) il serait plus propre et plus lisible de toutes les faire au même endroit, c'est à dire dans index.php (ou mieux un autre fichier du genre inclusions.php) : require ('fonctions.php');require ('autres_fonctions.php');require ('modules/mod_X/fonctions.php'); Car si tu fais des inclusions dans différents fichiers, tu vas vite t'y perdre (d'ailleurs tu es déjà perdu). Oui c'est clair, c'est pour cela que je procède ainsi maintenant sur index.php: require ('./fonctions.php');//Toutes les fonctions des modulesforeach(glob('modules/*/fonctions.php') as $fichier_fonctions){ require($fichier_fonctions);}
jcaron Posté 26 Novembre 2012 Posté 26 Novembre 2012 La fonction peut être définie dans n'importe quel fichier, tant que celui-ci est bien inclus tu peux l'appeler, les fonctions php sont globales. Seules les méthodes d'une classe peuvent être privées. Quelques autres possibilités: - tu n'inclus pas le bon fichier (faute de frappe...) - tu n'inclus pas le bon fichier (chemin?) - tu as une faute de frappe dans le nom de la fonction Tu peux tester tout ça en copiant la fonction appelante dans le même source que la fonction appelée, vérifier si ça marche ou pas, puis dans le source "principal" (celui qui inclut les autres), et ainsi de suite. Jacques.
Portekoi Posté 28 Novembre 2012 Posté 28 Novembre 2012 Cela peut aussi venir d'une majuscule manquante.
destroyedlolo Posté 29 Novembre 2012 Posté 29 Novembre 2012 Pour commencer, plutôt que de faire des inclusions un peu partout (en l'occurrence dans index.php et dans autres_fonctions.php ) il serait plus propre et plus lisible de toutes les faire au même endroit, c'est à dire dans index.php (ou mieux un autre fichier du genre inclusions.php) : require ('fonctions.php');require ('autres_fonctions.php');require ('modules/mod_X/fonctions.php'); Car si tu fais des inclusions dans différents fichiers, tu vas vite t'y perdre (d'ailleurs tu es déjà perdu). Mouai, mais non Perso, je fais en PHP comme je fais en C++, c'est a dire qu'un fichier n'inclus que ce qui lui est strictement necessaire. Si il inclus A.php et lui meme a necessite B.php, ce dernier est inclus dans A.php et non dans le code principale car c'est BEAUCOUP plus maintenable ainsi : on a une approche objets et on ne s'interesse pas a l'implementation sous jassente, donc en cas de changement majeur, on n'a pas a se soucier de tous les endroits ou pourrait etre inclus un fichier. ... Et ca marche tres bien
Ernestine Posté 29 Novembre 2012 Posté 29 Novembre 2012 Oui ce que je disais c'était surtout pour l'aider à débuguer son truc car apparemment il n'inclue pas correctement ses fichiers, donc pour qu'il s'y retrouve, je proposais qu'il fasse ses inclusions au même endroit, du moins provisoirement. Sinon après pour l'inclusion, il n'y a pas de règle générale, plusieurs pratiques sont possibles, ça dépend de la quantité de fichiers inclus, de leur interdépendance, etc...
shenron76 Posté 29 Novembre 2012 Auteur Posté 29 Novembre 2012 (modifié) Bonjour tout le monde, Bon vous pouvez préparer les cailloux ... si si je les mérite ... (bon pas trop gros ok ?!?) Mon problème est résolu, j'ai rédigé mon post un soir après une journée interminable, la fatigue à donc grandement joué ... Le problème venait tout simplement du fait que mon problème ne survenait pas sur la page index.php (comme indiqué au début) mais de la page telecharger.php (indépendante de index.php) sur laquelle j'avais tout simplement oublié d'inclure : <?php require ('./fonctions.php'); ?> ... désolé pour l'étourderie ... et merci pour votre participation Johan ... c'est bon je suis prêt vous pouvez lancer vos cailloux ! Modifié 29 Novembre 2012 par shenron76
Dadou Posté 30 Novembre 2012 Posté 30 Novembre 2012 A vos armes... En joue... Lancez les cailloux :-D
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant