我有这个代码:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
为什么这不会将“bar”写入我的文本文件,而是警告“42”?
注意:这个问题的早期修订明确涉及服务器上的 PHP 和客户端上的 JavaScript。当一种语言在客户端上运行而另一种语言在服务器上运行时(即使它们是相同的语言),问题和解决方案的本质对于任何语言都是相同的。当您看到谈论特定语言的答案时,请考虑这一点。
P粉7576405042023-10-20 09:47:31
要确定为什么 PHP 代码在 JavaScript 代码中不起作用,我们需要了解什么是客户端和服务器端< /strong> 语言是什么,以及它们如何工作。
服务器端语言(PHP 等):它们从数据库检索记录,通过无状态 HTTP 连接,并执行许多需要安全性的操作。它们驻留在服务器上,这些程序永远不会将其源代码暴露给用户。
因此,您可以轻松地看到服务器端语言处理 HTTP 请求并处理它们,并且,正如 @deceze 所说,PHP 在服务器上执行并输出一些 HTML,也许还有 JavaScript 代码,这些代码作为对客户端的响应,其中解释 HTML 并执行 JavaScript。
另一方面,客户端语言(如 JavaScript)驻留在浏览器中并在浏览器中运行。 客户端脚本通常是指网络上由用户的网络浏览器在客户端执行的一类计算机程序,而不是服务器端。 p>
JavaScript 对用户可见,并且可以轻松修改,因此对于安全性,我们不能依赖 JavaScript。
所以当你向服务器发出HTTP请求时,服务器首先仔细读取PHP文件,看看是否有需要执行的任务,然后向客户端发送响应。再次,正如 @deceze 所说,*一旦 PHP 完成输出响应,脚本就会结束,服务器上不会发生任何事情,直到新的 HTTP 请求到来。*
那么现在如果我需要调用PHP该怎么办呢?这取决于您需要如何执行此操作:通过重新加载页面或使用 AJAX 调用。
好读:
P粉2183619722023-10-20 09:32:54
您的代码分为两个完全独立的部分,服务器端和客户端。
|
---------->
HTTP request
|
+--------------+ | +--------------+
| | | | |
| browser | | | web server |
| (JavaScript) | | | (PHP etc.) |
| | | | |
+--------------+ | +--------------+
|
client side | server side
|
<----------
HTML, CSS, JavaScript
|
双方通过 HTTP 请求和响应进行通信。 PHP 在服务器上执行,并输出一些 HTML 和可能的 JavaScript 代码,这些代码作为响应发送到客户端,在客户端解释 HTML 并执行 JavaScript。一旦 PHP 完成输出响应,脚本就会结束,服务器上不会发生任何事情,直到新的 HTTP 请求到来。
示例代码的执行方式如下:
<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script>
第1步,PHP执行标签之间的所有代码。结果是这样的:
<script type="text/javascript"> var foo = 'bar'; var baz = 42; alert(baz); </script>
file_put_contents
调用没有产生任何结果,它只是将“ + foo + ”写入文件。 调用导致输出“42”,现在位于该代码原来所在的位置。
生成的 HTML/JavaScript 代码现在被发送到客户端,并在那里进行评估。 alert
调用有效,而 foo
变量未在任何地方使用。
所有 PHP 代码都在客户端开始执行任何 JavaScript 之前在服务器上执行。响应中没有留下 JavaScript 可以与之交互的 PHP 代码。
要调用某些 PHP 代码,客户端必须向服务器发送新的 HTTP 请求。这可以使用三种可能的方法之一来实现:
您还可以使用 JavaScript 让浏览器使用 window.location
打开新页面或提交表单,模拟可能性 1. 和 2。