Foros del Web » Programando para Internet » PHP »

¿Ficheros fantasmas? o_O

Estas en el tema de ¿Ficheros fantasmas? o_O en el foro de PHP en Foros del Web. estoy trabajando con el siguiente script para DESCARGAR archivos al cliente Código HTML: <?php function dl_file($file){ //First, see if the file exists if (!is_file($file)) { ...
  #1 (permalink)  
Antiguo 12/03/2008, 13:35
 
Fecha de Ingreso: enero-2008
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
¿Ficheros fantasmas? o_O

estoy trabajando con el siguiente script para DESCARGAR archivos al cliente
Código HTML:
<?php

function dl_file($file){

    //First, see if the file exists
    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

    //Gather relevent info about file
    $len = filesize($file);
    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,"."),1));

    //This will set the Content-Type to the appropriate setting for the file
    switch( $file_extension ) {
          case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      case "mp3": $ctype="audio/mpeg"; break;
      case "wav": $ctype="audio/x-wav"; break;
      case "mpeg":
      case "mpg":
      case "mpe": $ctype="video/mpeg"; break;
      case "mov": $ctype="video/quicktime"; break;
      case "avi": $ctype="video/x-msvideo"; break;

      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      case "php":
      case "htm":
      case "html":
      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

      default: $ctype="application/force-download";
    }

    //Begin writing headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer");
    
    //Use the switch-generated Content-Type
    header("Content-Type: $ctype");

    //Force the download
    $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header );
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    readfile($file);
    exit;
}

?>
al descargar no se produce ningun tipo de conflictos, pero al abrir el archivo, por ejemplo word, me muestra el contenido textual pero INENTENDIBLE. Con las imagenes me pasa algo similar, no se las visualiza. Con pdf no tengo problemas, y con los demas archivos tengo problemas al abrirlos
¿a que se debe?
  #2 (permalink)  
Antiguo 12/03/2008, 13:40
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 20 años, 10 meses
Puntos: 9
Re: ¿Ficheros fantasmas? o_O

Comenta esta linea:

Código PHP:
    header("Content-Type: $ctype"); 
Para ver que pasa.
  #3 (permalink)  
Antiguo 12/03/2008, 14:30
 
Fecha de Ingreso: enero-2008
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: ¿Ficheros fantasmas? o_O

Cita:
Iniciado por eft0 Ver Mensaje
Comenta esta linea:

Código PHP:
    header("Content-Type: $ctype"); 
Para ver que pasa.


Hola eft0 y gracias por responder. De antemano ya intente descargar de esa manera, lo saque de un ejemplo directo de php.net/header

Código HTML:
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?> 
pero igualmente sigue con el mismo problema. ¿que sera?
  #4 (permalink)  
Antiguo 13/03/2008, 08:41
 
Fecha de Ingreso: enero-2008
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: ¿Ficheros fantasmas? o_O

¿naiden sabe?
  #5 (permalink)  
Antiguo 13/03/2008, 09:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: ¿Ficheros fantasmas? o_O

Haz verificado que no tengas espacios antes? Prueba hacer esto:
Código PHP:
function dl_file($file){

    
//First, see if the file exists
    
if (!is_file($file)) { die("<b>404 File not found!</b>"); }

    
//Gather relevent info about file
    
$len filesize($file);
    
$filename basename($file);
    
$file_extension strtolower(substr(strrchr($filename,"."),1));

    
//This will set the Content-Type to the appropriate setting for the file
    
switch( $file_extension ) {
          case 
"pdf"$ctype="application/pdf"; break;
      case 
"exe"$ctype="application/octet-stream"; break;
      case 
"zip"$ctype="application/zip"; break;
      case 
"doc"$ctype="application/msword"; break;
      case 
"xls"$ctype="application/vnd.ms-excel"; break;
      case 
"ppt"$ctype="application/vnd.ms-powerpoint"; break;
      case 
"gif"$ctype="image/gif"; break;
      case 
"png"$ctype="image/png"; break;
      case 
"jpeg":
      case 
"jpg"$ctype="image/jpg"; break;
      case 
"mp3"$ctype="audio/mpeg"; break;
      case 
"wav"$ctype="audio/x-wav"; break;
      case 
"mpeg":
      case 
"mpg":
      case 
"mpe"$ctype="video/mpeg"; break;
      case 
"mov"$ctype="video/quicktime"; break;
      case 
"avi"$ctype="video/x-msvideo"; break;

      
//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      
case "php":
      case 
"htm":
      case 
"html":
      case 
"txt": die("<b>Cannot be used for "$file_extension ." files!</b>"); break;

      default: 
$ctype="application/force-download";
    }
    if( 
headers_sent() )  {
            die( 
"Las cabeceras ya fueron enviadas!!" );
    }
    
//Begin writing headers
    
header("Pragma: public");
    
header("Expires: 0");
    
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    
header("Cache-Control: public"); 
    
header("Content-Description: File Transfer");
    
    
//Use the switch-generated Content-Type
    
header("Content-Type: $ctype");

    
//Force the download
    
$header="Content-Disposition: attachment; filename=".$filename.";";
    
header($header );
    
header("Content-Transfer-Encoding: binary");
    
header("Content-Length: ".$len);
    
readfile($file);
    exit;
}

?> 
Saludos.
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 09:09.