簡(jiǎn)單解析PHP程序的運(yùn)行流程
一直想了解Web編程的技術(shù)。PHP是進(jìn)行Web編程重要的一種語言,書上總是說,PHP是用于服務(wù)器端的編程語言。但是,實(shí)在不能理解它是怎么用于服務(wù)器端編程,如何被運(yùn)行。也看過一些PHP的教程,大多是介紹語法,卻沒有給出前面的問題解答。最近東拼西湊的看了一些東西,終于對(duì)PHP如何運(yùn)行有了一些了解。
HTTP協(xié)議與PHP腳本的觸發(fā)
HTTP是一種基于Request/Response的協(xié)議,是支持Web運(yùn)行的協(xié)議基礎(chǔ)。HTTP的客戶端發(fā)送Request
到服務(wù)器端,服務(wù)器端返回Response。Request中包含客戶端需要訪問的頁面的文件名。服務(wù)器端返回該文件名指向的網(wǎng)頁。如果沒有使用PHP、JavaScript等,HTTP協(xié)議傳輸只能是靜態(tài)的HTML文件。也就是,HTML文件不會(huì)受到用戶行為的影響,內(nèi)容一直保持不變。
如果要實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁,就需要使用PHP或JavaScript。PHP是用于服務(wù)器端的編程語言,JavaScript是多用于客戶端的編程語言。
PHP代碼是在服務(wù)器端被執(zhí)行的。用戶訪問一個(gè)包含PHP代碼的網(wǎng)頁時(shí),發(fā)送Request到服務(wù)器,其中包含網(wǎng)頁的文件名。服務(wù)器收到Request后,找到文件名指向的文件,發(fā)現(xiàn)其中嵌有PHP代碼,會(huì)調(diào)用PHP解釋器處理該文件,然后將處理后的結(jié)果整理到Response,發(fā)送到客戶端。PHP代碼可以與服務(wù)器端的數(shù)據(jù)庫或其他資源進(jìn)行交互,或者根據(jù)用戶的操作產(chǎn)生不同的頁面。
因此,PHP腳本的觸發(fā)是在服務(wù)器收到客戶端的Request。收到一個(gè)Request后,服務(wù)器觸發(fā)一個(gè)PHP腳本;處理完腳本后,返回結(jié)果到客戶端,等待下一個(gè)Request。當(dāng)收到下一個(gè)Request后,服務(wù)器觸發(fā)另一個(gè)(或同一個(gè))PHP腳本。兩次PHP腳本的運(yùn)行是相互獨(dú)立的,第二次腳本的運(yùn)行幾乎不受前一次腳本運(yùn)行的影響。
JavaScript代碼一般是在客戶端被執(zhí)行的,即被瀏覽器所處理??蛻舳藦姆?wù)器端獲取的是JavaScript代碼,而不是代碼被執(zhí)行后的結(jié)果,然后調(diào)用解釋器執(zhí)行該代碼。
PHP的代碼塊
PHP代碼是可以嵌入到HTML文件中的,經(jīng)??梢栽贖TML文件中看到散落在各處的PHP代碼塊。我也一直困惑在同一個(gè)HMTL文件中,不同的PHP代碼塊之間是怎樣的關(guān)系。原來PHP是會(huì)忽略兩個(gè)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>
代碼中有兩個(gè)PHP代碼塊,它們被HTML代碼隔開了。第1個(gè)PHP代碼塊聲明了1個(gè)變量$var;第2個(gè)代碼塊引用$var,進(jìn)行改變了它的值。用PHP執(zhí)行上述代碼,得到的輸出如下。
<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個(gè)代碼塊是可以引用$var的。雖然被HTML代碼隔開了,但是兩段代碼的執(zhí)行完全忽略了HTML部分。PHP的輸出與下面沒有被HTML隔開的PHP代碼是一樣的,前者只是在PHP輸出結(jié)果之間插入了相應(yīng)的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運(yùn)行出現(xiàn)Call to undefined function curl_init()的解決方法
- Windows下Apache+MySQL+PHP運(yùn)行環(huán)境的安裝圖文方法
- PHP運(yùn)行出現(xiàn)Notice : Use of undefined constant 的完美解決方案分享
- 在命令行下運(yùn)行PHP腳本[帶參數(shù)]的方法
- CentOS 5.5使用yum來安裝LAMP(php運(yùn)行環(huán)境)
- Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL運(yùn)行環(huán)境搭建教程
- IIS 7.x FastCGI 運(yùn)行 PHP的配置方法
- Window下PHP三種運(yùn)行方式圖文詳解
- win2008 php運(yùn)行環(huán)境搭建圖文教程
- Windows server 2008搭建php運(yùn)行環(huán)境圖文詳解(php5.3)
- cmd下運(yùn)行php腳本
相關(guān)文章
php入門學(xué)習(xí)知識(shí)點(diǎn)五 關(guān)于php數(shù)組的幾個(gè)基本操作
php入門學(xué)習(xí)知識(shí)點(diǎn)五 關(guān)于php數(shù)組的幾個(gè)基本操作,數(shù)組是php中最常用的,所以大家一定要熟練的掌握。2011-07-07用session做客戶驗(yàn)證時(shí)的注意事項(xiàng)
用session做客戶驗(yàn)證時(shí)的注意事項(xiàng)...2006-10-10