J'ai ce code :
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
Pourquoi cela n'écrit-il pas "bar" dans mon fichier texte mais avertit à la place "42" ?
Remarque : une révision antérieure de cette question traitait explicitement de PHP sur le serveur et de JavaScript sur le client. Lorsqu'une langue s'exécute sur le client et une autre sur le serveur (même s'il s'agit de la même langue), la nature du problème et la solution sont les mêmes pour n'importe quellelangue. Pensez-y lorsque vous voyez des réponses qui parlent d’une langue spécifique.
Pour déterminer pourquoi le code PHP ne fonctionne pas dans le code JavaScript, nous devons comprendre ce que sont les langages côté client et côté serveur, et comment ils fonctionnent.
Langages côté serveur (PHP, etc.) : Ils récupèrent les enregistrements de la base de données, se connectent via stateless HTTP et effectuent de nombreuses opérations qui nécessitent une sécurité. Ils résident sur le serveur et ces programmes n'exposent jamais leur code source aux utilisateurs.
Vous pouvez donc facilement voir que le langage côté serveur gère les requêtes HTTP et les traite, et, comme @deceze l'a dit, PHP s'exécute sur le serveur et génère du code HTML et peut-être JavaScript, qui est envoyé au client en tant que réponse. , qui interprète HTML et exécute JavaScript.
D'autre part, les langages côté client (comme JavaScript) résident et s'exécutent dans le navigateur. Script côté client fait généralement référence à une classe de programmes informatiques sur le réseau qui sont exécutés côté client par le navigateur Web d'un utilisateur, plutôt que côté serveur. p>
JavaScript est visible par l'utilisateur et peut être modifié facilement, donc pour des raisons de sécurité, nous ne pouvons pas compter sur JavaScript.
Ainsi, lorsque vous faites une requête HTTP au serveur, le serveur lit d'abord attentivement le fichier PHP pour voir si des tâches doivent être effectuées, puis envoie une réponse au client. Encore une fois, comme @deceze l'a dit, *une fois que PHP a fini de générer la réponse, le script se termine et rien ne se passe sur le serveur jusqu'à ce qu'une nouvelle requête HTTP arrive. *
Alors maintenant, que dois-je faire si j'ai besoin d'appeler PHP ? Cela dépend de la manière dont vous devez procéder : en rechargeant la page ou en utilisant un appel AJAX.
Bonne lecture :
Votre code est divisé en deux parties complètement indépendantes, côté serveur et côté client.
Les deux parties communiquent via des requêtes et des réponses HTTP. PHP s'exécute sur le serveur et génère du code HTML et éventuellement du code JavaScript, qui est envoyé en réponse au client, où le HTML est interprété et le JavaScript est exécuté. Une fois que PHP a fini de générer la réponse, le script se termine et rien ne se passe sur le serveur jusqu'à ce qu'une nouvelle requête HTTP arrive.
L'exemple de code est exécuté comme suit :
Étape 1, PHP exécute tout le code entre les
tags. Le résultat est le suivant :
file_put_contents
调用没有产生任何结果,它只是将“ + foo + ”写入文件。L'appel aboutit à la sortie "42", qui se trouve désormais là où se trouvait initialement le code.
Le code HTML/JavaScript généré est maintenant envoyé au client et y est évalué.
alert
调用有效,而foo
Variable non utilisée nulle part.Tout le code PHP est exécuté sur le serveur avant que le client ne commence à exécuter du JavaScript. Il ne reste plus de code PHP dans la réponse avec lequel JavaScript peut interagir.
Pour appeler certains codes PHP, le client doit envoyer une nouvelle requête HTTP au serveur. Ceci peut être réalisé en utilisant l'une des trois méthodes possibles :
Voici une question décrivant ces méthodes plus en détail
Vous pouvez également utiliser JavaScript pour indiquer au navigateur d'utiliser
window.location
pour ouvrir une nouvelle page ou soumettre un formulaire, en simulant les possibilités 1. et 2.