浅析使用Turck-mmcache编译来加速、优化PHP代码


Posted in PHP onJune 20, 2013

php_screw确实很不错,但是只能起到加密的作用,并没有加速和优化的作用。
下面我们来看看:Turck MMCache
它的作用是通过对php代码的编译来加速、优化php代码,我们如果发布的php代码是经过编译的,也多少能起到一些对代码的保护作用。
下面我们对compute.php进行编译看看前后的代码区别,下面是compute.php的源代码
<? //============用来循环计算的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 href="http://turck-mmcache.sourceforge.net/">Turck MMCache or Turck Loader</a>");} return mmcache_load('eJzz9XV2dPZwZWBiYGBgZABRzAwgoM0AAakggoODIxgozQxUwJDIqMbIyMDIiCy ZBqVtGMCmMDKzAOmSzNzUdHTdJYxqTIwMLIwYxmYiGRvACBcUBqplZGzojYbbpSvMxCARhtCmBNSjxQOTRdIahn CxJNhOLQGs7mXC5V5QkJQYAt3FwMDCBNOqwcgMC iCbAjskEQ4gy7NEobQ4NcUK7hImuJeZgJazMGkwMSBpYQeyilOT8/NSipFEQeoV7BghwQAEAM45H7Y=');?>

不难发现,通过发布编译后的程序,应该可以有效的防止程序被篡改。
网站
http://turck-mmcache.sourceforge.net/
如何获得turck-mmcache
1 可以通过它的网站获得
2 从下面的网址下载
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. 进入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文件里加入如下内容:
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. 重新启动Apache
/etc/rc.d/rc.httpd restart
通过以上5步,turck-mmcache已经可以使用了,下面我们对加速、优化效果进行简单的测试。
测试
1. 编写一个compute.php文件,来进行一个大量循环的计算,在运算前后分别取系统时间,最后将两次时间相减,得出所用时间。(只是个粗略的估计)
compute.php文件内容如下
<? //============用来循环计算的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. 计算一下未编译时候所用的时间,也就是在浏览器里面调用我本刚刚写的compute.php文件。需要耐心等待一会,大约30秒左右(p3 500的cpu下)
3. 为了编译php文件方便,我们来编写一个叫做encoder的shell来编译php文件。
<1> 首先将/usr/local/turck-mmcache-2.4.6目录下的encoder.php文件复制到/usr/bin目录下
cp /usr/local/turck-mmcache-2.4.6/encoder.php /usr/bin/
<2> 用vi encoder建立encoder文件,内容如下:
#!/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> 对刚编写的shell给可执行权限,并移动到/usr/bin目录下
chmod +x encoder mv encoder /usr/bin/
<4> 通过encoder编译compute.php文件,编译后compute.php为编译后文件,源文件被命名为compute.php.bak保存
encode compute.php
<5> 在浏览器里调用编译后的compute.php文件,看看速度时候提高了?
我这里,原来要用27秒,编译后用22秒

php_screw和turck-mmcache的区别
php_screw只是单纯的对php代码加密,并没有加速和优化的效果。
turck-mmcache是通过对php代码的编译,来使php代码解释执行的速度可以接近二进制代码的速度。可以起到加速和优化php代码的作用。但是turck-mmcache编译后的代码,只是将源代码通过一定规则变成了二进制代码,并没有真正的加密。
所以如果要想确保代码的绝对安全就用php_screw,要是考虑到速度等因素,就是用turck-mmcache
PHP 相关文章推荐
php 分页函数multi() discuz
Jun 21 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
May 15 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
php 调用ffmpeg获取视频信息的简单实现
Apr 03 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
php实现图片压缩处理
Sep 09 PHP
解析如何用php screw加密php源代码
Jun 20 #PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 #PHP
php连接Access数据库错误及解决方法
Jun 20 #PHP
PHP连接Access数据库的方法小结
Jun 20 #PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 #PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 #PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 #PHP
You might like
谈谈新手如何学习PHP
2006/12/14 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
基于jquery实现多级菜单效果
2017/07/25 jQuery
Vue中控制v-for循环次数的实现方法
2018/09/26 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
python多线程http下载实现示例
2013/12/30 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
表决心的诗句大全
2014/03/11 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS