2011/1/26 Gabriel Divenuto <gabriel...@gmail.com>:
> --
> Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP
> Argentina" de Grupos de Google.
> Para publicar una entrada en este grupo, envía un correo electrónico a
> php...@googlegroups.com.
> Para anular tu suscripción a este grupo, envía un correo electrónico a
> php-arg+u...@googlegroups.com
> Para tener acceso a más opciones, visita el grupo en
> http://groups.google.com/group/php-arg?hl=es.
>
Proba haciendo una sola query que traiga todos los resultados.
Tambien tene en cuenta que phpmyadmin te pagina los resultados, osea
que no te trae los 56k registros sino que te trae solo ~50 o algo asi.
2011/1/26 Federico <fede...@gmail.com>:
Lo que podes hacer es ir probando hasta cuantos podes traer cambiando el LIMIT.
Asi podes ir viendo cual es tu limite segun la memoria que asignas.
2011/1/26 Gabriel Divenuto <gabriel...@gmail.com>:
¿Ir obteniendo de a 500 registros es para ir liberando memoría?
porque, al fin y al cabo, luego del "do/while" habrás siempre obtenido
todos los registros, como si no hubieras usado el LIMIT. Si es así,
probaste obtener de a 1000 (o más), a fin de hacer menos consultas.
¿probaste hacer una sola consulta (es decir no usar limit)?
Por otra parte: ¿el que se queda sin memoría seguro que es php?¿o
puede ser el mysql? ¿podrías transcribir el error que muestra?
saludos
guillermo
--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a php...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a php-arg+u...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/php-arg?hl=es.
Como dice Guillermo, al hacer las consultas de a 500 y hacer un merge,
estás en la misma: Metés todos los registros en memoria a la vez.
Hacelo en una sola query.
Por otro lado, a menos que estés haciendo algun procesamiento con
todos los valores a la vez, podés imprimirlos y descartarlos apenas
los usás:
<?php
//ini_set("memory_limit",'256M');
//SE ABRE LA CONEXION
$conexion = mysql_connect($servidor, $usuario, $password, true, 65536)
or die ("Falló la conexión al Servidor <br>Error: ".mysql_error()."<br>\n");
mysql_select_db($base_datos, $conexion) or die("Falló la selección de
la Base de Datos <br>Error: ".mysql_error()."<br>\n");
// QUERY DE EJEMPLO, LA REAL DEVUELVE 55,695 FILAS
$sql = "SELECT campo1, campo2, campo3, campo4, campo5, campo6, campo7
FROM tabla_ejemplo
WHERE fecha BETWEEN '1983-01-01' AND '2011-01-20'
";
$resultado = mysql_query($sql);
while ($fila = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
+1 a esto.
A lo mejor lo podés hacer con un par de queries un poco más complejas,
pero que van a andar mucho más rápido que hacerlo "a mano" via PHP.
Ac� quer�s
$salida_html = file_get_contents("reporte.html");
>
> require_once("dompdf/dompdf_config.inc.php");
> $dompdf = new DOMPDF();
> $dompdf->load_html($salida_html);
...o mejor, load_html_file(), que hace lo mismo y te ahorra c�digo.
> $dompdf->render();
> $dompdf->stream("reporte.pdf");
>
> Devuelve el mismo error de limite de memoria:
> *Fatal error*: Allowed memory size of 33554432 bytes exhausted (tried to
> allocate 28 bytes) in */var/www/pruebas/pruebas GENERAR
> REPORTE/dompdf/include/frame_tree.cls.php* on line *169*
Y si eso ya no te funciona (ni expandiendo la memoria disponible
para este script), ya se vuelve m�s f�cil irte a otro lenguaje, como
Python, donde no ten�s el l�mite duro de memoria.
> --
> Gabriel E. Divenuto
> T�cnico Superior en Sistemas Inform�ticos
> SistemasGD :: Desarrollo de Sistemas Inform�ticos
> Mar del Plata - Argentina
> Email: gabriel...@sistemasgd.com.ar
> <http://sistemasgd.com:2084/squirrelmail/src/compose.php?send_to=gabriel...@sistemasgd.com.ar>
> Web: www.sistemasgd.com <http://www.sistemasgd.com/>
--
Guillermo O. �Tordek� Freschi. Programador, Escritor, Genio Maligno.
http://tordek.com.ar :: http://twitter.com/tordek
http://www.arcanopedia.com.ar - Juegos de Rol en Argentina
0) Abrir el archivo .html para escritura
1) Hacer el query
2) while trayendo las lineas una a una (fetch)
2.1) Ir escribiendo al archivo con los datos de cada linea
3) Cerrar el archivo
4) Free resultado mysql
5) Redirect
No tendrias que tener ningun problema de memoria.
Ahora, si lo que queres es traer todoas los registros, cambiarles el
orden, hacer reportes u otras cosas que requieran tenerlos en memoria,
ahi si seria otra historia.
Suerte!
PD: La verdad que este es el ejemplo tipico que no se como recolver
con MVC ya que generlamente el pasaje es por array... seguramente, no
hay que resolverlo con MVC
2011/1/28 llarensj <llar...@gmail.com>:
Ahora, si lo que queres es traer todoas los registros, cambiarles el
orden, hacer reportes u otras cosas que requieran tenerlos en memoria,
ahi si seria otra historia.
PD: La verdad que este es el ejemplo tipico que no se como recolver
con MVC ya que generlamente el pasaje es por array... seguramente, no
hay que resolverlo con MVC
0) Abrir el archivo .html para escritura
1) Abrir dos conexiones a la base de datos
2) Hacer el query sobre la primer conexion
3) while trayendo las lineas una a una (fetch) del query princiapal
3.1) Query para sacar los datos de cada linea sobre la segunda conexion
3.2) Ir escribiendo al archivo con los datos de cada linea agregando
lo conseguido
4) Cuando termina el ciclo Cerrar el archivo
5) Redirect
Es mas, yo mando la salida linea a linea directamente sin pasar por un
archivo (lo uso mucho para generar CSV dinamicos) y no tengo ningun
problema. Recordar poner los header necesarios
Yo lo uso asi y no tengo problemas de memoria, lo imporante es no
guardar todos los registros a un array.
Espero haber interpretado bien lo que querias hacer.
Suerte!
PD: Lo de serializar puede ser una solucion, pero la verdad es que yo
prefiero analizar porque tengo que hacer tanto trabajo en un pedido
Web, posiblemente ese trabajo lo tenga que hacer un script pero ese es
otro tema. Lo del MVC era solo un comentario, yo si me encuentro que
tengo que pasar tantos datos a la vista, trato de ver si es realmente
necesario.
--
Gabriel E. Divenuto
Técnico Superior en Sistemas Informáticos
SistemasGD :: Desarrollo de Sistemas InformáticosMar del Plata - Argentina
Email: gabriel...@sistemasgd.com.ar
Web: www.sistemasgd.com
--
Has recibido este mensaje porque estás suscrito al grupo "Grupo PHP Argentina" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a php-arg+u...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a php...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/php-arg.
Para acceder a más opciones, visita https://groups.google.com/d/optout.