浅析使用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 相关文章推荐
自己动手做一个SQL解释器
Oct 09 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
php 异常处理实现代码
Mar 10 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
php用正则表达式匹配中文实例详解
Nov 06 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
php操作mongodb封装类与用法实例
Sep 01 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
jQuery select控制插件
2009/08/17 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
js 中 document.createEvent的用法
2010/08/29 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
Angular 4中如何显示内容的CSS样式示例代码
2017/11/06 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
学Python 3的理由和必要性
2019/11/19 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
开启Django博客的RSS功能的实现方法
2020/02/17 Python
python设置中文界面实例方法
2020/10/27 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
python 模块导入问题汇总
2021/02/01 Python
医学生自我评价
2014/01/27 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
公务员考察材料范文
2014/12/23 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
农村老人去世追悼词
2015/06/23 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技