php
MIME,http,html
MIME
:MIME(Multipurpose Internet Mail Extensions)多用途網際網路郵件擴充類型
浏覽器
:插件,或是調用外在程式。
動态網站
:根據用戶端請求,伺服器調用外界程式運作腳本生成文檔在傳回給用戶端。傳回不同結果。根據用戶端不同請求做出不同響應。
用戶端動态
:伺服器端開發一段程式,這段程式的源程式下載下傳到用戶端本地并且在用戶端本地的運作環境中運作。并通過浏覽器将執行結果顯示出來。
防止惡意代碼,一般不使用。Activex,applet
JVM:java Virtual Machine
一次編譯,到處運作(移植性好)
向上一緻,向下比對機器的特性。
胖用戶端。
伺服器端動态:
CGI:通用網關接口,protocol
web程序根據對應的程式的不同調用不同外界的程式去運作再将執行結果傳回給web程序。
web應用程式。webapp
程式設計語言:
靜态語言:編譯型語言
c,c++,JAVA 強類型
優點:效率高,性能好
缺點:錯誤查找,每一次改動都需要重新編譯。開發周期長,維護成本大。
動态語言:解釋型語言
shell,perl,python弱類型
優點:便于維護,有衆多共享子產品
缺點:性能差
webapp:
facebook
動态語言:-->靜态語言
php--(Hiphop)-->C++
perl
Python Django
java,jSP (spring stucts,Hibernate)
ruby,rails
asp,PHP
學習程式設計語言:
基本文法
算法,資料結構
編譯原理
PHP
PHP is Hypertext Preprocessor
超文本預處理器
opcode:操作碼
php解釋型:php
php source code --->編譯二進制---->執行二進制格式
Zend:opcode(二進制)(php的虛拟機)
opcode放在記憶體中
将opcode放在記憶體緩存中,可供程序共用。
加速器
分析器:
1.詞法分析
2.文法分析
3.生成執行路徑
關于PHP
一、PHP簡介
PHP是通用伺服器端腳本程式設計語言,其主要用于web開發以實作動态web頁面,它也是最早實作将腳本嵌入HTML源碼文檔中的伺服器端腳本語言之一。同時,php還提供了一個指令行接口,是以,其也可以在大多數系統上作為一個獨立的shell來使用。
Rasmus Lerdorf于1994年開始開發PHP,它是初是一組被Rasmus Lerdorf稱作“Personal Home Page Tool” 的Perl腳本, 這些腳本可以用于顯示作者的履歷并記錄使用者對其網站的通路。後來,Rasmus Lerdorf使用C語言将這些Perl腳本重寫為CGI程式,還為其增加了運作Web forms的能力以及與資料庫互動的特性,并将其重命名為“Personal Home Page/Forms Interpreter”或“PHP/FI”。此時,PHP/FI已經可以用于開發簡單的動态web程式了,這即是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP釋出于comp.infosystems.
www.authoring.cgiUsenet讨論組,從此PHP開始走進人們的視野。1997年,其2.0版本釋出。
1997年,兩名以色列程式員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成為PHP發展到3.0的基礎,而且從此将PHP重命名為PHP: Hypertext Preprocessor。此後,這兩名程式員開始重寫整個PHP核心,并于1999年釋出了Zend Engine 1.0,這也意味着PHP 4.0的誕生。2004年7月,Zend Engine 2.0釋出,由此也将PHP帶入了PHP5時代。PHP5包含了許多重要的新特性,如增強的面向對象程式設計的支援、支援PDO(PHP Data Objects)擴充機制以及一系列對PHP性能的改進。
二、PHP Zend Engine
Zend Engine是開源的、PHP腳本語言的解釋器,它最早是由以色列理工學院(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人名字的合稱。後來兩人聯合創立了Zend Technologies公司。
Zend Engine 1.0于1999年随PHP 4釋出,由C語言開發且經過高度優化,并能夠做為PHP的後端子產品使用。Zend Engine為PHP提供了記憶體和資源管理的功能以及其它的一些标準服務,其高性能、可靠性和可擴充性在促進PHP成為一種流行的語言方面發揮了重要作用。
Zend Engine的出現将PHP代碼的處理過程分成了兩個階段:首先是分析PHP代碼并将其轉換為稱作Zend opcode的二進制格式(類似Java的位元組碼),并将其存儲于記憶體中;第二階段是使用Zend Engine去執行這些轉換後的Opcode。
三、PHP的Opcode
Opcode是一種PHP腳本編譯後的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行PHP腳本代碼一般會經過如下4個步驟(确切的來說,應該是PHP的語言引擎Zend):
1、Scanning(Lexing) —— 将PHP代碼轉換為語言片段(Tokens)
2、Parsing —— 将Tokens轉換成簡單而有意義的表達式
3、Compilation —— 将表達式編譯成Opocdes
4、Execution —— 順次執行Opcodes,每次一條,進而實作PHP腳本的功能
四、php的加速器
基于PHP的特殊擴充機制如opcode緩存擴充也可以将opcode緩存于php的共享記憶體中,進而可以讓同一段代碼的後續重複執行時跳過編譯階段以提高性能。由此也可以看出,這些加速器并非真正提高了opcode的運作速度,而僅是通過分析opcode後并将它們重新排列以達到快速執行的目的。
常見的php加速器有:
1、APC (Alternative PHP Cache)
遵循PHP License的開源架構,PHP opcode緩存加速器,目前的版本不适用于PHP 5.4。項目位址,
http://pecl.php.net/package/APC。
2、eAccelerator
源于Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支援。項目位址,
http://eaccelerator.net/3、XCache
快速而且穩定的PHP opcode緩存,經過嚴格測試且被大量用于生産環境。項目位址,
http://xcache.lighttpd.net/4、Zend Optimizer和Zend Guard Loader
Zend Optimizer并非一個opcode加速器,它是由Zend Technologies為PHP5.2及以前的版本提供的一個免費、閉源的PHP擴充,其能夠運作由Zend Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專為PHP5.3提供的類似于Zend Optimizer功能的擴充。項目位址,
http://www.zend.com/en/products/guard/runtime-decoders5、NuSphere PhpExpress
NuSphere的一款開源PHP加速器,它支援裝載通過NuSphere PHP Encoder編碼的PHP程式檔案,并能夠實作對正常PHP檔案的執行加速。項目位址,
http://www.nusphere.com/products/phpexpress.htm五、PHP源碼目錄結構
PHP的源碼在結構上非常清晰。其代碼根目錄中主要包含了一些說明檔案以及設計方案,并提供了如下子目錄:
1、build —— 顧名思義,這裡主要放置一些跟源碼編譯相關的檔案,比如開始建構之前的buildconf腳本及一些檢查環境的腳本等。
2、ext —— 官方的擴充目錄,包括了絕大多數PHP的函數的定義和實作,如array系列,pdo系列,spl系列等函數的實作。 個人開發的擴充在測試時也可以放到這個目錄,以友善測試等。
3、main —— 這裡存放的就是PHP最為核心的檔案了,是實作PHP的基礎設施,這裡和Zend引擎不一樣,Zend引擎主要實作語言最核心的語言運作環境。
4、Zend —— Zend引擎的實作目錄,比如腳本的詞法文法解析,opcode的執行以及擴充機制的實作等等。
5、pear —— PHP 擴充與應用倉庫,包含PEAR的核心檔案。
6、sapi —— 包含了各種伺服器抽象層的代碼,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。
7、TSRM —— PHP的線程安全是建構在TSRM庫之上的,PHP實作中常見的*G宏通常是對TSRM的封裝,TSRM(Thread Safe Resource Manager)線程安全資料總管。
8、tests —— PHP的測試腳本集合,包含PHP各項功能的測試檔案。
9、win32 —— 這個目錄主要包括Windows平台相關的一些實作,比如sokcet的實作在Windows下和*Nix平台就不太一樣,同時也包括了Windows下編譯PHP相關的腳本。
common gateway Interface
apache <------CGI---->PHP
apache将php傳回的資料流直接回複給用戶端
嵌入式web開發語言
index.php
<html>
<head></head>
<?php
?>
</html>
隻将php的代碼交由php處理。
CGI:管理PHP的生命程序周期。
200 php
3000 :static content prefork,200
每個php程序和httpd程序
http,stateless 無狀态的
apache,
DSO:動态共享子產品 dynamic share object
将php做成apache的子產品。提高處理速度,處理一個請求,隻需要一個程式。
Fastcgi:
fPM:fastcgi php MOdules
動态和靜态的處理程序分離:
安裝php的伺服器,事先生成空閑程序等待Apache的請求。php就有自我管理的能力。類似于prefork,如同C/S架構,apache是用戶端,php是伺服器。
apache +php
CGI
Modules
FastCGI
Nginx+fpm
yum install php
php-common-5.3.3-22.el6.x86_64 通用元件
php-cli-5.3.3-22.el6.x86_64 指令行工具
php-5.3.3-22.el6.x86_64
php-cli-5.3.3-22.el6.x86_64
php-common-5.3.3-22.el6.x86_64
[root@li ~]# rpm -ql php
/etc/httpd/conf.d/php.conf web伺服器配置檔案
/usr/lib64/httpd/modules/libphp5.so 動态共享庫
/var/lib/php/session
/var/www/icons/php.gif
vim /etc/httpd/conf.d/php.conf
apache基于不同的MPM,php也會選擇不同的子產品。
DirectoryIndex index.php 預設首頁
vim /etc/php.ini
segment 分段式
[name]
配置項
注釋用;表示
pHp隻儲存指令和指令,不儲存伺服器的資料。