简单解析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 相关文章推荐
php GD绘制24小时柱状图
Jun 28 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
Function eregi is deprecated (解决方法)
Jun 21 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
反射调用private方法实践(php、java)
Dec 21 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
php生成网页桌面快捷方式
May 05 PHP
PHP多进程编程之僵尸进程问题的理解
Oct 15 PHP
详解php 使用Callable Closure强制指定回调类型
Oct 26 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 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
PHP实现简易blog的制作
2016/10/24 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
鼠标图片振动代码
2006/07/06 Javascript
javascript 数组学习资料收集
2010/04/11 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
可编辑下拉框的2种实现方式
2014/06/13 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
JavaScript多图片上传案例
2015/09/28 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
Three.js如何实现雾化效果示例代码
2017/09/27 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python实现五子棋小程序
2019/06/18 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
AC Lens:购买隐形眼镜
2017/02/26 全球购物
中专自我鉴定范文
2013/10/16 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
需求分析说明书
2014/05/09 职场文书
2014年廉洁自律承诺书
2014/05/26 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
2015大学迎新标语
2015/07/16 职场文书
担保书格式范文
2015/09/22 职场文书