Persistencia en PHP

Hola a todos los expertos de php, tengo una duda.

se sabe que php no esta del todo orientado a objetos al menos en el sentido de que por ejemplo los objetos no persisten en la aplicacion como sucede en una aplicacion de escritorio programada en cualquier lenguaje O.O. aunque parece que esto no es del todo cierto, acabo de investigar una funcion de php llamada serialize() y si no mal entendi permite que un objeto se almacene y pueda ser consultado despues, aunque no almacena sus metodos pero si sus propiedades.

el punto es que esto tendria mucha utilidad por ejemplo para hacer lo que necesito, una consulta a BD en access y la pagina se refresca cada cierto tiempo para mostrar un recorrido al oprimir un boton de play y se muestra paulatinamente, como php se ejecuta en el servidor y solo le muestra al cliente el resultado html y todo lo demas se destruye entonces habria que hacer de nuevo la consulta y guardar el registro en el que se quedo.

con serialize se podria almacenar por ejemplo el resultado de odbc_exec($conexion,$consulta) para luego ser consultada de nuevo por otra pagina o por la misma al recargarse utilizando las funciones clasicas como odbc_fetch_array() o odbc_fecth_row() ahorrandose el tener que volver a conectarse y volver a consultar los mismos datos?

la cuestion es alguno a programado asi? ¿es posible lo que pretendo? o la solucion no es por ahi.

agradecere mucho su orientacion, saludos :)
Mira ésto a lo mejor te sirve de ayuda, de todas maneras una vez que usas serialize para consultar los datos, creo que no deberías utilizar odb_fetch_array / row básicamente porque con las consultas de odbc estas contactando con la bbdd y tu los datos que querías sustraer ya los has sacado con serialize, ¿me explico? si hicieras un odbc_exec($conexion,$consulta) donde $consulta es $consulta=select * from tabla1; pues cuando usaras el serialize para tu exec, sacarías todos los datos que devuelve la matriz o sea, la tabla de la base de datos por ende ya lo tienes almacenado en memoria dinámica, que alguien me corrija si no es así porque tampoco me muevo al 100% en php con objetos.
Por otra parte deberías tener en cuenta la carga de trabajo que eso puede suponer para tu servidor, 1, 2, 3, 50 usuarios vale, pero miles de ellos, podrían llegar a sobrecargar el sistema teniendo en cuenta que estarías exponiendo la memoria del sistema a las peticiones de esos usuarios con lo que al final el servidor podría saturarse con unas pocas peticiones. (tomando miles como pocas teniendo en cuenta que habitualmente reciben varias más)
Espero que te haya podido ayudar en algo, igualmente no piloto mucho de php a objetos, php con mysql me muevo bastante desenvuelto y java, pero claro no es lo mismo java que php... así que.. XD
Para mi, la solución, es la que usa la mayoría, un sistema de cachés, es decir:

Si tu consulta SQL, genera por ejemplo una página de noticias, a priori, estática, generas ese HTML (dinamicamente, consultando los datos a SQL) y una vez generado lo guardas en disco con información de la fecha de generación. Luego la devuelves, como siempre.

La proxima vez que se solicite esa pagina o bien:

1.- Tienes implementado un tiempo de "expiración", tal que si la página es mas antigua de 30 min, o 5 días, o lo que quieras, se vuelve al paso anterior de generarla. En caso contrario la devuelves tal cual.

2.- Consultas en SQL si hay "cambios" desde la fecha de generación del archivo estático y de ser así lo regeneras de nuevo. En caso contrario la devuelves tal cual.

Esto, a modo "básico" es si decides hacerlo "a mano". Hoy en dia, la mayoría de los sistemas de templating decentes soportan cachés.
¡ups! cierto ya vi y la funcion serialize() solo arroja el resultado despues de hacerle el odbc_fetch_array() y solo de una fila y no de la consulta entera (la consulta tendra muchas filas como resultado) ya que no trabaja con los tipos resource que lastima, bueno tendria que hacerlo con los metodos que me mencionan. entonces:

podria hacer un array bidimensional para almacenar mi consulta y despues pasarla a una variable de sesion y asi tenerla en todo momento sin volver a hacer todo el rollo de conectar y consultar, pero entonces y como mencionan cuando tenga muchas visitas el sitio, el servidor podria verse sometido a mucha carga. pero si las variables de sesion se almacenan en disco no creo que hubiera mucho problema, pero si se almacenan en RAM entonces el servidor si se veria afectado.

¿ustedes saben en donde se almacen las variables de sesion de php? no encontre este tipo de informacion por google solo me salen muchos manuales de como usarlas.

gracias por contestar.

saludos. [sonrisa]
No se si te he entendido bien, pero guardar el contenido de la consulta (asumo que te refieres a los objetos que devuelve SQL, no a la consulta en si) en una variable de sesión es un poco como matar moscas a cañonazos.

Respecto al almacén de variables de sesion en php, supongo que dependerá, como todo, en mi caso, el apache las guarda en archivos sess_xxxxxxxxxx bajo la carpeta que tengo preconfigurada. Es probable que de algún modo las cachee en memoria para no tener que ir a buscarlas a disco por cada petición. En cualquier caso, no parece una buena idea guardar algo "muy grande" en la variable de sesión, no están pensadas para eso.

De nuevo te digo, lo más razonable, seria que no te complicaras la vida y usaras un sistema de plantilla que tenga implementado el tema de cachés. Sino, la solucion que te propuse antes, te debería valer perfectamente.
4 respuestas