導航:首頁 > 編程語言 > php運行過程

php運行過程

發布時間:2022-06-11 06:59:54

1. 簡單說明php程序運行過程性,php預處理web伺服器和資料庫伺服器的功

我們大家都知道PHP的強大之處,最近看到了關於PHP
WEB伺服器的相關知識,下面我們就這個問題和大家一起討論一下。WAP(無線通訊協議)是在數字行動電話、個人手持設備(PDA等)及計算機之間進行通訊的開放性全球標准。由於靜態的WAP頁面在很多方面不能滿足用戶個性化的服務請求,因此通過WAP伺服器端語言產生動態的WML頁面,具有很廣泛的應用價值和很高的商業價值。

WAP
應用結構非常類似於Internet,一個典型的WAP應用請求是這樣的:首先,具有WAP用戶代理功能的移動終端(WAP手機等)通過內部運行的微瀏覽器(Micro
Browser)對某一網站以無線方式發送WAP服務請求。該請求先由WAP網關截獲,對信息內容進行編碼壓縮,以減少網路數據流量,同時根據需要將WAP協議轉換成HTTP協議,然後將處理後的請求轉送到相應WAP伺服器。在WAP伺服器端,根據頁面擴展名等性質,被請求的頁面直接或由伺服器端腳本解釋後輸出,再經網關傳回用戶。

從上述WAP應用流程可以看到,生成動態WAP頁面與動態產生Web網頁的過程非常類似。但是由於WAP應用使用的WML語言來源於語法嚴格的XML,因此要求輸出的格式必須按WAP網頁的規范輸出。同時,由於WAP協議的應用范圍、移動客戶端的軟硬體水平等特殊性,對每次輸出的頁面的大小、圖像的格式及容量都有一定限制。下面我們以PHP腳本語言為例,看看如何動態輸出WAP頁面。

一、設置PHP WEB伺服器

首先你的 Web伺服器要安裝好PHP,即能處理PHP腳本程序。其次,為使PHP WEB伺服器能同時識別和處理PHP、WML、WBMP等文件,Web
伺服器的MIME表需添加以下的幾種文件類型。

  1. text/vnd.wap.wml .wml
  2. image/vnd.wap.wbmp .wbmp
  3. application/vnd.wap.wmlc .wmlc
  4. text/vnd.wap.wmls.wmls
  5. application/vnd.wap.wmlsc .wmlsc

二、用PHP輸出簡單動態WAP頁面

下面有一個最簡單的PHP生成WAP頁面的例子。注意由於需要PHP解釋器來解釋該程序,並輸出WAP頁面,因此所有類似程序應以.php為擴展名。

  1. <?php
  2. header(″Content-type: text/vnd.wap.wml″);
  3. echo (″<wml> <card> <p>″);
  4. echo date( ″l dS of F Y h:i:s A″ );
  5. echo (″</p></card></wml>″);
  6. ?>

該例子在WAP手機模擬器中可以瀏覽,輸出當前日期時間,而在普通的瀏覽器中無法識別,甚至會被認為是錯誤下載。這是因為在程序開頭就聲明了該輸出文檔為WML類型,該類型只有WAP設備能夠識別並解釋。值得注意的是,我們常見的HTML語言對規范性要求不嚴,大多數瀏覽器能「容忍」其中相當多的編寫錯誤,而WML規范相當嚴格,一點失誤都可能導致無法輸出所需頁面。

一旦我們知道了用PHP腳本輸出WAP頁面的標准過程,我們就能夠使用PHP強大的功能配合以WML語言的交互處理以及WML s
cript的簡單腳本,開發出適合我們需要的應用系統了。

三、用PHP動態生成圖像

WAP應用使用一種特殊黑白的圖像格式WBMP。我們可以用一些工具來將已有圖像轉換成WBMP格式,然後在WML文檔中使用。但是在WAP站點上如果能動態地生成所需圖像如K線圖等,將會有廣闊的應用前景。幸運的是,PHP的GD庫(版本1.8以上)已經提供了相應函數。

  1. <?PHP
  2. Header(″Content-type: image/vnd.wap.wbmp″);
  3. Sim = ImageCreate(50, 50);
  4. Swhite = ImageColorAllocate(Sim,255,255,255);
  5. Sblack = ImageColorAllocate(Sim,0,0,0);
  6. ImageRectangle(Sim, 5, 5, 20, 20, Sblack);
  7. ImageWBMP(Sim); ImageDestroy(Sim);
  8. ?>

該文件將在WAP模擬器中顯示一個黑色矩形框。注意要使用GD的圖像函數庫,必須在PHP WEB伺服器配置中載入PHP_GD.DLL庫文件。

