Installing PHP / PECL ImageMagick extension on 1&1 managed server
I once had to install a custom PHP extension on a 1&1 managed server. In this case the company had already purchased a managed server which was running the corporate website. They wanted to install an extranet-like webapplication which needed the ImageMagick PHP extension. In the following post I will outlike how I compiled and installed this extension on the managed server without having administrative access.
Preparation
To make the approach more modular we will use an environment variable pointing to our htdocs directory. I will call this variable $HTDOCS.
export HTDOCS=/kunden/homepages/.../htdocs
We can check if everything is correct by changing into the htdocs directory.
cd $HTDOCS
We will now create two directories:
- $HTDOCS/linux-src: To hold all the data we need to compile the extensionn
- $HTDOCS/linux: To hold all the compiled data
This setup allows us to delete the linux-src directory after we finished compiling the extension and save some diskspace.
mkdir -p $HTDOCS/linux-src mkdir -p $HTDOCS/linux
Now we will download the required sourcecode into our working directory:
mkdir -p $HTDOCS/linux-src/download cd $HTDOCS/linux-src/download wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz wget http://pecl.php.net/get/imagick-2.3.0.tgz wget ftp://ftp.remotesensing.org/pub/libtiff/tiff-3.8.2.tar.gz wget http://us3.php.net/get/php-5.2.10.tar.gz/from/us.php.net/mirror
Note: The URLs to the latest versions may change over time. You will have to adjust them and also watch for changed file names in the following steps. Also be sure to use the PHP version currently active on your managed server.
Extracting the sourcecode
Now create a folder for the extracted sourcecode and extract the source archives:
mkdir -p $HTDOCS/linux-src/extracted/imagick mkdir -p $HTDOCS/linux-src/extracted/php-imagick mkdir -p $HTDOCS/linux-src/extracted/libtiff mkdir -p $HTDOCS/linux-src/extracted/php5 cd $HTDOCS/linux-src/extracted/imagick && tar xfz $HTDOCS/linux-src/download/ImageMagick.tar.gz cd $HTDOCS/linux-src/extracted/php-imagick && tar xfz $HTDOCS/linux-src/download/imagick-2.3.0.tgz cd $HTDOCS/linux-src/extracted/libtiff && tar xfz $HTDOCS/linux-src/download/tiff-3.8.2.tar.gz cd $HTDOCS/linux-src/extracted/php5 && tar xfz $HTDOCS/linux-src/download/php-5.2.10.tar.gz
Building delegate libraries
ImageMagick uses different delegate libraries for certain formats. We have to build these first so they can be incorporated into our ImageMagick build. In this case we will only use libtiff to allow the usage of the TIFF image format.
Building libtiff from source
Building libtiff is pretty straightforward. Simply use the following commands inside the extracted source archive:
./configure --prefix=$HTDOCS/linux/ make make install
Building ImageMagick from source
Change into the extracted source directory and type in the following:
./configure --without-perl --prefix=$HTDOCS/linux \ CPPFLAGS="-I$HTDOCS/linux/include" LDFLAGS="-L$HTDOCS/linux/lib/" make make install
You can type the following command to test the compiled ImageMagick.
make check
After ImageMagick is built we can now go on and create the PHP extension.
Building the ImageMagick PHP extenstion
To compile the extension we have to have a PHP development environment in place. To create one we’ll simply compile and install PHP (this sounds more scary than it is).
Building PHP from source
Change into the extracted PHP archive and type in the following:
./configure --prefix=$HTDOCS/linux make make test make install
The make test target will run the PHP test suite. You can expect some tests to fail but if the number of failing tests is overwhelming you should get suspicious.
Building the ImageMagick PECL extension
Change into the extracted source archive and type in the following:
phpize --clean phpize ./configure --prefix=$HTDOCS/linux --with-php-config=/usr/bin/php-config5 --with-imagick=$HTDOCS/linux
The configure script should go through. Unfortunately it seems that the prefix and paths will not be set correctly in the Makefile. We will have to adjust this and replace the /usr/local paths with the path to our $HTDOCS/linux
echo "$HTDOCS/linux" | sed -e 's/\//\\\//g' > htdocs_pattern && \ export HTDOCS_PATTERN=`cat htdocs_pattern` && rm htdocs_pattern perl -pi -e "s/\/usr\/local/$HTDOCS_PATTERN/g" Makefile
Note: The above command looks a bit freaky and is a bit of a quick hack. What it basically does it is escaping the slashes (/) in the $HTDOCS path and writing this to a file. Then exporting the content of the file to an environment variable and deleting the file. After this PERL is used to replace all /usr/local paths in the Makefile to $HTDOCS/linux
After that we are good to go and can build the extension:
./configure --prefix=$HTDOCS/linux make make install
Now the extension should be build successfully and is placed in the directory $HTDOCS/linux/somepath (the make install will tell you the extact path) . The last thing we have to do is activating the extension.
Activating the extension
To activate the extension for a certain folder, create a file named php.ini (for example in the $HTDOCS directory) with the following content inside the folder:
extension_dir=$HTDOCS/linux/somepath extension=imagick.so
Also don’t forget to activate PHP 5 with using a .htaccess file:
AddType x-mapp-php5 .php AddHandler x-mapp-php5 .php
That’s all. If you have any questions feel free to comment. I hope this helps some of you.
Tags: 1und1, Administration, ImageMagick, Linux, PECL, PHP, Tutorial

November 21st, 2009 at 2:37 pm
Hallo Sebastian!
Vielen Dank für die ausführliche Anleitung zur Installation von imagemagick und pecl. Soweit hat alles gut geklappt. Leider habe ich nach dem letzten Schritt (make install) den Pfad, den ich in der php.ini zur Ersetzung von “somepath” benötige nicht notiert. Wie bekomme ich den jetzt raus?
Vielen Dank für einen Hinweis im Voraus und Grüße aus Köln
Ulrich
November 21st, 2009 at 9:07 pm
Du kannst make install einfach noch mal ausführen.