淺析使用Turck-mmcache編譯來(lái)加速、優(yōu)化PHP代碼
更新時(shí)間:2013年06月20日 15:22:32 作者:
本篇文章是對(duì)使用Turck-mmcache編譯來(lái)加速、優(yōu)化PHP代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
php_screw確實(shí)很不錯(cuò),但是只能起到加密的作用,并沒(méi)有加速和優(yōu)化的作用。
下面我們來(lái)看看:Turck MMCache
它的作用是通過(guò)對(duì)php代碼的編譯來(lái)加速、優(yōu)化php代碼,我們?nèi)绻l(fā)布的php代碼是經(jīng)過(guò)編譯的,也多少能起到一些對(duì)代碼的保護(hù)作用。
下面我們對(duì)compute.php進(jìn)行編譯看看前后的代碼區(qū)別,下面是compute.php的源代碼
<? //============用來(lái)循環(huán)計(jì)算的compute.php文件================// $a=0; $t=time(); for($i=0;$i<6000000;$i++) {$a=$a*$i;} $t1=time(); echo "<p>"; echo "It used:"; echo $t1-$t; echo "seconds"; ?>
下面是編譯后的compute.php文件
<?php if (!is_callable("mmcache_load") && !@dl((PHP_OS=="WINNT"||PHP_OS=="WIN32")?" TurckLoader.dll":"TurckLoader.so")) { die("This PHP script has been encoded with Turck MMcache, to run it you must install <a >Turck MMCache or Turck Loader</a>");} return mmcache_load('eJzz9XV2dPZwZWBiYGBgZABRzAwgoM0AAakggoODIxgozQxUwJDIqMbIyMDIiCy ZBqVtGMCmMDKzAOmSzNzUdHTdJYxqTIwMLIwYxmYiGRvACBcUBqplZGzojYbbpSvMxCARhtCmBNSjxQOTRdIahn CxJNhOLQGs7mXC5V5QkJQYAt3FwMDCBNOqwcgMC iCbAjskEQ4gy7NEobQ4NcUK7hImuJeZgJazMGkwMSBpYQeyilOT8/NSipFEQeoV7BghwQAEAM45H7Y=');?>
不難發(fā)現(xiàn),通過(guò)發(fā)布編譯后的程序,應(yīng)該可以有效的防止程序被篡改。
網(wǎng)站
http://turck-mmcache.sourceforge.net/
如何獲得turck-mmcache
1 可以通過(guò)它的網(wǎng)站獲得
2 從下面的網(wǎng)址下載
http://prdownloads.sourceforge.net/turck-mmcache/turck-mmcache-2.4.6.tar.gz?download
安裝
1. 將下載的turck-mmcache-2.4.6.tar.gz放到/usr/local下解壓縮
tar zxvf turck-mmcache-2.4.6.tar.gz
2. 進(jìn)入turck-mmcache-2.4.6目錄,配置
cd turck-mmcache-2.4.6 export PHP_PREFIX="/usr" $PHP_PREFIX/bin/phpize ./configure --enable-mmcache=shared --with-php-config=$PHP_PREFIX/bin/php-config
3. 編譯、安裝
make make install
4. 修改/etc/apache/目錄下的php.ini文件,為了可以使用turck-mmcache。
在php.ini文件里加入如下內(nèi)容:
extension="mmcache.so" mmcache.shm_size="16" mmcache.cache_dir="/tmp/mmcache" mmcache.enable="1" mmcache.optimizer="1" mmcache.check_mtime="1" mmcache.debug="0" mmcache.filter="" mmcache.shm_max="0" mmcache.shm_ttl="0" mmcache.shm_prune_period="0" mmcache.shm_only="0" mmcache.compress="1"
5. 重新啟動(dòng)Apache
/etc/rc.d/rc.httpd restart
通過(guò)以上5步,turck-mmcache已經(jīng)可以使用了,下面我們對(duì)加速、優(yōu)化效果進(jìn)行簡(jiǎn)單的測(cè)試。
測(cè)試
1. 編寫(xiě)一個(gè)compute.php文件,來(lái)進(jìn)行一個(gè)大量循環(huán)的計(jì)算,在運(yùn)算前后分別取系統(tǒng)時(shí)間,最后將兩次時(shí)間相減,得出所用時(shí)間。(只是個(gè)粗略的估計(jì))
compute.php文件內(nèi)容如下
<? //============用來(lái)循環(huán)計(jì)算的compute.php文件================// $a=0; $t=time(); for($i=0;$i<6000000;$i++) {$a=$a*$i;} $t1=time(); echo "<p>"; echo "It used:"; echo $t1-$t; echo "seconds"; ?>
2. 計(jì)算一下未編譯時(shí)候所用的時(shí)間,也就是在瀏覽器里面調(diào)用我本剛剛寫(xiě)的compute.php文件。需要耐心等待一會(huì),大約30秒左右(p3 500的cpu下)
3. 為了編譯php文件方便,我們來(lái)編寫(xiě)一個(gè)叫做encoder的shell來(lái)編譯php文件。
<1> 首先將/usr/local/turck-mmcache-2.4.6目錄下的encoder.php文件復(fù)制到/usr/bin目錄下
cp /usr/local/turck-mmcache-2.4.6/encoder.php /usr/bin/
<2> 用vi encoder建立encoder文件,內(nèi)容如下:
#!/bin/sh clear src=$1; echo $src; src2=$src".en"; echo $src2; cp /usr/bin/encoder.php ./encoder.php php encoder.php $src -o $src2; rm encoder.php mv $src $src.bak; mv $src.en $src;
<3> 對(duì)剛編寫(xiě)的shell給可執(zhí)行權(quán)限,并移動(dòng)到/usr/bin目錄下
chmod +x encoder mv encoder /usr/bin/
<4> 通過(guò)encoder編譯compute.php文件,編譯后compute.php為編譯后文件,源文件被命名為compute.php.bak保存
encode compute.php
<5> 在瀏覽器里調(diào)用編譯后的compute.php文件,看看速度時(shí)候提高了?
我這里,原來(lái)要用27秒,編譯后用22秒
php_screw和turck-mmcache的區(qū)別
php_screw只是單純的對(duì)php代碼加密,并沒(méi)有加速和優(yōu)化的效果。
turck-mmcache是通過(guò)對(duì)php代碼的編譯,來(lái)使php代碼解釋執(zhí)行的速度可以接近二進(jìn)制代碼的速度??梢云鸬郊铀俸蛢?yōu)化php代碼的作用。但是turck-mmcache編譯后的代碼,只是將源代碼通過(guò)一定規(guī)則變成了二進(jìn)制代碼,并沒(méi)有真正的加密。
所以如果要想確保代碼的絕對(duì)安全就用php_screw,要是考慮到速度等因素,就是用turck-mmcache
下面我們來(lái)看看:Turck MMCache
它的作用是通過(guò)對(duì)php代碼的編譯來(lái)加速、優(yōu)化php代碼,我們?nèi)绻l(fā)布的php代碼是經(jīng)過(guò)編譯的,也多少能起到一些對(duì)代碼的保護(hù)作用。
下面我們對(duì)compute.php進(jìn)行編譯看看前后的代碼區(qū)別,下面是compute.php的源代碼
<? //============用來(lái)循環(huán)計(jì)算的compute.php文件================// $a=0; $t=time(); for($i=0;$i<6000000;$i++) {$a=$a*$i;} $t1=time(); echo "<p>"; echo "It used:"; echo $t1-$t; echo "seconds"; ?>
下面是編譯后的compute.php文件
復(fù)制代碼 代碼如下:
<?php if (!is_callable("mmcache_load") && !@dl((PHP_OS=="WINNT"||PHP_OS=="WIN32")?" TurckLoader.dll":"TurckLoader.so")) { die("This PHP script has been encoded with Turck MMcache, to run it you must install <a >Turck MMCache or Turck Loader</a>");} return mmcache_load('eJzz9XV2dPZwZWBiYGBgZABRzAwgoM0AAakggoODIxgozQxUwJDIqMbIyMDIiCy ZBqVtGMCmMDKzAOmSzNzUdHTdJYxqTIwMLIwYxmYiGRvACBcUBqplZGzojYbbpSvMxCARhtCmBNSjxQOTRdIahn CxJNhOLQGs7mXC5V5QkJQYAt3FwMDCBNOqwcgMC iCbAjskEQ4gy7NEobQ4NcUK7hImuJeZgJazMGkwMSBpYQeyilOT8/NSipFEQeoV7BghwQAEAM45H7Y=');?>
不難發(fā)現(xiàn),通過(guò)發(fā)布編譯后的程序,應(yīng)該可以有效的防止程序被篡改。
網(wǎng)站
http://turck-mmcache.sourceforge.net/
如何獲得turck-mmcache
1 可以通過(guò)它的網(wǎng)站獲得
2 從下面的網(wǎng)址下載
http://prdownloads.sourceforge.net/turck-mmcache/turck-mmcache-2.4.6.tar.gz?download
安裝
1. 將下載的turck-mmcache-2.4.6.tar.gz放到/usr/local下解壓縮
tar zxvf turck-mmcache-2.4.6.tar.gz
2. 進(jìn)入turck-mmcache-2.4.6目錄,配置
cd turck-mmcache-2.4.6 export PHP_PREFIX="/usr" $PHP_PREFIX/bin/phpize ./configure --enable-mmcache=shared --with-php-config=$PHP_PREFIX/bin/php-config
3. 編譯、安裝
make make install
4. 修改/etc/apache/目錄下的php.ini文件,為了可以使用turck-mmcache。
在php.ini文件里加入如下內(nèi)容:
復(fù)制代碼 代碼如下:
extension="mmcache.so" mmcache.shm_size="16" mmcache.cache_dir="/tmp/mmcache" mmcache.enable="1" mmcache.optimizer="1" mmcache.check_mtime="1" mmcache.debug="0" mmcache.filter="" mmcache.shm_max="0" mmcache.shm_ttl="0" mmcache.shm_prune_period="0" mmcache.shm_only="0" mmcache.compress="1"
5. 重新啟動(dòng)Apache
/etc/rc.d/rc.httpd restart
通過(guò)以上5步,turck-mmcache已經(jīng)可以使用了,下面我們對(duì)加速、優(yōu)化效果進(jìn)行簡(jiǎn)單的測(cè)試。
測(cè)試
1. 編寫(xiě)一個(gè)compute.php文件,來(lái)進(jìn)行一個(gè)大量循環(huán)的計(jì)算,在運(yùn)算前后分別取系統(tǒng)時(shí)間,最后將兩次時(shí)間相減,得出所用時(shí)間。(只是個(gè)粗略的估計(jì))
compute.php文件內(nèi)容如下
<? //============用來(lái)循環(huán)計(jì)算的compute.php文件================// $a=0; $t=time(); for($i=0;$i<6000000;$i++) {$a=$a*$i;} $t1=time(); echo "<p>"; echo "It used:"; echo $t1-$t; echo "seconds"; ?>
2. 計(jì)算一下未編譯時(shí)候所用的時(shí)間,也就是在瀏覽器里面調(diào)用我本剛剛寫(xiě)的compute.php文件。需要耐心等待一會(huì),大約30秒左右(p3 500的cpu下)
3. 為了編譯php文件方便,我們來(lái)編寫(xiě)一個(gè)叫做encoder的shell來(lái)編譯php文件。
<1> 首先將/usr/local/turck-mmcache-2.4.6目錄下的encoder.php文件復(fù)制到/usr/bin目錄下
cp /usr/local/turck-mmcache-2.4.6/encoder.php /usr/bin/
<2> 用vi encoder建立encoder文件,內(nèi)容如下:
#!/bin/sh clear src=$1; echo $src; src2=$src".en"; echo $src2; cp /usr/bin/encoder.php ./encoder.php php encoder.php $src -o $src2; rm encoder.php mv $src $src.bak; mv $src.en $src;
<3> 對(duì)剛編寫(xiě)的shell給可執(zhí)行權(quán)限,并移動(dòng)到/usr/bin目錄下
chmod +x encoder mv encoder /usr/bin/
<4> 通過(guò)encoder編譯compute.php文件,編譯后compute.php為編譯后文件,源文件被命名為compute.php.bak保存
encode compute.php
<5> 在瀏覽器里調(diào)用編譯后的compute.php文件,看看速度時(shí)候提高了?
我這里,原來(lái)要用27秒,編譯后用22秒
php_screw和turck-mmcache的區(qū)別
php_screw只是單純的對(duì)php代碼加密,并沒(méi)有加速和優(yōu)化的效果。
turck-mmcache是通過(guò)對(duì)php代碼的編譯,來(lái)使php代碼解釋執(zhí)行的速度可以接近二進(jìn)制代碼的速度??梢云鸬郊铀俸蛢?yōu)化php代碼的作用。但是turck-mmcache編譯后的代碼,只是將源代碼通過(guò)一定規(guī)則變成了二進(jìn)制代碼,并沒(méi)有真正的加密。
所以如果要想確保代碼的絕對(duì)安全就用php_screw,要是考慮到速度等因素,就是用turck-mmcache
相關(guān)文章
Linux(CentOS)下PHP擴(kuò)展PDO編譯安裝的方法
這篇文章主要介紹了Linux(CentOS)下PHP擴(kuò)展PDO編譯安裝的方法,詳細(xì)說(shuō)明了Linux下安裝PHP的PDO擴(kuò)展所涉及的相關(guān)技巧與詳細(xì)步驟,需要的朋友可以參考下2016-04-04PHP中大于2038年時(shí)間戳的問(wèn)題處理方案
這篇文章主要介紹了PHP中大于2038年時(shí)間戳的問(wèn)題處理方案,需要的朋友可以參考下2015-03-03php 根據(jù)url自動(dòng)生成縮略圖并處理高并發(fā)問(wèn)題
服務(wù)器生成縮略圖的時(shí)機(jī)一般分為兩種:上傳文件時(shí)生成、訪問(wèn)時(shí)生成,下面為大家介紹下php根據(jù)url自動(dòng)生成縮略圖并處理高并發(fā)問(wèn)題2014-01-01PHP結(jié)合vue導(dǎo)出excel出現(xiàn)亂碼的解決方法分享
這篇文章主要為大家詳細(xì)介紹了PHP結(jié)合vue導(dǎo)出excel出現(xiàn)亂碼的解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-02-02PHP獲取欄目的所有子級(jí)和孫級(jí)欄目的ID號(hào)示例
這篇文章主要介紹了PHP獲取欄目的所有子級(jí)和孫級(jí)欄目的ID號(hào)的具體實(shí)現(xiàn),需要的朋友可以參考下2014-04-04輕松修復(fù)Discuz!數(shù)據(jù)庫(kù)
各位站長(zhǎng)經(jīng)常會(huì)遇到的數(shù)據(jù)庫(kù)損壞的錯(cuò)誤,錯(cuò)誤來(lái)了就去面對(duì),不要慌張,瞎著急是沒(méi)有用的。其實(shí)熟悉Discuz! 的朋友都知道,Discuz! 后臺(tái)自帶數(shù)據(jù)庫(kù)修復(fù)工具的,如果數(shù)據(jù)庫(kù)損壞導(dǎo)致首頁(yè)打不開(kāi)了,但是后臺(tái)還可以進(jìn)去。2008-05-05php從右向左/從左向右截取字符串的實(shí)現(xiàn)方法
我先學(xué)的的asp,asp里截取字符串的函數(shù)很簡(jiǎn)單,也容易理解:left和right而php里從左向右截取和從右向左截取都是一個(gè)函數(shù):substr2011-11-11