PHP Pass identificador de archivo de usuario de modo que las descargas de archivos y salva a su máquina
-
22-08-2019 - |
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();
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']]);