Foros del Web » Programando para Internet » PHP »

manejar dbase con php y exportar a mysql

Estas en el tema de manejar dbase con php y exportar a mysql en el foro de PHP en Foros del Web. Hola de nuevo, acudo a vosotros porque me estoy volviendo loca con un script que tiene que leer casi 50.000 registros de una base de ...
  #1 (permalink)  
Antiguo 04/06/2004, 13:46
 
Fecha de Ingreso: noviembre-2003
Mensajes: 50
Antigüedad: 14 años, 1 mes
Puntos: 0
manejar dbase con php y exportar a mysql

Hola de nuevo, acudo a vosotros porque me estoy volviendo loca con un script que tiene que leer casi 50.000 registros de una base de datos en dbase y según unos condicionantes determinados, actualizar, insertar o borrar dichos registros en una base de datos mysql. El scipt parece que funciona, pero llega un momento en el que se para y no sé si hace algo o no. Supongo que será cuestión de la programación que no está depurada o habrá alguna otra manera de hacerlo que se escapa a mis conocimientos. A ver si me echáis una mano. Gracias.

Os cuelgo el codigo a ver si me daís alguna idea. Gracias

<?require ("../conex.php");
set_time_limit(0);
$dbname = "C:\FoxServ\LIBROS.DBF";
$result = dbase_open ($dbname,0 );
if(!$result){
echo "No abrió la base de datos";
echo $result;
}
else {
$ultimo=dbase_numrecords($result);
$campos=dbase_numfields($result);
echo "El número de registros es ".$ultimo;
}
for ($u=1; $u<=dbase_numrecords($result); $u++) {
$array = dbase_get_record($result,$u);
$codigo=$array[0];
$titulo=$array[2];
$autor=$array[3];
$precio=$array[13];
$materia=$array[37];
$deposito=$array[44];
$stock=$array[45];
$disponible=$deposito + $stock;

$query="select codigo,materia,tipo_materia from productos,materias where materias.codigo_materia like productos.materia";
$resultado = mysql_query($query);
$row=mysql_fetch_array($resultado);

if ($materia=$row['materia'])
{
$tipo_materia=$row['tipo_materia'];
}

if ($tipo_materia='LIBROS')
{
if ($codigo=$row['codigo']){
$query1 = "UPDATE productos SET stock ='".$disponible."', precio = '".$precio."' WHERE codigo='" .$codigo. "'";
}
else {
$query2= "insert into productos (codigo,titulo,autor,precio,materia,stock,f_alta) values ('$codigo','$titulo','$autor','$precio','$materia' ,'$disponible','f_alta')";
}
}
else {
if (($deposito >0) or ($stock >0)) {
$query3 = "UPDATE productos SET stock ='".$disponible."', precio = '".$precio."' WHERE codigo='" .$codigo. "'";
}
else {
$query4 ="DELETE FROM productos where codigo='$codigo'";

}
}

}
?>
  #2 (permalink)  
Antiguo 04/06/2004, 14:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
50.000 registros puede ser una gran cantidad de datos ..

PHP le otorga cierta cantidad de memoria máximo (ademas del tiempo de ejecución que ya controlas) a un script. La directiva de tu php.ini que la define es:

memory_limit

SI lo ajustas a -1 se le dará a tu script toda la memoria que necesite (y tenga disponible en ese momento el servidor ..) ten cuidado con eso ..

Un saludo,
  #3 (permalink)  
Antiguo 04/06/2004, 15:01
 
Fecha de Ingreso: noviembre-2003
Mensajes: 50
Antigüedad: 14 años, 1 mes
Puntos: 0
Gracias, lo probaré a ver que tal... y lo comunico.
  #4 (permalink)  
Antiguo 15/07/2004, 08:03
 
Fecha de Ingreso: noviembre-2003
Mensajes: 50
Antigüedad: 14 años, 1 mes
Puntos: 0
Bueno, he mejorado el script y sólo me tarda media hora en hacer todo lo que quiero sin modificar el memory_limit del php.ini... como la aplicación va a correr en local no tendé problemas al modificar dicha directiva, supongo que el problema puede venir en un servidor compartido al consumir en exceso la memoria.

Probaré a cambiarlo a ver si mejora el tiempo de ejecución.
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 10:08.