Installing PHP XCache on CentOS 5

XCache is a PHP opcode cacher, which basically means that it will cache the compiled code the first time a PHP page/script is executed thus avoiding the compilation step on subsequent executions.

I used the 1.2.2. release of XCache and followed the quick guide instructions to install from source.

The installation requires that the php-devel package is installed. This is required to compile PHP extensions (the comand phpize is required for this installation).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@testserver xcache-1.2.2]# yum install php-devel
Dependencies Resolved
=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 php-devel               i386       5.1.6-20.el5_2.1  updates           512 k
Updating for dependencies:
 php                     i386       5.1.6-20.el5_2.1  updates           1.1 M
 php-cli                 i386       5.1.6-20.el5_2.1  updates           2.1 M
 php-common              i386       5.1.6-20.el5_2.1  updates           154 k
 php-gd                  i386       5.1.6-20.el5_2.1  updates           113 k
 php-ldap                i386       5.1.6-20.el5_2.1  updates            35 k
 php-mbstring            i386       5.1.6-20.el5_2.1  updates           969 k
 php-mysql               i386       5.1.6-20.el5_2.1  updates            84 k
 php-pdo                 i386       5.1.6-20.el5_2.1  updates            62 k
 php-xml                 i386       5.1.6-20.el5_2.1  updates            94 k
Transaction Summary
=============================================================================
Install      1 Package(s)
Update       9 Package(s)
Remove       0 Package(s)
Total download size: 5.2 M
Is this ok [y/N]:

It appears that this will also update the core PHP package and dependancies, so care should be taken. Try this on a test server and not your production server!

Here are the steps I took to install XCache:

1
2
3
4
5
6
7
8
[root@testserver ~]# tar -zxf xcache-1.2.2.tar.gz
[root@testserver ~]# cd xcache-1.2.2
[root@testserver xcache-1.2.2]# phpize
[root@testserver xcache-1.2.2]# ./configure --enable-xcache
[root@testserver xcache-1.2.2]# make
[root@testserver xcache-1.2.2]# make install
[root@testserver xcache-1.2.2]# cp /etc/php.ini /etc/php.ini.bk
[root@testserver xcache-1.2.2]# cat xcache.ini >> /etc/php.ini

In my configuration the xcache.ini and resulting php.ini had the wrong path to the module that has been installed. The module was installed in /usr/lib/php/modules/ but the configuration was looking in /usr/local/lib/php/extensions/non-debug-non-zts-xxx/.

All that was needed was a simple change to the configuration file to comment out the fully qualified path and tell it to use the extensions directory:

1
2
3
4
5
6
7
8
9
10
[xcache-common]
;; install as zend extension (recommended), normally "$extension_dir/xcache.so"
;; zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-xxx/xcache.so
; zend_extension_ts = /usr/local/lib/php/extensions/non-debug-zts-xxx/xcache.so
;; For windows users, replace xcache.so with php_xcache.dll
;; zend_extension_ts = c:/php/extensions/php_xcache.dll
;; or install as extension, make sure your extension_dir setting is correct
 extension = xcache.so
;; or win32:
; extension = php_xcache.dll

Then just check it’s installed:

1
2
3
4
5
[root@testserver xcache-1.2.2]# php -v
PHP 5.1.6 (cli) (built: Jul 16 2008 19:53:00)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
    with XCache v1.2.2, Copyright (c) 2005-2007, by mOo

Success! However Apache must be restarted in order for this to work with PHP web pages.

1
service httpd restart

Now if you access a page containing the phpinfo(); function you should be able to search for XCache and find it.

XCache is now installed and running.

I did not see the need to install the php-devel package on our live servers and I know that our live servers are identical to our test servers other than hard disk and memory sizes (we use VMWare extensively and they come from the same template).

This means that all the binaries compiled on the test server should be compatible with our live servers, so I just copied the xcache-1.2.2 folder from the test server and followed the above steps again starting with the “make install” step.

1
[root@testserver ~]# tar -cvzf xcache-install.tgz xcache-1.2.2/

copy this to the /root/ directory on the live server

1
2
3
4
5
6
7
8
9
10
[root@liveserver ~]# tar -xvzf xcache-install.tgz
[root@liveserver xcache-1.2.2]# make install
[root@liveserver xcache-1.2.2]# cp /etc/php.ini /etc/php.ini.bk
[root@liveserver xcache-1.2.2]# cat xcache.ini >> /etc/php.ini
[root@liveserver xcache-1.2.2]# vi /etc/php.ini
[root@liveserver xcache-1.2.2]# php -v
PHP 5.1.6 (cli) (built: Sep 20 2007 10:16:10)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
    with XCache v1.2.2, Copyright (c) 2005-2007, by mOo

Leave a Reply