> 백엔드 개발 > PHP 튜토리얼 > PHP 가속기 eAccelerator의 구성 및 사용 단계에 대한 자세한 설명

PHP 가속기 eAccelerator의 구성 및 사용 단계에 대한 자세한 설명

php中世界最好的语言
풀어 주다: 2023-03-27 06:22:02
원래의
6892명이 탐색했습니다.

이번에는 PHP 가속기 eAccelerator 구성 및 사용 단계에 대해 자세히 설명하겠습니다. PHP 가속기 eAccelerator 구성 및 사용 시 주의 사항은 무엇입니까? 다음은 실제 사례입니다.

시스템 성능을 더 향상시키기 위해 PHP 최적화를 고려 중입니다. 저는 지난 2년 동안 MMCache와 eAccelerator를 접해왔고 특히 이번 최적화를 위해 eAccelerator를 매우 좋아합니다.

일부 eAccelerator 구성 및 최적화 문서를 공유하세요.

1. eAccelerator 소개

1. 배경

eAccelerator는 무료 오픈 소스 PHP 가속, 최적화, 컴파일 및 동적 캐싱 프로젝트로, PHP 코드 컴파일 결과를 캐싱하여 PHP를 향상시킬 수 있습니다. . 스크립트의 성능은 항상 복잡하고 멀리 떨어져 있던 PHP 스크립트 컴파일 문제를 완전히 해결했습니다. eAccelerator를 사용하면 PHP 코드의 실행 속도를 최적화하고, 서버 부하를 줄이며, PHP 애플리케이션의 실행 속도를 최대 10배까지 높일 수 있습니다.

eAccelerator 프로젝트는 터크 MMCache 프로젝트의 한 부분으로 제안 및 개발되면서 2004년에 탄생했습니다. Turck MMCache는 Dmitry Stogov가 개발한 매우 뛰어난 PHP 메모리 캐시 가속 시스템입니다. 현재 이 프로젝트는 오랫동안 업데이트되지 않았습니다. 최신 PHP5.x 지원은 아직 제공되지 않습니다.

2. 원리

eAccelerator는 컴파일된 PHP 코드를 공유 메모리에 캐시하고 사용자가 액세스할 때 직접 호출하여 효율적인 가속 역할을 합니다. 공유 메모리 생성부터 컴파일된 코드 검색까지 매우 짧은 시간에 완료됩니다. 공유 메모리에 캐시할 수 없는 파일과 코드의 경우 eAccelerator가 이를 시스템 디스크에도 캐시할 수 있습니다.

eAccelerator는 PHP 코드의 컴파일 및 해석도 지원합니다. Encoder.php 스크립트를 통해 PHP 코드를 컴파일하여 코드를 보호할 수 있습니다. 컴파일된 코드는 eAccelerator가 설치된 환경에서 실행되어야 합니다. eAccelerator로 컴파일된 코드는 디컴파일이 가능한 다른 컴파일 도구와 달리 디컴파일이 불가능하므로 코드가 안전하고 효율적으로 만들어집니다.

2. eAccelerator 설치 및 구성

1. 지원 플랫폼

aAccelerator는 대부분의 API를 공유 메모리 기반으로 제공하므로 *nix 플랫폼에서도 더 잘 지원될 예정입니다. 은 Windows 플랫폼 기반의 바이너리 버전이지만 여기서는 *nix 플랫폼 기반의 구성 및 지침만 제공합니다. 현재 지원되는 플랫폼에는 Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, AIX 및 HP-UX가 포함됩니다.

2. 시스템 요구사항

  • php4 또는 php5

  • autoconf

  • automake

  • libtool

  • m4

eAccelerator는 mod_php 또는 fastcgi 모드를 사용하여 설치된 PHP만 지원합니다.

3. 설치

먼저 eAccelerator 공식 웹사이트로 이동하여 최신 버전의 소스 코드 패키지를 다운로드하세요: eaccelerator-0.9.5-beta.tar.bz2

1

2

3

4

5

6

7

#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 instal

로그인 후 복사

4.ini 파일 구성

설치가 완료되면 php.ini 구성 파일을 시작하겠습니다. eAccelerator는 다음과 같이 두 가지 구성 및 호출 방법을 제공합니다.

Zend 확장 모드로 설치:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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"

로그인 후 복사

스레드 안전 모드를 사용하여 PHP를 설치하는 경우 첫 번째 줄의 "zend_extension"을 대체하기 위해 "zend_extension_ts"를 사용해야 합니다.

PHP 확장 모드로 설치: (대부분의 방법입니다. 채택)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 설정을 참조하세요.
설치 및 구성을 완료한 후 마지막으로 캐시 디렉토리

1

2

#mkdir /tmp/eaccelerator

