Foros del Web » Programando para Internet » PHP »

pasar una tabla de usuarios a DBMAIL

Estas en el tema de pasar una tabla de usuarios a DBMAIL en el foro de PHP en Foros del Web. hola amigos....les cuento tengo una tabla con 9000 usuarios....y tengo que pasarlos a DBMAIL por medio de un comando de shell....cree un scripts para que ...
  #1 (permalink)  
Antiguo 23/03/2003, 22:00
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
pasar una tabla de usuarios a DBMAIL

hola amigos....les cuento tengo una tabla con 9000 usuarios....y tengo que pasarlos a DBMAIL por medio de un comando de shell....cree un scripts para que te los agrege automaticamente....porque no estoy para tipear 9000 veces aqui les dejo el scripts
Código PHP:
<?php
//Iniciamos básicamente el conteo del microtime.
$mtime1 microtime();
$mtime1 explode(" ",$mtime1);
$mtime1 $mtime1[1] + $mtime1[0];
$starttime $mtime1;
//Conexion con la base
mysql_connect("localhost","","");
//Ejecutamos la sentencia SQL
$result=mysql_db_query("alumnos","select * from gestion");
//Mostramos los registros
$alumnos=0;
while (
$row=mysql_fetch_array($result))
{
exec ("dbmail-adduser a $row[nombre] $row[password] 0 0 $row[nombre]"."@frt.utn.edu.ar[,$resultado][,$var_retorno]")
$alumnos++;
}
//Finalizamos el proceso relativamente.
$mtime2 microtime();
$mtime2 explode(" ",$mtime2);
$mtime2 $mtime2[1] + $mtime2[0];
$endtime $mtime2;
$totaltime = ($endtime $starttime);
echo 
"<font size=1 face=verdana><center>[En el proceso de migracion se agregaron $alumnos y tardo $totaltime segundos]</center></font>";
mysql_free_result ($result); ///liberamos la memoria
mysql_close(); ////cerramos la conexion
?>
lo tengo que hacer una vez pero sin cometer errores.....mi pregunta que funcion debo usar: exec(), passthru(), system() o shell_exec() .....cual me recomiendan??? porque existen tantas funciones que "practicamente" hacen lo mismo

Desde Ya Muchas Gracias!
  #2 (permalink)  
Antiguo 24/03/2003, 07:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues hay diferencias entre todas esas funciones ... Algunas te entregan el "echo" de tu ejecución en la shell .. otras no ..

Revisalo en el manual .. pues al parecer no haces nada con tu "var retorno ...". Sería bueno que creases un log (en un archivo) con esos mensajes posibles de OK o error que te entregue la ejecución de ese comando .. Así veras si algo anda mal o todo OK

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 24/03/2003, 14:36
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
siguiendo lo que me aconsejo el amigo CLUSTER (BOOM) esto quedo asi:
Código PHP:
<?php
//Iniciamos básicamente el conteo del microtime.
$mtime1 microtime();
$mtime1 explode(" ",$mtime1);
$mtime1 $mtime1[1] + $mtime1[0];
$starttime $mtime1;
//Conexion con la base
mysql_connect("localhost","","");
//Ejecutamos la sentencia SQL
$result=mysql_db_query("alumnos","select * from gestion");
//Mostramos los registros
$alumnos=0;
while (
$row=mysql_fetch_array($result))
{
exec ("dbmail-adduser a $row[nombre] $row[password] 0 0 $row[nombre]"."@frt.utn.edu.ar[,$resultado][,$var_retorno]")
$archivo=fopen("log.txt""a+");
fwrite($archivo,"El Resultado de la migracion fue el siguiente: $resultado y la variable de retorno dio: $var_retorno\r\n");
fclose($archivo);
$alumnos++;
}
//Finalizamos el proceso relativamente.
$mtime2 microtime();
$mtime2 explode(" ",$mtime2);
$mtime2 $mtime2[1] + $mtime2[0];
$endtime $mtime2;
$totaltime = ($endtime $starttime);
echo 
"<font size=1 face=verdana><center>[En el proceso de migracion se agregaron $alumnos registros y tardo $totaltime segundos]</center></font>";
mysql_free_result ($result); ///liberamos la memoria
mysql_close(); ////cerramos la conexion
?>
1)a la variable $resultado la tengo que declarar como array o asi no mas esta bien???
2) el \r\n anda el windows como en linux???
3)la variable $var_retorno que devuelve??? 1 si ok 0 si mal??? o que....esta variable la saque del manual oficial!

Desde Ya Muchas Gracias!!
  #4 (permalink)  
