Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/02/2010, 14:48
Marsh_Spider
 
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