浅析使用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 多行多列显示
Aug 15 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
Oct 31 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
php实例分享之通过递归实现删除目录下的所有文件详解
May 15 PHP
使用PHP similar text计算两个字符串相似度
Nov 06 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
Mar 12 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
Laravel框架之解决前端显示图片问题
Oct 24 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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自动适应范围的分页代码
2008/08/05 PHP
php 破解防盗链图片函数
2008/12/09 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
javascript学习网址备忘
2007/05/29 Javascript
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
深入浅出学习python装饰器
2017/09/29 Python
用python处理MS Word的实例讲解
2018/05/08 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
python实现tail -f 功能
2020/01/17 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
python 利用panda 实现列联表(交叉表)
2021/02/06 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
婚前协议书范本
2014/04/15 职场文书
创业女性典型材料
2014/05/02 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
小学中队委竞选稿
2015/11/20 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python