Foros del Web » Programando para Internet » PHP »

Forzar descarga externa

Estas en el tema de Forzar descarga externa en el foro de PHP en Foros del Web. Tengo algunos scripts para forzar descargas, pero no he dado con el truco para descargar archivos de un nivel superior en la página donde ubico ...
  #1 (permalink)  
Antiguo 22/10/2005, 06:02
 
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 13 años, 6 meses
Puntos: 0
Forzar descarga externa

Tengo algunos scripts para forzar descargas, pero no he dado con el truco para descargar archivos de un nivel superior en la página donde ubico el script o de otra página o dirección.
Esto se puede hacer con PHP?
  #2 (permalink)  
Antiguo 23/10/2005, 07:50
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Sí, se puede. ¿los scripts que tienes están hechos con PHP?, ¿por qué no muestras lo que intentaste para poder decirte en qué falló "el truco"?.

Busca "forzar descarga" en el foro. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 24/10/2005, 05:42
 
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 13 años, 6 meses
Puntos: 0
jam1138

Estos son los 2 scripts que tengo, ambos sacados de algún sitio de por ahí (incluso uno creo que está en este foro).
Ambos me permiten forzar la descarga desde el mismo directorio donde se encuentran o de subdirectorios del mismo, pero NO de directorios superiores o de un un sitio diferente; o sea, no consigo bajar de rutas absolutas, como http://www.misitio.com/misdescargas/
Te agradezco tu ayuda y muchas gracias por responder.
Dieter.

Script 1: bajar.php

<?php
$path = "descargas";
$enlace = $path."/".$id;
header ("Content-Disposition: attachment; filename=".$id."\n\n");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($enlace));
readfile($enlace);
?>


enlace desde html:
a href="bajar.php?id=midoc.pdf">bajar pdf


Script 2: descargar.php

<?
function descarga($miarchivo){
$archivo = basename($miarchivo);
header( "Content-Type: application/octet-stream");
header( "Content-Length: ".filesize($archivo));
header( "Content-Disposition: attachment; filename=".$archivo."");
readfile($miarchivo);
}
descarga("descargas/midoc.pdf");
?>


enlace desde html:
a href="descargar.php">bajar pdf
  #4 (permalink)  
Antiguo 24/10/2005, 13:39
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
o sea, no consigo bajar de rutas absolutas, como http://www.misitio.com/misdescargas/
Una ruta absoluta podría interpretarse como enlaces externos. ¿haz provado con rutas relativas??. ¿hay algún mensaje de error??

...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 24/10/2005, 21:21
 
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 13 años, 6 meses
Puntos: 0
En los dos ejemplos la descarga se realiza correctamente desde lo que yo creo son rutas relativas, en este caso /descargas/.
también puedo seguir bajando, por ejemplo /descargas/misarchivos/fotos/ y todo funciona perfecto.
Justamente lo que necesito es forzar la descarga de un sitio externo; en ese caso si pongo la dirección del mismo baja un archivo de 0 bytes.
Por favor corrigeme si me expreso mal al describir lo que yo entiendo por rutas relativas.
  #6 (permalink)  
Antiguo 25/10/2005, 02:26
 
Fecha de Ingreso: agosto-2004
Mensajes: 118
Antigüedad: 13 años, 3 meses
Puntos: 1
Si te digo la verdad, no veo donde está el error.

Te pongo una función que está sacada de este foro y que utilizo en algunos sitios web.
Código PHP:
function descargaFichero ($fichero)
        { 
// HEADERS SACADAS DE PHPMYADMIN
        
$filename basename($fichero);
        
$filesize filesize($fichero);

        
// 'application/octet-stream' is the registered IANA type but
        // MSIE and Opera seems to prefer 'application/octetstream'
        
$USR_BROWSER_AGENT="";
        if (
preg_match('@Opera(/| )([0-9].[0-9]{1,2})@'$_SERVER['HTTP_USER_AGENT'])) $USR_BROWSER_AGENT='OPERA';
        if (
preg_match('@MSIE ([0-9].[0-9]{1,2})@'$_SERVER['HTTP_USER_AGENT'])) $USR_BROWSER_AGENT='IE';
        
$mime_type = ($USR_BROWSER_AGENT == 'IE' || $USR_BROWSER_AGENT == 'OPERA')
        ? 
'application/octetstream'
        
'application/octet-stream';

        
// Esta funcion esta operativa desde php 4.3.0 y parece ser que tiene buena pinta arreglando el nombre de los 
        // ficheros y las extensiones
        //$mime_type=mime_content_type ($fichero);
        
        
header('Content-Type: ' $mime_type);
        
// Se informa al navegador del tamaño del fichero y puede mostrar la barra de
        // progreso de descarga
        
header('Content-Length: ' filesize($fichero));
        
header('Content-Transfer-Encoding: binary');
        
header('Expires: ' gmdate('D, d M Y H:i:s') . ' GMT');
        
// IE need specific headers
        
if ($USR_BROWSER_AGENT == 'IE'
            {
            
//header('Content-Disposition: inline; filename="' . $filename . '"');
            
header('Content-Disposition: attachment; filename="' $filename '"');
            
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            
header('Pragma: public');
            } 
            else
                {
                
header('Content-Disposition: attachment; filename="' $filename '"');
                
header('Pragma: no-cache');
                }
        @
readfile ($fichero);
        exit();
        } 
Esta función te permite pasarle una ruta de descarga, incluyendo escalado de directorios o construcciones dinamicas desde base de datos. El único problema que tiene, es que cuando el navegador en netscape y derivados, al fichero descargado le añade la extensión .php
  #7 (permalink)  
Antiguo 25/10/2005, 17:53
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cita:
Justamente lo que necesito es forzar la descarga de un sitio externo
... ¿y tienes permiso para ello???... No podrás hacerlo si el sitio no permite esta descarga. ¿cuál es el archivo que quieres descargar y de qué sitio?.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 25/10/2005, 23:09
 
Fecha de Ingreso: junio-2004
Mensajes: 37
Antigüedad: 13 años, 6 meses
Puntos: 0
Son PDF, MPG y MP3 que guardo en distintos hostings contratados por mi.
Un ejemplo: http://www.tacuarembo2000.com/agosto2005/lafinita.mp3
Necesito bajarlos desde otros sitios.
No hay nada raro, simplemente a veces necesito ahorrar espacio y no volver a subir el mismo archivo a un hosting diferente; de hecho los enlaces normales ya están hechos, pero me gustaría poder darle al visitante la opción de guardar el archivo además de poder abrirlo directamente.
Y todos son creados por mi o tienen la debida autorización de sus autores como en el caso del ejemplo (un grupo folklorico de mi ciudad)

Última edición por Dietercito; 25/10/2005 a las 23:22
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 19:30.