Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

TimeOut usando PEAR

Estas en el tema de TimeOut usando PEAR en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas, porque podría ser que me devuelva este error aquí: Código: function count($whereAddOnly = false) { global $_DB_DATAOBJECT; $t = $this->__clone(); $quoteEntities = @$_DB_DATAOBJECT['CONFIG']['quote_entities']; $items ...
  #1 (permalink)  
Antiguo 22/12/2005, 06:03
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
TimeOut usando PEAR

Buenas, porque podría ser que me devuelva este error aquí:
Código:
 function count($whereAddOnly = false)
    {
        global $_DB_DATAOBJECT;


        $t = $this->__clone();

        $quoteEntities = @$_DB_DATAOBJECT['CONFIG']['quote_entities'];

        $items   = $t->table();
        if (!isset($t->_query)) {
            DB_DataObject::raiseError(
                "You cannot do run count after you have run fetch()",
                DB_DATAOBJECT_ERROR_INVALIDARGS);
            return false;
        }
        $DB    = $t->getDatabaseConnection();

        if (!$whereAddOnly && $items)  {
            foreach ($items as $key => $val) {
                if (isset($t->$key))  {
                    $kSql = $quoteEntities ? $DB->quoteEntity($key) : $key;
                    $t->whereAdd($kSql . ' = ' . $DB->quote($t->$key));
                }
            }
        }
        $keys = $this->keys();

        if (!$keys[0]) {
            echo 'CAN NOT COUNT WITHOUT PRIMARY KEYS';
            exit;
        }

        $table   = ($quoteEntities ? $DB->quoteEntity($this->__table) : $this->__table);
        $key_col = ($quoteEntities ? $DB->quoteEntity($keys[0]) : $keys[0]);
        $as      = ($quoteEntities ? $DB->quoteEntity('DATAOBJECT_NUM') : 'DATAOBJECT_NUM');
  $r = $t->_query(
            "SELECT count({$table}.{$key_col}) as $as
                FROM $table {$t->_join} {$t->_query['condition']}");
        if (PEAR::isError($r)) {
            return false;
        }

        $result  = &$_DB_DATAOBJECT['RESULTS'][$t->_DB_resultid];
        $l = $result->fetchRow();
        return $l[0];
    }
El error que me devuelve es:
Código:
 PHP Fatal error:  Maximum execution time of 30 seconds exceeded in
En otros getDatabaseConnection() no me da problema, sin embargo en ese objeto en concreto sí.

He pensado que pueda estar limitada la conexión al usuario a un determinado número pero no encuentro nada en concreto
  #2 (permalink)  
Antiguo 22/12/2005, 07:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm A veces ver un "método" aislado de una classe completa y dentro de un contexto .. no ayuda mucho a ver el problema.

Sólo te puedo comentar que el tiempo de ejecución de ese script (por el motivo que desconzco pues no se vé todo el código usando en su contexto ni explicas que hace) .. está superando el tiempo máximo otorgado por PHP por defecto.

Ese tiempo puedes aumentarlo por php.ini o bien usando la función:
set_time_limit()
www.php.net/set_time_limit

Un saludo,
  #3 (permalink)  
Antiguo 22/12/2005, 09:47
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Si, eso lo entiendo, el problema es que no creo que se vaya a solucionar aumentando el time limit. Esa función es de un modulo de PEAR llamado DataObject, pero no encuentro la definición de

getDatabaseConnection()

por eso no puedo llegar a enteder porque no se está ejecutando y salta el timeout ya que en otras funciones si que se ejecuta correctamente y el acceso a datos lo hace bien.

No se si tuvieses algun "bombillazo" para guiarme hacia donde buscar o algo.
  #4 (permalink)  
Antiguo 22/12/2005, 09:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm No sé si ya has visto la documentación de PEAR sobre ese objeto:

http://pear.php.net/package/DB_DataO...Generator.html

No dice mucho en su descripción .. pero hay referencias que te podrían interesar.

Un saludo,
  #5 (permalink)  
Antiguo 22/12/2005, 09:57
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Hola de nuevo, he encontrado la función en cuestión:

Código:
    function &getDatabaseConnection()
    {
        global $_DB_DATAOBJECT;

        if (($e = $this->_connect()) !== true) {
            return $e;
        }
        if (!isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) {
            return  false;
        }
        return $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
    }
y la función _connect()
Código:
    function _connect()
    {
        global $_DB_DATAOBJECT;
        if (empty($_DB_DATAOBJECT['CONFIG'])) {
            DB_DataObject::_loadConfig();
        }

        // is it already connected ?

        if ($this->_database_dsn_md5 && @$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]) {
            if (PEAR::isError($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) {
                return DB_DataObject::raiseError(
                        $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->message,
                        $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->code, PEAR_ERROR_DIE
                );

            }

            if (!$this->_database) {
                $this->_database = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn['database'];
    }

        }

 $options= &$_DB_DATAOBJECT['CONFIG'];
        $dsn = @$this->_database_dsn;

        if (!$dsn) {
            if (!$this->_database) {
                $this->_database = @$options["table_{$this->__table}"];
            }
            if (@$this->_database && @$options["database_{$this->_database}"])  {
                $dsn = $options["database_{$this->_database}"];
            } else if ($options['database']) {
                $dsn = $options['database'];
            }
        }
  $this->_database_dsn_md5 = md5($dsn);

        if (@$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]) {
            if (@$_DB_DATAOBJECT['CONFIG']['debug']) {
                $this->debug("USING CACHED CONNECTION", "CONNECT",3);
            }
            if (!$this->_database) {
                $this->_database = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn["database"];
            }
            return true;
        }
        if (@$_DB_DATAOBJECT['CONFIG']['debug']) {
            $this->debug("NEW CONNECTION", "CONNECT",3);
            /* actualy make a connection */
            $this->debug("{$dsn} {$this->_database_dsn_md5}", "CONNECT",3);
        }

        $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5] = DB::connect($dsn);
 if (@$_DB_DATAOBJECT['CONFIG']['debug']) {
            $this->debug(serialize($_DB_DATAOBJECT['CONNECTIONS']), "CONNECT",5);
        }
        if (PEAR::isError($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) {
            return DB_DataObject::raiseError(
                        $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->message,
                        $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->code, PEAR_ERROR_DIE
            );

        }

        if (!$this->_database) {
            $this->_database = $_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->dsn["database"];
        }

        // Oracle need to optimize for portibility - not sure exactly what this does though :)
        $c = &$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5];
        if ($c->phptype == 'oci8') {
            $c->setOption('optimize','portability');
    }
        return true;
    }
