我有这段代码:
<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。当一个语言在客户端上运行而另一个在服务器上运行时,问题和解决方案的基本性质与任何语言相同。当你看到有关特定语言的答案时,请考虑到这一点。
答案 0 :(得分:418)
您的代码分为两个完全独立的部分,服务器端和客户端。
|
---------->
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执行<?php ?>
标记之间的所有代码。结果如下:
<script type="text/javascript">
var foo = 'bar';
var baz = 42;
alert(baz);
</script>
file_put_contents
调用没有产生任何结果,它只是将“+ foo +”写入文件中。 <?php echo 42; ?>
调用导致输出“42”,该输出现在位于该代码的位置。
此生成的HTML / JavaScript代码现在发送到客户端,在那里进行评估。 alert
调用有效,而foo
变量不在任何地方使用。
在客户端开始执行任何JavaScript之前,所有PHP代码都在服务器上执行。 JavaScript可以与之交互的响应中没有任何PHP代码。
要调用某些PHP代码,客户端必须向服务器发送新的HTTP请求。这可以通过三种可能的方法之一来实现:
Here's a question outlining these method in greater detail
您还可以使用JavaScript使浏览器使用window.location
打开新页面或提交表单,模拟可能性1.和2.
答案 1 :(得分:151)
要确定 PHP 代码无法在 JavaScript 代码中运行的原因,我们需要了解客户端和服务器端< / strong>语言,以及它们的工作方式。
服务器端语言(PHP等):它们从数据库中检索记录,维护stateless HTTP connection上的状态,并执行许多需要安全性的事情。它们驻留在服务器上,这些程序永远不会将其源代码暴露给用户。
<子> image attr 子>
因此,您可以轻松地看到服务器端语言处理HTTP请求并处理它们,并且,正如@deceze所说, PHP在服务器上执行并输出一些HTML,也许是JavaScript代码,它们作为响应客户端,解释HTML并执行JavaScript。
另一方面,客户端语言(如JavaScript)驻留在浏览器中并在浏览器中运行。 客户端脚本通常是指Web上的计算机程序类,由用户的Web浏览器而不是服务器端在客户端执行。
JavaScript对用户可见,并且可以轻松修改,因此对于安全性问题,我们不能依赖JavaScript。
因此,当您在服务器上发出 HTTP 请求时,服务器首先仔细读取PHP文件以查看是否有任何需要执行的任务,并向客户端发送响应。再次,正如@deceze所说,*一旦PHP完成输出响应,脚本结束,服务器上什么都不会发生,直到有新的 HTTP 请求进入。*
现在,如果我需要调用PHP,我该怎么办?这取决于你需要如何做:通过重新加载页面或使用AJAX调用。
好读:
答案 2 :(得分:25)
您的Javascript将在客户端上执行,而不是在服务器上执行。这意味着foo
未在服务器端进行评估,因此无法将其值写入服务器上的文件。
考虑此过程的最佳方式就好像是动态生成文本文件一样。您生成的文本只有在浏览器解释后才会成为可执行代码。只在服务器上评估您在<?php
标记之间放置的内容。
顺便说一句,养成在HTML或Javascript中嵌入随机PHP逻辑片段的习惯会导致严重错综复杂的代码。我说的是痛苦的经历。
答案 3 :(得分:3)
在Web应用程序中,每个任务都以请求和响应的方式执行。
客户端编程使用带有Java脚本的html代码及其框架,库在Internet Explorer,Mozilla,chrome浏览器中执行。 在java场景中 服务器端编程servlet在Tomcat,web-logic,j boss,WebSphere severs
中执行答案 4 :(得分:0)
我将尝试以简单的方式进行解释。
客户端是用户在浏览器中看到/看到的代码。
客户端编程包括HTML(HTML,HTML5,DHTML),CSS(CSS,CSS3)和JavaScript(JavaScript,ES5,ES6,ES7,TypeScript,JQuery,ReactJs,AngularJs,BackboneJs或任何其他JavaScript前端框架)。
客户端编程侧重于“页面外观”及其在浏览器中的行为。
服务器端编程包括向客户端提供数据的代码。用户永远无法看到服务器端。
服务器端编程涉及编程语言(Java,PHP,.Net,C#,C,C ++,NodeJS等),数据库(SQL,Oracle,MySql,PostgreySql,No-Sql,MongoDB等),第三方API(休息,肥皂),业务逻辑。
服务器端编程侧重于“如何使数据可用于客户端”。
客户端通过服务器端提供的API从服务器端请求数据或请求存储数据。数据请求和响应是通过遵循HTTP / FTP协议(例如REST API,SOAP API)完成的。