简单解析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字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
域名和cookie问题(域名后缀)
Oct 10 PHP
php获取数组中重复数据的两种方法
Jun 28 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP文件缓存smarty模板应用实例分析
Feb 26 PHP
微信第三方登录(原生)demo【必看篇】
May 26 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
laravel与thinkphp之间的区别与优缺点
Mar 02 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
国王的咖啡这么大来头,名字的由来是什么
2021/03/03 咖啡文化
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
Linux下PHP加速器APC的安装与配置笔记
2014/10/24 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
JavaScript搜索字符串并将搜索结果返回到字符串的方法
2015/04/06 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
Validform表单验证总结篇
2016/10/31 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
Vue组件开发技巧总结
2018/03/04 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
记一次用vue做的活动页的方法步骤
2019/04/11 Javascript
vue + typescript + 极验登录验证的实现方法
2019/06/27 Javascript
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
Python如何测试stdout输出
2020/08/10 Python
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
25道Java面试题集合
2013/05/21 面试题
幼儿园保育员辞职信
2014/01/12 职场文书
小学体育教学反思
2014/01/31 职场文书
化学教育专业求职信
2014/07/08 职场文书
论文答辩开场白大全
2015/05/27 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle