客户端和服务器端编程有什么区别?

我有这个代码:

<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents('foo.txt', ' + foo + '); ?> var baz = <?php echo 42; ?>; alert(baz); </script> 

为什么这不写入“酒吧”到我的文本文件,但警报“42”?


注意:这个问题的早期版本是明确的关于服务器上的PHP和客户端上的JavaScript。 在客户端和服务器上运行的任何一种语言,问题和解决scheme的本质是相同的。 当你看到有关特定语言的答案时,请考虑这个问题。

你的代码被分成两个完全独立的部分, 服务器端客户端

  | ----------> 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; ?> <?php echo 42; ?>调用导致输出“42”,这是现在的代码过去的地方。

这个HTML / JavaScript代码现在被发送到客户端,在那里被评估。 alert调用起作用,而foovariables不在任何地方使用。

在客户端开始执行任何JavaScript之前,所有PHP代码都会在服务器上执行。 JavaScript可以与之交互的响应中没有剩下PHP代码。

要调用一些PHP代码,客户端将不得不向服务器发送一个新的HTTP请求。 这可以通过三种可能的方法之一来实现:

  1. 一个链接,导致浏览器加载一个新的页面。
  2. 表单提交,将数据提交给服务器并加载新页面。
  3. 一个AJAX请求,这是一种Javascript技术,用于向服务器发出常规HTTP请求(如1.和2.),但不会离开当前页面。

下面是一个更详细地概述这些方法的问题

您还可以使用JavaScript使浏览器使用window.location打开一个新页面或提交一个表单,模拟可能性1.和2.。

要确定为什么PHP代码不能在JavaScript代码中工作,我们需要了解什么是客户端服务器端语言,以及它们是如何工作的。

服务器端语言(PHP等) :它们从数据库中检索logging,维护无状态HTTP连接的状态 ,并做许多需要安全的事情。 他们驻留在服务器上,这些程序永远不会将其源代码暴露给用户

图片来自wikipedia_http://en.wikipedia.org/wiki/File:Scheme_dynamic_page_en.svg 图像attr

所以你可以很容易地看到服务器端语言处理HTTP请求并处理它,并且@deceze表示PHP在服务器上执行并输出一些HTML和可能的JavaScript代码,这些代码被作为响应发送到解释HTML的客户机和JavaScript被执行。

另一方面, 客户端语言(如JavaScript)驻留在浏览器上并在浏览器上运行,而客户端脚本通常是指Web上由用户的Web浏览器执行的客户端上的计算机程序类的服务器端

JavaScript对用户是可见的,可以很容易地修改,所以对于安全的东西,我们不能依赖于JavaScript。

所以当你在服务器上发出一个HTTP请求时,服务器首先仔细读取PHP文件,看是否有任何需要执行的任务,并将响应发送到客户端,并再次如@deceze所示*一旦PHP完成输出响应,脚本结束,服务器上不会有任何事情发生,直到一个新的HTTP请求进来。*

图形表示

图像源

那么现在如果我需要调用PHP,我该怎么办? 这取决于你需要做什么:通过重新加载页面或使用AJAX调用。

  1. 您可以通过重新加载页面并发送HTTP请求来完成
  2. 您可以使用JavaScript进行AJAX调用,这不需要重新加载页面

好阅读:

  1. 维基百科:服务器端脚本
  2. 维基百科:客户端脚本
  3. Madara Uchiha:客户端和服务器端编程的区别

您的Javascript将在客户端执行,而不是在服务器上执行。 这意味着foo不在服务器端进行评估,因此它的值不能写入服务器上的文件。

想想这个过程的最好方法就好像是在dynamic生成一个文本文件。 您所生成的文本只有在浏览器解释后才会成为可执行代码。 只有您在<?php标签之间放置的内容在服务器上进行评估。

顺便说一下,习惯于在HTML或Javascript中embedded随机的PHP逻辑片断会导致严重的代码错误。 我从痛苦的经历中发言。

在Web应用程序中,每个任务都以请求和响应的方式执行。

客户端编程与HTML代码和Java脚本及其框架,库在Internet Explorer,Mozilla,Chrome浏览器中执行。 在java场景中,服务器端编程servlet在Tomcat,web-logic,j boss,WebSphere服务器中执行