Most of the yum repos doesn’t include PHP5.4.X on current releases for the time being. So if you need PHP5.4.X, you need to compile and build it for your self. I decided to put all required packages to the compilation, so most probably you wouldn’t need additional packages, just a quick tip, if you need additional packages you can install via pecl or pear tools.

Which PHP configure options should I use before compiling?

If you ever need to get the list of modules installed in your current PHP, type the following command via console:

php -m

So, take a list of your current configuration and check the configure list below in order to have a compatible compilation to your existing older version of PHP.

Advise: First of all, you should consider removing php packages from your server before compiling php, but beaware your codes will be visible till you install the compiled version to your server, consider shutting down your apache server for a while.

yum erase php*

Before downloading the code, install “Development Tools” by tiping:

yum groupinstall "Development Tools"

and install other related header files:

yum install httpd-devel libtool-ltdl-devel libxml2-devel bzip2-devel net-snmp-devel openssl-devel pcre-devel curl-devel gd-devel mysql-devel libxslt-devel postgresql-devel gmp-devel

Download & install libmcrypt

cd /usr/src
   tar zxvf libmcrypt-2.5.8.tar.gz 
   cd libmcrypt-2.5.8
   ./configure -libdir=/usr/lib64
   make install


Download & extract php 5.4.44 release:

mv mirror php-5.4.44.tar.gz
tar zxvf php-5.4.44.tar.gz
./configure \
 --with-apxs2 \
 --with-curl=/usr/local/lib \
 --with-config-file-path=/etc \
 --with-config-file-scan-dir=/etc/php.d \
 --with-pic \
 --with-gd \
 --with-gettext \
 --with-jpeg-dir=/usr/local/lib \
 --with-freetype-dir=/usr/local/lib \
 --enable-sockets \
 --with-kerberos \
 --with-openssl \
 --with-mhash \
 --with-mcrypt=/usr/local/lib \
 --with-mysql=/usr \
 --with-mysqli=/usr/bin/mysql_config \
 --with-pdo-mysql=/usr \
 --with-pdo-pgsql=/usr \
 --with-pcre-regex=/usr \
 --with-pear \
 --with-gmp \
 --with-pgsql \
 --with-png-dir=/usr/local/lib \
 --with-xsl \
 --with-zlib \
 --with-zlib-dir=/usr/local/lib \
 --with-iconv \
 --with-libxml-dir=/usr \
 --enable-bcmath \
 --enable-calendar \
 --enable-exif \
 --enable-ftp \
 --enable-gd-native-ttf \
 --enable-soap \
 --enable-sockets \
 --enable-mbstring \
 --enable-zip \
 --enable-wddx \
 --enable-shmop \
 --with-libdir=lib64 \
 --disable-debug \
 --with-bz2 \
 --enable-gd-native-ttf \
 --enable-xml \
 --with-snmp=/usr \

Make & Install by typing:

make install
cp php.ini-production /etc/php.ini

Get rid of obsolete settings:

sed -i 's#;date.timezone =.*#  date.timezone = "Europe/Istanbul"#' /etc/php.ini
sed -i 's#upload_max_filesize =.*#upload_max_filesize = 200M#' /etc/php.ini
sed -i 's#post_max_size =.*#post_max_size = 200M#' /etc/php.ini

Don’t forget to add respective extension to httpd.conf:

echo "AddType application/x-httpd-php .php" >> /etc/httpd/conf.d/php.conf
echo "AddType application/x-httpd-php-source .phps" >> /etc/httpd/conf.d/php.conf

and a final configuration:

sed -i 's/DirectoryIndex index.html.*/  DirectoryIndex index.html index.html.var index.php/' /etc/httpd/conf/httpd.conf

please let us know if you find any mistake