Consulta php, error después de migración

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.782
Como les iba contando hace 10 días, estoy tocando código de una app php construida originalmente en php 4.x para que funcione en una plataforma con php 5.4.

He ido arreglando cosillas de a poco, cambiando funciones deprecadas, rehaciendo funciones enteras (tuve problemas con la carga de un archivo XML con una función obsoleta) y ahora estoy con este error

Código:
Fatal error: Call to a member function isConnected() on a non-object in /html/capa9/admin/global/class.DB.php on line 135

Esa línea dice lo siguiente

Código:
$connection = $GLOBALS["_GLOBAL_CONNECTION_"];
            if (!$connection->isConnected()) {  -> Esta es la línea 135 que chilla
                if ($GLOBALS["_GLOBAL_CONNECTION_"] = DB::connect($dsn, $tns)) {
                    return $GLOBALS["_GLOBAL_CONNECTION_"];
                } else {
                    return false;
                }
            }

y la función está declarada acá

Código:
class OCI8_DB {
muchas funciones, blablabla

    function isConnected() {
        return $this->_connected == true;
    }

muchas funciones, blablabla

}

Googleo y no me queda muy clara la pana. ¿Alguien puede darme una explicación en chileno para ver cómo arreglarla? @unreal4u
 

ranamaldita

mueranse
Se incorporó
24 Junio 2003
Mensajes
4.507
El problema no es la funcion isConnected(), el problema es que la variable $connection no es un objeto o no existe. Podis eveluarla con is_object(), pero claramente necesitas que sea objeto.

Entonces con lo que se ve, es que $GLOBALS["_GLOBAL_CONNECTION_"] no es un objeto, y de seguro esa global es la conexion a la base de datos, la cual no debe estar conectando y por lo tanto no retornando un objeto. Tirale un var_dump a $connection antes del if para ver lo que es, en ves de evaluar solo si es objeto.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.782
El problema no es la funcion isConnected(), el problema es que la variable $connection no es un objeto o no existe. Podis eveluarla con is_object(), pero claramente necesitas que sea objeto.

Entonces con lo que se ve, es que $GLOBALS["_GLOBAL_CONNECTION_"] no es un objeto, y de seguro esa global es la conexion a la base de datos, la cual no debe estar conectando y por lo tanto no retornando un objeto. Tirale un var_dump a $connection antes del if para ver lo que es, en ves de evaluar solo si es objeto.

Ah, ¿entonces la huea es sólo porque no conecta y no hay error en el código que requiera ser reescrito?
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.474
Exactamente eso, al no poder conectar, el objeto no existe, por lo tanto tampoco le puedes pedir métodos a un objeto no existente.

Pero veo que ya lo solucionaste :)

Saludos.
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.293
peor, es un Zuljin solucionando bugs :risas

na bueno, eso es culpa del sistema que programaron sin un try catch() que capturará el error de la conexión inicialmente , con eso habría saltado algún error de conexión a la db desde un principio

saludos y suerte :D

Enviado desde mi TA-1039 mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.474
try - catch no existía todavía en PHP4 :)

Eso lo introdujeron con SPL, y eso fue en PHP5.0.0.

Saludos.
 
Upvote 0

_kmilo_

Vendo todo. xD
Se incorporó
1 Mayo 2005
Mensajes
892
oye, una duda, por que si estamos en php 7, recien estan migrando a 5.4 ?
y por que aún ocupan php 4 ?

:O
Se que todos los entornos son distintos, pero no es bueno mantenerse actualizado?
 
Upvote 0

Matjazz

asdf
Se incorporó
18 Agosto 2007
Mensajes
1.196
oye, una duda, por que si estamos en php 7, recien estan migrando a 5.4 ?
y por que aún ocupan php 4 ?

:O
Se que todos los entornos son distintos, pero no es bueno mantenerse actualizado?
yo creo que por compatibilidad.

muchas de las funciones deprecadas, fueron borradas en php7, por ende puede que aplicaciones hechas paras versiones previas de php no funcionen.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.782
Estoy con php 5.4, que es el php que viene en la distro de CentOS 7.

He cambiado varias funciones a medida que voy avanzando y haciendo pruebas de humo. Cambios sencillos como pasar de split a explode, o ponerle "static" a las funciones. Cambios medianos como pasar de ereg a preg_match. Otros más complicados, como la carga de un xml en que tuve que entender y reescribir una clase completa.

Todavía no termino, me falta bastante, pero por lo menos voy avanzando. No es un proyecto urgente pero si es importante no patearlo: hay que finalizarlo en algún momento y ese momento es ahora.
 
Upvote 0

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.782

Salvo una situación excepcional (que sea un requerimiento estricto de un fabricante), utilizo la repo oficial que viene con el sistema operativo. En este caso la repo del propio centos 7.

Igual me causa curiosidad que Centos 7 (y con RedHat 7) ponga PHP 5.4. Quizás tiene que ver que esta distro la sacaron el 2014.
 
Upvote 0

Miguelwill

I am online
Miembro del Equipo
MOD
Se incorporó
23 Febrero 2004
Mensajes
12.293
Salvo una situación excepcional (que sea un requerimiento estricto de un fabricante), utilizo la repo oficial que viene con el sistema operativo. En este caso la repo del propio centos 7.

Igual me causa curiosidad que Centos 7 (y con RedHat 7) ponga PHP 5.4. Quizás tiene que ver que esta distro la sacaron el 2014.
es lo más probable
igual es raro que no lo hubieran actualizado en todo este tiempo , ahí obligan a muchos a usar Repos externas

Enviado desde mi TA-1039 mediante Tapatalk
 
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.474
Sí, es pq php 5.6 y 7.0 todavía no salían y es política de rh quedarse en la misma versión base en cada actualización mayor. Hubo un intento de dejar la versión mínima en 7.0, pero rh rechazó la idea.

Otro detalle: en un mes más (03-12-2017) termina el soporte para php7.0, y sólo sacarán las actualizaciones de seguridad más graves.

Yo que tu, actualizo a por lo menos 7.1 (con remi, es RM de PHP7.2 y además tiene mucho que ver con el desarrollo de Fedora) y sigue a partir de ahí. 5.4 dejó de ser soportado en octubre de 2014 más o menos, y sin actualizaciones de seguridad a partir de octubre del 2015.

http://php.net/supported-versions.php

nosotros en producción corremos php7.1 y se actualiza automático cada semana en caso de haber actualizaciones: desde php5.5 hay una batería de tests bastante grande que evita regresiones, algo que no puedes asegurar con 5.4.

Yo soy poco dado a salirme de los repos oficiales, pero en el caso de php, nos limitaría demasiado tener que atenernos a una versión que ya cumplió 4 años. El salto que se ha pegado php en esos 4 años es cuántico y en ese tiempo maduró como lenguaje.

Saludos.


Sent from my iPhone using Tapatalk
 
Upvote 0
Subir