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
Partager