I recently found myself needing a PHP implementation of the DJB hashing algorithm, but ran into a problem—in 64-bit PHP5, integers don’t overflow. Instead, they magically turn into floating point variables large enough to hold the new value. For short strings this isn’t really a problem (the hashing algorithm won’t cause an integer overflow in the first place), but for anything over five or six characters, you end up with numbers that aren’t comparable with other implementations of the algorithm (nor, for that matter, will they fit into any of MySQL’s numeric data types).
So, here’s a short function that uses PHP’s GNU Multiple Precision (GMP) module to perform the arithmetic at the necessary level of precision, then convert the result back to a standard PHP int:
Do you use MAMP as a web development testing environment on your Mac?
Do you need the PHP ZIP extension for dealing with archive files?
Are you running Mac OS X 10.6 Snow Leopard?
I do, and found making these tools play nice together to be far harder than it should have. If you need to fix a similar setup, here are the steps that finally worked for me (on Mac OS X 10.6.4 with MAMP 1.9):
Install XCode if you don’t already have it (we’re going to be doing a bit of compiling).
When the MAMP source code package opens, go into the MAMP_src folder and double-click the php-5.3.2.tar.gz file (if you are using a different version of PHP, replace 5.3.2 with your actual version number).
You should now have a php-5.3.2 folder in your Downloads folder. Open up Terminal and cd to ~/Downloads/php-5.3.2.: cd ~/Downloads/php-5.3.2/
Install the pcre.h header file (we need it to compile the extension): sudo cp ext/pcre/pcrelib/pcre.h /usr/include/php/ext/pcre/
Configure PHP for i386 architecture: CFLAGS="-arch i386" ./configure
Configure the ZIP extension for i386 architecture: cd ext/zip; CFLAGS="-arch i386" ./configure
Build the extension: make
Install the extension: cp modules/zip.so /Applications/MAMP/bin/php5.3/lib/php/extensions/no-debug-non-zts-20090626/
Enable the extension by opening /Applications/MAMP/conf/php5.3/php.ini and appending the following line: extension=zip.so
Remove the pcre.h header file we installed earlier, we don’t need it anymore.
Restart MAMP. If everything worked properly, you’ll be able to goto http://localhost/MAMP, click on phpInfo, and see zip in the list of enabled extensions.
I’ve been meaning to revamp the photography section of this site for a while now; this weekend, I finally found the time to do it. I registered a new domain, straylightphotography.com, and put together a portfolio consisting of my 20 favorite shots (<shamelessPlug>many of which are currently on display at Interzone through February 28th!</shamelessPlug>). I’m hoping to quickly expand the site with themed portfolios (portraits, urban decay, etc.), but… first things first.
Also, the new portfolio has been an excuse to play with CSS3 and jQuery 1.4. Visitors using Firefox, Safari, Chrome, or Opera should see a site that behaves like it was created with Adobe Flash, but is fully accessible and doesn’t require the proprietary Flash plug-in. Visitors using Internet Explorer… well… it at least degrades cleanly. Mostly.