#chmod 777 /tmp/eaccelerator

로그인 후 복사

5 , 설치 결과 확인

브라우저를 통해 phpinfo() 페이지를 방문하거나 php -i를 실행하여 PHP 구성 정보를 얻으면 다음과 유사한 정보가 표시되면 설치를 의미합니다. 성공했습니다.

1

2

3

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 Optimizer 3.0.1도 내 컴퓨터에 설치되어 있어서 보이는 정보는 다음과 같습니다.

1

2

3

4

5

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의 디버그 옵션을 켜면 로그에서 다음과 비슷한 정보를 볼 수 있습니다

1

2

3

4

5

6

#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/目录下)

文件列表:

1

2

3

4

5

6

7

cache.php

dasm.php

encoder.php

info.php

loader.php

session.php

shared_memory.php

로그인 후 복사

接口列表

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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(http://bart.eaccelerator.net/doc/phpdoc/)

下面有部分网友翻译后的接口说明:

1

eaccelerator_put($key, $value, $ttl=0)

로그인 후 복사

将 $value 以 $key 为键名存进缓存(php4下支持对像类型,看源码好像zend2里不支持了),$ttl 是这个缓存的生命周期,单位是秒,省略该参数或指定为 0 表示不限时,直到服务器重启清空为止。

1

2

3

4

eaccelerator_get($key)  根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据,如果这项缓存已经过期或不存在那么返回值是 NULL

eaccelerator_rm($key)  根据 $key 移除缓存

eaccelerator_gc()  移除清理所有已过期的 key

eaccelerator_lock($key)  为 $key 加上锁定操作,以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。

로그인 후 복사

1

2

3

4

5

6

<?php   

eaccelerator_lock("count");   

eaccelerator_put("count",eaccelerator_get("count")+1)); 

?>

 

eaccelerator_unlock($key)

로그인 후 복사

根据 $key 释放锁

1

eaccelerator_cache_output($key, $eval_code, $ttl=0)

로그인 후 복사

将 $eval_code 代码的输出缓存 $ttl 秒,($ttl参数同 eacclerator_put)
例如:

1

2

3

4

5

6

<?php

eaccelerator_cache_output(&#39;test&#39;, &#39;echo time(); phpinfo();&#39;, 30);

?>

 

 

eaccelerator_cache_result($key, $eval_code, $ttl=0)

로그인 후 복사

将 $eval_code 代码的执行结果缓存 $ttl 秒,($ttl参数同 eacclerator_put),类似 cache_output
例如:

1

2

3

4

5

<?php

eaccelerator_cache_result(&#39;test&#39;, &#39; time() . "Hello";&#39;, 30);

?>

 

eaccelerator_cache_page($key, $ttl=0)

로그인 후 복사

将当前整页缓存 $ttl 秒。
例如:

1

2

3

4

5

6

7

8

<?php   

eaccelerator_cache_page($_SERVER[&#39;PHP_SELF&#39;].&#39;?GET=&#39;.serialize($_GET),30);

echo time();

phpinfo();

?>

 

 

eaccelerator_rm_page($key)

로그인 후 복사

删除由 eaccelerator_cache_page() 执行的缓存,参数也是 $key

2、PHP代码中使用eAccelerator加速

测试下eAccelerator强大的威力:(该代码在 cli 模式下可能无效)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<?php

class test_cache {

  var $pro = &#39;hello&#39;;

  

  function test_cache() {

    echo "Object Created!<br>\n";

  }

  function func() {

    echo &#39;, the world!&#39;;

  }

  function now($t) {

    echo date(&#39;Y-m-d H:i:s&#39;, $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里面的代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

<?php

// #############################################################################

// 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(&#39;eaccelerator_get&#39;))

        {

            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[&#39;templateversion&#39;];

    }

  

    /**

    * 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 = &#39;&#39;;

            $dataitem = $this->dbobject->query_first("

                SELECT title, data FROM " . TABLE_PREFIX . "datastore

                WHERE title = &#39;" . $this->dbobject->escape_string($title) ."&#39;

            ");

            if (!empty($dataitem[&#39;title&#39;]))

            {

                $data =& $dataitem[&#39;data&#39;];

                $this->build($dataitem[&#39;title&#39;], $dataitem[&#39;data&#39;]);

            }

        }

        $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(&#39;eaccelerator_put&#39;))

        {

            trigger_error("eAccelerator not installed", E_USER_ERROR);

        }

        eaccelerator_lock($title);

        eaccelerator_put($title, $data);

        eaccelerator_unlock($title);

    }

}

?>

로그인 후 복사

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP7基于函数方式使用lib库案例代码分析

PHP找出链表中环入口节点步骤详解

위 내용은 PHP 가속기 eAccelerator의 구성 및 사용 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