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
    Homme Profil pro
    Directeur technique
    Inscrit en
    février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : février 2019
    Messages : 3
    Points : 1
    Points
    1

    Par défaut 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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 049
    Points : 30 659
    Points
    30 659

    Par défaut

    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).
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : février 2019
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    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
    Rédacteur/Modérateur
    Avatar de jreaux62
    Homme Profil pro
    Webdesigner
    Inscrit en
    août 2008
    Messages
    15 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Arts - Culture

    Informations forums :
    Inscription : août 2008
    Messages : 15 049
    Points : 30 659
    Points
    30 659

    Par défaut

    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"
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : février 2019
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

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

Discussions similaires

  1. Requête fonctionne sur phpMyAdmin mais pas dans le code PHP
    Par cocobuck dans le forum PHP & MySQL
    Réponses: 15
    Dernier message: 24/02/2016, 10h23
  2. question théorique sur le mot class
    Par stgi02 dans le forum C++
    Réponses: 3
    Dernier message: 01/05/2006, 15h11
  3. Question théorique sur les normales
    Par Pedro dans le forum DirectX
    Réponses: 5
    Dernier message: 16/10/2005, 19h24
  4. Tracer une courbe théorique sur un TChart
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/09/2005, 11h46

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