浅析使用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面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
php 操作excel文件的方法小结
Dec 31 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
PHP获取用户的浏览器与操作系统信息的代码
Sep 04 PHP
php strrpos()与strripos()函数
Aug 31 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
php二维码生成
Oct 19 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
Laravel使用原生sql语句并调用的方法
Oct 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
thinkPHP实现基于ajax的评论回复功能
2018/06/22 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
js数组操作学习总结
2013/11/04 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
纯js模仿windows系统日历
2017/02/04 Javascript
JS中的多态实例详解
2017/10/15 Javascript
vue-lazyload图片延迟加载插件的实例讲解
2018/02/09 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
Promise扫盲贴
2019/06/24 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
windows10系统中安装python3.x+scrapy教程
2016/11/08 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
求高于平均分的学生学号及成绩
2016/09/01 面试题
啤酒销售实习自我鉴定
2013/09/24 职场文书
小学生获奖感言范文
2014/02/02 职场文书
安踏广告词改编版
2014/03/21 职场文书
元旦晚会主持词
2014/03/24 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android