Foros del Web » Programando para Internet » PHP »

ftp_get me descarga archivo vacio...

Estas en el tema de ftp_get me descarga archivo vacio... en el foro de PHP en Foros del Web. Hola Me llamo Marcela Rangel soy nueva usando PHP ** Sugiero poner mas espacio para nuestras preguntas, tuve que quitar todos los comentarios del código, ...
  #1 (permalink)  
Antiguo 25/02/2010, 14:48
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 2 meses
Puntos: 1
ftp_get me descarga archivo vacio...

Hola
Me llamo Marcela Rangel soy nueva usando PHP
** Sugiero poner mas espacio para nuestras preguntas, tuve que quitar todos los comentarios del código, pues solo te permite 10,000 caracteres.

A) Tengo q hacer un repositorio de info de usuarios y deben tener acceso a archivos doc, jpg, etc y videos avi. Las condiciones son que los videos se guarden y descarguen desde FTP y demás se guarden y descarguen desde DB.
B) Estos archivos PHP solo son para UPLAOD y DOWNLOAD.
C) En MySQL creé "t_prueba_cont" y los campos "id_contenido (integer, auto_inc, not null), nombre(varchar 45, not null), tamano(integer, not null), tipo(varchar45, not null), contenido (longblob) y fecha(datetime)"

