浅析使用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 相关文章推荐
批量修改RAR文件注释的php代码
Nov 20 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
Jun 28 PHP
PHP CURL获取返回值的方法
May 04 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
PHP实现Soap通讯的方法
Nov 03 PHP
php获取远程文件内容的函数
Nov 02 PHP
PHP随机数 C扩展随机数
May 04 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
laravel 执行迁移回滚示例
Oct 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下载xls文件(自己动手写的)
2014/04/18 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
限制复选框的最大可选数
2006/07/01 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
JS常见错误(Error)及处理方案详解
2020/07/02 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
c++生成dll使用python调用dll的方法
2014/01/20 Python
Python中文字符串截取问题
2015/06/15 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
python numpy格式化打印的实例
2018/05/14 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
python使用smtplib模块发送邮件
2020/12/17 Python
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
深圳茁壮笔试题
2015/05/28 面试题
开工仪式主持词
2014/03/20 职场文书
财产公证书格式
2014/04/10 职场文书
政府个人对照检查材料
2014/08/28 职场文书
清洁员岗位职责
2015/02/15 职场文书
关于感恩的作文
2019/08/26 职场文书
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers