Was ist der Unterschied zwischen clientseitiger und serverseitiger Programmierung?
P粉757640504
2023-08-22 20:26:21
<p>Ich habe diesen Code:</p>
<pre class="brush:php;toolbar:false;"><script type="text/javascript">
var foo = 'bar';
<?php
file_put_contents('foo.txt', ' + foo + ');
?>
var baz = <?php echo 42 ?>;
alarm(baz);
</script></pre>
<p>Warum schreibt dieser Code nicht „bar“ in meine Textdatei, sondern erscheint „42“? </p>
<hr />
<p>Hinweis: Eine frühere Überarbeitung dieser Frage befasste sich explizit mit PHP auf dem Server und JavaScript auf dem Client. Wenn eine Sprache auf dem Client und eine andere auf dem Server ausgeführt wird (auch wenn es sich um dieselbe Sprache handelt), sind die Art des Problems und die Lösung gleich. Bitte berücksichtigen Sie dies, wenn Sie Antworten zu bestimmten Sprachen sehen. </p>
要确定为什么PHP代码在JavaScript代码中不起作用,我们需要了解什么是客户端和服务器端语言,以及它们的工作原理。
服务器端语言(如PHP等):它们从数据库中检索记录,保持在无状态的HTTP连接上维持状态,并执行许多需要安全性的操作。它们驻留在服务器上,这些程序的源代码从不暴露给用户。
因此,您可以很容易地看出服务器端语言处理HTTP请求并对其进行处理,正如@deceze所说,PHP在服务器上执行并输出一些HTML,以及可能的JavaScript代码,这作为响应发送到客户端,在那里解释HTML并执行JavaScript。
另一方面,客户端语言(如JavaScript)驻留在浏览器中并在浏览器中运行。客户端脚本通常指在Web上由用户的Web浏览器而不是服务器端执行的计算机程序。
JavaScript对用户可见且可以轻松修改,因此对于安全性问题,我们不能依赖JavaScript。
因此,当您在服务器上发出HTTP请求时,服务器首先仔细读取PHP文件以查看是否有需要执行的任务,并向客户端发送响应。再次,正如@deceze所说,*一旦PHP完成输出响应,脚本将结束,直到收到新的HTTP请求,服务器上将不会发生任何事情。*
那么,如果我需要调用PHP,我该怎么办?这取决于您需要如何操作:通过重新加载页面或使用AJAX调用。
好的阅读材料:
您的代码被分为两个完全独立的部分,即服务器端和客户端。
这两个部分通过HTTP请求和响应进行通信。PHP在服务器上执行并输出一些HTML和可能的JavaScript代码,作为响应发送给客户端,在客户端解释HTML并执行JavaScript。一旦PHP完成输出响应,脚本就会结束,在服务器上不会发生任何事情,直到有新的HTTP请求进来。
示例代码的执行过程如下:
第一步,PHP执行
<?php ?>
标签之间的所有代码。结果如下:file_put_contents
调用没有产生任何结果,它只是将" + foo + "写入文件中。而<?php echo 42; ?>
调用的结果是输出"42",现在它在原来代码的位置。这个结果的HTML/JavaScript代码现在被发送到客户端,在那里被评估。
alert
调用起作用,而foo
变量在任何地方都没有被使用。所有的PHP代码都在客户端开始执行任何JavaScript之前在服务器上执行。响应中没有剩余的PHP代码可以与JavaScript交互。
要调用一些PHP代码,客户端必须向服务器发送一个新的HTTP请求。这可以通过以下三种可能的方法之一实现:
这里有一个更详细地概述这些方法的问题
您还可以使用JavaScript使浏览器打开一个新页面,使用
window.location
或提交一个表单,模拟1和2的可能性。