Código PHP:
Ver original
  1. 1°) Formulario para subir los archivos (pruebaindex.php):
  2. <html>
  3. <body>
  4. <form enctype='multipart/form-data' action='pruebaupload.php' method='post'>
  5. <input type='hidden' name='MAX_FILE_SIZE' value='1000000000'>
  6. <input type='hidden' name='completed' value='1'>
  7. Por favor elige el archivo deseas cargar:
  8. <input type='file' name='imagefile'><br>
  9. <input type='submit' value='Subir Archivo'>
  10. </form><br>
  11. </body>
  12. </html>
  13.  
  14. 2°) Archivo para procesar la subida a la BD o al sitio FTP (pruebaupload.php):
  15. <?php
  16. if ((($_FILES["imagefile"]["type"] == "text/plain")
  17. || ($_FILES["imagefile"]["type"] == "application/pdf")
  18. || ($_FILES["imagefile"]["type"] == "application/msword")
  19. || ($_FILES["imagefile"]["type"] == "application/vnd.ms-excel")
  20. || ($_FILES["imagefile"]["type"] == "application/vnd.ms-powerpoint")
  21. || ($_FILES["imagefile"]["type"] == "audio/wav")
  22. || ($_FILES["imagefile"]["type"] == "audio/mpeg")
  23. || ($_FILES["imagefile"]["type"] == "audio/x-mpeg")
  24. || ($_FILES["imagefile"]["type"] == "audio/mpeg")
  25. || ($_FILES["imagefile"]["type"] == "audio/mpeg3")
  26. || ($_FILES["imagefile"]["type"] == "audio/mpg")
  27. || ($_FILES["imagefile"]["type"] == "image/gif")
  28. || ($_FILES["imagefile"]["type"] == "image/png")
  29. || ($_FILES["imagefile"]["type"] == "image/tif")
  30. || ($_FILES["imagefile"]["type"] == "image/jpg")
  31. || ($_FILES["imagefile"]["type"] == "image/jpeg")
  32. || ($_FILES["imagefile"]["type"] == "image/pjpeg")
  33. || ($_FILES["imagefile"]["type"] == "image/bmp")
  34. || ($_FILES["imagefile"]["type"] == "video/mpeg")
  35. || ($_FILES["imagefile"]["type"] == "video/avi"))
  36. && ($_FILES["imagefile"]["size"] < 1000000000))
  37.  {
  38.   if ($_FILES["imagefile"]["error"] > 0) {
  39.     echo "Sucedio un error: " . $_FILES["imagefile"]["error"] . "<br />";
  40.     }  else {
  41.     echo "Archivo q se cargará: " . $_FILES["imagefile"]["name"] . "<br />";
  42.     $name = $_FILES["imagefile"]["name"];
  43.     echo "Tipo: " . $_FILES["imagefile"]["type"] . "<br />";
  44.     $type = $_FILES["imagefile"]["type"];
  45.     echo "Tamaño: " . ($_FILES["imagefile"]["size"] / 1024) . " Kb<br />";
  46.     $size = $_FILES["imagefile"]["size"];
  47.     echo "Tmp almacenado en: " . $_FILES["imagefile"]["tmp_name"] . "<br />";
  48.     $temp_name = $_FILES["imagefile"]["tmp_name"];
  49.     $hoy = date("Y/m/d H:i:s");
  50.     $_SESSION['nombre'] = $name;
  51.     $_SESSION['tipo'] = $type;
  52.     $_SESSION['tamano'] = $size;
  53.     $_SESSION['nombre_tmp'] = $temp_name;
  54.    $archivo = fopen($temp_name,'rb');
  55.    $contenido = fread($archivo, filesize($temp_name));
  56.    $contenido = addslashes($contenido);
  57.    fclose($archivo);
  58.     if ($_FILES["imagefile"]["type"] == "video/avi") {
  59.       $servidor_ftp = "127.0.0.1";
  60.       $conexion_id = ftp_connect($servidor_ftp);
  61.       $ftp_usuario = "[COLOR="Yellow"]user[/COLOR]";
  62.       $ftp_clave = "[COLOR="Yellow"]pass[/COLOR]";
  63.       $nombre_subir = $name;
  64.       $manipulado = fopen($temp_name, 'rb');
  65.       $resultado_login = ftp_login($conexion_id, $ftp_usuario, $ftp_clave);
  66.       if ((!$conexion_id) || (!$resultado_login)) {
  67.          echo "La conexion ha fallado! al conectar con $servidor_ftp para usuario $ftp_usuario" . "<br />";
  68.          exit;
  69.        } else {
  70.           echo "Conectado al sitio $servidor_ftp, para usuario $ftp_usuario"  . "<br />"; }
  71.           ftp_pasv ($conexion_id, true);
  72.           $upload = ftp_fput($conexion_id, $nombre_subir, $manipulado, FTP_BINARY);
  73.             if (!$upload) {
  74.               echo "Ha ocurrido un error al subir el archivo" . "<br />";
  75.             } else {
  76.                echo "Copia de $nombre_subir al server FTP $servidor_ftp" . "<br />";
  77.                $errmsg = "Subido el archivo a la carpeta carga_ftp_tmp";  }
  78.          ftp_close($conexion_id);
  79.          fclose($manipulado);
  80.         echo"Estado de la operación: $errmsg" . "<br />";
  81.         echo'
  82.        Click <a href=downloadftp.php>aqui</a> para descargar el ultimo archivo.<br>
  83.        </form>
  84.        Click <a href=pruebaindex.php>aqui</a> para cargar otro archivo.
  85.         ';
  86.       } else {
  87.         $conecta = mysql_connect("localhost","[COLOR="Yellow"]user[/COLOR]","[COLOR="Yellow"]pass"[/COLOR]);
  88.         echo "Hasta aqui estoy conectada a la BD" . "<br />";
  89.         $errmsg = "";
  90.         if ($size == (NULL && $size == "")) {
  91.           echo "El archivo no contiene nada, no se insertará nada a la BD... intentalo nuevamente" . "<br />";
  92.           $errmsg = "No se insertó nada a la BD" . "<br />";
  93.          } else {
  94.          if (!$conecta) {
  95.            $errmsg = "No se ha podido contectar a la BD";
  96.           }
  97.          @mysql_select_db("prueba");
  98.          if ($errmsg == "") {
  99.            if ($_REQUEST[completed] == 1)
  100.             {
  101.              if ($size < 1000000000) {
  102.                $sql = mysql_query('SELECT MAX(id_contenido) AS idtemp FROM t_prueba_cont', $conecta);
  103.                    while ($row = mysql_fetch_array($sql)) {
  104.                       $id_conte = $row['idtemp'][0] + 1;
  105.                       //echo "Suma 1 a id" . "<br />";
  106.                       $_SESSION['id'] = $id_conte;
  107.                       echo"Esta es la fila # $id_conte que se insertará" . "<br />"; }
  108.                 mysql_query ("INSERT INTO t_prueba_cont VALUES ('$id_conte','$name','$size','$type','$contenido', '$hoy')") or die('Error, query falló...');
  109.                 echo "Datos insertados, revisa la DB..." . "<br />";
  110.                   echo'
  111.                  Click <a href=downloadbd.php>aqui</a> para descargar el ultimo archivo.<br>
  112.                  </form>
  113.                  Click <a href=pruebaindex.php>aqui</a> para cargar otro archivo.
  114.                   ';
  115.               }
  116.              else
  117.               {
  118.                echo "Archivo demaciado grande...!";
  119.               }
  120.            }
  121.           else
  122.            {
  123.              echo "Envío no completado...";
  124.            }
  125.           }
  126.         @mysql_close ($conecta);
  127.         }
  128.       }
  129.     }
  130.  }
  131. else
  132.   {
  133.   echo "Archivo Invalido..." . "<br />";
  134.   }
  135. ?>
  136.  
  137. 3°) Archivo para descargar desde la BD(downloadbd.php):
  138.  
  139. <?php ob_start(); ?>
  140. <?php
  141. //Toma de variables de sesión
  142. $name = $_SESSION['nombre'];
  143. $type = $_SESSION['tipo'];
  144. $size = $_SESSION['tamano'];
  145. $id_conte = $_SESSION['id'];
  146. $explod = explode(".", $name);
  147. $ext = $explod[sizeof($explod)-1];
  148. $base = "prueba";
  149. $conecta = @mysql_connect("localhost","root","cemsmgr75") or die('Error, conexión falló...');
  150. $select = @mysql_select_db($base, $conecta);
  151. $sql = "SELECT contenido FROM t_prueba_cont WHERE id_contenido ='".$id_conte."'";
  152. $resultado = @mysql_query($sql);
  153. if (mysql_num_rows($resultado)== 1)
  154. {
  155.    $dato_binario = mysql_result($resultado, 0, "contenido");
  156. }
  157. else
  158. {
  159.   echo "No está traiendo nada el query...";
  160. }
  161.  
  162. if ((eregi("jpg",$ext))||(eregi("png",$ext))||(eregi("gif",$ext))||(eregi("bmp",$ext))||(eregi("txt",$ext))||(eregi("doc",$ext))||(eregi("xls",$ext))||(eregi("ppt",$ext))||(eregi("pps",$ext))||(eregi("pdf",$ext)))
  163. {
  164. header("Content-type: $type");
  165. header("Content-Length: $size");
  166. header("Content-Disposition: attachment; filename= $name");
  167. header("Content-Description: PHP Generated Data");
  168. header("Content-Transfer-Encoding: binary");
  169. echo $dato_binario;
  170. }
  171. mysql_close ($conecta);
  172. ?>
  173. <?php ob_end_flush(); ?>
  174.  
  175. [COLOR="Red"]4°)  Archivo para descargar desde FTP(downloadftp.php):
  176.  
  177. ** Aqui está el problema, al descargar el archivo, me lo descarga VACIO y no sé porque!, pienso que es xq hace falta interpretar bien la función "ftp_get"
  178. Al revisar el archivo abriéndolo con notepad no me muestra ningún error.
  179.  
  180. <?php ob_start(); ?>
  181. <?php
  182. $name = $_SESSION[nombre];
  183. $type = $_SESSION[tipo];
  184. $ruta = "carga_ftp_tmp/";
  185. $temp_name = $ruta.$name;
  186.  $servidor_ftp = "127.0.0.1";
  187.  $conexion_id = ftp_connect($servidor_ftp);
  188.  $ftp_usuario = "marcela";
  189.  $ftp_clave = "cemsmgr75";
  190.  $nombre_bajar = $name;
  191.  $resultado_login = ftp_login($conexion_id, $ftp_usuario, $ftp_clave);
  192.   if ((!$conexion_id) || (!$resultado_login))
  193.      {
  194.        echo "La conexion ha fallado! al conectar con $servidor_ftp para usuario $ftp_usuario" . "<br />";
  195.        exit;
  196.      }
  197.     else
  198.     {
  199.      ftp_pasv ($conexion_id, true);
  200.      $download = ftp_get($conexion_id, $temp_name, $nombre_bajar, FTP_BINARY);
  201.      if (!$download)
  202.       {
  203.         echo "Ha ocurrido un error al descargar el archivo" . "<br />";
  204.       }
  205.       else
  206.        {
  207.          echo "Copia de $nombre_bajar desde el server FTP al equipo del usuario" . "<br />";
  208.        }
  209.      header("Content-type: $type");
  210.      header("Content-Disposition: attachment; filename= $name");
  211.      header("Content-Description: PHP Generated Data");
  212.      header("Content-Transfer-Encoding: binary");
  213.      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  214.      echo "$download";
  215.     }
  216.   ftp_close($conexion_id);
  217. ?>
  218. <?php ob_end_flush(); ?> [/COLOR]

¿Que estoy haciendo mal en esto ultimo?
Agradezco su apreciable ayuda.

Marsh_Sipder

Última edición por Marsh_Spider; 26/02/2010 a las 15:19
  #2 (permalink)  
Antiguo 25/02/2010, 17:23
Avatar de camsworksinc  
Fecha de Ingreso: julio-2008
Ubicación: Queretaro
Mensajes: 261
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: ftp_get me descarga archivo vacio...

No veo para que utilizas las funciones de Ouput Buffering (ob_start() y ob_end_flush()), pues sirven para que el resultado del script, en vez de ir al navegador, lo almacene internamente (buffer), para que despues se pueda manipular, por ejemplo, asignandolo a una variable.
Intenta quitarle esas funciones, porque el contenido de la variable $download se esta quedando el el buffer, y nunca se esta enviando al navegador.

Por cierto, trata de no poner el codigo directamente como lo pusiste, sino en el formato de codigo (seleccionando del menu Highlight, la opcion PHP)
Suerte!
  #3 (permalink)  
Antiguo 25/02/2010, 17:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: ftp_get me descarga archivo vacio...

Porque si le quito
<?php ob_start(); ?> y <?php ob_end_flush(); ?>

me pone los siguientes Warnings:


Copia de bird.avi desde el server FTP al equipo del usuario

Warning: Cannot modify header information - headers already sent by (output started at C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php:38) in C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php on line 41

Warning: Cannot modify header information - headers already sent by (output started at C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php:38) in C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php on line 42

Warning: Cannot modify header information - headers already sent by (output started at C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php:38) in C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php on line 43

Warning: Cannot modify header information - headers already sent by (output started at C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php:38) in C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php on line 44

Warning: Cannot modify header information - headers already sent by (output started at C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php:38) in C:\Servidor\AppServ\www\Reposi_Telmex\downloadftp. php on line 45
1

......... Marsh_Spider
  #4 (permalink)  
Antiguo 25/02/2010, 17:42
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: ftp_get me descarga archivo vacio...

Los headers deben ir antes de cualquier html. Basta con que los subas antes del último else.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #5 (permalink)  
Antiguo 25/02/2010, 17:57
Avatar de camsworksinc  
Fecha de Ingreso: julio-2008
Ubicación: Queretaro
Mensajes: 261
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: ftp_get me descarga archivo vacio...

CHuLoSoY tiene razon. Ponlos antes de imprimir cualquier cosa a la pantalla, es decir, antes de:
Código PHP:
Ver original
  1. echo "Copia de $nombre_bajar desde el server FTP al equipo del usuario" . "<br />";
  #6 (permalink)  
Antiguo 25/02/2010, 18:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 57
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: ftp_get me descarga archivo vacio...

Hola nuevamente,

Me acabo de dar cuenta q FTP no lleva header xq son de http ya los quité hora no me descarga nada.

Marsh_Sipder
  #7 (permalink)  
Antiguo 25/02/2010, 23:41
Avatar de camsworksinc  
Fecha de Ingreso: julio-2008
Ubicación: Queretaro
Mensajes: 261
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: ftp_get me descarga archivo vacio...

Si bien la comunicacion FTP no utiliza la funcion header de HTTP (porque son protocolos distintos), los necesitas porque precisamente a través de este ultimo protocolo, segun entiendo, es como le pretendes enviar el archivo al usuario a su navegador.
Por otro lado, si lo que quieres es enviarle al usuario el archivo usando el protocolo FTP, entonces tendrias que utilizar la funcion ftp_put() para realizarlo.
Ayudaria mucho entonces que nos dijeras con mayor claridad y detalle que es lo que pretendes hacer, para enfocar la ayuda a ello.

Otra recomendacion que te hago es que no postees el mismo problema varias veces y con distintos titulos, porque nos perdemos y no sabemos si tienes un solo problema, o varios distintos.
__________________
¡Malditas computadoras que siempre hacen lo que les DIGO que hagan, no lo que QUIERO que hagan!

Etiquetas: vacio, descargas
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:12.