首页 > 编程技术 > php

eAccelerator加速php程序

发布时间:2016-11-25 15:52

eaccelerator加速php教程程序

什么是eaccelerator

概念:
eaccelerator 是一个免费开源的php加速、优化、编译和动态缓存的项目,它可以

通过缓存php代码编译后的结果来提高php脚本的性能,使得一向很复杂和离我们很

远的php脚本编译问题完全得到解决。通过使用eaccelerator,可以优化你的php代

码执行速度,降低服务器负载,可以提高php应用执行速度最高达10倍。

原理:
eaccelerator 通过把经过编译后的php代码缓存到共享内存中,并在用户访问的时

候直接调用从而起到高效的加速作用。它的效率非常高,从创建共享内存到查找编

译后的代码都在非常短的时间内完成,对于不能缓存到共享内存中的文件和代码,

eaccelerator还可以把他们缓存到系统磁盘上。
eaccelerator 同样还支持php代码的编译和解释执行,你可以通过encoder.php脚本

来对php代码进行编译达到保护代码的目的,经过编译后的代码必须运行在安装了

eaccelerator的环境下。eaccelerator编译后的代码不能被反编译,它不象其他一

些编译工具那样可以进行反编译,这将使得代码更加安全和高效。
注意:在共享内存里面寻找编译好的php程序时,会在很短的时间内产生一些锁定,

所以一个程序可以被多个进程同时执行。不适合放入共享内存的文件将被缓存到硬

盘上

eaccelerator安装配置

1、支持平台
由于aaccelerator提供了大部分基于共享内存的api,所以在*nix的平台上将得到更

好的支持,虽然也发布了基于windows平台的binary版本,但我在这里就只提供基于

*nix平台的配置和说明,目前可以支持的平台包括linux, freebsd, openbsd, mac

os x, solaris, aix en hp-ux。

2、系统要求
php4 or php5
autoconf
automake
libtool
m4
eaccelerator 只支持使用 mod_php 或者 fastcgi mode 安装的php

3、安装
先去eaccelerator官方下载最新版的源码包:

#tar -zxvf ./eaccelerator-0.9.5-beta2.tar.bz2
#cd eaccelerator-0.9.5-beta2
#export php_prefix="/usr/local" (把php安装目录导入到环境变量,freebsd默

认是/usr/local)
#$php_prefix/bin/phpize
#./configure --enable-eaccelerator=shared --with-php-

config=$php_prefix/bin/php-config
#make
#make install
4、ini文件配置
安装完成,下面开始配置php.ini文件,eaccelerator提供了两种配置和调用方式,

分别如下。

安装为 zend extension 模式:

zend_extension="/usr/local/lib/php/20050922/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
如果你使用了thread safe模式安装的php,你必须使用 “zend_extension_ts” 替

换第一行的 “zend_extension”.

安装为 php extension 模式:(这是大部分采用的方式)

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
有关php.ini文件的详细配置说明,请参照源码目录的readme文档或者访问官方文档

完成安装配置后,我们最后要创建缓存目录

#mkdir /tmp/eaccelerator
#chmod 777 /tmp/eaccelerator

测试

php代码中使用eaccelerator加速

下面有一个测试的代码,你可以测试一下eaccelerator强大的威力:(该代码在

cli 模式下可能无效)

<?php
class test_cache {
  var $pro = 'hello';
 
  function test_cache() {
    echo "object created!<br>/n";
  }
  function func() {
    echo ', the world!';
  }
  function now($t) {
    echo date('y-m-d h:i:s', $t);
  }
}
 
$tt = eaccelerator_get("test_tt");
if (!$tt)
{
  $tt = new test_cache;
  eaccelerator_put("test_tt", $tt);
  echo "no cached!<br>/n";
}
else {
  echo "cached<br>/n";
}
 
echo $tt->pro;
$tt->func();
$tt->now(time() + 86400);
?>

php教程 memcached安装与使用

1.简介

memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象

的方便的接口,特别是对于设计动态web程序时减少对数据库教程的访问。

memcache也提供用于通信对话(session_handler)的处理。

更多memcache 模块相关信息可以到 http://www.danga.com/memcached/ 查阅。

1.1.memcache在php.ini中的配置项列表 memcache在php.ini中的配置项列表
名称
默认值
是否可变
改变日志

memcache.allow_failover
“1”
php_ini_all
available since memcache 2.0.2.

memcache.max_failover_attempts
"20"
php_ini_all
available since memcache 2.1.0.

memcache.chunk_size
"8192"
php_ini_all
available since memcache 2.0.2.

memcache.default_port
"11211"
php_ini_all
available since memcache 2.0.2.

memcache.hash_strategy
"standard"
php_ini_all
available since memcache 2.2.0.

memcache.hash_function
"crc32"
php_ini_all
available since memcache 2.2.0.

session.save_handler
"files"
php_ini_all
supported since memcache 2.1.2

session.save_path
""
php_ini_all
supported since memcache 2.1.2

有关 php_ini_* 常量进一步的细节与定义参见php手册php.ini 配置选项。


下面摘一段代码,给大家一个直观的印象:(假设memcached安装在172.10.10.10上

面,端口号12121)

$memcache = new memcached();

$memcahce->connect('172.10.10.10', 12121);

$memcache->set('key', 'value');

$memcache->get('key');

上面的主要完成了memcached的简单操作流程:连接memcached服务器,设置值,取

值('key'的值是'value');

 

这里需要向大家说明一下addserver函数和connect函数,addserver是将多个服务器

放在连接池,而connect只是将连接某一台服务器;如果在使用了addserver,再使

用connect,这里就会只使用一台服务器。

以下代码是简单模拟的客户端操作

$fp = fsocketopen('172.10.10.10', 12121, $errorno, $errstr, 1);

if(!$fp)

  echo "$errstr";

else

{

  $out = "get key rn";

  fwrite($out);

  while(!feof($fp))

    $str  . = fgets($fp);

  

  if(stripos($str, 'end') ===0)

    exit("no value find")

  $arr = implode('rn', $str);

  echo $arr[1];

}

简单解释上面的代码,使用fsocketopen打开服务器的socket通讯接口,然后向其发

送get key命令, 然后获取返回的数据,并解析返回的数据。这里都没有做异常的

处理,在编程的时候要填

 

memcached 是一个键值存储系统,它将关键数据存储在内存中,大大减少存取数据

的时间。使用memcached的好处不言而喻,它不仅减少了系统访问数据库的压力,而

且提高系统的反应速度。至于什么样的系统需要使用memcache,笔者建议数据量大

,访问频繁系统可以采取memcached作为缓存的中间层。

使用memcached的缺点除了增加程序的代码量,还有就是不能保证数据库的实时性,

另外在第一次初始化数据库会需要额外的时间。但是这些的缺点比起它的优点是很

微不足道

创建目录在php教程中用到了mkdir函数,如果要无限创建目录就们利用递归就可以了。

<?php
$filepath = "test/upload/2010/image.gif";
createdir(dirname($filepath));
//接下来就可以move_uploaded_file了!

/*
* 功能:循环检测并创建文件夹
* 参数:$path 文件夹路径
* 返回:
*/
function createdir($path){
if (!file_exists($path)){
createdir(dirname($path));
mkdir($path, 0777);
}
}
?>

原理是递归加判断目录是否存在,否则就创建。

目中把错误等级设置为:error_reporting(e_all | e_strict);

数组变量未定义也会报错,其实挺好的,但有时候真的不需要报该错误,php教程的解决办法是:

@$_get['unkown'];

这样就可以放置该错误提示出来了.

exception:

throw new exception("username already taken");

 

更甚的情况,如果你认为客户端并不想用过多的操作而仅仅想看到异常信息,你可以抛出一个unchecked exception:

throw new runtimeexception("username already taken");

 

另外,你可以提供一个方法来验证该username是否被占用。

 

很有必要再重申一下,checked exception应该让客户端从中得到丰富的信息。要想让你的代码更加易读,请倾向于用unchecked excetpion来处理程序中的错误(prefer unchecked exceptions for all programmatic errors)。


4. document exceptions.

你可以通过javadoc’s @throws 标签来说明(document)你的api中要抛出checked exception或者unchecked exception。然而,我更倾向于使用来单元测试来说明(document)异常。不管你采用哪中方式,你要让客户端代码知道你的api中所要抛出的异常。这里有一个用单元测试来测试indexoutofboundsexception的例子:

public void testindexoutofboundsexception() {
    arraylist blanklist = new arraylist();
    try {
        blanklist.get(10);
        fail("should raise an indexoutofboundsexception");
    } catch (indexoutofboundsexception success) {}
}


上边的代码在请求blanklist.get(10)的时候会抛出indexoutofboundsexception,如果没有被抛出,将 fail("should raise an indexoutofboundsexception")显示说明该测试失败。通过书写测试异常的单元测试,你不但可以看到异常是怎样的工作的,而且你可以让你的代码变得越来越健壮。

 

下面作者将介绍界中使用异常的最佳实践(best practices for using exceptions)
1.  总是要做一些清理工作(always clean up after yourself)

如果你使用一些资源例如数据库教程连接或者网络连接,请记住要做一些清理工作(如关闭数据库连接或者网络连接),如果你的api抛出unchecked exception,那么你要用try-finally来做必要的清理工作:

删除指定数组下标元素我们利用unset函数来实现,下在看看关于unset语法
void unset ( mixed var [, mixed var [, ...]])

unset() 销毁指定的变量。注意在 php教程 3 中,unset() 将返回 true(实际上是整型值 1

 

$array = array(1=>'1',2=>'2',3=>'3',4=>'5',5=>'6');
print_r( $array );



array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 5
    [5] => 6
)

unset( $array[2]);
print_r($array);

array
(
    [1] => 1
    [3] => 3
    [4] => 5
    [5] => 6
)


本站原创,转载注明来源http://www.111cn.net 否则必究

标签:[!--infotagslink--]

您可能感兴趣的文章: