solo - php descargar archivo automaticamente
Controle el acceso a los archivos disponibles para descargar (2)
Tengo una carpeta que contiene documentos cargados que mi aplicación ZF puede escupir a los usuarios que han iniciado sesión. Quiero que puedan usar un enlace como http://server/documents/filename.pdf
y descargar el archivo, pero quiero tener un controlador DocumentsController
que permita que las cookies de usuario existentes verifiquen que están conectadas y tienen permiso para descargar el archivo No quiero tener que usar URL como http://server/documents/index/id/1
si no es necesario, aunque no es una opción terrible.
Deberá usar Zend_Acl para controlar el acceso al DocumentsController
y luego crear una ruta personalizada para redirigir http://server/documents/*
a http://server/documents/index/id/*
.
Editar:
La solución propuesta por Tomáš funcionará mejor para archivos más grandes.
Puede usar X-SendFile para obtener el mejor rendimiento. Es compatible con Apache (mod_xsendfile), Lighttpd y Nginx. La solicitud se maneja primero mediante un proceso de php que coloca un encabezado especial (X-Sendfile o X-Accel-Redirect para Nginx) y cuando termina el script, el servidor web toma el control y envía el archivo como un archivo estático. Es más rápido y usa menos memoria.
Para redirigir toda la solicitud a su controlador, necesita escribir una ruta personalizada en su arranque:
protected function _initRouter()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$documentRoute = new Zend_Controller_Router_Route(
''document/:filename'',
array(
''action'' => ''xsendfile'',
''controller'' => ''documents''
),
array(
''filename'' => ''/..+$''
)
);
$router->addRoute(''document'', $documentRoute );
return $router;
}
Puede usar este asistente de acción para manejar el encabezado x-sendfile: http://www.zfsnippets.com/snippets/view/id/27 y necesita tener código para verificar si el usuario está autenticado.