简单解析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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
PHP判断是否有Get参数的方法
May 05 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
微信支付开发维权通知实例
Jul 12 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 PHP
你真的了解PHP中的引用符号(&)吗
May 12 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基础之运算符的使用方法
2013/04/28 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
jQuery插件HighCharts绘制简单2D折线图效果示例【附demo源码】
2017/03/21 jQuery
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
详解vue.js之props传递参数
2017/12/12 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
express框架下使用session的方法
2019/07/31 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
浅谈对yield的初步理解
2017/05/29 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python 随机森林算法及其优化详解
2019/07/11 Python
python+rsync精确同步指定格式文件
2019/08/29 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
合唱兴趣小组活动总结
2014/07/10 职场文书
关于感谢信的范文
2015/01/23 职场文书
辩护词格式
2015/05/22 职场文书
《藏戏》教学反思
2016/02/23 职场文书
如何做好员工培训计划?
2019/07/09 职场文书