Home / Install APC for PHP on Linux

Install APC for PHP on Linux

APC is the Alternative PHP Cache, which is a free, open, and robust framework for caching and optimizing PHP intermediate code. What this means is that APC reads your PHP files, parses them into a more efficient binary format and then caches them in memory so that each request for your PHP files and PHP library files can be fed from the parsed cache. This will generally lead to a speed increase when serving a PHP site, especially one with a lot of library files. This post looks at how to install APC for PHP on Linux. The Linux distribution I used was CentOS 5, but it should be fairly similar for most distros.

This article is translated to Serbo-Croatian language by WHGeeks .

Download APC from PHP PECL

First of all you need to download the APC code from the PHP PECL library. So change directory to somewhere like /tmp and then get the latest version like so:

$ wget http://pecl.php.net/get/APC

This will always get the latest version, and in my case when I installed it just now downloaded APC-3.0.16.tgz like so:

--22:58:41--  http://pecl.php.net/get/APC
Resolving pecl.php.net...
Connecting to pecl.php.net||:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 114298 (112K) [application/octet-stream]
Saving to: `APC-3.0.16.tgz'

100%[=====================>] 114,298     97.1K/s   in 1.1s

22:58:43 (97.1 KB/s) - `APC-3.0.16.tgz' saved [114298/114298]

So then you need to extract the files:

$ tar -zxf APC-3.0.16.tgz

and change into the APC directory:

$ cd APC-3.0.16

Install APC

The next step is to run the "phpize" command. This requires that you have PHP development package installed. On CentOS this is php-devel (installed by running "yum install php-devel") and it should have a similar name on other Linux distros.

$ phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20050922
Zend Extension Api No:   220051025

You then configure APC, telling it where the executable file php-config is. If you don’t know where this is, then do this:

$ whereis php-config

which will return something like:

php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz

and then run the configure command like so:

./configure --enable-apc --enable-apc-mmap --with-apxs --with-php-config=/usr/bin/php-config

This will go ahead and do some configuring stuff which will look something like this:

checking for egrep... grep -E
checking for a sed that does not truncate output... /bin/sed
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
configure: creating ./config.status
config.status: creating config.h

Now that configure is done, it’s just a matter of running make :

$ make
Libraries have been installed in:

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).

and then make install:

$ make install
Installing shared extensions:     /usr/lib64/php/modules/

and restarting the Apache web server:

/etc/init.d/httpd restart

The APC cache will now be enabled. You can confirm this by creating a script which calls the phpinfo() command and looking for the APC section. It will have been switched on by default by adding a "extension=apc.so" line to your /etc/php.ini file, but you may want to add more settings to configure it more. The INSTALL file suggests this (I have put the default values at the end of each line which is what is set if you don’t set anything in the php.ini file):

apc.enabled=1                       # default = 1
apc.shm_segments=1                  # default = 1
apc.shm_size=128                    # default = 30
apc.ttl=7200                        # default = 0
apc.user_ttl=7200                   # default = 0
apc.num_files_hint=1024             # default = 1000
apc.mmap_file_mask=/tmp/apc.XXXXXX  # default = no value
apc.enable_cli=1                    # default = 0

And that’s all there is to it. There is also a monitoring script available so you can see what’s being cached and how much memory is being used etc. You can read about this in my "Displaying PHP APC Cache Information" post.

Update November 5th 2008: I just installed this on another server and I didn’t have any issues installing it but it didn’t add the extension=apc.so line to the /etc/php.ini file automatically. So if it doesn’t appear to be working, check the php.ini to ensure the line is there and add it if not.

This article is translated to Serbo-Croatian language by WHGeeks .