Compilar Extensión "mssql.so" para PHP 5
mssql.so"
para PHP versión
5.x, necesaria para lograr conectar a una base de datos Microsoft SQL
Server sobre un sistema controlado GNU/Linux Debian Inestable (puede
aplicarse a casi cualquier otra distribución ajustando las
rutas y paquetes).Hace poco me vi en la necesidad de usar bases de datos Microsoft SQL Server para una aplicación PHP. Realizar esta conectividad sobre Windows no representa ningún problema, ya que los binarios de PHP para esta plataforma vienen con la extensión necesaria ("
php_mysql.dll")
lista para ser usada, sin embargo, en Linux la historia es muy diferente.Tengo un Debian Sid con PHP5, pero en pero en los repositorios del "apt" no se encuentra la extensión de "
mssql.so"
así que puse manos a la obra para compilar la
extensión.A continuación describo los pasos que realice para la compilación, que de seguro puede ser aplicada para otras extensiones de PHP. Espero que sea de ayuda.
Primero deberemos de revisar que nuestro Debian tenga las lineas necesarias para el acceso a los repositorios.
# /etc/apt/sources.list
# Debian unstable Primary repository
deb http://ftp.debian.org/debian/ unstable main non-free contrib
deb-src http://ftp.debian.org/debian/ unstable main non-free contrib
A continuación debemos bajar tanto el paquete de desarrollo de módulos como las fuentes de PHP5
apt-get install php5-dev
apt-get source php5
La primera línea descarga e instala un conjunto de archivos, entre los cuales destacan: el binario "
phpize5",
y el archivo
"php-config5", los cuales nos serán
de utilidad mas adelanteLa última línea descarga tres archivos, en mi caso "
php5_5.1.4.orig.tar.gz", "php5_5.1.4-0.1.diff.gz"
y
"php5_5.1.4-0.1.dsc", además que
descomprime el primero en
un directorio llamado "php5-5.1.4" dentro de "/usr/src/".La intención de todo esto es compilar únicamente la extensión que queremos usar, sin tener que compilar todo el PHP, así que a continuación entramos en el directorio de las fuentes y directamente en la extensión que queremos compilar, para realizar algunas acciones:
cd /usr/src/php5-5.1.4/ext/mssql/
export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize5
En la primera línea entramos al directorio de la extensión, en la segunda, exportamos una variable de entorno llamada "
PHP_PREFIX",
y en la tercera línea, realizamos la
configuración de "phpize5",
teniendo en cuenta que este
archivo se encuentra en "/usr/bin/phpize5", lo
cual nos
devolverá algo parecido a lo siguiente:Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20050922
Zend Extension Api No: 220051025
Después debemos realizar la configuración adecuada. Cada extensión tiene sus propias reglas de compilación que podemos verificar con:
./configure --help
En mi caso pongo lo que use para la compilación de la extensión "
mssql"./configure --with-mssql --with-php-config=$PHP_PREFIX/bin/php-config5
make
La extensión se compila y se guarda en un directorio llamado "
modules". Con esto, lo único que
falta es copiar la
extensión al lugar adecuado y cambiarle sus permisos.cp /usr/src/php5-5.1.4/ext/mssql/modules/mssql.so /usr/lib/php5/20051025/
chmod -x /usr/lib/php5/20051025/mssql.so
Y agregar o descomentar la linea correspondiente en "
/etc/php5/apache2/php.ini"extension=mssql.so
Ya solo es necesario reiniciar apache si es que PHP corre como módulo, para terminar podemos verificar que este funcionando correctamente, creando un archivo, por ejemplo "
info.php"
con el
siguiente contenido:<?
phpinfo();
?>
El cual a la hora de ejecutarlo podremos verificar su correcta carga en PHP5.

![]() |
HOLA QUIZA LA PREGUNTA QUE TE HAGO NO ENTRE EN ESTE CONTEXTO, SOLO QUE VI QUE YA HAZ HECHO CONEXIONES A BASE DE DATOS MSSQL DESDE PHP REMOTAMENTE. SOY NUEVO EN PHP Y ESTOY CON PHP5 Y WINDOWS. COMO PUEDO CONECTARME A UNA BASE DE DATOS DE MS SQL QUE ESTA EN CHIHUAHUA, HAY QUE CONFIGURAR ALGUNA OTRA EXTENSION . ME PODRIAS AYUDAR GRACIAS. ATT. SERGIO LOAEZA |
![]() |
Si el PHP que quieres hacer la conexión es en windows, entonces es muy facil, ya que el PHP compilado para windows ya trae el módulo "php_mssql.dll" perfectamente funcional. Lo unico que necesitas es: Modifica tu "php.ini" y descomenta la linea "extension=php_mssql.dll". Como prevención y como alguien dijo antes, revisa que este comentada la linea de ";extension=php_sybase_ct.dll" Por último solo necesitas generar tu cadena de conexión que quedaría más o menos asi: $conn = mssql_connect("192.168.0.1,1433", "user", "pass");
mssql_select_db("tabla", $conn);
Fijate muy bien en la parte del Host, puedes usar "IP,1433" o "midominio.com,1433" como mejor te acomode. Otra cosa a notar es la separación del puerto, en windows será necesario que lo separes por "coma", y si es un PHP en linux será necesario que se separe por "dos puntos", por ejemplo "192.168.0.1:1433". Espero que te sea de utilidad. Saludos |
![]() |
Hay que desinstalar el paquete php5-sybase porque sno hay funciones duplicada y apache no arranca. Por lo demás funciona perfectamente. |
![]() |
Hola, estoy tratando de compilar el modulo en PHP 5.2.0 en un SUSE 10.2, ejecute todas tus instrucciones, pero al cargar el modulo en php.ini me sale el siguiente error: "Invalid library (maybe not a PHP library) 'mssql.so' in Unknown on line 0" alguna sugerencia? DoranceMC |
![]() |
Hola DoranceMC: Es muy posible que tu directorio de carga de extensiones sea diferente, puedes verificarlo en tu php.ini en la linea que diga: "extension_dir". Ahí es donde deberás colocar tu extensión compilada para que sea accesible. también puedes hacerlo cargando la extensión de forma dinámica, primero revisa que valores tienes en "include_path" y si tienes un "." es posible que puedas cargar el modulo de forma dinámica con la función "dl()". Si nada de esto funciona, necesto mas información o ver la salida de tu compilación, para verificar que fue llevada a cabo de forma correcta. Saludos |
![]() |
hola nexus..saludos |
![]() |
Hola ojove12 Yo no te recomiendo para nada que uses ODBC, en mi punto de vista es una perdida de tiempo, es lento y es una tecnología muy vieja. Si llegaste a este artículo podrás ver que la idea es conectar directamente con MSSQL sin intermediarios. Si revisas este comentario Encontrarás algunos datos de como conectar En que sistema operativo trabajas?, es una LAN o piensas conectar en servidores separados por internet?; con estos datos te podré recomendar y dar más información. Saludos |
![]() |
gracias nexus por responder mis preguntas de novato. |
![]() |
Hola Pues te recomiendo que revises algunas cosas:
Espero que te sirva esta información, cualquier cosa esta al pendiente a ver si te puedo ayudar en algo más. Saludos |
![]() |
gracias nexus por contestar mis preguntas de novato. como te decia. mi server es 2003 server mi sql es 2000. pero no me puedo conectar remotamente.. me sale un error de DBNETLIB AY ME DICE QUE NO EXITE EL SERVIDOR O SE HA DENEGADO EL ACCESO AL MISMO. hice una prueba conectando de forma local desde el adminsitrador corporativo de sql y si puedo accesara ala basede datos localmente..pero no desde internet..ya abri el modem router de infinitum. agrege puertos (1433)y no me deja. me recomedaron que hiciera telnet miip 1433 y tampoco hace telnet..... nome imagino que pueda ser...o quiza sea que instale una version erronea de sql (msde)? o quiza sea que estoy detras de un router con firewall... gracias por tu ayuda nexus. |
![]() |
GRACIAS NEXUS por tu ayuda..ya resolvi el problema y en efecto era la autenticacion del sql. muchas gracias por tu labor que siges haciendo.. Y APROVECHANDO..juuu...el foro. que me recomeindas hacer...ya que ya vi tu site de Developarts. y se ve estupendo felicidades.. y quiero implementar algo parecido. es decir hacer un menu para una intranet. y no se que sea mas conveniente. usar frames(marcos)o Iframes.. gracias por tu ayuda de nuevo y por tus recomendaciones... |
![]() |
Nexus, he seguido tus pasos para Centos 4.5 pero no me funciona, yo hago los pasos desde el punto de ir a modules(porque ya tenia los source de PHP5) y hacer el phpize. Está esto correcto? debo seguir los pasos desde el comienzo? tengo php 5.2.1 y no tengo el soporte para MSSQL. Gracias de antemano mi mail es fabio.bazurto at gmail dot com, si tienes alguna noticia dejame saberlo para solucionar este problema. Nuevamente gracias |
![]() |
Hola Favio: Me podrías pasar mas información sobre en que parte no te funciona? en la compilación? en la instalación del módulo?. Y en todo caso si es en la compilación, posteame la salida o el error que te sale. Saludos |
![]() |
Hola! En este momento necesito conectarme a una BD en MS SQL Server remotamente, desde PHP que esta instalado en un servidor Linux. Este servidor no tiene instaladas las librerias para MS SQL Server, y la persona que me brinda soporte tenico, me dice que no es posible instalar dichas librerias en Linux y menos trabajando con Ferozo. Alguien me aclara si es cierto esto? Mi mail: arym.dn@gmail.com Muchas gracias de antemano |
![]() |
Hola: Pues como puedes ver en este artículo, es posible conectar a un MS SQL Server remotamente desde Linux, solo que es necesario compilar el módulo adecuadamente. Ferozo no creo que tenga nada que ver (salvo por configuraciones) con las extensiones de PHP, por lo que puedo afirmar que es falso. Si deseas, te puedo recomendar un hosting menos restrictivo en cuanto a estas cuestiones: Nuestroweb.com, que es donde esta corriendo este sitio. Saludos |
![]() |
hola amigo. lei ya todo articulo y esta por demas perfecto. y sime corre muy bien localmente en debian y se conecta con una base de datos remota. ahora bien. mi pregunta es mas bien tecnica. quiero subir mis scripts a un hosting. gracia por tu ayuda- |
![]() |
Saludos, Soy nuevo en este foro y me parece muy interesante. La razón por la que escribo es para pedir ayuda, estoy tratando de conectarme desde un servidor Centos 5 en la que tengo una aplicación realizada en php5 y quiero conectarla con un servidor de base de datos SQL Server2000 alojada en otro servidor Windows Server 2003. Según lo que estuve investigando, necesito que mi php tenga el soporte para esta base de datos que en el caso de los linux es el mssql.so, pero no se como instalarlo y compilar nuevamente el php. Gracias de Antemano |
![]() |
Hola Efectivamente necesitas tener la extensión mssql.so para poder realizar tu conexión a SQL Server. Realmente no necesitas compilar todo tu PHP, solo necesitas compilar la pura extensión. De hecho este artículo exactamente es para eso, una guía de como compilar la extensión, solo debes aplicar que los paquetes que necesitas bajar no sean para debian, sino para tu CentOS, en lugar de usar "apt" seguramente puedes usar "yum" Saludos |
![]() |
Hola a todos yo también estoy intentando por todos los medios, hacer que funcione el mssql en php5 en centos. Pero, de momento, nada de éxito. Utilizando otros howtos de internet, he llegado al mismo punto que en este buen manual: cuando hacemos el phpinfo() y vemos que mssql está habilitado. Pues, no me funciona! Es muy raro porque ya digo que, efectivamente, se muestra el mssql como enabled en el phpinfo. Ahora mismo estoy bastante perdido la verdad. Pongo el enlace a la guía que seguí. Recompilé entero el php5. http://www.howtoforge.com/installing_php_mssql_centos5.0 Me llama la atención que en este tutorial no se haga mención a la configuración de Freetds, ¿quizás ya viene instalado en Debian? No sé. Si alguien tiene una idea o consejo, para ver por donde puedo tirar, muchas gracias :) Un desesperado |
![]() |
Hola, agradeceria si me podes dar una mano en esto. Estoy en Debian y necesito conectarme a un MSSQL, pues bien realice lo que dice tu articulo y ahora en phpinfo tengo mssql. Tengo un script en php que empieza con... $host = "10.0.0.40";
$user = "autorizador";
$pass = "59913";
$database = "aomi";
$conn = mssql_connect($host, $user, $pass) or die("no se pudo conectar");
$database =mssql_select_db($database,$conn) or die("no existe la base");
Y cuando lo ejecuto me da el error del asunto.... ¿Que me puede estar pasando? |
![]() |
Hola, agradeceria que me ayudes en lo te voy a solicitar, soy nuevo en esto. Tengo una web que esta hecha con PHP, la versión del PHP es la 4. Bueno ahora tengo que inscribir a empleados por la web, pero la base de datos esta en mi oficina (local), tengo que hacer que se conecte a mi base de datos porque cualquier cambio que haga a la base de datos localmente o desde la web se vaya actualizando. El manejador de base de datos es un SQL server 2000 y mi maquina tiene instalado el windows XP. Me podrias explicar como podria hacer esto por favor. |
![]() |
Si te entendí correctamente, quieres hacer un sistema en PHP, que se conecte a una base de datos SQL Server que tienes en tu oficina. Si es así, me parece que puedes hacerlo muy fácilmente. Instala en tu equipo servidor tu SQL Server, el servidor IIS, PHP, y podría ser recomendable que abrieras una cuenta en DynDNS e instala el software que ellos te ofrecen para las IP's dinámicas en tu mismo servidor. La idea es que en tu modem/router abras el puerto 80 hacia tu servidor, y de esa forma podrás localizar tu aplicación afuera, en la nube de internet. Ya por ultimo, usando el PHP en tu mismo servidor windows, habilitas la extensión mssql y creas tu aplicación. Me parece que es bastante facilito de hacer. Saludos |
![]() |
Hola, ya leí todos los comentarios, pero aún así sigo cpon el problema. Tengo php5 instalado en centos, ya tiene instalada la extensión mssql.so, la base de datos es sql server2000 la cual está instalada en un servidor windows2003 el tipo de autenticación que tiene configurada es mixta ( por windows o con usuarios SQL-server), el problema es que hay dos instancias instaladas en el mismo servidor una de SQL server2000 que es donde está mi base y otra de SQLserver2005, me estoy conectando como: mssql_connect("10.20.20.20:1433","usuario","password");
pero ya probé de mil formas y me manda un error de inicio se sesión, curiosamente abro el query analyzer y me conecto como: IP\nombreinstancia y si se conecta. Podrías ayudarme? |
![]() |
Hola, prodrías intentar de las de acá a ver si te funciona: mssql_connect("10.20.20.20\nombreinstancia:1433","usuario","password");
Saludos |
![]() |
Hola, antes que nada mil mil gracias por contestar tan rápido porque de verdad que ya estoy desesperada! Ya probé así: "10.20.20.20\nombreinstancia:1433"y me dice que: Unable to connect to servertambién probé así: 10.20.20.20:1433/nombreinstanciay en todos los casos anteriores me dice que: Error de inicio de sesión del usuario:s |
![]() |
Oye, y si intentas así: mssql_connect("10.20.20.20\\NOMBREINSTANCIA", "USUARIO", "password");
Pero revisa que tanto el nombre de la instancia como el usuario se encuentre en mayúsculas, a ver si de pura casualidad así conecta. La verdad ya se me acabaron las ideas, pero voy a seguir investigando. Nota: Esta habilitada la opción TCP/IP para la instancia que estas corriendo? Saludos |
![]() |
Hola Oye el problema parece estar resuelto. connect("alias", "USUARIO", "password"); Mil gracias de cualquier manera |
![]() |
Ojalá si pudieras decirnos que opción/es le movieron, para poderla compartir con las demás personas y sepan que hacer en estos casos. Gracias y saludos |
![]() |
Si, claro. Me comentan que es necesario configurar el archivo freetns.conf que usualmente se encuentra en /usr/local/etc.Y agregar una etiqueta así: [myservidor01]
host=servidor-nombre-en-hosts
instance = nombre_de_instancia
port = 1433
tds version = 8.0
client charset = CP1251
En locales.conf en [default]date format = %Y-%m-%d %I:%M:%S.%z Y entonces ahora si desde el script de php cuando nos conectamos a la base lo hacemos como: mssql_connect("myservidor01","usuario","password");
Saludos y gracias |
![]() |
Tengo un problema mi administrador de dominio no me permite cargar librerias debido a que tengo un servidor compartido y bueno es un rollo y mucho dinero tener un servidor dedicado, la pregunta aqui es como puedo hacer para invocar una libreria .so con codigo php sin necesidad de tener que bajarme los pantalones. Agradezco su ayuda!! |
![]() |
Hola, pues es tarea fácil cargando extensiones dinámicamente, que tengo documentado en el siguiente artículo: Cargar una Extensión de PHP Dinámicamente Obviamente necesitas que el módulo se encuentre compilado para la versión y plataforma en la que quieres correr tu sistema. Saludos |
![]() |
Simplemente basta con ejecutar el apt-get install freetds-dev y queda solucionado el problema de compilación que en mi caso se me presento en php5. |
![]() |
Hola, he seguido todos los pasos que señalas en tu articulo. y efectivamente puedo visualizar el modulo de mssql cargado en mi php, el problema es el siguiente: gracias |
![]() |
Intenta de la siguiente forma: mssql_connect("10.0.1.23:1433","autorz", "123456")En caso de que no funcione, trata de buscar más elementos del error, para poder saber más o menos por donde va el problema. Saludos |
![]() |
Saludos, interesante esta tu aporte, pero no se si puedes ayudarme no solo a mi sino a los q buscamos esta informacion. Como podemos compilar el mssql.so pero en CENTOS ya que es distinto el metodo de instalacion. estare agradecido por tu ayuda. |
![]() |
Hola. Pues en realidad sería más o menos igual, lo único que cambian son los nombres de los paquetes que se deben instalar, por ejemplo: En lugar de usar " yum install php-devel
El problema es que con De todas formas intentaré hacerlo en un CentOS que tengo por ahí, para verificar si los pasos son correctos. Saludos |
![]() |
Amigo hasta ahora no puedo compilar el archivo mssql.so para poder hacer las consultas desde el CENTOS hacia un Servidor Windows 2000 o 2003 server, te agradecería mucho si haces ese manual, eh buscado por casi toda la red y siempre hay algo que falla casi al final... Espero tu respuesta Gracias y saludos...!!! |
![]() |
Hola, he instalado la extension y todo me ha ido bien. Cuando ejecuto la pag phpinfo() me sale mssql como compatible. El problema lo tengo cuando necesito conectar a una pagina con php en el servidor que quiere conectarse a una bd me sale el siguiente error. Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0 Fatal error: Unknown: Failed opening required '/var/www/auth/login.php' (include_path='.:/usr/share/php:/usr/share/pear') in Unknown on line 0 ¿Qué puedo tener mal?¿Qué esta fallando? |
![]() |
Me parece bastante claro, dice "Failed opening required" y el archivo en cuestión es "/var/www/auth/login.php" deberías de ver si ese archivo se encuentra donde debería de estar y si tiene permisos de lectura (644). O en todo caso también revisar que su directorio padre "/var/www/auth" tenga también los permisos adecuados (755) Saludos |
![]() |
Hola q al parecer es problema de instalacion de la funcion mssql, no puedo instalar el mssql para PHP4, utilizo ubuntu 6.06 Ademas la parte de FREEtds ya lo tengo configurado.. con isql hago consultas a mi base de datos el problema es en la funcion del mssql |
![]() |
El error nos dice que no tienes habilitada la extención "mssql.so" en tu php.ini, revisa, primero que tengas la extención y segundo que php la carga correctamente (recuerda reiniciar apache para aplicar cambios) Saludos |
![]() |
Hicimos todo los pasos, pero al darle: ./configure --with-mssql nos crea los archivos php_mssql.lo y php_mssql.o, pero no nos crea el archivo mssql.so. Y no podemos cargarlo. Estamos trabajando en Debian. Muchas Gracias por su colaboracion. Edit Update: Encontramos un paquete llamado php5-sybase_5.2.0-8+etch11_i386.deb |
![]() |
Saludos a todos, eh leído todos los comentarios e realizado las pruebas y aun no me funciona conexión remota te describo rápidamente lo que echo: 1) actualizar la dll (ntwdblib.dll) Le agradecia de ante mano si me pueden ayudar...... ATTE jose morillo |



Intenté hacerlo, pero no funcionaba...
Hay que preocuparse que la extensión para sybase esté comentada.