1 概述
php: 腳本編程語(yǔ)言、嵌入到html中的嵌入式web程序語(yǔ)言,基于zend編譯成opcode(二進(jìn)制格式的字節(jié)碼蜡吧,重復(fù)運(yùn)行毫蚓,可省略編譯環(huán)境)
相關(guān)代碼部分,見(jiàn)博客 http://ghbsunny.blog.51cto.com/7759574/1970717
2 PHP簡(jiǎn)介
.官網(wǎng):http://www.php.net/
.PHP是通用服務(wù)器端腳本編程語(yǔ)言昔善,主要用于web開發(fā)實(shí)現(xiàn)動(dòng)態(tài)web頁(yè)面元潘,也是最早實(shí)現(xiàn)將腳本嵌入HTML源碼文檔中的服務(wù)器端腳本語(yǔ)言之一。同時(shí)君仆,php還提供了一個(gè)命令行接口柬批,因此,其也可以在大多數(shù)系統(tǒng)上作為一個(gè)獨(dú)立的shell來(lái)使用
.Rasmus Lerdorf于1994年開始開發(fā)PHP袖订,它是初是一組被Rasmus Lerdorf稱作“Personal Home Page Tool” 的Perl腳本氮帐,這些腳本可以用于顯示作者的簡(jiǎn)歷并記錄用戶對(duì)其網(wǎng)站的訪問(wèn)。后來(lái)洛姑,Rasmus Lerdorf使用C語(yǔ)言將這些Perl腳本重寫為CGI程序上沐,還為其增加了運(yùn)行Web forms的能力以及與數(shù)據(jù)庫(kù)交互的特性,并將其重命名為“Personal Home Page/Forms Interpreter”或“PHP/FI”楞艾。此時(shí)参咙,PHP/FI已經(jīng)可以用于開發(fā)簡(jiǎn)單的動(dòng)態(tài)web程序了,這即PHP1.0硫眯。1995年6月RasmusLerdorf把它的PHP發(fā)布于comp.infosystems.www.authoring.cgiUsenet討論組蕴侧,從此PHP開始走進(jìn)人們的視野。1997年两入,其2.0版本發(fā)布净宵。
.1997年,兩名以色列程序員Zeev Suraski和AndiGutmans重寫的PHP的分析器(parser)成為PHP發(fā)展到3.0的基礎(chǔ)裹纳,而且從此將PHP重命名為PHP: HypertextPreprocessor择葡。此后,這兩名程序員開始重寫整個(gè)PHP核心剃氧,并于1999年發(fā)布了Zend Engine 1.0敏储,這也意味著PHP 4.0的誕生。2004年7月朋鞍,Zend Engine 2.0發(fā)布已添,由此也將PHP帶入了PHP 5時(shí)代。PHP5包含了許多重要的新特性滥酥,如增強(qiáng)的面向?qū)ο缶幊痰闹С指琛⒅С諴DO(PHP Data Objects)擴(kuò)展機(jī)制以及一系列對(duì)PHP性能的改進(jìn)
3 PHP Zend Engine
.Zend Engine是開源的、PHP腳本語(yǔ)言的解釋器恨狈,它最早是由以色列理工學(xué)院(Technion)的學(xué)生AndiGutmans和Zeev
Suraski所開發(fā)疏哗,Zend也正是此二人名字的合稱呛讲。后來(lái)兩人聯(lián)合創(chuàng)立了ZendTechnologies公司
.Zend Engine 1.0于1999年隨PHP 4發(fā)布禾怠,由C語(yǔ)言開發(fā)且經(jīng)過(guò)高度優(yōu)化返奉,并能夠做為PHP的后端模塊使用。ZendEngine為PHP提供了內(nèi)存和資源管理的功能以及其它的一些標(biāo)準(zhǔn)服務(wù)吗氏,其高性能芽偏、可靠性和可擴(kuò)展性在促進(jìn)PHP成為一種流行的語(yǔ)
言方面發(fā)揮了重要作用
.Zend Engine的出現(xiàn)將PHP代碼的處理過(guò)程分成了兩個(gè)階段:首先是分析PHP代碼并將其轉(zhuǎn)換為稱作Zend opcode的二進(jìn)制
格式(類似Java的字節(jié)碼),并將其存儲(chǔ)于內(nèi)存中弦讽;第二階段是使用ZendEngine去執(zhí)行這些轉(zhuǎn)換后的Opcode
4 PHP的Opcode
.Opcode是一種PHP腳本編譯后的中間語(yǔ)言污尉,類似于Java的ByteCode,或者.NET的MSL。PHP執(zhí)行PHP腳本代碼一般會(huì)經(jīng)過(guò)如下4個(gè)步驟(掃描-->分析-->編譯-->執(zhí)行)(確切的來(lái)說(shuō)往产,應(yīng)該是PHP的語(yǔ)言引擎Zend)
1被碗、掃描:Scanning詞法分析,將PHP代碼轉(zhuǎn)換為語(yǔ)言片段(Tokens)
2、分析:Parsing語(yǔ)義分析,將Tokens轉(zhuǎn)換成簡(jiǎn)單而有意義的表達(dá)式
3仿村、編譯:Compilation將表達(dá)式編譯成Opocdes
4锐朴、執(zhí)行:Execution順次執(zhí)行Opcodes,每次一條蔼囊,從而實(shí)現(xiàn)PHP腳本的功能
** 5 php配置**
.php.ini的核心配置選項(xiàng)文檔:
http://php.net/manual/zh/ini.core.php
.php.ini配置選項(xiàng)列表:
http://php.net/manual/zh/ini.list.php
php的模式為模塊模式焚志,和apache結(jié)合在一起,以模塊的方式集合在apache的http服務(wù)里畏鼓,提供服務(wù)
php也可以獨(dú)立的模式酱酬,和apache不在同一機(jī)器上,通過(guò)協(xié)議和apache進(jìn)行通信
.php:腳本語(yǔ)言解釋器
.配置文件:/etc/php.ini,/etc/php.d/*.ini
.配置文件在php解釋器啟動(dòng)時(shí)被讀取
.對(duì)配置文件的修改生效方法
/etc/httpd/conf.d/php.conf配置相關(guān)模塊
當(dāng)滿足后綴為.php的文件云矫,就給 x-httpd-php程序處理
Modules:重啟httpd服務(wù)
FastCGI:重啟php-fpm服務(wù)
./etc/php.ini配置文件格式:
/etc/php.ini[foo]:SectionHeaderdirective = value
注釋符:較新的版本中膳沽,已經(jīng)完全使用;進(jìn)行注釋
:純粹的注釋信息,取消#號(hào)让禀,該行代碼不能使用贵少,僅注釋信息
;:用于注釋可啟用的directive,取消堆缘;號(hào)滔灶,該行代碼可以使用
/etc/php.inimax_execution_time= 30 最長(zhǎng)執(zhí)行時(shí)間30smemory_limit 128M 生產(chǎn)不夠,可調(diào)大display_errors off 調(diào)試使用吼肥,生產(chǎn)不要打開录平,否則可能暴露重要信息display_startup_errors off 建議關(guān)閉,php啟動(dòng)時(shí)的報(bào)錯(cuò)post_max_size 8M 最大上傳數(shù)據(jù)大小缀皱,生產(chǎn)可能臨時(shí)要調(diào)大斗这,比下面項(xiàng)要大,根據(jù)生產(chǎn)環(huán)境決定upload_max_filesize 2M 最大上傳文件啤斗,生產(chǎn)可能要調(diào)大max_file_uploads = 20 同時(shí)上傳最多文件數(shù)date.timezone =Asia/Shanghai 指定時(shí)區(qū)?short_open_tag=on 開啟短標(biāo)簽,如<?phpinfo();?>表箭,php的一種格式,需要啟用該配置才支持短標(biāo)簽
更改httpd.conf,設(shè)置主頁(yè)為php文件
vim /etc/httpd/conf/httpd.conf<IfModuledir_module> DirectoryIndex index.php index.html</IfModule>
6 php語(yǔ)言格式
**格式一
**
<h1><?php ...phpcode... ?></h1>
格式二
<?php ...phpcode... ?>
**例子 **
例子一
vim a.php 注意后綴是php
<h1><?php echo "Hello world!" ?></h1>
例子二
<?phpecho "<h1>Helloworld!</h1>"?>
例子三
.php測(cè)試代碼
<?phpecho date("Y/m/d");phpinfo();;phpinfo()是內(nèi)部函數(shù)钮莲,可以調(diào)出php網(wǎng)頁(yè)的信息?>
例子四 **
Php使用mysql擴(kuò)展連接數(shù)據(jù)庫(kù)
這里要安裝php-mysql包才能測(cè)試 yum –y installphp-mysql;
.使用mysql擴(kuò)展連接數(shù)據(jù)庫(kù)的測(cè)試代碼
<?php$conn = mysql_connect(‘mysqlserver','username','password');if ($conn)echo "OK";elseecho "Failure";mysql_close();?>
** 例子五
Php使用mysqli擴(kuò)展連接數(shù)據(jù)庫(kù)
i為improve的意思免钻,這個(gè)是現(xiàn)在主流的連接方法彼水,mysql被淘汰了
面向?qū)ο蟮倪B接方式,這種連接方式后臺(tái)數(shù)據(jù)庫(kù)只能是mysql,但是pdo(phpdata object)可以連接其他數(shù)據(jù)庫(kù)
.Php使用mysqli擴(kuò)展連接數(shù)據(jù)庫(kù)的測(cè)試代碼
<?php$mysqli=new mysqli("mysqlserver",“username",“password");if(mysqli_connect_errno()){echo "連接數(shù)據(jù)庫(kù)失敗!";$mysqli=null;exit;}echo "連接數(shù)據(jù)庫(kù)成功!";$mysqli->close();?>
7 php的加速器
.php的加速器:基于PHP的特殊擴(kuò)展機(jī)制如opcode緩存擴(kuò)展也可以將opcode緩存于php的共享內(nèi)存中极舔,從而可以讓同一段代碼的后續(xù)重復(fù)執(zhí)行時(shí)跳過(guò)編譯階段以提高性能凤覆。這些加速器并非真正提高了opcode的運(yùn)行速度,而僅是通過(guò)分析opcode后并將它們重新排列以達(dá)到快速執(zhí)行的目的
.常見(jiàn)的php加速器有:
.1拆魏、APC(Alternative PHP Cache)
遵循PHPLicense的開源框架盯桦,PHPopcode緩存加速器,目前的版本不適用于PHP 5.4
項(xiàng)目地址http://pecl.php.net/package/APC
.2渤刃、eAccelerator
源于TurckMMCache拥峦,早期的版本包含了一個(gè)PHPencoder和PHP loader,目前encoder已經(jīng)不在支持卖子。
項(xiàng)目地址http://eaccelerator.net/
.3事镣、XCache
快速而且穩(wěn)定的PHP opcode緩存,經(jīng)過(guò)嚴(yán)格測(cè)試且被大量用于生產(chǎn)環(huán)境揪胃。
項(xiàng)目地址:http://xcache.lighttpd.net/,收錄EPEL源
.4璃哟、ZendOptimizer和ZendGuard Loader
Zend Optimizer并非一個(gè)opcode加速器,它是由Zend Technologies為PHP5.2及以前的版本提供的一個(gè)免費(fèi)喊递、閉源的PHP擴(kuò)展随闪,其能夠運(yùn)行由Zend Guard生成的加密的PHP代碼或模糊代碼。而Zend Guard Loader則是專為PHP5.3提供的類似于Zend
Optimizer功能的擴(kuò)展骚勘。項(xiàng)目地址http://www.zend.com/en/products/guard/runtime-decoders
.5铐伴、NuSpherePhpExpress
NuSphere的一款開源PHP加速器,它支持裝載通過(guò)NuSphere PHPEncoder編碼的PHP程序文件俏讹,并能夠?qū)崿F(xiàn)對(duì)常規(guī)PHP文件的執(zhí)行加速当宴。項(xiàng)目地址,http://www.nusphere.com/products/phpexpress.htm