四、在PHP中處理漢字

WAP作為一種全球應用,選擇了UNICODE
2.0作為其標准字元集編碼,以便能同時處理包括英文、中文、日文、法文等多種文字。而我們平常處理漢字使用的是GB2312編碼,不同的內碼標准勢必不能通用,因此如果不在兩種編碼之間通過碼表進行轉換,就會出現漢字亂碼現象。現在已經有較成熟的GB-2312與UNICODE編碼轉換的程序和函數,並在ASP、PHP、JSP等系統中使用,我們可以在一些技術站點上找到它們。

目前的大多數WAP手機(Nokia7110、愛立信
R320S等等)都是使用UTF-8編碼的,也就是採用UNICODE來編碼。這樣,如果我們直接在WML使用中文字元(GB2312編碼),將會產生亂碼,手機用戶無法識別,所以我們在輸出中文之前,要使用程序或函數對中文進行UNICODE的編碼。而在少數支持GB2312編碼的手機或WAP終端設備中,我們可以在程序中定義好文檔的內碼類型後即可直接正確顯示漢字,例如:

  1. <?php
  2. header(″Content-type: text/vnd.wap.wml; charset=gb2312″);
  3. echo (″<wml><card><p>″);
  4. echo (″中文測試″);
  5. echo (″</p></card></wml>″);
  6. ?>

2. 簡述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層,最終輸出到瀏覽器上。

3. PHP是如何執行代碼解析過程的

就PHP語言來說,它也是一組符合一定規則的約定的指令。 在編程人員將自己的想法以php語言實現後,通過PHP的虛擬機(確切的來說應該是PHP的語言引擎Zend)將這些PHP指令轉變成C語言 (可以理解為更底層的一種指令集)指令,而c語言又會轉變成匯編語言, 最後匯編語言將根據處理器的規則轉變成機器碼執行。這是一個更高層次抽象的不斷具體化,不斷細化的過程。

4. php工作原理

PHP的工作原理

:PHP的所有應用程序都是通過WEB伺服器(如IIS或Apache)和PHP引擎程序解釋執行完成的。

工作過程包括四個方面:

(1)當用戶在瀏覽器地址中輸入要訪問的PHP頁面文件名,然後回車就會觸發這個PHP請求,並將請求傳送化支持PHP的WEB伺服器。

(2)WEB伺服器接受這個請求,並根據其後綴進行判斷如果是一個PHP請求,WEB伺服器從硬碟或內存中取出用戶要訪問的PHP應用程序,並將其發送給PHP引擎程。

(3)PHP引擎程序將會對WEB伺服器傳送過來的文件從頭到尾進行掃描並根據命令從後台讀取,處理數據,並動態地生成相應的HTML頁面。

(4)PHP引擎將生成HTML頁面返回給WEB伺服器。WEB伺服器再將HTML頁面返回給客戶端瀏覽器。

PHP即「超文本預處理器」,是一種通用開源腳本語言。PHP是在伺服器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利於學習,使用廣泛,主要適用於Web開發領域。

PHP語言作為一種語言程序,其專用性逐漸在應用過程中顯現,其技術水平的優劣與否將直接影響網站的運行效率。其特點是具有公開的源代碼, 在程序設計上與通用型語言,如C語言相似性較高,因此在操作過程中簡單易懂,可操作性強。

5. 怎樣在本地運行PHP

1、首先需要在電腦上安裝PHPstudy軟體和notepad這兩個代碼編輯軟體(如果找到可以代替的就用你那代替的),如圖所示紅色箭頭所示:

6. php程序運行過程

PHP就是個腳本語言,或者叫宏語言,必須得到解釋器來解讀。。。。php腳本後綴需要是php,當客戶發送HTTP請求獲得一個php文件時,伺服器不會像其他文件一樣,將文件傳過去,而是去解讀這個文件,他只解讀php標簽內中的內容,這需要一個解釋器去解釋這個腳本,解釋器需要用真正的編程語言去做,比如C語言,伺服器解讀之後就會去執行php要求的行為,它不會進行編譯,所以不存在生成機器碼的環節,這是宏語言和真正的編程語言最大的區別,腳本只是另一個程序的操作對象,而不是程序代碼本身。。。。
伺服器解讀了<?php ?>之後就會執行相應的動作,php里在<?php ?>之外的內容會原封不動,<?php ?>中的echo內容會輸出到要發送的文本中(這些文本是要給客戶的的,echo中內容一定要符合html語法),所有事情都做完了,就會把這些東西發送給客戶,這是已經html文本了,瀏覽器能夠讀懂html,如果有rsc屬性的標簽,瀏覽器還需要再去伺服器下載提到的資源,如果這個資源不是php那麼按正常文件下載,沒有PHP參與,如果還是php,這還要執行php代碼,所有東西都准備好了,就能合成一個網頁,如果缺少某資源,比如一張圖片,如果沒有預設的圖片代替,就會是個x 。。。。,這就是一個完整的php網頁請求。。。
當然客戶提交可能是post方法或get方法,會把url提交(這個是所有請求必須的),以及post中的變數附帶在請求頭後面提交,如果有cookie,客戶還要把所有未過期的cookie提交了,這些都會存在在http請求中,發送給php文件時,需要生成超級全局變數,供php用,變數名就是那些$_GET之類的。。

