PHP Pass identificador de archivo de usuario de modo que las descargas de archivos y salva a su máquina

StackOverflow https://stackoverflow.com/questions/539548

Pregunta

estoy descargando un archivo desde otro servidor. Deseo empujar este archivo a mis usuarios en lugar de guardarlo en mi servidor.

En otras palabras, pasarlas el identificador de archivo por lo que sólo pasa a través de mi servidor y salva a su máquina. ¿Cómo puedo hacer esto? Tengo esto hasta ahora:

$handle = fopen($_GET['fileURL'], 'r');
$filename = stream_get_contents($handle);

¿Cómo empujar esto al usuario, tal vez usando las cabeceras?

Gracias por cualquier ayuda y dirección.

Editar

tengo las cabeceras:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");

Es sólo que no empujar las cabeceras. Acabo de obtener una página en blanco después de unos 15 segundos, y parece que la descarga del archivo, pero no dar a mí.

Deseo que la secuencia de comandos para enviar de inmediato las cabeceras para el usuario como una corriente.     salida();

¿Fue útil?

Solución

Puede probar este

$filetype = mime_content_type($filename);
header('Content-type: '.$filetype);
header('Content-Disposition: attachment; filename="'.$filename.'"');

ACTUALIZACIÓN por tu edición:

¿Tiene errores de movilidad reducida, ya que esto suena como las cabeceras ya enviado Un error?

error_reporting(E_ALL | E_STRICT);

Otros consejos

Usted no tiene que utilizar fopen () cuando utilice readfile ();

Sólo incluir el nombre de archivo dentro de readfile () así:

readfile($_GET['fileUrl']);

A pesar de que esto es muy peligroso seguridad en cuanto a que el usuario podría especificar cualquier archivo en el servidor de archivos. Si sólo tiene unos pocos archivos que desea que alguien sea capaz de descargar quizás usted debe almacenarlos en una matriz (o base de datos, preferebly)

Este es un ejemplo de matriz:

$files = array('file1.jpg', 'file2.png', 'file3.pdf');
//assume $_GET['file_id'] == 0, 1 or 2

if (file_exists($files[$_GET['file_id']]))
    readfile($files[$_GET['file_id']]);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top