Last weekend I decided to give PHP7 a try. Given it’s beta, I had to compile from source. As I already run a stable package version, this guide doesn’t cover the Debian packaging process. Instead we concentrate on installing PHP to an alternate directory.
Firstly, install the build dependencies;
sudo apt-get -y build-dep php5 sudo apt-get -y install bison autoconf automake libtool pkg-config build-essential
I decided to download PHP from version control, and checkout the php-7.0.0beta1 tag;
git clone https://github.com/php/php-src.git cd php-src/ git checkout php-7.0.0beta1 ./buildconf --force
You have to force buildconf, as by default it believes itself to be a release package. Next, I saved my configure options to a shell script for replay;
./configure \ --prefix=/opt/php7 \ --enable-fpm \ --enable-mysqlnd \ --enable-opcache \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-openssl \ --with-gd \ --with-iconv \ --with-curl \ --with-mcrypt \ --enable-mbstring \ --enable-intl \ --enable-memcache \ --enable-zip \ --with-zlib
This will compile PHP7 with some basic options, including php-fpm and php-mysqlnd. Finally, we can kick off the build process;
Installing PHP7 / PHP-FPM
sudo make install
Now PHP7 should be installed to /opt/php7. We need to add PHP-FPM service management into Debian’s init.d folder. PHP ships a init.d script which works fine, except you need to make a slight change;
sudo cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm sudo chmod +x /etc/init.d/php7-fpm sudo sed -e 's/# Provides:\(\s*\)php-fpm/# Provides:\1php7-fpm/' -i /etc/init.d/php7-fpm sudo update-rc.d php7-fpm defaults
Debian will trip up on the LSB Provides: line if you already run the php5-fpm package version. We need to switch the name to something different (i.e. php7-fpm). Above we use sed to change this value, which allows the update-rc.d command to run successfully.
Finally, I copy the php.ini-production example from the source distribution;
cp ./php.ini-production /opt/php7/lib/php.ini
Installing PHP7 Extensions
This is where it gets interesting; we configured PHP to install to the /opt/php7 prefix, which leaves the Debian packaged version untouched. This does however complicate matters, as configure will use the package version of php-config. You will need to download packages manually, and configure them using the correct php-config. I required the imagick extension, which hasn’t yet got a PHP7 compatible version in PECL;
sudo apt-get -y install libmagick++-dev git clone https://github.com/mkoppanen/imagick.git cd imagick git checkout phpseven /opt/php7/bin/phpize ./configure --with-php-config=/opt/php7/bin/php-config make sudo make install
Finally, add the extension to php.ini;
sudo sh -c "echo extension=imagick.so >> /opt/php7/lib/php.ini"
It’s worth noting that the PECL extensions I checked don’t seem yet to have been updated to facilitate the changes in the underlying Zend Engine.