7. 如何運行PHP

如何安裝運行php

1. Unix/Windows: 我的php.ini 文件應該放在哪?
UNIX下默認它應該放在 /usr/local/lib 目錄下。 這是它的 /lib. 很多人會在編譯時改變它,使用--with-config-file-path 標志。 例如, 你可以這樣設它: --with-config-file-path=/etc

然後你可以復制源程序包里的 php.ini-dist 到 /etc/php.ini ,編輯它滿足你的本地化需求。
Windows下 php.ini默認的路徑是 Windows 系統目錄. 如果你在使用 Apache webserver, php.ini 則最先在 Apaches 安裝目錄下被查找, 例如: c:\program files\apache group\apache. 這樣你可以有不同的 php.ini 對應不同版本的 Apache(同一台機器上)。
更多細節請查閱 configuration file.
2. Unix: 我安裝了 PHP, 但我每次載入一個文檔, 會得到下面的消息: Document Contains No Data ! 怎麼回事?
這可能是因為你的 PHP 發生了core-mping錯誤。 查找你的伺服器錯誤日誌文件,看看是否屬於這種情況。 然後報告這個錯誤。如果你知道怎樣使用 gdb ,你可以提供一個 backtrace 在你的錯誤報告里。這將會對開發人員解決 這個問題有很大幫助。如果你是在將PHP作為Apache模塊使用,那麼請按下面的步驟做:

停止 httpd 進程

gdb httpd

停止 httpd 進程

> run -X -f /path/to/httpd.conf

瀏覽你剛才出錯的 URL

> run -X -f /path/to/httpd.conf

如果你還有 core mp, gdb 現在會通知你

打入: bt

在你的 bug report里應該包含backtrace 。 這些會被發往 http://bugs.php.net/

如果你的腳本使用了正則表達式函數 (ereg() and friends), 你應該確保你編譯 PHP 和 Apache 用的是同一個正則表達式包。 在 PHP 和 Apache 1.3.x 這個過程是自動進行的。
3. Unix: 我使用 RPMS 安裝 PHP , 但Apache 不支持 PHP頁面! 怎麼辦?
假設你安裝了 Apache 和 PHP(從 RPM ) , 你需要反注釋或者增加一些行在你的 http.conf 文件里: # Extra MolesAddMole mod_php.cAddMole mod_php3.cAddMole mod_perl.c# Extra MolesLoadMole php_mole moles/mod_php.soLoadMole php3_mole moles/libphp3.so /* for PHP 3 */LoadMole php4_mole moles/libphp4.so /* for PHP 4 */LoadMole perl_mole moles/libperl.so

And add: AddType application/x-httpd-php3 .php3 /* for PHP 3 */AddType application/x-httpd-php .php /* for PHP 4 */

... 到全局域里, 或者到你想要的 支持PHP的虛擬域里。
4. 我使用 RPMS 安裝 PHP 3 , 但是它沒有我需要的資料庫選項支持! 我該怎麼辦?
因為 PHP 3 內建支持的關系, 編譯一個完整的可適於所有應用的 PHP RPM是相當困難的。 在 PHP 4有談到這點。 對 PHP 3, 我們只好建議你使用INSTALL.REDHAT (在 PHP包里)描述的機制。 如果你一定要使用 RPM 版的 PHP 3, 讀...
RPM 包管理器設置 RPMS 簡單的安裝,不帶資料庫支持 and 因為RPMS 使用 /usr/ 而不是標準的 /usr/local/ 目錄存放文件. 你需要告訴 RPM 文件你要支持哪種資料庫以及它們的最上級目錄的位置。
下面的例子將解釋在Apache模式下怎樣支持通行的資料庫Mysql.
當然所有的這些可以稍作修改,以支持其它的PHP支持的資料庫。我們假設你安裝了 MySQL and Apache ,完全是用 RPMS 安裝的。

