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

2022-08-29 23:01:31

我有这个代码:

<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。当一对语言在客户端上运行而另一对在服务器上运行时(即使它们是同一种语言),问题和解决方案的本质是相同的。当您看到谈论特定语言的答案时,请考虑到这一点。


答案 1

您的代码被拆分为两个完全独立的部分,即服务器端客户端

                    |
               ---------->
              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>

调用没有产生任何结果,它只是将“ + foo +”写入文件。调用产生输出“42”,该输出现在位于该代码曾经的位置。file_put_contents<?php echo 42; ?>

现在,生成的 HTML/JavaScript 代码将发送到客户端,并在客户端进行评估。调用有效,而变量不在任何地方使用。alertfoo

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

要调用一些PHP代码,客户端必须向服务器发送新的HTTP请求。可以使用以下三种可能的方法之一发生这种情况:

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

这里有一个问题更详细地概述了这些方法

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


答案 2

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

服务器端语言(PHP等):它们从数据库中检索记录,通过无状态HTTP连接维护状态,并执行许多需要安全性的事情。它们驻留在服务器上,这些程序永远不会向用户公开其源代码。

Image from 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请求进入之前,服务器上不会发生任何事情。

Graphical representation

图片来源

那么现在,如果我需要调用 PHP,我该怎么办?这取决于您需要如何执行此操作:通过重新加载页面或使用AJAX调用。

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

好读:

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