浅析使用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的历史和优缺点
Oct 09 PHP
一个odbc连mssql分页的类
Oct 09 PHP
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
使用php实现截取指定长度
Aug 06 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 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
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
JS 表单验证大全
2011/11/23 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
es6数据变更同步到视图层的方法
2019/03/04 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
python timestamp和datetime之间转换详解
2017/12/11 Python
Python Socket使用实例
2017/12/18 Python
Python字典底层实现原理详解
2019/12/18 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
好的自荐信的要求
2013/10/30 职场文书
感恩节活动方案
2014/01/27 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
借款协议书
2014/09/16 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
2021/04/12 Python
MySQL分库分表详情
2021/09/25 MySQL
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python