浅析使用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和ACCESS写聊天室(九)
Oct 09 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
Jan 31 PHP
常见php数据文件缓存类汇总
Dec 05 PHP
linux中cd命令使用详解
Jan 08 PHP
PHP代码实现表单数据验证类
Jul 28 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
JS实现div居中示例
2014/04/17 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
详解Python操作RabbitMQ服务器消息队列的远程结果返回
2016/06/30 Python
python如何实现反向迭代
2018/03/20 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
django基于restframework的CBV封装详解
2019/08/08 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
python如何查看网页代码
2020/06/07 Python
解析python 中/ 和 % 和 //(地板除)
2020/06/28 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
车间班组长岗位职责
2013/11/13 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
公司清洁工岗位职责
2013/12/14 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python
Python编程super应用场景及示例解析
2021/10/05 Python
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL