Foros del Web » Programando para Internet » PHP »

transferencia de archivos por ftp

Estas en el tema de transferencia de archivos por ftp en el foro de PHP en Foros del Web. Buenas a todos... Hice un pequeño script para transferir unos archivos (mas precisamente imagenes) de mi servidor a otro. Parecia que estaba todo bien, pero ...
  #1 (permalink)  
Antiguo 27/02/2003, 14:03
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
transferencia de archivos por ftp

Buenas a todos...

Hice un pequeño script para transferir unos archivos (mas precisamente imagenes) de mi servidor a otro. Parecia que estaba todo bien, pero al visualizar las fotos del server nuevo estas aparecen cortadas o borrosas (en el caso de los gif o jpeg entrelazados).
Por ejemplo:
Img en el server bien:

Img en el server mal:


Y asi con todas la imagenes...

Código PHP:
<?php
$carpeta 
"imagenes";

$todo file("todo1.txt");
if (@
$yahecho file("yahecho1.txt")) {
    
$pendiente array_diff($todo$yahecho);
} else {
    
$pendiente $todo;
}

$fp fopen("yahecho1.txt""a");

$ftpc ftp_connect("ftp.xxxxx.com");
ftp_login($ftpc"xxxxx""xxxxxxx");
ftp_mkdir($ftpc$carpeta);

$ext = array ("htm","HTM","html","HTML","txt","TXT","dat","DAT","xml","XML","pl","PL","cgi","CGI","php","PHP","phtml","PHTML","php3","PHP3");
foreach (
$pendiente as $path) {
    
$path trim($path);
    
$path str_replace("/home/virtual/site12/fst/var/www/html/$carpeta/"""$path);
    
    
ftp_cdup($ftpc);
    
ftp_chdir($ftpc$carpeta);

    if( 
in_array(substr($pathstrrpos($path".")+1), $ext) ) $mode "FTP_ASCII";
    else 
$mode "FTP_BINARY";
    
    echo 
"Archivo remoto: $path\n<br>Archivo local: $path\n<br>Usando: $mode\n<br><br>";
    if (
ftp_put($ftpc$path$path$mode)) {
        
fwrite($fp$path);
    }
}
fclose($fp);
ftp_quit($ftpc);
?>
¿por que es esto?

Saludos!
  #2 (permalink)  
Antiguo 27/02/2003, 14:22
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Bajate a tu equipo los dos ficheros (el del servidor A y el del B) y mira si tienen el mismo tamaño. Y si tienes un programa que compare ficheros binarios, usalo para ver si ha modificado algo.

Posibles razones del fallo:
1.- Que no le de tiempo a ejecutarse el script. En caso de que no le diera tiempo deberia mostrarte un error (quizas no). Prueba a poner un echo 'Ya esta' al final del script. Si sale es que le ha dado tiempo ha ejecutar todo el script. Si no, deberias mirar set_time_limit

2.- Que no funcione bien tu codigo que elige el modo de la transferencia. Para comprobarlo haz dentro del bucle despues de asignar $mode un echo $path.":".$mode; para comprobar que elige bien el modo.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 27/02/2003, 14:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Hay otro detallito que hay q tener en cuenta si se usa FTP .. es sobre el tema de usar modo "binario" o "texto/ascci" ...

Es probable que tenga algo q ver tambien ?

Un saludo,
  #4 (permalink)  
Antiguo 28/02/2003, 04:59
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Hola,
justo despues de abrir este post pense en eso y resuta que "en el camino" se perdieron 33 bytes (9.803b - 9.770b). Usando Norton file compare obviamente hay diferencias pero todavia no se lenguaje de maquina

El tiempo de ejecucion debe estar en 30 seg y estoy seguro de que no se alcanza porque se transfieren todos los archivo de la lista (me refiero al archivo todos1.txt que tiene los nombres de las imagenes a tranferir), ademas seria un atrevimiento del administrador del server meter mano para que no me muestre los errores...

Ese echo que decis que haga fijate que ya se hace
Código PHP:
echo "Archivo remoto: $path\n<br>Archivo local: $path\n<br>Usando: $mode\n<br><br>"
Y me muestra algo asi por cada archivo:
Código PHP:
Archivo remotoatras.gif 
Archivo local
atras.gif 
Usando
FTP_BINARY 
Gracias por sus respuestas, pero sigo desconcertado ¿alguna otra idea?

Saludos
  #5 (permalink)  
Antiguo 28/02/2003, 05:36
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Si, es verdad. No me habia fijado. Estaria medio dormido. Pero mira por donde, esto me ha llevado a la solucion.
Cita:
Archivo remoto: atras.gif
Archivo local: atras.gif
Usando: FTP_BINARY
Estas haciendo un echo $mode. Eso quiere decir que $mode es una cadena de texto. Segun el manual, a ftp_put() en el modo le tienes que pasar un entero (int). Normalmente se lo pasas en forma de constante (FTP_BINARY). Para que funcione tu script, $mode tiene que coger un valor entero. Asignale el valor de la constante, no una cadena con el nombre de la constante. Asi:
Código PHP:
if( in_array(substr($pathstrrpos($path".")+1), $ext) ) {
  
$mode FTP_ASCII;
} else {
  
$mode FTP_BINARY;

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 28/02/2003, 11:18
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Tenes razon!
No me habia percatado de que ese parametro era un int, y si vos no te dabas cuenta iba a tenes que subir de nuevo los 20 Mb de mi sitio con un triste modem de 56kbps ...
Asi k me salvaste!
Fijate que la imagen que puse arriba ahora esa bien, no vaya a ser que alguien entre tarde al post y pregunte ¿cual es el problema?

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 00:53.