`
zhengdl126
  • 浏览: 2538878 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

php so模块扩展:phpize安装eaccelerator加速器和使用

    博客分类:
  • php
阅读更多

http://www.toplee.com/blog/100.html  参考网站

 

 

----------------------安装phpredis

 

https://github.com/nicolasff/phpredis/downloads

 

 

cd /tmp
tar zxvf nicolasff-phpredis-2.2.1-66-g89bdaf2.tar.gz
cd nicolasff-phpredis-89bdaf2/
/usr/local/php/bin/phpize
/configure --with-php-config=/usr/local/php/bin/php-config
make
make install
ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
cat /usr/local/php/etc/php.ini | grep redis
kill -USR2 `cat /dev/shm/pid/php-fpm.pid`
/usr/local/php/sbin/php-fpm -t

 

----------------安装配置

 

获得eaccelerator源代码eaccelerator-0.9.6-rc1.tar.bz2:
http://bart.eaccelerator.net/source/   

 

 

需要用到phpize,所以:

#yum -y install php-devel

#whereis phpize
phpize: /usr/bin/phpize /usr/share/man/man1/phpize.1.gz

 

#tar jxvf eaccelerator-0.9.6-rc1.tar.bz2

#cd eaccelerator-0.9.6-rc1

#/usr/bin/phpize

#./configure --enable-eaccelerator=shared --with-php-config=/usr/bin/php-config

#make

#make install

Installing shared extensions:     /usr/lib/php/modules/
注意上面的“Installing shared extensions”的地址,这是phpize告诉我们的扩展库的地址。
#ls -l /usr/lib/php/modules/  就可看到eaccelerator.so

 

#cd /etc/php.d

#vim eaccelerator.ini

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"    需要手动建立目录和权限
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="1"

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"

 


重启apache
查看phpinfo

 

 

----------------------------测试

 

如果你打开了eAccelerator的debug选项,可以从日志中看到类似下面的信息:

 


[root@localhost httpd]# tail -f eaccelerator_log
EACCELERATOR hit: "/var/www/html/test/index.php"
EACCELERATOR hit: "/var/www/html/test/index.php"
EACCELERATOR hit: "/var/www/html/phpinfo.php"

 

以上信息表示文件都得到了缓存和命中。

 

 

 

-----------------------------eAccelerator提供如下的API接口和文件 :(下述文件均在源码包的doc/php/目录下)

cd /tmp/eaccelerator-0.9.6-rc1/doc/php
[root@localhost php]# ls
cache.php  dasm.php  examples  info.php  shared_memory.php




有关上述文档详细说明请参考官方文档:API Documents:http://bart.eaccelerator.net/doc/phpdoc/

下面有部分网友翻译后的接口说明:
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





-----------------------------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);
    }
}

 

 

 

 

 

分享到:
评论

相关推荐

    PHP7.2.6安装sodium扩展

    使用 make 命令来编译扩展模块,并使用 make install 命令来安装扩展模块。 在编译扩展模块时,可能会遇到一些错误,例如 iconv 依赖项的错误。在这种情况下,可以使用 ZEND_EXTRA_LIBS 变量来指定 iconv 依赖项的...

    php缓存加速器eAccelerator配置详解.doc

    【PHP缓存加速器eAccelerator配置详解】 一、eAccelerator介绍 1、背景 eAccelerator是一款免费且开源的PHP加速器,它旨在提升PHP脚本的执行效率,通过缓存编译后的PHP代码,减少服务器负载。eAccelerator的出现...

    php的suhosin扩展安装suhosin-github主分支包

    本篇文章将详细介绍如何安装和配置Suhosin扩展,特别关注从GitHub的主分支获取并安装suhosin-master。 首先,理解Suhosin的作用至关重要。Suhosin分为两部分:一个PHP内核模块和一个PHP脚本过滤器。内核模块在PHP...

    php 扩展调用so动态库 教程

    编译安装扩展库,执行 `phpize`、`./configure`、`make` 和 `make install` 命令。重新配置 PHP,编辑 `php.ini` 文件,添加扩展库的配置信息。重启 web 服务器,并检查扩展库的安装结果。 第二部分:PHP 扩展库...

    php7.0扩展oci8安装(连接oracle扩展包与详细安装过程)

    4. 安装oci8扩展:使用`make`和`make install`命令编译并安装oci8扩展。这将把oci8.so动态链接库文件安装到PHP的扩展目录。 5. 更新PHP配置:在PHP的配置文件(通常是`php.ini`)中添加以下行: ``` extension=...

    centos php5.6环境安装 mongo.so扩展

    本案例聚焦于“CentOS PHP5.6环境下安装mongo.so扩展”,这是一个用于连接和操作MongoDB数据库的PHP扩展。MongoDB是一个高性能、无模式的分布式文档型数据库,而mongo.so是PHP与MongoDB进行交互的接口。 首先,我们...

    CentOs下安装PHP扩展 curl

    1. **检查PHP版本和已安装扩展** 在开始安装之前,我们需要确认当前PHP的版本以及已安装的扩展。打开终端,输入以下命令: ``` php -v ``` 这将显示PHP的版本信息和已安装的扩展。如果cURL不在列表中,那么我们...

    php7安装redis6扩展

    * 安装扩展:`make install` 3. 开启 Redis 扩展 安装完成后,需要在 PHP 配置文件中开启 Redis 扩展。在 php.ini 文件中添加以下配置: `extension=redis.so` 然后,需要重启 PHP-FPM 进程以使扩展生效。 4. ...

    linux下PHP扩展的安装(curl)

    接着,添加curl扩展模块引用: ``` extension = curl.so ``` 这里,你可以选择不指定`extension_dir`,只需将`curl.so`复制到PHP默认的扩展目录`/usr/local/php5/lib/php/extensions/`,并在`php.ini`中添加`...

    Ubuntu下安装php扩展

    本文主要介绍不随同PHP编译,而是通过生成单独的`.so`文件来安装扩展的方法,这种方法虽然执行效率可能略低,但能实现模块化的扩展管理,使得在不改变PHP原有安装的基础上,通过修改`php.ini`文件连接单独生成的`.so...

    Linux/FreeBSD下用C语言开发PHP的so扩展模块例解

    在Linux和FreeBSD操作系统上,使用C语言开发PHP的.so扩展模块是一项常见的任务,这主要涉及到PHP的内部机制以及C语言编程。这篇文章将深入解析这一过程,并提供一个实际的示例来帮助理解。 首先,我们需要了解PHP...

    Ubuntu安装redis和redis-php扩展

    在本文中,我们将学习如何在 Ubuntu 环境下安装 Redis 数据库和 Redis-PHP 扩展,以便在 PHP 项目中使用 Redis。 安装 Redis 1. 首先,需要下载 Redis 软件包,使用以下命令下载最新版本的 Redis: ``` sudo wget ...

    PHP5.6版本安装redis扩展(内附扩展包文件)

    通常,您可以使用包管理器(如`apt-get`或`yum`)来安装这些依赖。 3. **解压并编译扩展**: 解压缩下载的Redis扩展文件,进入解压后的目录。运行以下命令进行编译和安装: ``` phpize ./configure make sudo...

    linux下用phpize给PHP动态添加扩展.docx

    `phpize`是PHP提供的一个脚本,用于准备构建和安装PHP扩展。要使用`phpize`,首先需要确保你有一个与当前PHP版本完全匹配的源码包。例如,如果你的PHP版本是5.2.6,那么你需要下载对应的`php-5.2.6.tar.gz`源码包。 ...

    使用phpize建立php扩展 今天要讲的是linux下php扩展的入门篇 下面我来 ....doc

    按照提示,你需要执行以下步骤来编译并安装扩展: 1. `cd ..`:返回到`ext`目录。 2. `vi ext/jinzhesheng_module/config.m4`:编辑配置文件,根据需求进行调整。 3. `./buildconf`:重新构建配置文件。 4. `./...

    PHP安装redis模块

    本文将详细介绍如何在PHP环境中安装和配置Redis扩展模块。 首先,你需要确保你的系统中已经安装了PHP和Redis。对于PHP,你可以通过包管理器(如Ubuntu的`apt-get`或CentOS的`yum`)来安装。对于Redis,通常需要下载...

    php7的sphinx扩展,适用linux,mac

    3. 编译并安装扩展:运行`phpize`来配置编译环境,然后执行`./configure --with-sphinx=/path/to/sphinx`,最后使用`make && make install`完成编译和安装。 4. 更新PHP配置:将新安装的Sphinx扩展添加到php.ini文件...

    redis安装及php扩展redis的安装

    接着,需要编译和安装 PHP 扩展 Redis,使用命令 `/usr/local/php/bin/phpize` 和 `./configure --with-php-config=/usr/local/php/bin/php-config`。最后,需要安装 PHP 扩展 Redis,使用命令 `make && make ...

Global site tag (gtag.js) - Google Analytics