您好,登錄后才能下訂單哦!
PHP簡介
PHP是通用服務器端腳本編程語言,其主要用于web開發以實現動態web頁面,它也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,因此,其也可以在大多數系統上作為一個獨立的shell來使用。
PHP Zend Engine
Zend Engine是開源的、PHP腳本語言的解釋器,由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進程(對應一次請求)編譯的結果無法被第二個PHP進程使用(opcode無法共享),這使得每一次對動態頁面的請求都需要進行掃描,分析,編譯,執行,即使是一模一樣的請求也需要也需要經歷這4個步驟。然后就有了各種PHP加速器。
php的加速器是基于PHP的特殊擴展機制,如opcode緩存擴展,也可以將opcode緩存于php的共享內存中,從而可以讓同一段代碼的后續重復執行時跳過編譯階段以提高性能。由此也可以看出,這些加速器并非真正提高了opcode的運行速度,而僅是通過分析opcode后并將它們重新排列以達到快速執行的目的。常見的php加速器有:APC (Alternative PHP Cache),eAccelerator,XCache,NuSphere PhpExpress,Zend Optimizer和Zend Guard Loader........其中XCache快速而且穩定,經過嚴格測試且被大量用于生產環境。項目地址:http://xcache.lighttpd.net/
XCache的安裝
安裝的版本是xcache-3.1.0.tar.bz2
1、安裝
[root@www ~]# ll total 20532 ..... -rw-r--r--. 1 root root 146444 Jul 5 10:41 xcache-3.1.0.tar.bz2 ..... [root@www ~]# tar xf xcache-3.1.0.tar.bz2 [root@www ~]# cd xcache-3.1.0 [root@www xcache-3.1.0]# /usr/local/php-5.4/bin/phpize #準備一個模塊以實現編譯php支持 #第三方模塊(與當前的php整合) Configuring for: PHP Api Version: 20100412 Zend Module Api No: 20100525 Zend Extension Api No: 220100525
/usr/local/php-5.4/bin/phpize 這里必須要執行這一步,執行完成之后,安裝包的目錄下才會有configure腳本文件
[root@www xcache-3.1.0]# ./configure --enable-xcache --with-php-config=/usr/local/php-5. 4/bin/php-config ....... [root@www xcache-3.1.0]# make && make install
安裝結束時,會出現類似如下行:
Installing shared extensions:/usr/local/php-5.4/lib/php/extensions/no-debug-non-zts-20100525
2、編輯php.ini,整合php和xcache
首先將xcache提供的樣例配置導入php.ini
[root@www xcache-3.1.0]# mkdir /etc/php.d [root@www xcache-3.1.0]# cp xcache.ini /etc/php.d
說明:xcache.ini文件在xcache的源碼目錄中。
接下來編輯/etc/php.d/xcache.ini,找到zend_extension開頭的行,修改為如下行:
extension = /usr/local/php-5.4/lib/php/extensions/no-debug-non-zts-20100525/xcache.so
注意:如果php.ini文件中有多條zend_extension指令行,要確保此新增的行排在第一位。
xcache.ini中的幾項參數:
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows xcache.size = 60M #用于緩存的內存大小 ; set to cpu count (cat /proc/cpuinfo |grep -c processor) xcache.count = 1 #設置成cpu的核心數 ; just a hash hints, you can always store count(items) > slots xcache.slots = 8K ; ttl of the cache item, 0=forever xcache.ttl = 0 ; interval of gc scanning expired items, 0=no scan, other values is in seconds xcache.gc_interval = 0
完成之后中心加載服務
[root@www xcache-3.1.0]# service php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done
訪問配置頁面:
已加載xcache
用ab命令對php服務器進行壓測,命令格式如下
ab -n num -c num url
-n #共多少次請求
-c #并發請求數
先把緩存功能關掉:
[root@www php.d]# mv xcache.ini xcache.ini.bak [root@www php.d]# service php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done
開始測試:
[root@www ~]# ab -n 200 -c 5 http://admin.xiaoxiao.com/index.php This is ApacheBench, Version 2.3 <$Revision: 1554214 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking admin.xiaoxiao.com (be patient) Completed 100 requests Completed 200 requests Finished 200 requests
啟動xcache:
[root@www php.d]# mv xcache.ini.bak xcache.ini [root@www php.d]# service php-fpm restart Gracefully shutting down php-fpm . done Starting php-fpm done [root@www ~]# ab -n 500 -c 20 http://admin.xiaoxiao.com/index.php .........
速度是兩倍多一點,效果還是挺明顯的~~
.................^_^
php以模塊的形式工作
php以模塊的形式與httpd整合,兩者只能運行在同一臺服務器上。
首先解決依賴關系,安裝libxml2-devel,bzip2-devel,libmcrypt-devel。若需要添加GD庫,libjpeg-turbo-devel,libpng-devel,freetype-devel,把這3個包也裝上,然后進行編譯。
[root@CentOS-6 php-5.4.26]# ./configure --prefix=/usr/local/php-5.4 --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-mysqli=mysqlnd --enable-mbstring --wit h-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-apxs2=/usr/local/apache-2.4.9/bin/apxs --with-mcrypt --with-con fig-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-gd --enable-ma intainer-zts
[root@CentOS-6 php-5.4.26]# make && make install
--enable-maintainer-zts #如果httpd使用的mpm為event或者worker,這項一定要加上,
#若果使用的是prefork,這項一定不能加
--with-apxs2=/usr/local/apache/bin/apxs #apx是httpd的鉤子函數,它能夠實現為apache編
#譯第三方模塊,php要編譯成apache模塊,需要指
#定函數的位置
添加配置文件
[root@CentOS-6 php-5.4.26]# cp php.ini-production /etc/php.ini
編輯apache配置文件httpd.conf,使httpd支持php
添加如下兩行
AddType application/x-httpd-php .php #一般情況下加這一行就行 AddType application/x-httpd-php-source .phps
識別默認頁面
<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>
添加測試頁面,后重新加載httpd服務
[root@CentOS-6 ~]# vim /usr/local/apache-2.4.9/htdocs/index.php <?php phpinfo(); ?> ....... [root@CentOS-6 ~]# service httpd force-reload Reloading httpd:
php模塊已能夠正常工作.................^_^
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。