简单解析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伪静态写法附代码
Jun 20 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
php 魔术方法详解
Nov 11 PHP
php判断当前用户已在别处登录的方法
Jan 06 PHP
基于PHP实现假装商品限时抢购繁忙的效果
Oct 16 PHP
PHP+redis实现添加处理投票的方法
Nov 14 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
PHP实现唤起微信支付功能
Feb 18 PHP
Laravel 连接(Join)示例
Oct 16 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
我的论坛源代码(八)
2006/10/09 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
原生js实现each方法实例代码详解
2019/05/27 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
Python竟能画这么漂亮的花,帅呆了(代码分享)
2017/11/15 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
应届生找工作求职信
2014/06/24 职场文书
学校交通安全责任书
2014/08/25 职场文书
2014年小学教师工作自我评价
2014/09/22 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
2016继续教育研修日志
2015/11/13 职场文书
python异步的ASGI与Fast Api实现
2021/07/16 Python
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers