el codigo que uso es:
if(!empty($_FILES["archivo"]) AND $_FILES['archivo']['error']==0){
$nombre_archivo=$_FILES['archivo']['name'].".gz";
#abre el archivo temporal transferido
$cadena='';
# abre el fichero temporal transferido y lo lee guardandolo en la variable $cadena
$f1=fopen($_FILES['archivo']['tmp_name'],"r");
while (!feof($f1)) {
$cadena .= fgets($f1,1024);
}
fclose($f1);
# comprime la cadena obtenida del fichero temporal
$c1=gzencode($cadena,3,FORCE_GZIP);
#crea un archivo comprimido
$f=fopen($nombre_archivo,"w");
fwrite($f,$c1);
fclose($f);
#cambia al directorio actual del servidor FTP
ftp_chdir($x,"ftp/".$dire);
# escribe el fichero en el en directorio FTP comprobando si ha podido guardarse
# Si el usuario no tiene permsios de "borrado" en el directorio destino
# y el nombre coincide con uno preexistente dará un mensaje de error
# si tiene permisos para borrar ficheros lo sobreescribiría eliminando el anterior
if(@ftp_put($x, $nombre_archivo, $nombre_archivo, FTP_BINARY)){
$controla="ha sido transferido con éxito";
}else{
$controla=" no ha podido transferirse.<BR> Probablemente existe<BR> otro archivo con el mismo nombre.";
}
# borra el archivo comprimido del servidor
ftp. unlink($nombre_archivo);
# elimina la variable $_FILES
unset($_FILES["archivo"]);
#cierra la conexión ftp
if(empty($lista) OR empty($encontrado)){
$f=fopen($control,"w");
fclose($f);
if(@ftp_put($x, $control, $control, FTP_BINARY)){
$escribe="Si";
}else{
}
unlink($control);
}
ftp_quit($x);