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

  1. #1
    Nouveau Candidat au Club
    Discussion théorique sur l'environement d'exécussion du code php lors d'un appel via ajax
    Bonjour,

    Je développe mon premier site internet avec php, javascript et ajax. Au niveau pratique, j'ai trouvé tout ce dont j'avais besoin sur Internet. Bref, mon code fonctionne, ce n'est pas là le problème. Par contre, je ne parviens pas à comprendre complètement ce qui ce passe lorsque j’appelle une fonction php via ajax !

    Exemple en vue d'expliquer mon problème :

    Le fichier mafonction.php est sur le serveur et sera exécuté sur celui-ci. Ok

    Je possède une fonction javascript (exécuté sur le client - Ok) qui, via ajax, appellera une fonction php dans le fichier mafonction.php. J'utilise en fait jquery avec un appel du style var result = $.post('mafonctions.php', ... (à ce moment là, le serveur sait où se trouve mon fichier)

    Tout cela fonctionne mais j'ai remarqué que :

    require 'login.php'; ne fonctionne pas.

    Pour que cela fonctionne, je dois écrire require '/chemincomplet/login.php' (le serveur ne "veut" plus savoir où se trouve mes fichiers !)

    En essayant de rendre mon code portable j'ai constaté que des fonctions du style :

    realpath() ne fonctionne pas ! Bref, un require realpath('.').'login.php'; ne marche pas ! J'ai cherché et je ne suis toujours pas arrivé à savoir où était exécuté le code de ma fonction. Le serveur semble agir comme s'il n'y avait plus d’arborescence pour les fichiers ???

    Mes conclusions et questions :

    Lors d'un appel ajax, le serveur exécute le code php dans un environnement distinct (protégé ?). Cet environnement semble poser problème à certaines fonctions...

    Dans quel environnement ? Je comprend pas trop pour l'instant.

    Je n'ai pas fait beaucoup de tests mais il semble que plusieurs fonction php ne fonctionne plus comme attendu dans cet environnement de travail (realpath() en est un bon exemple). Si require fonctionne, require_once semble lui ne pas fonctionné.

    Comment je débug une fonction php quand elle est appelée par ajax ? La sortie standard style echo $test; est envoyé vers le programme appelant. L'ouverture de fichier semble également problématique (logique vu que je sais pas où je suis !).

    Si vous pouviez me faire comprendre le fond du problème et me donner des astuces pour contourner les problèmes engendré, ce serait très sympa ;-)

    Bien à vous

    Charles

  2. #2
    Invité
    Invité(e)
    Bonjour,

    Citation Envoyé par Charles Sapin Voir le message
    ...qui, via ajax, appellera une fonction php dans le fichier mafonction.php...
    C'est là qu'est l'erreur.

    En effet, le fichier PHP appelé via Ajax est totalement indépendant.
    Il faut donc le traiter comme tel.

    Comment je débug une fonction php quand elle est appelée par ajax ?
    Il faut écrire son URL directement dans la barre d'adresse, après avoir écrit manuellement des paramètres "factices" nécessaires à son exécution (ceux qui sont censés être transmis par Ajax).

  3. #3
    Nouveau Candidat au Club
    J'appelle une fonction php avec une commande (jquery) comme:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    var result = $.post ('/php/fonctions.php', {fonction: 'citation', data: lang}, function (data) {
    txt_citation.innerHTML = data.citation + "<strong>" + data.nom + "</strong>";
    }, "json");


    Dans le fichier fonctions.php, j'ai une ligne "$ _POST [" fonction "] ($ _ POST [" data "]);" pour appeler ma fonction. J'ai essayé avec "call_user_func_array ($ _ POST[" fonction "], $ _POST[" data "]);" mais ça ne marche jamais, je ne sais pas pourquoi.
    Si vous pouvez m'expliquer pourquoi c'est bon mais ce n'est pas la raison de ce post.
    Quel est la procédure classique pour réaliser cela ?

    Ma méthode n'est pas forcément la meilleur mais elle fonctionne. J'appelle une fonction mafonction() dans un fichier monfichier.php. Ça fonctionne. J'ai juste un problème d'environnement "inconnu".

    Écrire les paramètres directement dans l'url (je n'y avais pas pensé et cela devrait effectivement fonctionné) me semble très compliqué lorsque je traiterai, par exemple, des tableaux "volumineux".

  4. #4
    Invité
    Invité(e)
    1- Il faut supprimer tous les espaces :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $_POST["fonction"]($_POST["data"]);


    2-
    Citation Envoyé par Charles Sapin Voir le message
    ...Écrire les paramètres directement dans l'url...
    Ce n'est pas ce que j'ai dit.

    Pour tester le fichier :
    • d'abord, on ajoute "à la main" les paramètres nécessaires DANS le script :

    Code php :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // $_POST["fonction"]($_POST["data"]);
    $fonction = 'citation'; // pour TEST
    $data = 'fr'; // pour TEST
    $fonction($data); // pour TEST

    • puis on tape l'URL du fichier dans la barre d'adresse : "http....../php/fonctions.php"

  5. #5
    Nouveau Candidat au Club
    Les espaces ont été rajoutés suite à un "copié collé" (j'ai enlevé certain espace et j'en ai oublier d'autres ). Le code n'est donné qu'à titre d'exemple. Il fonctionne et fait ce que je veux. Pas besoin de le contrôler sauf à me trouver un autre moyen de faire la même chose (style remplacer realpath() par xyz() qui fait la même chose et fonctionne dans tout les cas.

    Mes deux principaux problèmes sont :

    1) Comprendre dans quel type d'environnement ma fonction php s'exécute (Je sais que c'est un environnement à part mais à part jusqu'où ? Pas d'arborescence de fichier, et ???). En d'autre mots, comprendre pourquoi une fonction comme realpath() ne fonctionne pas ! Si je comprends pourquoi, je devrais pouvoir contourner le problème. Contourner le problème revient à répondre à la question suivante : comment trouver autrement la réponse que devrait me fournir realpath('.') ?

    2) Débuger mes fonctions php dans cet environnement particulier (la fonction de mon exemple est particulièrement simple). Mon but est de développer une application web qui gère ma base de données professionnelles. Simuler les données qui seront passés en argument est théoriquement possible mais pratiquement difficile à mettre en œuvre (à part quasi doubler mon code - un code en php qui crée mes données et test pour mes fonctions php et un code en javascript qui quasi fait la même chose - le "quasi" est problématique !).