简单解析PHP程序的运行流程


Posted in PHP onJune 23, 2016

一直想了解Web编程的技术。PHP是进行Web编程重要的一种语言,书上总是说,PHP是用于服务器端的编程语言。但是,实在不能理解它是怎么用于服务器端编程,如何被运行。也看过一些PHP的教程,大多是介绍语法,却没有给出前面的问题解答。最近东拼西凑的看了一些东西,终于对PHP如何运行有了一些了解。

HTTP协议与PHP脚本的触发
HTTP是一种基于Request/Response的协议,是支持Web运行的协议基础。HTTP的客户端发送Request
到服务器端,服务器端返回Response。Request中包含客户端需要访问的页面的文件名。服务器端返回该文件名指向的网页。如果没有使用PHP、JavaScript等,HTTP协议传输只能是静态的HTML文件。也就是,HTML文件不会受到用户行为的影响,内容一直保持不变。

简单解析PHP程序的运行流程

如果要实现动态网页,就需要使用PHP或JavaScript。PHP是用于服务器端的编程语言,JavaScript是多用于客户端的编程语言。

PHP代码是在服务器端被执行的。用户访问一个包含PHP代码的网页时,发送Request到服务器,其中包含网页的文件名。服务器收到Request后,找到文件名指向的文件,发现其中嵌有PHP代码,会调用PHP解释器处理该文件,然后将处理后的结果整理到Response,发送到客户端。PHP代码可以与服务器端的数据库或其他资源进行交互,或者根据用户的操作产生不同的页面。

因此,PHP脚本的触发是在服务器收到客户端的Request。收到一个Request后,服务器触发一个PHP脚本;处理完脚本后,返回结果到客户端,等待下一个Request。当收到下一个Request后,服务器触发另一个(或同一个)PHP脚本。两次PHP脚本的运行是相互独立的,第二次脚本的运行几乎不受前一次脚本运行的影响。

JavaScript代码一般是在客户端被执行的,即被浏览器所处理。客户端从服务器端获取的是JavaScript代码,而不是代码被执行后的结果,然后调用解释器执行该代码。

PHP的代码块
PHP代码是可以嵌入到HTML文件中的,经常可以在HTML文件中看到散落在各处的PHP代码块。我也一直困惑在同一个HMTL文件中,不同的PHP代码块之间是怎样的关系。原来PHP是会忽略两个PHP代码块之间HTML代码的。

<head>
  <title>Test PHP Multiple Blocks</title>
</head>
<body>
  <p>This is HTML code.</p>

  <?php
    $var = 1;
    echo "<p>This is PHP code block 1. <br/> \$var=$var </p>";
  ?>

  <p>This is HTML code too.</p>

  <?php
    $var += 1;
    echo "<p>This is PHP code block 2. <br/> \$var=$var</p>" 
  ?>

</body>

代码中有两个PHP代码块,它们被HTML代码隔开了。第1个PHP代码块声明了1个变量$var;第2个代码块引用$var,进行改变了它的值。用PHP执行上述代码,得到的输出如下。

<head>
  <title>Test PHP Multiple Blocks</title>
</head>
<body>
  <p>This is HTML code.</p>

  <p>This is PHP code block 1. <br/> $var=1 </p>
  <p>This is HTML code too.</p>

  <p>This is PHP code block 2. <br/> $var=2</p>
</body>

第2个代码块是可以引用$var的。虽然被HTML代码隔开了,但是两段代码的执行完全忽略了HTML部分。PHP的输出与下面没有被HTML隔开的PHP代码是一样的,前者只是在PHP输出结果之间插入了相应的HTML代码。

<?php
    $var = 1;
    echo "<p>This is PHP code block 1. <br/> \$var=$var </p>";

    $var += 1;
    echo "<p>This is PHP code block 2. <br/> \$var=$var</p>" 
  ?>
PHP 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
php include,include_once,require,require_once
Sep 05 PHP
php+mysql 实现身份验证代码
Mar 24 PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
Oct 30 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
初识php MVC
Sep 10 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
php使用redis的几种常见操作方式和用法示例
Feb 20 PHP
PHP微信开发之查询微信精选文章
Jun 23 #PHP
PHP微信开发之查询城市天气
Jun 23 #PHP
PHP微信开发之有道翻译
Jun 23 #PHP
PHP微信开发之文本自动回复
Jun 23 #PHP
php微信高级接口群发 多客服
Jun 23 #PHP
php英文单词统计器
Jun 23 #PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 #PHP
You might like
使用数据库保存session的方法
2006/10/09 PHP
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
2010/03/01 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python并行分布式框架Celery详解
2018/10/15 Python
Python函数返回不定数量的值方法
2019/01/22 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
Python新手学习raise用法
2020/06/03 Python
应届生英语教师求职信
2013/11/05 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
领导班子对照检查剖析材料
2014/10/13 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
聊聊SpringBoot自动装配的魔力
2021/11/17 Java/Android