简单解析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数组应用之比较两个时间的相减排序
Aug 18 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
PHP易混淆函数的区别及用法汇总
Nov 22 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
Feb 07 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
Symfony的安装和配置方法
Mar 17 PHP
java微信开发之上传下载多媒体文件
Jun 24 PHP
php集成动态口令认证
Jul 21 PHP
php常用正则函数实例小结
Dec 29 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可扩展的验证类实例(可对邮件、手机号、URL等验证)
2015/07/09 PHP
php apache开启跨域模式过程详解
2019/07/08 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks &amp; solutions)
2010/03/01 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
js word表格动态添加代码
2010/06/07 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
JS实现的仿东京商城菜单、仿Win右键菜单及仿淘宝TAB特效合集
2015/09/28 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
2018/08/16 Javascript
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解python中executemany和序列的使用方法
2017/08/12 Python
python实现中文文本分句的例子
2019/07/15 Python
Django的性能优化实现解析
2019/07/30 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
Python的logging模块基本用法
2020/12/24 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
市场部专员岗位职责
2013/11/30 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
求职信模板怎么做
2014/01/26 职场文书
股票投资建议书
2014/05/19 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
Pytest之测试命名规则的使用
2021/04/16 Python
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
分享Python获取本机IP地址的几种方法
2022/03/17 Python