简单解析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获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
php strrpos()与strripos()函数
Aug 31 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
微信公众平台开发之配置与请求
Aug 26 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
示例详解Laravel的注册重构
Aug 14 PHP
thinkPHP批量删除的实现方法分析
Nov 09 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
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
Jquery使用val方法读写value值
2015/05/18 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
Vue项目利用axios请求接口下载excel
2020/11/17 Vue.js
Python本地与全局命名空间用法实例
2015/06/16 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python样条插值的实现代码
2018/12/17 Python
Python3简单实现串口通信的方法
2019/06/12 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
Python连接字符串过程详解
2020/01/06 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
生产主管岗位职责
2013/11/10 职场文书
生日庆典策划方案
2014/06/02 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
工作时间证明
2015/06/15 职场文书
MySQL root密码的重置方法
2021/04/21 MySQL