浅析使用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 01 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 PHP
php搜索文件程序分享
Oct 30 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
Dec 02 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 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 结果集的分页实现代码
2009/03/10 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
给ECShop添加最新评论
2015/01/07 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
jQuery参数列表集合
2011/04/06 Javascript
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
使用js 设置url参数
2013/07/08 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
javascript自定义滚动条实现代码
2020/04/20 Javascript
最常见的左侧分类菜单栏jQuery实现代码
2016/11/28 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
vue项目打包部署_nginx代理访问方法详解
2018/09/20 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
python实现在pandas.DataFrame添加一行
2018/04/04 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
2020/02/26 Python
CSS 3.0文字悬停跳动特效代码
2020/10/26 HTML / CSS
C#如何允许一个类被继承但是避免这个类的方法被重载?
2015/02/24 面试题
应用艺术专业个人的自我评价
2014/01/03 职场文书
给老师的道歉信
2014/01/11 职场文书
大学校园生活自我鉴定
2014/01/13 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
艾滋病宣传标语
2014/06/25 职场文书
装配出错检讨书
2014/09/23 职场文书
出生证明范本
2015/06/15 职场文书
Python字符串常规操作小结
2022/04/03 Python