Problema en php

Imagen de jameson

Forums: 

Hola estimados, necesito de su ayuda en el siguiente tema, la distro que estoy utilizando es CentOS4 por alguna razon el php que viene en el disco me presenta el sigte problema: cuando deseo ejecutar un scritp php desde el firefox que extrae datos de una base de datos mediante las funciones odbc_xxx me pide que si deseo ejecutar o descargar el archivo, lo guardo y me sale el archivo en blanco, pense de manera inicial que era q el apache no estaba interpretando codigo php, pero hice una prueba y me funco bien, revise ademas q el rpm php-odbc este instalado y esta todo correcto tambien, estoy utilizando el unixODBC y no funciona el cual ejectuando el DataManager e isql me establece las conexiones de maravilla, favor su ayuda ya que necesito instalar en centos 4 ya que la version del DBMS permite utilizar rhel4, por eso utilizo centos4

Espero haber sido lo suficientemente claro sino me sabran disculpar, quedo a la espera de sus sugerncias

Saludos

Qué muestran los logs de

Imagen de a_villacis

Qué muestran los logs de Apache?

Observa las líneas de /var/log/httpd/error_log y /var/log/httpd/access_log y postea los mensajes raros que se encuentren allí.

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

Re:Qué muestran los logs de

Imagen de jameson

estoy utilizando php+unixODBC+Sql Anywhere 9.0.1+Apache2.0.x, acabo de ejecutar dos scripts uno que se conecta a mysql y otro a sybase, anteriormente tenia problemas en ambos, ahora solo en sybase, te digo esto porque borre toda la paqueteria y la volvi a instalar desde el dvd y ahi funciono, parece como si no leyera esos dsn's(sybase) lo raro es q como te dije uso el isql y DataManager y los puedo testear sin ningun problema, este el mensaje que capture de error_log

[Tue Apr 01 14:12:51 2008] [notice] child pid 5293 exit signal Segmentation fault (11)

Vamos por partes... El

Imagen de a_villacis

Vamos por partes...

El mensaje de "Segmentation fault" es serio. Esto indica que el proceso de Apache (con PHP, ODBC, y probablemente el driver de Sybase cargados) realizó un acceso de memoria incorrecto al intentar servir la página. Una causa probable de esto puede ser la incompatibilidad entre bibliotecas. Ahora hay que diagnosticar en dónde está el problema.

Estoy asumiendo que usted tiene instalado unixODBC de paquete RPM.

Primer paso: Verifique que el unixODBC funciona independientemente para conectarse a MySQL. Use la herramienta /usr/bin/isql que viene con unixODBC (NO la que viene con Sybase, si existiese). Verifique que puede realizar consultas a la base correctamente.

Segundo paso: Haga lo mismo, contra la base de datos Sybase. Es decir, use /usr/bin/isql. Si esto funciona correctamente, entonces el problema puede ser con PHP.

Tercer paso: intente consultar desde PHP usando ODBC, a MYSQL. Verifique si esto funciona.

Cuarto paso: intente ahora consultar desde PHP usando ODBC, a Sybase.

A partir de qué fuente instaló Sybase en esa máquina? De RPM o de un tar? Para qué distribución de Linux está certificada esa fuente?

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

Re: Vamos por partes...

Imagen de jameson

Te voy contestando por partes,

si, estoy utilizando los rpm's que vienen en el dvd de centos4i386

Primer Paso: si verifique y funciona el unixODBC conectandose a mysql lo hice a travez de el isql y el DataManager(unixODBC-kde)

Segundo Paso: si verifique y funciona el unixODBC conectandose a Sybase lo hice a travez de el isql y el DataManager(unixODBC-kde)

Tercer Paso: Ejecute un script php y si funciona utilizando odbc y el resulado fue satisfactorio

Cuarto Paso: Ejecute un script php 99% indentico al anterior(con la diferencia que cambia el dsn y el qry) en aqui donde tengo el problema

Sybase fue instalado a partir del cd original(Syabse Sql Anywhere 9.0.1), en el sitio del fabricante recomiendan para esta version utilizar RHEL4, Suse 10, por ende yo utilice centos4 ya que el kernel es el mismo que rhel4, anexo el url para que si gustas lo chequees http://www.sybase.com/detail?id=1035824#approach

De antemano te agradezco por tomarte la molestia de tratar de ayudarme con este problema.

