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文档或者访问官方文档: ini setting
完成安装配置后,我们最后要创建缓存目录
#mkdir /tmp/eaccelerator
#chmod 777 /tmp/eaccelerator
5、验证安装结果
通过浏览器访问您的phpinfo()页面或者运行 php -i 得到php配置信息,里面如果看到类似下面的信息就表示安装成功了。
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
我的机器上同时还安装了Zend Optimizer3.0.1,所以看到的信息如下:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
with Zend Extension Manager v1.0.10, Copyright (c) 2003-2006, by Zend Technologies
with Zend Optimizer v3.0.1, Copyright (c) 1998-2006, by Zend Technologies
如果你打开了eAccelerator的debug选项,可以从日志中看到类似下面的信息
#tail /var/log/httpd/eAccelerator_log
EACCELERATOR hit: "/var/www/toplee.com/blog/index.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-blog-header.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-config.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-settings.php"
EACCELERATOR hit: "/var/www/toplee.com/blog/wp-content/plugins/wp-cache/wp-cache-phase1.php"
...
以上信息表示文件都得到了缓存和命中。
至此,我们就完成了全部的安装和配置,好好享受eAccelerator带给你的惊喜吧,根据Michael的测试,效果的确相当的好。
三、在PHP中可以使用eAccelerator的API开发
1、API和文档说明:
eAccelerator提供了便捷便捷而又稳定的本机缓存实现方式,由于大部分代码实现基于共享内存,所以只能在*nix平台中使用,Windows平台Michael就暂时不知道何时有这方面的支持了。
eAccelerator提供如下的API接口和文件:(下述文件均在源码包的doc/php/目录下)
文件列表:
cache.php
dasm.php
encoder.php
info.php
loader.php
session.php
shared_memory.php
接口列表:
array eaccelerator_cached_scripts ()
void eaccelerator_cache_output (string $key, string $eval_code, [int $ttl = 0])
void eaccelerator_cache_page (string $key, [int $ttl = 0])
void eaccelerator_cache_result (string $key, string $code, [int $ttl = 0])
void eaccelerator_caching (boolean $flag)
void eaccelerator_clean ()
void eaccelerator_clear ()
array eaccelerator_dasm_file (mixed $filename)
mixed eaccelerator_encode (mixed $src, [mixed $prefix = ''], [string $pre_content = ''], [string $post_content = ''])
void eaccelerator_gc ()
mixed eaccelerator_get (string $key)
array eaccelerator_info ()
array eaccelerator_list_keys ()
void eaccelerator_load ()
boolean eaccelerator_lock (string $key)
void eaccelerator_optimizer (boolean $flag)
void eaccelerator_purge ()
boolean eaccelerator_put (string $key, mixed $value, [int $ttl = 0])
array eaccelerator_removed_scripts ()
boolean eaccelerator_rm (string $key)
void eaccelerator_rm_page (string $key)
boolean eaccelerator_set_session_handlers ()
boolean eaccelerator_unlock (string $key)
有关上述文档详细说明请参考官方文档: API Documents
下面有部分网友翻译后的接口说明:
eaccelerator_put($key, $value, $ttl=0)
将 $value 以 $key 为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl 是这个缓存的生命周期,单位是秒,省略该参数或指定为 0 表示不限时,直到服务器重启清空为止。
eaccelerator_get($key)
根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据,如果这项缓存已经过期或不存在那么返回值是 NULL
eaccelerator_rm($key)
根据 $key 移除缓存
eaccelerator_gc()
移除清理所有已过期的 key
eaccelerator_lock($key)
为 $key 加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。
例如:
<?php
eaccelerator_lock
(
"
count
"
)
;
eaccelerator_put
(
"
count
"
,
eaccelerator_get
(
"
count
"
)
+
1
)
);
?>
eaccelerator_unlock($key)
根据 $key 释放锁
eaccelerator_cache_output($key, $eval_code, $ttl=0)
将 $eval_code 代码的输出缓存 $ttl 秒,($ttl参数同 eacclerator_put)
例如:
<?php
eaccelerator_cache_output
(
'
test
'
,
'
echo time(); phpinfo();
'
,
30
)
;
?>
eaccelerator_cache_result($key, $eval_code, $ttl=0)
将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output
例如:
<?php
eaccelerator_cache_result
(
'
test
'
,
'
time() . "Hello";
'
,
30
)
;
?>
eaccelerator_cache_page($key, $ttl=0)
将当前整页缓存 $ttl 秒。
例如:
<?php
eaccelerator_cache_page
(
$_SERVER
[
'
PHP_SELF
'
]
.
'
?GET=
'
.
serialize
(
$_GET
)
,
30
)
;
echo
time
()
;
phpinfo
()
;
?>
eaccelerator_rm_page($key)
删除由 eaccelerator_cache_page() 执行的缓存,参数也是 $key
2、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
)
;
?>
另外,据说在著名的vBulletin 3.60Beta版里面已经集成了对eAccelerator的支持,下面是一段来自vBulletin里面的代码
// #############################################################################
// eAccelerator
/**
* Class for fetching and initializing the vBulletin datastore from eAccelerator
*
*
@package
vBulletin
*
@version
$Revision: 0.1 $
*
@date
$Date: 2005/06/12 13:14:18 $
*/
class
vB_Datastore_eAccelerator
extends
vB_Datastore
{
/**
* Fetches the contents of the datastore from eAccelerator
*
*
@param
array Array of items to fetch from the datastore
*
*
@return
void
*/
function
fetch
(
$itemarray
)
{
if
(
!
function_exists
(
'
eaccelerator_get
'
))
{
trigger_error
(
"
eAccelerator not installed
"
,
E_USER_ERROR
)
;
}
foreach
(
$this
->
defaultitems
AS
$item
)
{
$this
->
do_fetch
(
$item
)
;
}
if
(
is_array
(
$itemarray
))
{
foreach
(
$itemarray
AS
$item
)
{
$this
->
do_fetch
(
$item
)
;
}
}
$this
->
check_options
()
;
// set the version number variable
$this
->
registry
->
versionnumber
=&
$this
->
registry
->
options
[
'
templateversion
'
]
;
}
/**
* Fetches the data from shared memory and detects errors
*
*
@param
string title of the datastore item
*
*
@return
void
*/
function
do_fetch
(
$title
)
{
$data
=
eaccelerator_get
(
$title
)
;
if
(
$data
===
null
)
{
// appears its not there, lets grab the data, lock the shared memory and put it in
$data
=
''
;
$dataitem
=
$this
->
dbobject
->
query_first
(
"
SELECT title, data FROM
"
.
TABLE_PREFIX
.
"
datastore
WHERE title = '
"
.
$this
->
dbobject
->
escape_string
(
$title
)
.
"
'
"
)
;
if
(
!
empty
(
$dataitem
[
'
title
'
]))
{
$data
=&
$dataitem
[
'
data
'
]
;
$this
->
build
(
$dataitem
[
'
title
'
]
,
$dataitem
[
'
data
'
])
;
}
}
$this
->
register
(
$title
,
$data
)
;
}
/**
* Updates the appropriate cache file
*
*
@param
string title of the datastore item
*
*
@return
void
*/
function
build
(
$title
,
$data
)
{
if
(
!
function_exists
(
'
eaccelerator_put
'
))
{
trigger_error
(
"
eAccelerator not installed
"
,
E_USER_ERROR
)
;
}
eaccelerator_lock
(
$title
)
;
eaccelerator_put
(
$title
,
$data
)
;
eaccelerator_unlock
(
$title
)
;
}
}
四、附录和参考资料
eAccelerator 官方网站 :[url]http://eaccelerator.net[/url]
Websites using eAccelerator ?
- [url]http://www.advfn.com/[/url] (2006/03/03) Advanced Financial Network, serves over 7 million page hits per day.
- [url]http://www.domaincity.co.uk/[/url] (2005/01/29) Andrew Hutchings - Linux Guru - Just a quick message to say we are now using eaccelerator as a replacement for mmcache on 2 of our 3 node round robin clusters, 2.5million hits per day. We will be doubling this in the next few week, as well as implementing new clusters.
- [url]http://www.ets-online.de/[/url] (2005/02/07) Denny Reeh - System Developer - The e/t/s didactic media provides an elearning server (Distance Learning System) written in PHP. We are hosting the systems for our customers mainly by ourself. So we have 5 live-servers (freebsd, apache2, php4, eaccelerator) with 5.5 million hits per month. First without eAccelerator we should have installed more servers for good performance and secondly we improve the customer convenience by quartering the medium response time of a script.
- [url]http://www.gorgoyle.com/[/url] (2005/08/03) Gorgoyle.com is Yet Another Debian Personal Server with just a few lost Internet wanderers passing by, powered by a glorious Celeron 433 that needed some fresh air… With eAccelerator the result is quite impressive: users say the server speed is now 10000% higher (no joke!) So thank you all and keep up the good work!!! Server: eAccelerator 0.9.5 beta 1 Apache/2.0.55 (Debian) mod_python/3.1.3 Python/2.3.5 PHP/4.4.2-1 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2
- [url]http://www.mafia-inc.de/[/url] (2005/05/24) The Mafia-Incorporated is a succesfull Browser game with around 2.500.000 page impressions each day and over 5000 users. Server: PHP Version 4.3.10-9, eAccelerator 0.9.2a, Debian , Apache 2.0.53
- [url]http://www.mondespersistants.com/[/url] (2005/01/07) An other game oriented french website with 6 000 000 pageloads monthly. [url]http://guildes.mondespersistants.com[/url] is a full PHP5 oo development. Theses websites are running under freebsd / apache 1.3 / php 5.0.3 / eaccelerator 0.9.2
- [url]http://www.moviemaze.de/[/url] (2005/12/09) Markus Ostertag - Movie Maze is a large german online-magazine with trailer, wallpaper, reviews, news and much more. Currently we use three servers (Suse & Debian with Apache 2, PHP4) with eAccelerator and provide more than 3TB data to ~1 Mio. users each month.
- [url]http://www.rtvslo.si[/url] (2005/01/04) The Slovenian National RTV Station and its news/misc portal with forums. Over 3500 users and more than 37000 forum messages in a year. Two round-robin servers for the masses, and an administrator server. 6 000 000 pageloads monthly.
- [url]http://www.shroomery.org/[/url] (2006/03/28) A site about mushrooms and mycology, serving 20,000,000 pages per month. Web and database server are identical dual 64-bit Xeons with 4GB and SCSI RAID5 running Gentoo. eAccelerator help keep our page generation time under .1 second!
-
- [url]http://www.sourceforge.net/[/url] (2005/04/25) SourceForge.net is the world’s largest Open Source software development web site, hosting more than 100,000 projects and over 1,000,000 registered users with a centralized resource for managing projects, issues, communications, and code. SourceForge.net has the largest repository of Open Source code and applications available on the Internet, and hosts more Open Source development products than any other site or network worldwide. SourceForge.net provides a wide variety of services to projects we host, and to the Open Source community. eAccelerator is used on the webserver cluster for their frontpage.
Companies offering hosting with eAccelerator enabled ?
- [url]http://lylix.net/[/url] (2006/04/29) Offering webhosting w/ Apache/2.0.55, PHP 5.0.5, and eAccelerator 0.9.5 beta1 on Gentoo Linux servers. Also a provider of quality Virtual Private Server (VPS) hosting, including 32 and 64-bit platforms. Most VPS images have a pre-installed LAMP environment w/ eAccelerator installed and configured.
- [url]http://www.ulyssis.org[/url] A student organisation which provides shell and internet services for students at very cheap prices.
本文为Michael原创和整理,转载请保留出处:[url]http://www.toplee.com/blog/?p=100[/url]