Foros del Web » Programando para Internet » PHP »

Error en Constructor de Función de Objeto

Estas en el tema de Error en Constructor de Función de Objeto en el foro de PHP en Foros del Web. Buenas chicos como va todo, hace tiempo que no paso por aquí jeje. Tengo un problemilla aver si ustedes pueden ayudarme :). Estoy intentando optimizar ...
  #1 (permalink)  
Antiguo 26/06/2009, 11:05
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Error en Constructor de Función de Objeto

Buenas chicos como va todo, hace tiempo que no paso por aquí jeje.

Tengo un problemilla aver si ustedes pueden ayudarme :). Estoy intentando optimizar una función de una aplicación en la cual siempre se me queda colgado. Es un script que sincroniza varias bases de datos, y dura unas dos horas o dos horas y media cada vez que sincronizo porque son bases de datos muy grandes.

Tengo el siguiente construc que lo que hace es hacer una imagen pequeña, es decir la redimensiona a 60 Pixeles por 60 Píxeles. Aquí la pueden ver

Código:
function __construct($filename, $newxsize=60, $newysize=60, $fileout='', $thumbMaxSize=0, $bgred=0, $bggreen=0, $bgblue=0) {

		if($thumbMaxSize) {

			$this->maxSize = true;

		} else {

			$this->maxSize = false;

		}

		

		if($bgred >= 0 || $bgred <= 255) {

			$this->bg_red = $bgred;

		} else {

			$this->bg_red = 0;

		}

		

		if($bggreen >= 0 || $bggreen <= 255) {

			$this->bg_green = $bggreen;

		} else {

			$this->bg_green = 0;

		}

		

		if($bgblue >= 0 || $bgblue <= 255) {

			$this->bg_blue = $bgblue;

		} else {

			$this->bg_blue = 0;

		}

		

		$this->createImg($filename,$newxsize,$newysize,$fileout);

	}
Siempre me da error en la penúltima almohadilla. El error que da es de memoria es el siguiente:

[26-jun-2009 02:59:08] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 9920 bytes) in administrator/components/com_providers/libraries/utilities/img2thumb.php on line 95

El tema está en que el script dura un porrón de tiempo, tengo el max_execution_time ilimitado, y cuando lleva muchos productos casi al final se jode, saltando este error. No se que puedo hacer para esta aplicación me tiene loco jeje.


He probado a ampliar la memoria a 256 megas y sigue igual. Entonces querría saber si hay algún código más eficiente en terminos de uso de memoria que me valga para redimensionar las imagenes estas, o modificar esta función para que no me de el dichoso error de la memoria.

Estaría tremendamente agradecido si me ayudasen :).


Muchas gracias a todos por hacer este gran sitio

Última edición por hyperrjas; 26/06/2009 a las 11:13
  #2 (permalink)  
Antiguo 26/06/2009, 11:42
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Error en Constructor de Función de Objeto

Deberías replantearle la lógica de la aplicación. Desde mi punto de vista estás consumiendo recursos extras porque no has planteado correctamente, quien y cuando se debe hacer esa redimension de las imagenes. Si nos explicas a nivel general todo lo que hace tu aplicación te podremos aportar alternativas, saludos!
  #3 (permalink)  
Antiguo 26/06/2009, 12:28
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Sonrisa Respuesta: Error en Constructor de Función de Objeto

Es una aplicación que integra a mayoristas informáticos en una tienda online. Y pretendo sincronizar todo con el mismo script.

En cuanto a lo que se refiere usted creo que me está diciendo que haga las sincronizaciones por separado jeje :) Es decir que ejecute una sincronización para un mayorista, otro para otro y así.

Este constructor lo que hace es coger, una imagen grande y la redimensiona. Es decir coge la imagen de icecat.biz que esuna gran base de datos con fichas de productos de fabricantes y la redimensiona para hacer la thumb.

Entonces mi pregunta es aparte de realizar los procesos por separado, es posible mejorar ya que estamos ese constructor a la hora de redimensionar la imagen?

Mcuhas gracias por su contestación de antemano :)
  #4 (permalink)  
Antiguo 26/06/2009, 12:44
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Error en Constructor de Función de Objeto

Cita:
Iniciado por hyperrjas Ver Mensaje
Es una aplicación que integra a mayoristas informáticos en una tienda online. Y pretendo sincronizar todo con el mismo script.

En cuanto a lo que se refiere usted creo que me está diciendo que haga las sincronizaciones por separado jeje :) Es decir que ejecute una sincronización para un mayorista, otro para otro y así.

Este constructor lo que hace es coger, una imagen grande y la redimensiona. Es decir coge la imagen de icecat.biz que esuna gran base de datos con fichas de productos de fabricantes y la redimensiona para hacer la thumb.

Entonces mi pregunta es aparte de realizar los procesos por separado, es posible mejorar ya que estamos ese constructor a la hora de redimensionar la imagen?

Mcuhas gracias por su contestación de antemano :)
Como ya he explicado en mi anterior post, desde mi humilde punto de vista. El problema no reside en la clase, método, o función. Si no en el Lógica General del proceso.

Por ponerle un ejemplo. Imaginese que usted como empresario de una prestigiosa empresa taladora de arboles posee un trabajador muy responsable, profesional y eficaz en su trabajo (clase que redimensiona imagenes), el por si solo sabe talar un arbol, rápido y con poco esfuerzo. Por otro lado usted como empresario no ha organizado correctamente la logistica de su empresa y aunque su trabajor responsable, profesional y eficaz en su trabajo tala los arboles a tiempo, se le amontonan por la mala organización de su logistica. Los camiones no llegan a tiempo a recogerlos, dispone de una flota pequeña de transportistas, las secretarias no son muy experimentadas, el almacen es pequeño, etc, etc....

Con este ejemplo quiero ilustrarle que el problema no esta en su clase que es muy profesional y eficaz, si no en toda la logica que hay por encima de ella.

Espero darle un punto de vista diferente al problema.


Saludos!
  #5 (permalink)  
Antiguo 26/06/2009, 16:21
 
Fecha de Ingreso: febrero-2006
Mensajes: 60
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: Error en Constructor de Función de Objeto

Yo creo que va por el tamaño de imagen. ¿O te pasa con todas las imágenes?.

Bueno, intenta también agrandando el límite de memoria:

Código PHP:
ini_set("memory_limit","120M"); 
__________________
Negro Blanco
  #6 (permalink)  
Antiguo 27/06/2009, 04:05
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Respuesta: Error en Constructor de Función de Objeto

Muchas gracias de nuevo por responder :). Siempre se queda pillado el proceso en la misma imagen, en respuesta a ZyZtemA

El tema está en que siempre se queda faltando 14 productos. He modificado la aplicación de tal manera que se puedan sincronizar los proveedores por separado como me dice Synkronice, y nada sigue dando el mismo error. Aquí pueden ver un reporte:

status=5
message=Almacenando producto 0002+999222 >>>>> Panda Internet Security 2009 - 3 Licencias Autonomos (A12IS09FL)
progress=90
providers_count=3
products_count=2075
products_real=2061


products_count son los productos que tiene que actualizar/insertar
products_real son por los productos que va el proceso de sincronización.


He probado a poner el limite de memoria a 256 megas y a 128 y nada, sigue con las mismas. Creo que no es problema de memoria, puesto que si fuese problema de memoria no insertaría como otras veces lo ha hecho 20000 productos o más.

No es como dice Syncronice por la cantidad de productos porque habiendo 2505 productos en products_real se queda pillado siempre faltando 14 productos es decir en 2491, curiosamente en este mismo Producto:

Panda Internet Security 2009 - 3 Licencias Autonomos (A12IS09FL)

El tema es que el proceso lo ha realizado bién siempre, y ahora no se porque con este dichoso producto se queda atascado a la hora de redimensionar la imagen.

Aquí pueden ver el producto en esta web:

http://www.mcr.com.es/productos.php?id=11220

Verán que el id del producto es 999222, yo le tengo puesto a todos los productos, un identificador de proveedor, en este caso es 0002 y luego despues el id del producto. Por lo tanto se forma del siguiente modo:

0002+999222

Lo más curioso ya de todo y para rematar la faena, es que alguna vez me lo ha insertado bién.

Pueden ver el producto correctamente insertado en la siguiente dirección:

http://www.tiendasdesk.com/index.php...art&Itemid=102

Mi web es http://www.tiendasdesk.com

Lo curioso es que si la descripción fuese de icecat, pero no en este caso, es de la misma web, lo tengo puesto de tal modo que si encuentra el part_number en icecat coja la ficha de icecat, si no, la coja de la web del mayorista si la tiene, si no la tienen ni icecat ni el mayorista, no inserta nada.

También he estado revisando las imagenes, tanto la grande como la thumb y nada, están perfectamente, ni están dañadas ni absolutamente nada de nada.

Es extrañísimo porque yo nunca he tenido problemas desde que me puse a crear el software. En otro proveedor muy grande que tiene sobre 20000 productos no ha dado error ningún producto. Y en este proveedor que es un mayorista pequeñito, me jode este articulo. La verdad no se porque se para mi sincronización en este mismo producto creo que me estoy volviendo crazy

Bueno espero puedan ayudarme o darme alguna idea porque no se que hacer la verdad...

He probado a eliminar el producto, a despublicarlo, he hecho de todo, he mirado en la bd aver si hay algun campo mal en este producto y no veo nada extraño...

Bueno siento ser pesado pero es que estoy un poco desesperado

Muchas gracias de antemano y mis felicidades por este gran sitio, y por la gente que lo hace :)

Un saludo
  #7 (permalink)  
Antiguo 28/06/2009, 05:26
 
Fecha de Ingreso: abril-2007
Mensajes: 156
Antigüedad: 17 años
Puntos: 0
Respuesta: Error en Constructor de Función de Objeto

Cabría la posibilidad, de que cada 1200 productos insertados por ejemplo, pare el script para que la memoria se libere y pasado 2 o 3 o 4 minutos, pueda reanudar el script por donde iba?

Creo que esto sería una solución.

He de decir que libero memoria en cada script de la aplicación.

Bueno sigo desesperado no se que hacer :(

Muchas gracias por su tiempo y por su paciencia :)
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 21:17.