Adding mssql capability to PHP5 on CentOS

I had a need to connect to MSSQL using PHP version 5 from a CentOS 5 server. To do this I needed FreeTDS and the module mssql in PHP. After a diligent search I found that there was no quick and easy way to install the mssql module, like “up2date install php-gd” to get GD to work from PHP.

I found a few places that had ideas and hints to make this work, but finally used the directions I found at http://www.howtoforge.com/installing_php_mssql_centos5.0 (slightly altered to fit my means) and will duplicate here so I can easily find it later.

At first I thought I needed to recompile PHP, but as it turned out I only needed to pre-compile it so that I could fetch the mssql.so, and then manually edit the php.ini to use it.


NOTE-1: You should be running as SuperUser or using sudo to perform these tasks.
NOTE-2: RPMForge was installed and running on my system, so I didn’t need to do the next couple of steps.

1. First you need to activate the RPMForge custom repository (formely known as Dag Wieers):
http://dag.wieers.com/rpm/packages/rpmforge-release/

2. Grab your specific RPM and install it:

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-*.rpm
rpm --install rpmforge-release-*.rpm

3. Next step is to install freetds, freetds-devel, php-devel, and the Development tools.

yum groupinstall ‘Development Tools’
 
yum install freetds freetds-devel --enablerepo=rpmforge
yum install php-devel

4. Next we alter the php.spec file, which contains the php configuration for compiling.

vi /usr/src/redhat/SPECS/php.spec

5. If you don’t have the php.spec file, you can download the php src rpm.

wget centos.mirrors.skynet.be/pub/centos/5/os/SRPMS/php-5.1.6-5.el5.src.rpm
 
rpm –install php-5.1.6-5.el5.src.rpm

6. And then do an updatedb and locate php.spec.

7. Edit the CFLAGS= line (~line 363) of the php.spec file – remove “-Wno-pointer-sign”.
Then add the following piece of code to it:

Group: Development/Languages
Requires: php = %{version}-%{release}, php-pdo
Summary: A module for PHP applications that use the MSSQL database.
provides: php_database
BuildRequires: freetds-devel
 
%description mssql
The MSSQL package contains a dynamic shared object that will add
support for accessing MSSQL databases to php.

8. Start building your php rpm:

rpmbuild -bb ./php.spec

NOTE: If you are asked for some dependencies, just yum install them. I was asked for the following list of dependencies:
bzip2-devel, curl-devel, db4-devel, expat-devel, gmp-devel, aspell-devel, httpd-devel, libjpeg-devel, libpng-devel, pam-devel, openssl-devel, sqlite-devel, zlib-devel, pcre-devel, krb5-devel, libc-client-devel, cyrus-sasl-devel, openldap-devel, mysql-devel, postgresql-devel, unixODBC-devel, libxml2-devel, net-snmp-devel, libxslt-devel, libxml2-devel, ncurses-devel, gd-devel, freetype-devel, freetds-devel

9. Now you need to go to the place where the build is kept.

cd /usr/src/redhat/BUILD/php-5.1.6/ext/mssql/

10. Now we are going to make the mssql module without having to rewrite the php binary: (This takes a few minutes, relax.)

phpize
./configure --with-mssql
make
make install

11. Next look for the mssql.so file to make sure it is in the module directory “/usr/lib/php/modules/”, and specified in your php.ini. Or copy it to the specified location if needed.

12. Final Steps

vi /etc/php.ini

13. Add the following to the php.ini

extension=mssql.so

14. Save the php.ini using “:w!” or “Ctrl+ZZ” and restart Apache:

/etc/init.d/httpd restart

All should work now.

Published by

Adam

Speaker, author, consultant, OSS contributor, SoFloPHP UG and SunshinePHP Conf organizer, RunGeekRadio Host, Long distance runner and ultra marathoner.

One thought on “Adding mssql capability to PHP5 on CentOS”

  1. Hello Sir,
    I am trying to install mssql module in a Centos 6.7 linux server. I am new to all this and I need to connect to a remote mssql server from php. But I have few doubts , if I do all this process will I still be able to connect to a regular mysql server? is this going to affect the websites that are in the server which are connecting to a mysql server ?

Leave a Reply

Your email address will not be published. Required fields are marked *