Antiguo 24/03/2003, 14:43
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿Esta linea
Código PHP:
exec ("dbmail-adduser a $row[nombre] $row[password] 0 0 $row[nombre]"."@frt.utn.edu.ar[,$resultado][,$var_retorno]"
no tendria que ser
Código PHP:
exec ("dbmail-adduser a $row[nombre] $row[password] 0 0 $row[nombre]"."@frt.utn.edu.ar",$resultado,$var_retorno
?

Porque $resultado y $var_retorno son parametros de exec() ¿verdad? Si es asi, deberias aprender a leer el manual de PHP ([] para parametros opcionales, etc).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 24/03/2003, 16:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
2) el \r\n no funciona igual en windows que en Linux .. Pero está de mas decir que si ejecutas un comando en la shell de linux es porque tu aplicación va a ser ejecutada en linux .. no?.. En las FAQ's de este foro tienes una explicación sobre el tema de salto de linea ..

Tienes que saber interpretar la sintax de un manual de referencia como lo es el de php.net .. Los parámetros que estan entre [ .. ] son OPCIONALES .. en un manual (cualquiera) de referencia . Ya no solo PHP sino cualquiera que leas ..

El $resultado .. es un array (con cada linea un elemento de lo que sería la salida a consola de la ejecución de tu comando) .. si quieres lo declaras: $resultado=array() .. y sino no .. El caso que es un array y como tal la tendras que recorrer (con un bucle foreach() por ejemplo) para ver su resultado ... (y si haces un "echo" acuerdate de usar <pre>$linea ...</pre> . Esto lo describe en el manual de PHP ..

El código que te devuelve .. Si en PHP.net que es el manual oficial no está documentado .. Haz tus pruebas y comprueba tu mismo que dá o que no dá .. de paso si quieres te acercas por php.net y en los comentarios de los usuarios pones tu duda al respecto o queja para que se ducomente mas claro .. mas sobre eso no te puedo decir ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 25/03/2003, 00:18
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
hola amigos tengo ahora un pequeño problema.....no me crea ningun archivo log.txt , por lo tanto no puedo ver si hay errores o si estuvo bien....tampoco al parecer ejecuta el comando....pero si me da el mensaje de:
Cita:
En el proceso de migracion se agregaron 1 registros y tardo 0,000211 segundos
Código PHP:
<?php
//Iniciamos básicamente el conteo del microtime.
$mtime1 microtime();
$mtime1 explode(" ",$mtime1);
$mtime1 $mtime1[1] + $mtime1[0];
$starttime $mtime1;
//Conexion con la base
mysql_connect("localhost","","");
//Ejecutamos la sentencia SQL
$result=mysql_db_query("alumnos","select * from gestion");
//Mostramos los registros
$alumnos=0;
$resultado=array();
while (
$row=mysql_fetch_array($result)){
exec ("dbmail-adduser a $row[nombre] $row[password] 0 0 $row[nombre]"."@frt.utn.edu.ar,$resultado,$error]");
foreach(
$resultado as $valor){
$archivo=fopen("log.txt""a+");
fwrite($archivo,"$valor\n");
fclose($archivo);
}
$alumnos++;
}
//Finalizamos el proceso relativamente.
$mtime2 microtime();
$mtime2 explode(" ",$mtime2);
$mtime2 $mtime2[1] + $mtime2[0];
$endtime $mtime2;
$totaltime = ($endtime $starttime);
echo 
"<font size=1 face=verdana><center>[En el proceso de migracion se agregaron $alumnos registros y tardo $totaltime segundos]</center></font>";
mysql_free_result ($result); ///liberamos la memoria
mysql_close(); ////cerramos la conexion
?>
Si alguien sabe algo se lo agradeceria......Desde Ya Muchas Gracias!
  #7 (permalink)  
Antiguo 25/03/2003, 08:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Este bucle ..
Código PHP:
foreach($resultado as $valor){
$archivo=fopen("log.txt""a+");
fwrite($archivo,"$valor\n");
fclose($archivo);

Tendría q ser:

Código PHP:
$archivo=fopen("log.txt""a+"); // abres el archivo para escritura
foreach($resultado as $valor){
fwrite($archivo,"$valor\n"); // guradas datos .. 
}
fclose($archivo);//cierras archivo .. 
Y asegurate que log.txt o el directorio donde creas ese log.txt tenga permisos de escritura ..

Y lo que no estoy seguro es si a su vez deberías sacar fuera del bucle WHILE ese bucle foreach ?¿


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 25/03/2003, 14:24
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
gracias cluster por contestar....la verdad creo que NO debo sacar el bucle foreach de dentro del bucle while por que.....por cada uno de los registros que hay en la tabla se ejecuta el comando exec(.......) y genera su propio array de resultado, que lo debo recorrar y grabar su resultado en el txt............Un saludo!
  #9 (permalink)  
Antiguo 25/03/2003, 14:39
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿Pero como te va a funcionar con esta linea?
Código PHP:
exec ("dbmail-adduser a $row[nombre] $row[password] 0 0 $row[nombre]"."@frt.utn.edu.ar,$resultado,$error]"); 
Ya comente antes que creo que esta mal, y puse como creo que deberia ser. Piensa exactamente que comando estas pasando a la linea de comando (fijate en las comillas, y en el resalte de sintaxis del foro).

Relajate y mira esa linea en armonia con el universo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 25/03/2003, 14:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sería recomendable que usases una variable para componer tu línea de ejecución .. y antes de pasarla al exec() vieses si eso es lo que esperabas ...

Código PHP:
$exec='dbmail -adduser a '$row['nombre'].$row['password'].' 0 0 '.$row['nombre'].'@frt.utn.edu.ar';
exec($exec,$resultado,$error); 
Algo así .. desconozco los parametros de ese comando .. pero tu sabras que es lo q esperas .. así q haz un echo $exec; y lo compruebas ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 25/03/2003 a las 14:47
  #11 (permalink)  
Antiguo 26/03/2003, 14:12
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
Gracias amigos.....pero ya solucione el problema se debia a cuestion de PERMISOS de ejecucion del comando.
aqui les dejo el scripts por si alguien lo necesita alguna vez
Código PHP:
<?php 
// Iniciamos básicamente el conteo del microtime.
$mtime1 microtime();
$mtime1 explode(" "$mtime1);
$mtime1 $mtime1[1] + $mtime1[0];
$starttime $mtime1;
// Conexion con la base
mysql_connect("localhost""mysql""plokij");
// Ejecutamos la sentencia SQL
$result mysql_db_query("alumnos""select * from gestion");
// Mostramos los registros
$resultado = array();
$alumnos 0;
while (
$row mysql_fetch_array($result)) {
        
$exec exec("/usr/local/sbin/dbmail-adduser a $row[nombre] $row[password] 0 2048 $row[nombre]"."@inticomp.com",$resultado,$error);
        foreach(
$resultado as $valor) {
        
$archivo fopen("log.txt""a+");
        
fwrite($archivo"$valor\n");
        
fclose($archivo);
    } 
    
$alumnos++;

// Finalizamos el proceso relativamente.
$mtime2 microtime();
$mtime2 explode(" "$mtime2);
$mtime2 $mtime2[1] + $mtime2[0];
$endtime $mtime2;
$totaltime = ($endtime $starttime);
echo 
"<font size=1 face=verdana><center>[En el proceso de migracion se agregaron $alumnos registros y tardo $totaltime segundos]</center></font>";
mysql_free_result ($result); ///liberamos la memoria
mysql_close(); ////cerramos la conexion
?>
Un Saludo! Cluster y Josemi!
  #12 (permalink)  
Antiguo 26/03/2003, 15:49
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Me alegro de que lo hayas solucionado al final. Bien esta lo que bien acaba.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 26/03/2003, 19:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Bueno .. ahora que funciona sería cosa de "optimizar" el código. Ya que tienes por ahí una rutina que calculas el tiempo de ejecución de tu script .. prueba:

Código PHP:
$alumnos 0;
$archivo fopen("log.txt""a+"); // se abre el archivo o se crea para escribir en el a continuación de lo que tenga ..

while ($row mysql_fetch_array($result)) {
        
$exec exec("/usr/local/sbin/dbmail-adduser a $row[nombre] $row[password] 0 2048 $row[nombre]"."@inticomp.com",$resultado,$error);
        foreach(
$resultado as $valor) {
        
fwrite($archivo"$valor\n");
    } 
    
$alumnos++;

fclose($archivo); // se cierra el archivo .. 
El caso es abrir el archivo UNA vez .. y ejecutar los fwrites las interacciones que se necesiten por las pasadas de los bucles while y foreach que tienes ..

Deberia mejorar el rendimiento del script que en este momento a cada elemento del array $resultado abres/cierras ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 27/03/2003, 08:23
Avatar de fmmeson  
Fecha de Ingreso: enero-2002
Ubicación: Tucuman
Mensajes: 401
Antigüedad: 15 años, 10 meses
Puntos: 2
gracias no habia tenido en cuenta lo del rendimiento.....por tan solo lo tenia que hacer una vez......pero es bueno hacer las cosas OpTIMIZADAS......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 08:32.