+ -
当前位置:首页 → 问答吧 → slackware 10下加速、优化、编译php源代码

slackware 10下加速、优化、编译php源代码

时间:2004-08-21

来源:互联网

前提
上次因为要加密PHP源代码,防止发布的php程序被别人修改源代码,保护自己的劳动成果,向大家介绍了php_screw。这个软件确实很不错,但是只能起到加密的作用,并没有加速和优化的作用。
下面我们来看看今天的主要:Turck MMCache
它的作用是通过对php代码的编译来加速、优化php代码,我想如果发布的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
ZBqVtGMCmMDKzAOmSzNzUdHTdJYxqTIwMLIwYxmYiGRvACBcUBqplZGzojYbbpSvMxCARhtCmBNSjxQOTRdIahnCxJNhOLQGs7mXC5V5QkJQYAt3FwMDCBNOqwcgMC
iCbAjskEQ4gy7NEobQ4NcUK7hImuJeZgJazMGkwMSBpYQeyilOT8/NSipFEQeoV7BghwQAEAM45H7Y=');?>
网站
http://turck-mmcache.sourceforge.net/

下载
目前最新版本为 2.4.6

[软件环境]
系统:Slackware 10
软件:Apache 1.3.31
PHP 4.3.7
以上环境全部是slackware 10默认安装后自带的。具体的Apache+php+mysql安装方法参照如下
http://www.linuxsir.org/bbs/showthre...threadid=90024

安装
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文件================//
$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;
php /usr/bin/encoder.php ./$src -o $src2;
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秒

注意
我的Shell编的并不好,只是问了编译php的时候方便而已,大家可以自己因个人需要编写,主要就是调用encoder.php这个文件

如果要手动编译的话,就是如下命令
代码:
php /usr/bin/encoder.php 源文件名 -o 编译后的文件名
总结
我感觉这个软件要比php_screw好,因为可以对php文件进行加速和优化。
但就加密来讲肯定没有php_screw要好,因为只是对php文件进行了编译,并没有加密。
如果熟悉turck-mmcache的用户,完全可以写个反编译出来。

所以大家又想加速、优化,又不想将php明文存放在服务器上,就要turck-mmcache最好
要是单纯加密,不考虑速度的话,就用php_screw吧

作者: babo   发布时间: 2004-08-21