Currently I had to use the fileinfo-Package on my development-system which is a MacBook Pro running MacOS 10.5 with Marc Lianages PHP-Package.
But sadly that does not contain the fileinfo-extension.
No Problem I thought: Installing a PECL-Extension isn’t hard work.
At least if it works….
Of course I ran into the problem that I couldn’t compile the fileinfo extension due to the following error-message
configure: error: Please reinstall the libmagic distribution ERROR: `/private/tmp/pear/download/Fileinfo-1.0.4/configure' failed
I can’t be the only one that ran into the problem, I thought. And so it was.
While searching the internet, I generally found two ways to solve the problem.
- Use PHP 5.3, that already contains the package
- Install a complete second OperatingSystem beneath a perfectly working MacOS. Here for instance I found a way to get the installation working by installing the complete fink-package.
Using PHP 5.3 was no option for me, as we are developing for PHP5.2 and installing a second Operating System seemed somewhat oversized for the simple task of installing a small PHP-extension.
Back to the roots
So what was the original problem again? A missing installation of the libmagic-library. Event though the info-binary is installed on the MacOS I’m running, a shared libmagic-Library is missing.
So what the hell, why not compile one?
-
So I got myself the current binaries from http://www.darwinsys.com/file/ unpacked the source and pulled out the Terminal.
cd /path/to/unpacked/source ./configure --prefix=/usr/local/libmagic make sudo make install
That left me with a running shared library of libmagic in the folder
/usr/local/libmagic/lib
-
Second I used the already loaded source of the fileinfo-extension that caused the error due to the missing libmagic-library.
So I opened
/private/tmp/pear/download/Fileinfo-1.0.4/configure
with my favourite Text-Editor (currently it is TextWrangler) and went to somewhere around line 4212 and changed it fromSEARCH_PATH="/usr/local /usr /usr/share/file"
to
SEARCH_PATH="/usr/local /usr /usr/share/file /usr/local/libmagic"
and again took my Terminal to go to the fileinfo-directory and finally compile the fileinfo-extension
cd /private/tmp/pear/download/Fileinfo-1.0.4/ ./configure
-
Because of the apache2 on my MacBook Pro that somehow thinks it is running on a 64bit Machine, even though it definitely is a 32bit one – would be nice though – I had to adapt the build-process somewhat by compiling a universal-binary so that the extension will be loaded by the apache.
Some info on that can be found here and here at Apples Developer pages
So I ran the following command in Terminal
make CFLAGS="-arch i386 -arch ppc64 -arch x86_64" LDFLAGS="-arch ppc -arch i386 -arch ppc64 -arch x86_64" sudo make install
Aternatively you can export the CFLAGS and LDFLAGS variable by running these commands in Terminal:
export FLAGS="-arch i386 -arch ppc64 -arch x86_64" export LDFLAGS="-arch ppc -arch i386 -arch ppc64 -arch x86_64"
Then you can simply run
./configure make make install
That’s been the hard bit.
-
Last Steps
Now the only things missing are the integration into php and the restart of the WebServer.
For integrating the extension into php I added a file to the php-Directory via
vi /usr/local/php5/php.d/50-extension-fileinfo
where I simply added the line
extension=fileinfo.so
-
And finaly the restart of the WebServer with
sudo apachectl restart (or graceful)
Now I can call a phpinfo-file and there should be a line stating that the fileinfoextension is enabled.
I am using PHP5.3 since a few weeks and since then everything works fine with the fileinfo-implementation.