浅析使用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 相关文章推荐
体育彩票排列三组选三算法分享
Mar 07 PHP
php+js iframe实现上传头像界面无跳转
Apr 29 PHP
php截取html字符串及自动补全html标签的方法
Jan 15 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
php 微信开发获取用户信息如何实现
Dec 13 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 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报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
php数组冒泡排序算法实例
2016/05/06 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
PHP 构造函数和析构函数原理与用法分析
2020/04/21 PHP
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
layDate插件设置开始和结束时间
2018/11/15 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
Vue.js 实现地址管理页面思路详解(地址添加、编辑、删除和设置默认地址)
2019/12/11 Javascript
js仿360开机效果
2019/12/26 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
python实现数独算法实例
2015/06/09 Python
详解Django通用视图中的函数包装
2015/07/21 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
python字符串与url编码的转换实例
2018/05/10 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python如何实现线程间通信
2020/07/30 Python
大学自我鉴定
2013/12/20 职场文书
西式婚礼证婚词
2014/01/12 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
四十年同学聚会致辞
2015/07/28 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
nginx代理实现静态资源访问的示例代码
2022/07/07 Servers
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers