浅析使用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.MVC的模板标签系统(五)
Sep 05 PHP
基于mysql的bbs设计(四)
Oct 09 PHP
php 清除网页病毒的方法
Dec 05 PHP
php 远程关机操作的代码
Dec 05 PHP
PHP无限分类代码,支持数组格式化、直接输出菜单两种方式
May 18 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 PHP
php数据类型判断函数有哪些
Sep 23 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
我整理的PHP 7.0主要新特性
Jan 07 PHP
PHP迭代与递归实现无限级分类
Aug 28 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找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
js下弹出窗口的变通
2007/04/18 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
Angularjs cookie 操作实例详解
2017/09/27 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
python 日志增量抓取实现方法
2018/04/28 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python随机模块random使用方法详解
2020/02/14 Python
django admin 添加自定义链接方式
2020/03/11 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
化工机械应届生求职信
2013/11/04 职场文书
编辑求职信样本
2013/12/16 职场文书
先进工作者获奖感言
2014/02/08 职场文书
超市重阳节活动方案
2014/02/10 职场文书
工艺员岗位职责
2014/02/11 职场文书
大学活动总结范文
2014/04/29 职场文书
农行心得体会
2014/09/02 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
放假通知范文
2015/04/14 职场文书
导游词之秦始皇兵马俑博物馆
2019/09/29 职场文书
OpenCV-Python 实现两张图片自动拼接成全景图
2021/06/11 Python