Aller au contenu
shenron76

Appel de fonction d'un fichier distant

Noter ce sujet :

Recommended Posts

Bonsoir,

Je me trouve confronté à un problème d'appel de fonction.

Sur la page index.php j'ai :


<?php
require ('./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 X
require ('./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é par shenron76

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par tarte-au-sucre

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

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).

Partager ce message


Lien à poster
Partager sur d’autres sites

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 modules
foreach(glob('modules/*/fonctions.php') as $fichier_fonctions)
{
require($fichier_fonctions);
}

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

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 s_hug_03.gif

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 smartass.gif

Partager ce message


Lien à poster
Partager sur d’autres sites

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...


Partager ce message


Lien à poster
Partager sur d’autres sites

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 smile.gif



Johan



... c'est bon je suis prêt vous pouvez lancer vos cailloux !


Modifié par shenron76

Partager ce message


Lien à poster
Partager sur d’autres sites

A vos armes... En joue... Lancez les cailloux :-D


Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×