Ver Mensaje Individual
  #25 (permalink)  
Antiguo 14/04/2012, 00:37
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

En cuanto al .htaccess, los probables motivos son

Que tu server y el mio estén configurados en forma distinta, y, por ejemplo el mod_headers que se usa para la directiva headers no este habilitado (lo cual es bastante improbable), en ese caso probá lo siguiente

Código Apache:
Ver original
  1. <IfModule mod_headers.c>
  2. <FilesMatch "\.(pdf)$">
  3.     Header unset Cache-Control
  4.     Header unset Expires
  5.     Header unset Last-Modified
  6.     FileETag None
  7.     Header unset Pragma
  8. </FilesMatch>
  9. </IfModule>
el ifModule funciona como un condicional, y solo ejecuta las directivas si el modulo está cargado, si despues del cambio no se no se produce un error 500, entonces es que no tenes habilitado el módulo, si aún así se produce, hay otras 2 posibilidades bastante comunes
A. que tu .htaccess incluya algo llamado BOM de utf-8, es un caracter invisible que deja el editor de texto, pero que genera un error en .htaccess, hay que tener cuidado porque el block de notas de Windows deja esa marca por defecto si guardas como unicode, asegurate de guardarlo como ANSI
B. que el .htaccess haya sido subido por ftp como binario y no como ascii

Una vez corregido el .htaccess, si ves que no tenes mod_headers, aún te queda la posibilidad de pasar los encabezados para prevenir la cache desde el mismo php, or lo que lscript quedaría

Código PHP:
Ver original
  1. <?php
  2. if(isset($_GET['archivo'])){
  3. $archivo = $_GET['archivo'];
  4. }else{
  5. $archivo = "noexiste";
  6. }
  7.  
  8.  
  9. if(isset($_SESSION['pdf'])){
  10.    
  11. if($_SESSION['pdf'] == "logueado"){
  12. $fichero = "/users/webs/emprear.com/subdomains/$archivo.pdf";
  13. if (file_exists($fichero)) {
  14.     header('Content-Type: application/pdf');
  15. if(isset($_GET['descargar'])){
  16. if($_GET['descargar'] == 1){
  17.     header("Content-Disposition:attachment ; filename=[$archivo.pdf");     
  18. }
  19. }
  20. # headers para prevenir cache
  21. header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
  22. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  23. header("Cache-Control: no-store, no-cache, must-revalidate");
  24. header("Cache-Control: post-check=0, pre-check=0", false);
  25. header("Pragma: no-cache");
  26.     ob_clean();
  27.     flush();
  28.  
  29.     readfile($fichero);
  30.  
  31.     exit;
  32. }else{
  33. echo "Archivo inexistente";
  34. }
  35.  
  36. }else{
  37. echo "No permitido";
  38. }
  39.  
  40. }else{
  41. echo "No autorizado";
  42. }
  43. ?>

con respecto a la ruta debe ser absoluta, para verificar cual es creas un php y le pones por contenido

<?php
$r = $_SERVER['DOCUMENT_ROOT'];
echo $r;
?>

y te va a resultar en algo como
/users/webs/878743/htdocs/
ó
/www/webs/users/daven/public_html
Como la ultima carpeta es donde se inicia tu web, creas (tomando el segundo ejemplo), dentro de daven una carpeta pdfs, es decir por fuera de public, y usas en el php
/www/webs/users/daven/pdfs/$archivo.pdf

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.