These instructions only apply in specific cases. Specifically CentOS machines, running in the Rackspace Cloud, IUS the Rackspace provided repo, provides several things not usually available within the CentOS repo, without you manually compiling more recent versions. One of them is the latest version of PHP7.0 and PHP7.1.
I wanted to quickly document the process, since it is a relatively simple process, and, can actually be done without any maintenance window, if you know what your doing, with very minimal, (if any) disruption to running sites. an apachectl graceful, actually, should be enough. Since apachectl gracefully restarts apache httpd, the downtime you’ll see will be super minimal. Expect nobody to notice you upgraded to PHP7 if you do this right.
If you do this incorrectly, you will break the PHP installation, and worse, break all of the sites using mod_php. Lets take a look at the steps:
Step 1. Check available PHP modules provided by presently configured REPO
root@server3 ~]# yum search php7 Loaded plugins: fastestmirror, versionlock Loading mirror speeds from cached hostfile drivesrvr | 2.2 kB 00:00 ============================================================================================================================= N/S Matched: php7 ============================================================================================================================== php70u-debuginfo.x86_64 : Debug information for package php70u php70u-ioncube-loader-debuginfo.x86_64 : Debug information for package php70u-ioncube-loader php70u-pecl-amqp-debuginfo.x86_64 : Debug information for package php70u-pecl-amqp php70u-pecl-apcu-debuginfo.x86_64 : Debug information for package php70u-pecl-apcu php70u-pecl-igbinary-debuginfo.x86_64 : Debug information for package php70u-pecl-igbinary php70u-pecl-imagick-debuginfo.x86_64 : Debug information for package php70u-pecl-imagick php70u-pecl-redis-debuginfo.x86_64 : Debug information for package php70u-pecl-redis php70u-pecl-smbclient-debuginfo.x86_64 : Debug information for package php70u-pecl-smbclient php70u-pecl-xdebug-debuginfo.x86_64 : Debug information for package php70u-pecl-xdebug php71u-debuginfo.x86_64 : Debug information for package php71u php71u-pecl-apcu-debuginfo.x86_64 : Debug information for package php71u-pecl-apcu php71u-pecl-igbinary-debuginfo.x86_64 : Debug information for package php71u-pecl-igbinary php71u-pecl-redis-debuginfo.x86_64 : Debug information for package php71u-pecl-redis php71u-pecl-xdebug-debuginfo.x86_64 : Debug information for package php71u-pecl-xdebug sclo-php70-php-pecl-propro-devel.x86_64 : sclo-php70-php-pecl-propro developer files (header) sclo-php70-php-pecl-raphf-devel.x86_64 : sclo-php70-php-pecl-raphf developer files (header) uwsgi-plugin-php70u-debuginfo.x86_64 : Debug information for package uwsgi-plugin-php70u mod_php70u.x86_64 : PHP module for the Apache HTTP Server mod_php71u.x86_64 : PHP module for the Apache HTTP Server php70u-bcmath.x86_64 : A module for PHP applications for using the bcmath library php70u-cli.x86_64 : Command-line interface for PHP php70u-common.x86_64 : Common files for PHP php70u-dba.x86_64 : A database abstraction layer module for PHP applications php70u-dbg.x86_64 : The interactive PHP debugger php70u-devel.x86_64 : Files needed for building PHP extensions php70u-embedded.x86_64 : PHP library for embedding in applications php70u-enchant.x86_64 : Enchant spelling extension for PHP applications php70u-fpm.x86_64 : PHP FastCGI Process Manager php70u-fpm-httpd.noarch : Apache HTTP Server configuration for PHP-FPM php70u-fpm-nginx.noarch : Nginx configuration for PHP-FPM php70u-gd.x86_64 : A module for PHP applications for using the gd graphics library php70u-gmp.x86_64 : A module for PHP applications for using the GNU MP library php70u-imap.x86_64 : A module for PHP applications that use IMAP php70u-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases php70u-intl.x86_64 : Internationalization extension for PHP applications php70u-ioncube-loader.x86_64 : IonCube Loader provides PHP Modules to read IonCube Encoded Files php70u-json.x86_64 : JavaScript Object Notation extension for PHP php70u-ldap.x86_64 : A module for PHP applications that use LDAP php70u-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling php70u-mcrypt.x86_64 : Standard PHP module provides mcrypt library support php70u-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases php70u-odbc.x86_64 : A module for PHP applications that use ODBC databases php70u-opcache.x86_64 : The Zend OPcache php70u-pdo.x86_64 : A database access abstraction module for PHP applications php70u-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases php70u-pear.noarch : PHP Extension and Application Repository framework php70u-pecl-amqp.x86_64 : Communicate with any AMQP compliant server php70u-pecl-apcu.x86_64 : APC User Cache php70u-pecl-apcu-devel.x86_64 : APCu developer files (header) php70u-pecl-apcu-panel.noarch : APCu control panel php70u-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer php70u-pecl-igbinary-devel.x86_64 : Igbinary developer files (header) php70u-pecl-imagick.x86_64 : Provides a wrapper to the ImageMagick library php70u-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store php70u-pecl-smbclient.x86_64 : PHP wrapper for libsmbclient php70u-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php70u-pgsql.x86_64 : A PostgreSQL database module for PHP php70u-process.x86_64 : Modules for PHP script using system process interfaces php70u-pspell.x86_64 : A module for PHP applications for using pspell interfaces php70u-recode.x86_64 : A module for PHP applications for using the recode library php70u-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices php70u-soap.x86_64 : A module for PHP applications that use the SOAP protocol php70u-tidy.x86_64 : Standard PHP module provides tidy library support php70u-xml.x86_64 : A module for PHP applications which use XML php70u-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol php71u-bcmath.x86_64 : A module for PHP applications for using the bcmath library php71u-cli.x86_64 : Command-line interface for PHP php71u-common.x86_64 : Common files for PHP php71u-dba.x86_64 : A database abstraction layer module for PHP applications php71u-dbg.x86_64 : The interactive PHP debugger php71u-devel.x86_64 : Files needed for building PHP extensions php71u-embedded.x86_64 : PHP library for embedding in applications php71u-enchant.x86_64 : Enchant spelling extension for PHP applications php71u-fpm.x86_64 : PHP FastCGI Process Manager php71u-fpm-httpd.noarch : Apache HTTP Server configuration for PHP-FPM php71u-fpm-nginx.noarch : Nginx configuration for PHP-FPM php71u-gd.x86_64 : A module for PHP applications for using the gd graphics library php71u-gmp.x86_64 : A module for PHP applications for using the GNU MP library php71u-imap.x86_64 : A module for PHP applications that use IMAP php71u-interbase.x86_64 : A module for PHP applications that use Interbase/Firebird databases php71u-intl.x86_64 : Internationalization extension for PHP applications php71u-json.x86_64 : JavaScript Object Notation extension for PHP php71u-ldap.x86_64 : A module for PHP applications that use LDAP php71u-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling php71u-mcrypt.x86_64 : Standard PHP module provides mcrypt library support php71u-mysqlnd.x86_64 : A module for PHP applications that use MySQL databases php71u-odbc.x86_64 : A module for PHP applications that use ODBC databases php71u-opcache.x86_64 : The Zend OPcache php71u-pdo.x86_64 : A database access abstraction module for PHP applications php71u-pdo-dblib.x86_64 : PDO driver Microsoft SQL Server and Sybase databases php71u-pecl-apcu.x86_64 : APC User Cache php71u-pecl-apcu-devel.x86_64 : APCu developer files (header) php71u-pecl-apcu-panel.noarch : APCu control panel php71u-pecl-igbinary.x86_64 : Replacement for the standard PHP serializer php71u-pecl-igbinary-devel.x86_64 : Igbinary developer files (header) php71u-pecl-redis.x86_64 : Extension for communicating with the Redis key-value store php71u-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts php71u-pgsql.x86_64 : A PostgreSQL database module for PHP php71u-process.x86_64 : Modules for PHP script using system process interfaces php71u-pspell.x86_64 : A module for PHP applications for using pspell interfaces php71u-recode.x86_64 : A module for PHP applications for using the recode library php71u-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices php71u-soap.x86_64 : A module for PHP applications that use the SOAP protocol php71u-tidy.x86_64 : Standard PHP module provides tidy library support php71u-xml.x86_64 : A module for PHP applications which use XML php71u-xmlrpc.x86_64 : A module for PHP applications which use the XML-RPC protocol sclo-php70-php-pecl-apcu.x86_64 : APC User Cache sclo-php70-php-pecl-apcu-bc.x86_64 : APCu Backwards Compatibility Module sclo-php70-php-pecl-apcu-devel.x86_64 : APCu developer files (header) sclo-php70-php-pecl-apfd.x86_64 : Always Populate Form Data sclo-php70-php-pecl-http.x86_64 : Extended HTTP support sclo-php70-php-pecl-http-devel.x86_64 : Extended HTTP support developer files (header) sclo-php70-php-pecl-lzf.x86_64 : Extension to handle LZF de/compression sclo-php70-php-pecl-mongodb.x86_64 : MongoDB driver for PHP sclo-php70-php-pecl-propro.x86_64 : Property proxy sclo-php70-php-pecl-raphf.x86_64 : Resource and persistent handles factory sclo-php70-php-pecl-selinux.x86_64 : SELinux binding for PHP scripting language sclo-php70-php-pecl-solr2.x86_64 : Object oriented API to Apache Solr sclo-php70-php-pecl-uploadprogress.x86_64 : An extension to track progress of a file upload sclo-php70-php-pecl-uuid.x86_64 : Universally Unique Identifier extension for PHP sclo-php70-php-pecl-xattr.x86_64 : Extended attributes sclo-php70-php-pecl-xdebug.x86_64 : PECL package for debugging PHP scripts uwsgi-plugin-php70u.x86_64 : uWSGI - Plugin for PHP support Name and summary matches only, use "search all" for everything.
As we can see php7 is there. Great. But what about the php packages they have already? That’s coming up next.
Step 2. Check presence of plugin replace, we’ll use this to upgrade to mod_php70 once we’re ready
# Locate plugin replace is available yum search yum-plugin-replace # Install yum plugin replace if available (otherwise this will not work for you as easily) yum install yum-plugin-replace
Step 3. Run a mock yum replace
# yum replace php53u --replace-with mod_php70u.x86_64 Loaded plugins: fastestmirror, replace, versionlock Replacing packages takes time, please be patient... Loading mirror speeds from cached hostfile drivesrvr | 2.2 kB 00:00 Error: No Package Matching mod_php70u.x86_64 [root@server3 ~]# yum replace php53u --replace-with mod_php70u Loaded plugins: fastestmirror, replace, versionlock Replacing packages takes time, please be patient... Loading mirror speeds from cached hostfile drivesrvr | 2.2 kB 00:00 WARNING: Unable to resolve all providers: ['config(php53u-common)', 'curl.so()(64bit)', 'fileinfo.so()(64bit)', 'json.so()(64bit)', 'phar.so()(64bit)', 'php-api', 'php-pecl(Fileinfo)', 'php-pecl(phar)', 'php-pecl(zip)', 'php-pecl-Fileinfo', 'php-pecl-phar', 'php-pecl-zip', 'php-zend-abi', 'php53(api)', 'php53(language)', 'php53(zend-abi)', 'php53-api', 'php53-bz2', 'php53-calendar', 'php53-common', 'php53-ctype', 'php53-curl', 'php53-date', 'php53-exif', 'php53-filter', 'php53-ftp', 'php53-gettext', 'php53-gmp', 'php53-hash', 'php53-iconv', 'php53-json', 'php53-libxml', 'php53-openssl', 'php53-pcre', 'php53-pecl(Fileinfo)', 'php53-pecl(json)', 'php53-pecl(phar)', 'php53-pecl(zip)', 'php53-pecl-Fileinfo', 'php53-pecl-json', 'php53-pecl-phar', 'php53-pecl-zip', 'php53-posix', 'php53-reflection', 'php53-session', 'php53-shmop', 'php53-simplexml', 'php53-sockets', 'php53-spl', 'php53-sqlite3', 'php53-sysvmsg', 'php53-sysvsem', 'php53-sysvshm', 'php53-tokenizer', 'php53-wddx', 'php53-zend-abi', 'php53-zip', 'php53-zlib', 'php53u(api)', 'php53u(language)', 'php53u(zend-abi)', 'php53u-api', 'php53u-bz2', 'php53u-calendar', 'php53u-ctype', 'php53u-curl', 'php53u-date', 'php53u-exif', 'php53u-fileinfo', 'php53u-filter', 'php53u-ftp', 'php53u-gettext', 'php53u-gmp', 'php53u-hash', 'php53u-iconv', 'php53u-json', 'php53u-libxml', 'php53u-openssl', 'php53u-pcre', 'php53u-pecl(Fileinfo)', 'php53u-pecl(json)', 'php53u-pecl(phar)', 'php53u-pecl(zip)', 'php53u-pecl-Fileinfo', 'php53u-pecl-json', 'php53u-pecl-phar', 'php53u-pecl-zip', 'php53u-posix', 'php53u-reflection', 'php53u-session', 'php53u-shmop', 'php53u-simplexml', 'php53u-sockets', 'php53u-spl', 'php53u-sqlite3', 'php53u-sysvmsg', 'php53u-sysvsem', 'php53u-sysvshm', 'php53u-tokenizer', 'php53u-wddx', 'php53u-zend-abi', 'php53u-zip', 'php53u-zlib', 'zip.so()(64bit)', 'php53u-common', 'php53u-common(x86-64)', 'php53-cgi', 'php53-cli', 'php53-pcntl', 'php53-readline', 'php53u-cgi', 'php53u-pcntl', 'php53u-readline', 'php53u-cli', 'php53u-cli(x86-64)', 'config(php53u-pdo)', 'pdo.so()(64bit)', 'pdo_sqlite.so()(64bit)', 'php53-pdo', 'php53-pdo-abi', 'php53-pdo_sqlite', 'php53u-pdo-abi', 'php53u-pdo', 'php53u-pdo(x86-64)', 'config(php53u-mysql)', 'mysql.so()(64bit)', 'mysqli.so()(64bit)', 'pdo_mysql.so()(64bit)', 'php-mysql', 'php53-mysql', 'php53-mysqli', 'php53u-mysqli', 'php53u-mysql', 'php53u-mysql(x86-64)', 'config(php53u)', 'libphp5.so()(64bit)', 'mod_php53u', 'php53', 'php53u', 'php53u(x86-64)', 'libphp5.so()(64bit)', 'php53-zts', 'php53u-zts', 'php53u-zts(x86-64)'] This may be normal depending on the package. Continue? [y/N] y Resolving Dependencies --> Running transaction check ---> Package mod_php70u.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php53u.x86_64 0:5.3.29-1.ius.centos6 will be erased ---> Package php53u-cli.x86_64 0:5.3.29-1.ius.centos6 will be erased ---> Package php53u-common.x86_64 0:5.3.29-1.ius.centos6 will be erased ---> Package php53u-mysql.x86_64 0:5.3.29-1.ius.centos6 will be erased ---> Package php53u-pdo.x86_64 0:5.3.29-1.ius.centos6 will be erased ---> Package php53u-pear.noarch 1:1.9.4-3.ius.centos6 will be erased ---> Package php53u-zts.x86_64 0:5.3.29-1.ius.centos6 will be erased ---> Package php70u-cli.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-common.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-gmp.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-json.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-mysqlnd.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-pdo.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-pear.noarch 1:1.10.1-2.ius.centos6 will be installed ---> Package php70u-process.x86_64 0:7.0.14-3.ius.centos6 will be installed ---> Package php70u-xml.x86_64 0:7.0.14-3.ius.centos6 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================================================================================================================================================== Installing: mod_php70u x86_64 7.0.14-3.ius.centos6 ius 2.7 M php70u-cli x86_64 7.0.14-3.ius.centos6 ius 4.0 M php70u-common x86_64 7.0.14-3.ius.centos6 ius 1.1 M php70u-gmp x86_64 7.0.14-3.ius.centos6 ius 65 k php70u-json x86_64 7.0.14-3.ius.centos6 ius 62 k php70u-mysqlnd x86_64 7.0.14-3.ius.centos6 ius 221 k php70u-pdo x86_64 7.0.14-3.ius.centos6 ius 115 k php70u-pear noarch 1:1.10.1-2.ius.centos6 ius 362 k php70u-process x86_64 7.0.14-3.ius.centos6 ius 72 k php70u-xml x86_64 7.0.14-3.ius.centos6 ius 183 k Removing: php53u x86_64 5.3.29-1.ius.centos6 @ius 4.4 M php53u-cli x86_64 5.3.29-1.ius.centos6 @ius 7.9 M php53u-common x86_64 5.3.29-1.ius.centos6 @ius 3.4 M php53u-mysql x86_64 5.3.29-1.ius.centos6 @ius 219 k php53u-pdo x86_64 5.3.29-1.ius.centos6 @ius 126 k php53u-pear noarch 1:1.9.4-3.ius.centos6 @ius 2.2 M php53u-zts x86_64 5.3.29-1.ius.centos6 @ius 4.6 M Transaction Summary ============================================================================================================================================================================================================================================================================== Install 10 Package(s) Remove 7 Package(s) Total download size: 8.8 M Is this ok [y/N]: N Exiting on user Command Your transaction was saved, rerun it with: yum load-transaction /tmp/yum_save_tx-2017-01-13-10-57L3T7JK.yumtx You have mail in /var/spool/mail/root
Naturally, if you are satisfied that you do not need php53u-zts, the only php module which is not supported by PHP7, then you can proceed.
If you are wondering what ZTS is, The php-zts package contains a module for use with the Apache HTTP
Server which can operate under a threaded server processing model. (source pbone.net CentOS REPO)
ZTS is not required for MPM prefork, and is generally only used with MPM worker, afaik. So as long as your using prefork apache httpd your fine;
# apachectl -l Compiled in modules: core.c prefork.c http_core.c mod_so.c
In our case prefork is being used, not worker. So I don’t think ZTS being missing is going to affect us. So we can proceed with typing ‘y’.
And’ thats pretty much how you upgrade to php7, it’s really easy with Rackspace IUS.