首先,移去 mod_php3 : rpm -e mod_php3

然後取得rpm包並安裝, 不是 --重編譯 rpm -Uvh mod_php3-3.0.5-2.src.rpm

編輯/usr/src/redhat/SPECS/mod_php3.spec 文件
在 %build 一節里增加你想要的資料庫支持, 以及路徑信息。
對 MySQL 你應該增加: --with-mysql=/usr \

%build 節看起來象: ./configure --prefix=/usr \ --with-apxs=/usr/sbin/apxs \ --with-config-file-path=/usr/lib \ --enable-debug=no \ --enable-safe-mode \ --with-exec-dir=/usr/bin \ --with-mysql=/usr \ --with-system-regex

改動完成後,象下面這樣重編rpm : rpm -bb /usr/src/redhat/SPECS/mod_php3.spec

Then install the rpm rpm -ivh /usr/src/redhat/RPMS/i386/mod_php3-3.0.5-2.i386.rpm

重啟 Apache,你已經得到了rpm下的Mysq

l的支持。 注意到這種做法比你重新得到一個 PHP 3 的tarball 代碼,按照 INSTALL.REDHAT 的指引一步一步做要容易得多。

5. Unix: 我用 FrontPage 擴展包對Apache打了補丁, 忽然 PHP 停止工作。 是PHP 和 Apache FrontPage 包不兼容嗎 ?
不是, PHP 和 FrontPage擴展包運行得很好.。問題是FrontPage 包修改了幾個Apache 結構參數,而PHP要用到它們.在FrontPage擴展包被打上後, 重新編譯 PHP (使用 make clean ; make ) ,會解決這個問題。
6. Unix/Windows: 我安裝了PHP,但在瀏覽器里看我的PHP頁面時,空白一片。
在瀏覽器里用 查看源文件 看你的腳本,你可能會發現你看到的是源程序。 這表示 web server 並沒有送腳本到PHP去執行。肯定是伺服器配置上哪兒出了錯。 仔細檢查PHP安裝的 server 配置。
7. Unix/Windows: 我安裝了PHP,但在瀏覽器里看我的 PHP頁面時,我得到一個 server 500 error。
這是伺服器在運行 PHP 時發生了錯誤。 為了看到可讀的錯誤信息,在命令行,改變目錄到 (php.exe Windows)所在目錄, 運行 php -i. 如果有任何問題,詳細的錯誤信息就顯示出來了,它會告訴你下一步該做什麼。 如果你得到滿屏的HTML代碼 (phpinfo() 函數的輸出), 那麼PHP工作正常,這個錯誤就是由於伺服器配置引發的,應該仔細檢查。
8. 某些操作系統: 我安裝PHP沒出錯,可是我啟動Apache時,得到一個 undefined symbol errors: [mybox:user /src/php4] root# apachectl configtest apachectl: /usr/local/apache/bin/httpd Undefined symbols: _compress _uncompress

這個問題其實與 PHP 無關, 而與 MySQL 客戶端庫有關。 --with-zlib,有些操作系統需要,而有些不需要。MySQL FAQ已經講述了這個問題。
9. Windows: 我安裝了PHP,但在瀏覽器里看我的PHP頁面, 得到如下錯誤: cgi error: The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

這是 PHP 根本沒有產生任何輸出。 為了看到可讀的錯誤信息,在命令行,改變目錄到 (php.exe Windows)所在目錄, 運行 php -i. 如果有任何問題,詳細的錯誤信息就顯示出來了,它會告訴你下一步該做什麼。 如果你得到滿屏的HTML代碼 (phpinfo() 函數的輸出), 那麼PHP工作正常。
一旦PHP在命令行模式下工作,再看看你的腳本程序, 它還是失敗,可能是因為以下原因:

你的PHP腳本的許可權許可。 php.exe, php4ts.dll, php.ini 或者任何你可能裝入的PHP文件,它樣都必須能被匿名 internet 用戶 ISUR_ 訪問。

腳本文件根本不存在(或者不是你認為的位置。)請注意在IIS里,你能夠阻塞這個錯誤,做法是在設置腳本映射目錄時, 選上 check file exists 框。這樣如果腳本不存在,伺服器會返回一個404錯誤。 這樣做也有其它的一些好處, 就是IIS僅為你做經過授權的操作。

10. Windows: 我嚴格按照install的要求做,可是還是不能讓我的php在IIS下工作。
確定任何想要運行PHP的用戶有操作php.exe的許可權! IIS 使用匿名的internet用戶,它是在IIS安裝時系統自動增加的。 這個用戶需要操作 php.exe的許可權. 還有,任何需要授權的用戶也必須有訪問 php.exe的許可權。 在 IIS4下,你要告訴它PHP是一個腳本引擎。

