简单解析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 相关文章推荐
ajax 的post方法实例(带循环)
Jul 04 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
PHP中echo和print的区别
Aug 28 PHP
php操作MongoDB类实例
Jun 17 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
PHP封装的MSSql操作类完整实例
May 26 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
实例讲解PHP中使用命名空间
Jan 27 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
imagettftext() 失效,不起作用
Mar 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
PHP新手上路(三)
2006/10/09 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
javascript document.images实例
2008/05/27 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
JS实现div居中示例
2014/04/17 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
fullCalendar中文API官方文档
2017/02/07 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
jquery实现数字输入框
2017/02/22 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
深入研究React中setState源码
2017/11/17 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Django中使用Celery的教程详解
2018/08/24 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
在python中获取div的文本内容并和想定结果进行对比详解
2019/01/02 Python
PyQt5实现简易电子词典
2019/06/25 Python
Python小白垃圾回收机制入门
2020/06/09 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
学前教育毕业生自荐信
2013/10/29 职场文书
工作的心得体会
2013/12/31 职场文书
论文指导教师评语
2014/04/28 职场文书
个性发展自我评价2015
2015/03/09 职场文书
获奖感言范文
2015/07/31 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
利用python做数据拟合详情
2021/11/17 Python