A. php网页运行原理
转载以下,希望对你有帮助:
你有没有想过PHP是怎么在浏览器里输出“你好世界”的?我也是看了PHP内核和扩展后才知道的。也许有些朋友也想知道其中原理,那就让我们开始吧。
在上一篇网志里我简单介绍了“在我浏览这个页面之前都发生了些什么?”这个问题。如果你错过了就点这里看看吧。现在我要讨论的是“PHP是怎样在浏览器里输出内容”这个问题。
简介
先看看下面这个过程:
1. 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;
2. PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);
3. PHP总共有三个模块:内核、Zend引擎、以及扩展层;
4. PHP内核用来处理请求、文件流、错误处理等相关操作;
5. Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;
6. 扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;
7. 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;
8. 最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。
深入探讨
等等,没有这么简单。以上过程只是个简略版,让我们再深入挖掘一下,看看幕后还发生了些什么。
1. Apache启动后,PHP解释程序也随之启动;
2. PHP的启动过程有两步;
3. 第一步是初始化一些环境变量,这将在整个SAPI生命周期中发生作用;
4. 第二步是生成只针对当前请求的一些变量设置。
PHP启动第一步
不清楚什么第一第二步是什么?别担心,我们接下来详细讨论一下。让我们先看看第一步,也是最主要的一步。要记住的是,第一步的操作在任何请求到达之前就发生了。
1. 启动Apache后,PHP解释程序也随之启动;
2. PHP调用各个扩展的MINIT方法,从而使这些扩展切换到可用状态。看看php.ini文件里打开了哪些扩展吧;
3. MINIT的意思是“模块初始化”。各个模块都定义了一组函数、类库等用以处理其他请求。
一个典型的MINIT方法如下:
PHP_MINIT_FUNCTION(extension_name){
/* Initialize functions, classes etc */
}
PHP启动第二步
1. 当一个页面请求发生时,SAPI层将控制权交给PHP层。于是PHP设置了用于回复本次请求所需的环境变量。同时,它还建立一个变量表,用来存放执行过程中产生的变量名和值。
2. PHP调用各个模块的RINIT方法,即“请求初始化”。一个经典的例子是Session模块的RINIT,如果在php.ini中启用了Session 模块,那在调用该模块的RINIT时就会初始化$_SESSION变量,并将相关内容读入;
3. RINIT方法可以看作是一个准备过程,在程序执行之间就会自动启动。
一个典型的RINIT方法如下:
PHP_RINIT_FUNCTION(extension_name) {
/* Initialize session variables, pre-populate variables, redefine global variables etc */
}
PHP关闭第一步
如同PHP启动一样,PHP的关闭也分两步:
1. 一旦页面执行完毕(无论是执行到了文件末尾还是用exit或die函数中止),PHP就会启动清理程序。它会按顺序调用各个模块的RSHUTDOWN方法。
2. RSHUTDOWN用以清除程序运行时产生的符号表,也就是对每个变量调用unset函数。
一个典型的RSHUTDOWN方法如下:
PHP_RSHUTDOWN_FUNCTION(extension_name) {
/* Do memory management, unset all variables used in the last PHP call etc */
}
PHP关闭第二步
最后,所有的请求都已处理完毕,SAPI也准备关闭了,PHP开始执行第二步:
1. PHP调用每个扩展的MSHUTDOWN方法,这是各个模块最后一次释放内存的机会。
一个典型的RSHUTDOWN方法如下:
PHP_MSHUTDOWN_FUNCTION(extension_name) {
/* Free handlers and persistent memory etc */
}
这样,整个PHP生命周期就结束了。要注意的是,只有在服务器没有请求的情况下才会执行“启动第一步”和“关闭第二步”。
B. PHP中try.catch与return的执行顺序,该怎么解决
问题1
输出结果是1
问题2
输出结果是2
finally中的语句是一定要执行的,这点是肯定的。finally中的语句执行在try之后。通常try是要和catch(不捕获异常try就没意义了)。一般的用法是:
try{
1想要执行的代码
}catch(Exception
e){
2异常处理
}finally{
3最终执行的代码
}
1中代码没错执行的顺序就是1->3
1中代码有错执行的顺序是2->3
finally中的代码和return是没关系的,你可以把return写在任何地方。它只和try、catch有关。假如你把问题一种finally的代码写成:
finally{
return
++x;
}那么结果就是2了。
finally一定会执行,且在try或catch之后执行。
不知道这么说能明白吗~~~
不明白可以问,我再回答~~~
C. php代码执行顺序
php代码理论上是从上到下的执行顺序,但是也不是你这样理解!
他最终的输出内容,是根据你写的php代码的逻辑进行判断输出的!
比如:
$i=10;
if($i==20){
echo'您好!'
}else{
echo'太好了';
}
这段代码执行顺序确实是从上到下,但并不是说, echo '您好' 在echo '太好了' 的上面,那就一定会 输出 “您好”这两个字,
而是你看的逻辑
首先 $i 等于10,
所以 if ( $i == 20 )这个条件是不成立的
所以最终输出的结果是 ”太好了“3个字!
php所谓的代码从上到下的执行顺序,那是对于php服务器端而言, 最终你在终端看到的结果, 是以代码的逻辑思维为准!
D. php文本里 php和html代码谁先执行谁啊
先执行PHP代码,PHP和HTML混编的时候你肯定遇到过下面的情况:
<?php if(true){ ?>
<div>true</div>
<?php }else{ ?>
<div>false</div>
<?php } ?>
上面的代码结果是浏览器显示的是<div>true</div>
如果先执行html那么结果你就发现PHP的逻辑判断就不会生效了。
所以先执行的PHP,而PHP文件里的HTML代码,程序会默认为是一个字符串被PHP输出。以上代码的最终呈现效果如果全换成PHP的话将会是下面的代码:
<?php if(true){
echo '<div>true</div>';
}else{
echo '<div>false</div>';
}
?>
E. 简述PHP页面的执行过程
1. 我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;
2. PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);
3. PHP总共有三个模块:内核、Zend引擎、以及扩展层;
4. PHP内核用来处理请求、文件流、错误处理等相关操作;
5. Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;
6. 扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;
7. 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;
8. 最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。
F. php如何顺序执行,即等待一段代码完全执行完毕后再执行后面的代码
你所谓的消耗时间是指多长?
如果你确定**这段程序在php允许的默认的30秒内,这段程序是完全可以执行完成,并顺序执行的。
如果你的这段耗时程序超过了30秒,基本上不好实现了,如果超过这个限定,php会报错退出。
如果大于30秒,你可以试试这样做:
php.ini中的:
max_execution_time = 30
这个30是指秒,有效的最大时间是1000秒,再不能大了,再大的话也只限定在1000秒;
改了这个参数再试试。如果还大于1000秒?那你的程序也是不合实际了,基本无法实现。
G. php,html,css,js,mysql的运行顺序是什么
访问一个网页,服务器运行php解析程序,解析php,当用到mysql的时候链接mysql(当php解析完毕自动断开),当php解析完毕,开始返回html,浏览器开始解析html,监测到js和css都是独立文件时(很多时候css和js的代码都在html里了),就开始请求js和css文件,具体他们两个谁先请求,不太确定,推测是,在html中的顺序,浏览器在得到html的时候就开始显示网页,css完毕的时候,整体显示完整,js需要触动。
H. php的MVC框架中,语句执行顺序问题,新手,求解答
正常来说楼主想的逻辑的对的,window.location.href="";应该是你这个写错了;下面是我写的,完全是当alert弹框点击确认之后,才执行的跳转。
<script>
alert('111');
window.location.href='2.html';
</script>
I. 关于php代码和html代码执行问题
PHP是解释执行的,程序执行的结构包括:
顺序结构(自上而下)
选择结构(不是所有的代码都自上而下的全部执行,而是根据条件选择性的执行部分)
循环结构(反复的执行一段代码)
客户端向服务器发送请求(Request)后,PHP解释器按照上面所述的执行结构解释翻译PHP文件中的代码(包括HTML部分)。PHP程序执行后的结果就全部是HTML,服务器再将这些HTML反馈给客户端的浏览器(Response),浏览器对接受到的HTML(包括HTML,JS和CSS样式)进行翻译渲染,最后呈现在访问者的面前。
J. PHP代码和JS代码谁先执行
php先执行。整个运行是这样的:
客户端发送请求到服务器,服务器找到请求的文件(在服务器上),判断请求的文件类型。如果遇到php的代码类型 就把代码发送给php让php先翻译成html,再由服务器把html发送到浏览器上。浏览器开始解释html,遇到javascript再解释javascript。最后完成整个流程。。