PHP 5 Runkit for MAMP 1.7.2
Ever tried to get PHP's Runkit PECL extension running on the popular MAMP stack for Mac OS X? If you have tried, you will understand why it is difficult. There are two roadblocks that must be overcome before Runkit can be installed.
The first has to do with MAMP itself. While MAMP provides most of the tools that a web developer needs, it is generally incapable of dealing with PECL builds. The reason for this is simple: MAMP does not ship with header files for PHP. That means that extensions built from C source files cannot successfully compile. That is a problem.
The second difficulty has to do with Runkit, which (being basically feature complete) hasn't undergone a major revision in a couple of years. The official released version, in fact, will not run on PHP 5.2. Yes, that is the version that ships with MAMP. To get the fixed version, you will need to check out the latest source code from PHP.net's CVS repository and build it yourself.
Recently, I found a situation that demanded Runkit. (Okay, it might have been a contrived situation.) To accomplish the goal of my project, I built Runkit from source. If you want it, the
runkit.so file is attached at the end of this post.
Here is how I worked around the issues above in order to build Runkit for MAMP's PHP 5 installation.
- While MAMP doesn't include PHP 5.2 header files, XCode does. So I created a symbolic link from
- I checked out the source of Runkit from CVS and built it using
- From there, I simply copied the runkit.so module into the
/Applications/MAMP/bin/php5/lib/php/extensionsdirectory. (If you download the attached file, you will need to do this step.).
Since I don't want runkit added every time I run a script, I use the
dl() function inside of my PHP code to load Runkit when I need it. (See the not below for my explanation of why I do this instead of loading Runkit from the PHP ini file.)
I don't want to compile. How do I install the runkit.so file at the end of this post?
To install the runkit.so shared object as a PHP extension, you will want to do the following:
- copied the runkit.so module into the
- In your code, use
dl('runkit.so')to dynamically load runkit.
This last step is (IMHO) better than adding a directive to your
php.ini file because it will only provide access to runkit when you declare that you need it. Given runkit's... um... potentially disruptive capabilities, this is probably good practice. If you must, though, you can add
runkit.so to the list of extensions automatically loaded. This is done by adding a line like this to the end of your
You will need to restart MAMP before the changes will take place.