Saludos

Postea los módulos cargados de Apache

Imagen de a_villacis

Tengo la sospecha de que su versión de Apache usa multihilo (worker) en vez de procesos separados (prefork) (se puede configurar al momento de compilar), y la incompatibilidad puede estar haciendo caer al PHP con el controlador Sybase, que puede que no esté preparado para multihilado. En el link proporcionado, se hace mención de kernel/glibc/ncurses/LDAP, pero nada de apache o PHP.

Para comprobarlo, ejecute lo siguiente como root. Adjunto la respuesta que sale en Fedora 8.


[root@srv64 /]# /usr/sbin/httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c

En mi caso, se usa prefork.

Si sale worker.c, puede que se requiera recompilar Apache con el módulo prefork en una ruta distinta (digamos /opt/apache-prefork), y compilar luego PHP para este Apache, puesto que el de RPM no funcionaría para la versión compilada de fuentes.

Para más detalles sobre worker y prefork, puede consultar el manual de Apache.

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

Re:Postea los módulos cargados de Apache

Imagen de jameson

Que tal estimado, te cuento que al fin pude configurar el php para que ejecute y traiga datos por medio de los ODBC's, termine utilizando los tar.gz de unixODBC, httpd2.0.59 y php4.3.10, y al ejecutar el famoso script en el browser me devuelve los datos, mi pregunta es porque instalando versiones mas actuales(php5.2 httpd 2.2) no puedo tener el mismo resultado, hay algun criterio a tener en consideracion que se me esta pasando por alto, ya que mi idea es aprovechar esta circunstancia y actualizar a una version mas actual en cada uno de estos.

En espera de tu respuesta me despido

Las versiones recientes de

Imagen de a_villacis

Las versiones recientes de PHP 5.2 y httpd 2.2, cómo fueron instaladas? De tar.gz o de RPMs ?

Si usted tuvo que compilar de fuentes el apache y el PHP, entonces probablemente se deba al problema worker/prefork que expliqué. Si las versiones recientes fueron instaladas de RPMs, qué ocurre cuando se instala de fuentes (tar.gz) ?

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

Si estas ejecutando localmente...

Imagen de alfamikedelta

No olvides que si estás ejecutando localmente el script con firefox, tenes que acceder al archivo con el URL que le corresponda, por ejemplo: "http://localhost/myscript.php", ya que si intentás acceder al archivo a través del sistema de archivos (abriendo el script directamente) puede que se pasen por alto los encabezados http.

Otra cosa que podes probar es si el script te funciona desde línea de comandos ejecutando:

# /ruta/a/php -f /ruta/a/myscript.php

Y ves qué te sale.

También sería bueno revisar los logs como te sugieren... ;)

Saludos!

Re:Si estas ejecutando localmente

Imagen de jameson

claro, estoy ejecutando de la forma que pusistes, http://localhost/script.php y el resultado es el que postee, ahora revisando en modo consola con el comando php -f /var/www/html/script.php si me retorna los datos que quiero mostrar como los paso a continuacion,

php -f /var/www/html/odbc2.php

definitivamente el problema es cuando hago la peticion por medio del url, ademas te puedo decir que cuando utilizo el IExplorer de mi otro computador y accedo por medio de la intrantet dicho browser me dice que no puede mostrar la pagina, ademas y a proposito baje el servidor de base de datos dbstop -c nombre_de_server y ahi el unixODBC me respondio que no encontro dicho servidor, espero me puedan ayudar

Cita: cuando utilizo el

Imagen de a_villacis

[quote]cuando utilizo el IExplorer de mi otro computador y accedo por medio de la intrantet dicho browser me dice que no puede mostrar la pagina[/quote]
Esto sólo indica que IE muestra este mensaje cuando se le envía un documento en blanco desde el servidor, cuando esperaba datos.
[quote]y a proposito baje el servidor de base de datos dbstop -c nombre_de_server y ahi el unixODBC me respondio que no encontro dicho servido[/quote]
Esto indica que el acceso a memoria incorrecto (lo que hace que el proceso Apache se caiga y se sirva un documento en blanco) ocurre luego de que se realiza la conexión a la base de datos. Si no puede conectarse, no se alcanza la condición que hace que se caiga.

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

perl -e '$x = 2.4; print sprintf("%.0f + %.0f = %.0f\n", $x, $x, $x + $x);'

Páginas