最後更新: 2016-05-09



php5-xcache 是一個 PHP 的 opcode cacher 及 optimizer 來

opcode cacher 的功能: compiled state of PHP scripts into the shm (RAM)]

optimizer 的功能:

主頁: http://xcache.lighttpd.net/



  • Optimized opcode cache.
  • Readonly Cacher Protection
  • Automatically disables itself if the cache is corrupted
  • Disassembler
  • Decompiler (opcode --> php code)
  • Administrator Script
    view statistics
    view cached php/variable list
    clear cache
  • Win32 Binary


Debian 上的安裝


安裝: Debian6:

apt-get install php5-xcache

安裝: Centos6:

yum install php-xcache xcache-admin


  • /usr/share/xcache/admin/*.php               <-- php xcache panel
  • /etc/php5/conf.d/xcache.ini                      <-- Configure File
  • /usr/lib/php5/20060613+lfs/xcache.so    <-- 它就是 xcache 的本身



在 phpinfo() 可以見到



XCache Version     3.1.1
Modules Built     cacher optimizer coverager




# 載入 xcache
zend_extension = /usr/lib/php5/20060613+lfs/xcache.so

# Name                            Default value  
xcache.admin.user                 "admin"   
xcache.admin.pass                 "Your_PW"    <--- (<?php echo md5($your_password) ?>)
xcache.admin.enable_auth          "on"         <--- 當 on 時而 pass 是 "", 那 admin page 是用不到的
xcache.shm_scheme =               "mmap"       <--- shm allocator scheme implemenation
xcache.cacher                      On
xcache.stat =                      On          <--- 當它 Off 時, 系統會有更高效能, 因為 php 不用每次 access 都調用 stat()
xcache.optimizer                   On

xcache.size =               16M   <-- Default: 16M
xcache.count =                1   <-- Specify how many chunks to split the cache (cpu count)
                                      ( cat /proc/cpuinfo |grep -c processor )
                                      當那個 chunks 在編譯時, 其他程序/現成無法存取此共享記憶體
                                      如果 "xcache.size=16M" 及 "xcache.count=2" 時, 那每個 pool 只有 8M

xcache.slots =               8K   <-- hash hints (必須 count(items) > slots)
xcache.ttl seconds =          0   <-- 0=forever  (unit: sec)
xcache.gc_interval =        300   <-- 多久才 scan 1 次 ttl 過期的 cache (unit: sec)
xcache.var_size =             0   <--- Disable 此功能
xcache.var_slots =           8K
xcache.var_gc_interval      300   
xcache.readonly_protection           Off      <-- make sure only XCache module itself can modify the shared memory
xcache.mmap_path string      "/dev/zero"      <-- 

xcache.coverager =                   Off
xcache.coredump_directory             ""      <-- coverage viewer script 用的

xcache.test                          Off   

獨立 Server 可以設定成

; 0=forever

; 0=no scan
xcache.gc_interval = 0 


Readonly Protection


It is implemented by mmap'ing twice on same memory,

1 for read/write(rw) and the other for readonly(ro). XCache stores data into rw cache,

and fix the pointers up to ro cache, so all access is read from the ro memory.


Admin Page




Centos7 Install Xcache



yum install -y php-xcache xcache-admin



extension = xcache.so

xcache.admin.enable_auth = Off

xcache.shm_scheme =        "mmap"

xcache.mmap_path =           "/dev/zero"

xcache.count =                 1
xcache.slots =                8K
xcache.size  =               64M
xcache.var_size  =            0M

xcache.cacher =               On
xcache.stat   =               On
xcache.optimizer =            Off

Admin Page:





Alias /xcache /usr/share/xcache

<Directory /usr/share/xcache>
        # Apache 2.4
        Require ip

Gen Admin pw



PHP 的主要設定檔位於及順序

PHP will scan for SAPI specified ini first in the form of php-{$sapi}.ini, and the general php.ini later

For Example:

  • cgi           /etc/php-cgi.ini
  • cgi-fcgi     /etc/php-cgi-fcgi.ini
  • cli            /etc/php-cli.ini