浅析使用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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
Sep 12 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
php微信支付之APP支付方法
Mar 04 PHP
php获取文件后缀的9种方法
Mar 22 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
Yii2表单事件之Ajax提交实现方法
May 04 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 n个不重复的随机数生成代码
2009/06/23 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
2013/08/15 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
php实现的mongoDB单例模式操作类
2018/01/20 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
详解能在多种前端框架下使用的表格控件
2017/01/11 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
python中关于日期时间处理的问答集锦
2013/03/08 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
电子商务专业学生的学习自我评价
2013/10/27 职场文书
银行门卫岗位职责
2013/12/29 职场文书
领导干部考察材料
2014/02/08 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
会计工作总结范文2014
2014/12/23 职场文书
先进班集体申报材料
2014/12/26 职场文书
迎新年主持词
2015/07/06 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
担保书格式范文
2015/09/22 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
python glom模块的使用简介
2021/04/13 Python