I will take PHP 5.4 and PHP 7.2 as example:
$ sudo yum install epel-release
Turn remi repo too:
$ sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Install yum-utils packages too:
$ sudo yum install yum-utils
Enable remi repo, run:
$ sudo yum-config-manager --enable remi-php72
$ sudo yum update
Search for PHP 7.2 packages and modules with more command/grep command/egrep command:
$ sudo yum search php72 | more
$ sudo yum search php72 | egrep 'fpm|gd|mysql|memcache'
Sample outputs
php72-php-fpm.x86_64 : PHP FastCGI Process Manager php72-php-gd.x86_64 : A module for PHP applications for using the gd graphics php72-php-mysqlnd.x86_64 : A module for PHP applications that use MySQL php72-php-pecl-mysql.x86_64 : MySQL database access functions php72-php-pecl-mysql-xdevapi.x86_64 : MySQL database access functions |
Finally install php 7.2 on CentOS 7.2:
$ sudo yum install php72
You must install “PHP FastCGI Process Manager” called php72-php-fpm along with commonly used modules:
$ sudo yum install php72-php-fpm php72-php-gd php72-php-json php72-php-mbstring php72-php-mysqlnd php72-php-xml php72-php-xmlrpc php72-php-opcache
To make the 72 default installation:
$ scl enable php72 bash
3. Let the Apache handle the php properly:
# Create a backup of your original Apache configuration sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.original #remove the white space at the beginning of each line sudo sed -i -e 's/^[ \t]*//' /etc/httpd/conf/httpd.conf #Load config files in the "/etc/httpd/conf.d" directory, if any sudo sed -i "s|IncludeOptional|#IncludeOptional|" /etc/httpd/conf/httpd.conf # ServerName gives the name and port that the server uses to identify itself. # This can often be determined automatically, but we recommend you specify # it explicitly to prevent problems during startup. sudo sed -i "s|#ServerName www.example.com:80|ServerName localhost|" /etc/httpd/conf/httpd.conf # DirectoryIndex: sets the file that Apache will serve if a directory is requested. # This actually allows you to specify a default page to display when a directory is accessed. sudo sed -i "s|DirectoryIndex index.html|DirectoryIndex index.html index.php|" /etc/httpd/conf/httpd.conf # Add PHP configuration into Apache echo "AddType application/x-httpd-php .php" | sudo tee -a /etc/httpd/conf/httpd.conf
4. Tell the Apache to load a specific PHP version
Check the version of PHP modules installed:
ls /usr/lib64/httpd/modules/ libphp5.so mod_authz_groupfile.so mod_dialup.so mod_lbmethod_heartbeat.so mod_proxy_fdpass.so mod_socache_shmcb.so libphp72.so mod_authz_host.so mod_dir.so mod_log_config.so mod_proxy_ftp.so mod_speling.so mod_access_compat.so mod_authz_owner.so mod_dumpio.so mod_log_debug.so mod_proxy_http.so mod_ssl.so mod_actions.so mod_authz_user.so mod_echo.so mod_log_forensic.so mod_proxy_scgi.so mod_status.so mod_alias.so mod_autoindex.so mod_env.so mod_logio.so mod_proxy.so mod_substitute.so mod_allowmethods.so mod_buffer.so mod_expires.so mod_lua.so mod_proxy_wstunnel.so mod_suexec.so mod_asis.so mod_cache_disk.so mod_ext_filter.so mod_macro.so mod_ratelimit.so mod_systemd.so mod_auth_basic.so mod_cache.so mod_fcgid.so mod_mime_magic.so mod_reflector.so mod_unique_id.so mod_auth_digest.so mod_cache_socache.so mod_file_cache.so mod_mime.so mod_remoteip.so mod_unixd.so mod_authn_anon.so mod_cgid.so mod_filter.so mod_mpm_event.so mod_reqtimeout.so mod_userdir.so mod_authn_core.so mod_cgi.so mod_headers.so mod_mpm_prefork.so mod_request.so mod_usertrack.so mod_authn_dbd.so mod_charset_lite.so mod_heartbeat.so mod_mpm_worker.so mod_rewrite.so mod_version.so mod_authn_dbm.so mod_data.so mod_heartmonitor.so mod_negotiation.so mod_sed.so mod_vhost_alias.so mod_authn_file.so mod_dav_fs.so mod_include.so mod_proxy_ajp.so mod_setenvif.so mod_watchdog.so mod_authn_socache.so mod_dav_lock.so mod_info.so mod_proxy_balancer.so mod_slotmem_plain.so mod_wsgi.so mod_authz_core.so mod_dav.so mod_lbmethod_bybusyness.so mod_proxy_connect.so mod_slotmem_shm.so mod_authz_dbd.so mod_dbd.so mod_lbmethod_byrequests.so mod_proxy_express.so mod_socache_dbm.so mod_authz_dbm.so mod_deflate.so mod_lbmethod_bytraffic.so mod_proxy_fcgi.so mod_socache_memcache.so
Change the configuration files for the httpd modules
ls /etc/httpd/conf.modules.d/ 00-base.conf 00-lua.conf 00-proxy.conf 00-systemd.conf 10-fcgid.conf 10-wsgi.conf 00-dav.conf 00-mpm.conf 00-ssl.conf 01-cgi.conf 10-php.conf 15-php72-php.conf
there are two php configuration file here 10-php.conf which is for php 5.4 shipped out of box with CentOS7 and 15-php72-php.conf which is just installed.
I will comment out all the lines in 10-php.conf:
# # PHP is an HTML-embedded scripting language which attempts to make it # easy for developers to write dynamically generated webpages. # #<IfModule prefork.c> # LoadModule php5_module modules/libphp5.so #</IfModule>
If you have a look at the 15-php72-php.conf:
# # PHP is an HTML-embedded scripting language which attempts to make it # easy for developers to write dynamically generated webpages. # # Cannot load both php5 and php7 modules <IfModule !mod_php5.c> <IfModule prefork.c> LoadModule php7_module modules/libphp72.so </IfModule> </IfModule>
This means, if php5 modules is not loaded, then load php7.2 module.
Now restart httpd:
sudo service httpd restart
Create a version check php file:
sudo vi /var/www/html/info.php <? phpinfo(); ?>
Give it permission:
chmod 755 /var/www/html/info.php
Open a browser, and type http://your_domain/info.php. You should see your php version is 7.2
Remove php7.2
sudo yum remove --noautoremove php72*
Reference:
https://rpms.remirepo.net/wizard/