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

2024-11-02 21:00:00
admin
原创
171
摘要:问题描述:我有这个代码:<script type="text/javascript"> var foo = 'bar'; <?php file_put_contents(&...

问题描述:

我有这个代码:

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

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

生成的 HTML/JavaScript 代码现在被发送到客户端,在那里进行评估。alert调用成功,但foo变量没有在任何地方使用。

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

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

  1. 一个链接,导致浏览器加载一个新页面。

  2. 表单提交,将数据提交到服务器并加载新页面。

  3. AJAX请求,这是一种 Javascript 技术,用于向服务器发出常规 HTTP 请求(如 1. 和 2. 所示),但无需离开当前页面。

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

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

解决方案 2:

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

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

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

因此,您可以轻松地看到服务器端语言处理 HTTP 请求并处理它们,并且正如 @deceze 所说,PHP 在服务器上执行并输出一些 HTML 和可能的 JavaScript 代码,这些代码作为响应发送到客户端,在客户端中解释 HTML 并执行 JavaScript。

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

JavaScript 对用户是可见的,并且可以轻松修改,因此对于安全问题,我们不能依赖 JavaScript。

因此,当您在服务器上发出HTTP请求时,服务器首先会仔细读取 PHP 文件以查看是否有任何需要执行的任务,然后向客户端发送响应。同样,正如 @deceze 所说,一旦 PHP 完成响应输出,脚本就会结束,服务器上不会发生任何事情,直到有新的HTTP请求进入。

图形表示

图片来源

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

  1. 您可以通过重新加载页面并发送HTTP请求来实现

  2. 您可以使用 JavaScript 进行 AJAX 调用 - 这不需要重新加载页面

推荐阅读:

  1. 维基百科:服务器端脚本

  2. 维基百科:客户端脚本

  3. 宇智波斑:客户端和服务器端编程之间的区别

解决方案 3:

您的 Javascript 将在客户端而非服务器上执行。这意味着foo不会在服务器端进行评估,因此其值无法写入服务器上的文件中。

思考此过程的最佳方式是,假设您正在动态生成文本文件。您生成的文本只有在浏览器解释后才会成为可执行代码。只有您放置在<?php标签之间的内容才会在服务器上进行评估。

顺便说一句,习惯性地在 HTML 或 Javascript 中嵌入随机的 PHP 逻辑片段可能会导致代码非常复杂。这是我的痛苦经历。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用