While developing scalable web applications you will come across memcached at some point. Memcached is a free & open source, high-performance, distributed memory object caching system.
XAMPP is great for development in a local environment but does not come with a php memcached extension preinstalled. Since there are 2 good memcached php extensions in the PECL repository (memcached and memcache) it could be as easy as installing them through XAMPPs PECL installer. Unfortunately XAMPP for Mac (1.7.3) is still compiled for 32bit and the PECL installer would create a 64bit snow leopard extension. So let’s do it manually by setting some 32bit flags…
Install memcache PHP extension (2.2.5) for XAMPP (1.7.3) under Mac OS X 10.6 Snow Leopard (10.6.2).
Prerequisites
- make sure Apple Developer Tools (Xcode) are installed
- make sure XAMPP Developer Package is installed
Installation Process
$ cd /tmp
$ pecl download memcache
$ tar xzf memcache-2.2.5.tgz
$ cd memcache-2.2.5
$ /Applications/XAMPP/xamppfiles/bin/phpize-5.3.1
The next line looks just a bit complicated because it tries to deal with architecture problems between XAMPP (compiled for 32bit) and Snow Leopard (compiles everything by default to 64bit):
$ MACOSX_DEPLOYMENT_TARGET=10.6 CFLAGS='-O3 -fno-common -arch i386 -arch x86_64' LDFLAGS='-O3 -arch i386 -arch x86_64' CXXFLAGS='-O3 -fno-common -arch i386 -arch x86_64' ./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config-5.3.1
$ make
$ sudo make install
Change XAMPPs php.ini to load the extension:
# below [Dynamic Extensions]
extension=memcache.so
Those steps enable you to use memcached in your PHP Code. But to actually test the application and caching in your local development environment you have to start the memcached daemon. Fortunately memcached got already installed by the Mac OS X Developer Tools (Xcode).
Just go ahead and start the memcached daemon:
$ memcached -m 8 -l 127.0.0.1 -p 11211 -d
-m 8
limits memcached to use a maximum of 8MB RAM to operate
-l 127.0.0.1 -p 11211
is the ip and port to listen on
-d
tells it to start as a daemon
(instead of -l and -p you can also use -s to use an unix domain socket)