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
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
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
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...
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
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
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
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...
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
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
[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