No se que es lo que está pasando, voy a seguir revisando a ver que veo.
  #6 (permalink)  
Antiguo 22/12/2005, 10:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Esa tremenda classe de PEAR .. ¿no tiene un modo "debugg"? para ver mensajes de error si se producen (la mayoría lo incorporan .. justamente por qué seguir ese tremendo código lleno de instancias .. de dependencias y demás es complicado verlo).

Un saludo,
  #7 (permalink)  
Antiguo 22/12/2005, 10:34
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
jajaja, dimelo a mi que me lo estoy leyendo como si fuese el Quijote. Como sería eso, es que yo en pear siempre he programado con pico.
¿como podría saber lo del modo debug???
  #8 (permalink)  
Antiguo 22/12/2005, 10:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues .. las que tienen modo debbug .. por algún lado tendrás algú metodo o en la instanacia del objeto princial que sirva para tal fin (activarlo o no).

Un saludo,
  #9 (permalink)  
Antiguo 22/12/2005, 11:19
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
pues yo no veo tal, como te dije es una clase ya hecha y buf, chungo, como puedo encontrar dicho metodo para activar debug???

x cierto la clase no tiene constructor
  #10 (permalink)  
Antiguo 22/12/2005, 11:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm Es que no todas tienen esa opción .. pero es una buena práctica si uno desarrolla un objeto completo .. implementarlo .. sobre todo cuando el código va a ser distribuido para usarlo por N programadores. Pero en fin .. sólo era un comentario.

Si quieres .. movemos tu pregunta al foro de "PHP Orientado a Objetos" .. o realiza allá tu pregunta pero enfocando el tema y especificando bein que usas PEAR y cierto objeto, explica como lo usas .. cuando o en que condiciones falla .. etc. Tal vez algún usuario de "PEAR" y de ese objeto te pueda recomendar algo más acertado.

Un saludo,
  #11 (permalink)  
Antiguo 22/12/2005, 11:38
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
ok, muevelo ahí si quieres, mejor.

Las condiciones en las que falla exactamente no lo sé, lo único que se es que falla en las página que llaman a la primera funcion count, creo que es relacionado con la paginación, pero no puedo asegurar que las que sí funcionen no llamen a esa función (el código es muy complejo y largo).

Gracias por la ayuda.
  #12 (permalink)  
Antiguo 22/12/2005, 11:52
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Otra cosa, (es que yo depuro comentando líneas), si comento esa línea en concreto me sigue devolviendo error de timeout pero en el foreach, quizá sea ahí el error y no en el getDataBaseConnection.
Código:
 foreach ($items as $key => $val) {
                if (isset($t->$key))  {
                    $kSql = $quoteEntities ? $DB->quoteEntity($key) : $key;
                    $t->whereAdd($kSql . ' = ' . $DB->quote($t->$key));
                }
Quizá no encuentra el key y por eso se queda "colgado", podría ser por el tipo de tabla''??
  #13 (permalink)  
Antiguo 22/12/2005, 12:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por mi parte .. ni idea .. no sé (por qué no he usado esta classe de PEAR) como o que hace para su trabajo .. así que no te puedo decir más al respecto. Constantemente sale código que hace referencia a otros métodos y más métodos ... en fin .. si tuviera ese problema intentaría llegar a la "base" .. aunque sé que se puede complicar mucho en tu caso.

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:02.