8. PHP是怎麼運行的

PHP運行需要配置運行環境。大多數使用的是Apach,現在網上也有開發集成環境,WAMP或者XAMPP或者PHPStudy等,都可以運行PHP。

9. php工作流程

PHP是運行與伺服器端的腳本語言,實現了資料庫與網頁之間的數據交互。一個完整的PHP網站系統由以下幾部分組成。
操作系統
網路中的 伺服器也是一台計算機,因此需要操作系統。PHP有著良好的跨平台性,支持windows和Linux等操作系統
web伺服器
當一台計算機中安裝操作系統後,還需要安裝web伺服器才能進行http訪問。常見的web伺服器軟體有Apache、IIS、Nginx等
資料庫
用於網站數據的存儲和管理。PHP支持多種資料庫,包括MySQL、sql server,oracle。db2
PHP軟體
用於解析PHP腳本文件、訪問資料庫等,是運行PHP代碼所必須的軟體。
瀏覽器
是瀏覽網頁的客戶端。由於PHP腳本是在伺服器端運行的,因此通過瀏覽器看到的是經過PHP處理後的html結果。。Zend引擎:Zend整體用純C實現,是PHP的內核部分,他將PHP代碼翻譯(詞法、語法解析等一系列編譯過程)為可執行opcode的處理並實現相應的處理方法、實現了基本的數據結構(如:hashtable、OO)、內存分配機制及管理、提供了相應的api方法供外部調用,是一切的核心,所有的外圍功能均圍繞Zend實現。

2、Extensions:圍繞著Zend引擎,extensions通過組件式的方式提供各種基礎服務,我們常見的各種內置函數(array系列)、標准庫等都是通過extension來實現,用戶也可以根據需要實現自己的extension的典型應用)。

3、Sapi:Sapi全稱Server Application Programming Interface,也就是服務端應用編程介面,Sapi通過一系列鉤子函數,使得PHP可以和外圍交互數據,這是PHP非常優雅和成功的設計,通過sapi成功的將PHP本身和上層應用解耦隔離,PHP可以不再考慮如何針對不同應用進行兼容,而應用本身也可以針對自己的特點實現不同的處理方式。

4、上層應用:這就是我們平時編寫的PHP程序,通過不同的spai方式得到各種各樣的應用模式,如何通過webserver實現web應用、在命令行下已腳本方式運行等等。

10. 簡述在web伺服器中,Apache和PHP的工作流程

那麼php的運行原理就是Apache、PHP、瀏覽器之間的協作過程:
①當用戶在瀏覽器地址中輸入要訪問的PHP頁面文件名,然後回車就會觸發這個PHP請求,並將請求傳送化支持PHP的WEB伺服器(apache)。
②WEB伺服器(apache)接受這個請求,並根據其後綴進行判斷如果是一個PHP請求,WEB伺服器(apache)從硬碟或內存中取出用戶要訪問的PHP應用程序,並將其發送給PHP引擎程序。
③PHP引擎程序將會對WEB伺服器(apache)傳送過來的文件從頭到尾進行掃描並根據命令從後台讀取,處理數據,並動態地生成相應的HTML頁面。
④PHP引擎將生成HTML頁面返回給WEB伺服器(apache)。WEB伺服器(apache)再將HTML頁面返回給客戶端瀏覽器,最後一個完整的頁面基於通過瀏覽器展現在我們眼前。

閱讀全文

與php運行過程相關的資料

熱點內容
ug120陣列命令快捷鍵 瀏覽:595
氣動隔膜式壓縮機 瀏覽:470
linux如何修改主機名 瀏覽:104
單片機游標上下移動 瀏覽:526
數據加密驗證 瀏覽:108
程序員被激怒 瀏覽:891
winxp找不到伺服器dns地址 瀏覽:842
以文本文件的格式保存考生文件夾 瀏覽:41
編譯原理文法分為幾類 瀏覽:570
JAVA基礎學python要多久 瀏覽:74
java流量控制 瀏覽:936
java實現多重繼承 瀏覽:707
票據通加密狗怎麼在新系統上使用 瀏覽:795
航模加密狗連接電腦 瀏覽:473
好用的匯編語言編譯器 瀏覽:863
自己編譯安卓虛擬機 瀏覽:913
中國的古代演算法 瀏覽:656
上層怎麼看程序員 瀏覽:27
程序員便當排骨 瀏覽:855
如何禁用安卓全家桶 瀏覽:261