Running Magento on PHP 7
PHP 7 was released end of last year, and since it speeds up PHP execution so much, we can only recommend people to migrate their sites to PHP 7. With Magento 2, PHP 7 is supported out of the box. With Magento 1, this is more cumbersome. Let's summarize some of the aspects.
Patching Magento 1.9
First of all, if you are looking for running Magento 1 under PHP 7, make sure to run the latest Magento 1.9 first - at the time of writing 184.108.40.206. Unfortunately this version is not supporting PHP 7 out of the box, leading to a few PHP Fatal Errors and an inaccessible Magento Admin Panel if you try. This is easily fixed though. While there are various patches out there allowing you to make Magento PHP 7 compatible, we only recommend the package from Inchoo:
Install this extension and you should be ready to go: github.com/Inchoo/Inchoo_PHP7
Scanning your code base
While the Inchoo extension fixes the Magento core, there might be other issues in your shop. You could setup a testing site and see how it goes. Another way is by scanning your Magento codebase for common issues. A very valuable tool here is the tool
Personally I prefer to download the PHAR file
php7cc.phar either from the GitHub releases page or via
composer. Next I place the PHAR in my system folder so I can access it from anywhere:
mv php7cc.phar /usr/local/bin/php7cc chmod 755 /usr/local/bin/php7cc
Once installed, you can use it to scan your Magento site as follows:
cd /path/to/magento /usr/bin/php -d memory_limit=1G /usr/local/bin/php7cc \ --extensions=php,phtml --except=app/code/core .
Here, we first switch to the Magento base folder. But instead of calling the
php7cc binary directly, we call it via the
php executable itself, which allows us to also specify a
memory_limit. The arguments to
php7cc include picking up on both PHP files and PHTML files, while excluding the Magento core.
php7cc binary itself is PHP 7 compatible, so when you have both a PHP 5.X executable and a PHP 7 executable, you can call
php7cc using PHP 7 which will work even faster. The
php7cc wiki mentions also some issues with Xdebug. Because of performance, we recommend to keep
xdebug disabled by default, and only enable it when you actually want to use it.
In general, we believe that people should stay away from encrypted extensions (mostly ionCube) but with this PHP 7 story our urging becomes bigger: During some PHP 7 migrations we have found that some encrypted Magento extensions simply seem to check for a PHP version starting with
5.. We found proof for this because these ionCube extensions were running without issues when replacing the PHP version
5.7.0 (which we definitely do not recommend you should do). In short: Get away from encrypted extensions.
Other possible issues
The PHP site itself mentiones various incompatibilities (http://php.net/manual/en/migration70.incompatible.php. While the tool
php7cc is great, it is not allknowing. For instance, one of the Magento 1.9 core issues with PHP 7 deals with the global variable
$_SESSION which is not detected by
One of the more rigurous changes is that the
mysql extension is gone in PHP 7. This means that any call to a function like
mysql_query() will not work anymore. While the
mysqli extension with functions like
mysqli_query() does work, code within Magento should be using the PDO adapters of Magento instead. Likewise the
ereg extension is removed, but I'm not sure if anyone noticed -
ereg functions are already outdated for over 10 years.
Thanks to the
Inchoo_PHP7 extension, migrating to PHP 7 becomes easy. We have migrated about half a dozen shops already to PHP 7, with only the requirement of installing this extension. So that's great. But you can't know for sure. To know for sure whether your shop works under PHP 7, we recommend you to setup a testing site, and if possible scan the code for possible issues. Hope you found this useful.
Written by Jisse Reitsma op 17 March 2016