Hasta ahora puedo ver que siempre me trae un source, pero no se si siempre es el mismo
Últimamente se cuelga por momentos el apache y sospecho que puede ser esta clase la que genera el problema.
De paso, si es que esta razonablemente bien, podría servir como aporte, cambiándole el oci_connect, por un mysql o cualquier otro, sirve para cualquier motor.
Código PHP:
<?php
/**
* Clase de conexion
* Implementada con patron de diseño singleton
*
* @author leswider
*/
class Conexion {
private $_oLinkId; //objeto resource que indicara si se ha conectado
private $_sServidor;
private $_sNombreBD;
private $_sUsuario;
private $_sClave;
private $_sPuerto;
public static $sMensaje;
private static $_oSelf = null; //Almacenara un objeto de tipo Conexion
/**
*
* @param string Nombre del usuario a conectarse.
* @param string Password de conexión.
* @param string Nombre de la base de datos.
* @param string Nombre del servidor.
*/
private function __construct($user, $pass, $base, $servidor) {
$this->_sServidor = $servidor;
$this->_sNombreBD = $base;
$this->_sUsuario = $user;
$this->_sClave = $pass;
$this->_sPuerto = PUERTO;
$this->sMensaje = "";
}
/**
* Este es el pseudo constructor singleton
* Comprueba si la variable privada $_oSelf tiene un objeto
* de esta misma clase, si no lo tiene lo crea y lo guarda
* @static
* @param string Nombre del usuario a conectarse (Por defecto la constante NOMBRE del archivo conf.inc.php)
* @param string Clave de conexión. (Por defecto la constante PASSWORD del archivo conf.inc.php)
* @param string Nombre de la base de datos (Por defecto la constante BASE del archivo conf.inc.php)
* @param string Nombre del servidor (Por defecto la constante SERVIDOR del archivo conf.inc.php)
* @return resource
*/
public static function getInstancia($user = USUARIO, $pass = PASSWORD, $base = BASE, $servidor = SERVIDOR) {
if (!self::$_oSelf instanceof self) {
$instancia = new self($user, $pass, $base, $servidor); //new self ejecuta __construct()
self::$_oSelf = $instancia;
if (!is_resource($instancia->conectar())) {
self::$_oSelf = null;
}
}
$conex = self::$_oSelf;
return $conex->_oLinkId; //Se devuelve el link a la conexion
}
/**
* Realiza la conexion
* @return link para exito, o false
*/
private function conectar() {
$this->_oLinkId = @oci_connect($this->_sUsuario, $this->_sClave, "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" . $this->_sServidor . ")(PORT=" . $this->_sPuerto . "))(CONNECT_DATA=(SERVICE_NAME=" . $this->_sNombreBD . ")))");
if (is_resource($this->_oLinkId)) {
self::$sMensaje = "Conexion exitosa!";
} else {
self::$sMensaje = "ERROR: No se puede conectar a la base de datos..!";
}
return $this->_oLinkId;
}
/**
* Este método verifica si había una conexión abierta anteriormenete. Si había la cierra.
*
* @static
* @return boolean true si existía la conexión, false si no existía.
*/
public static function desconectar() {
$conexion_activa = false;
if (self::$_oSelf instanceof self) {
$bandera = true;
$instancia = self::$_oSelf;
oci_close($instancia->_oLinkId); //cierro la conexion activa
self::$_oSelf = null; //destruyo el objeto
}
return $conexion_activa;
}
}
?>
Código PHP:
if(is_source(Conexion::getInstancia())){
echo "tengo un source";
} else {
echo "error";
}
Conexion::desconectar;