2011-08-08 15 views
13

Digamos que tengo un archivo de texto plano example.txt y tengo un script PHP en mi servidor web readfile.php.permitir scripts para leer un archivo, pero impiden que los usuarios puedan ver el archivo directamente

Lo que yo quiero ser capaz de hacer es evitar que los usuarios escriban http://www.example.com/example.txt y mirando el archivo de texto directamente, pero todavía quiero que la gente sea capaz de cargar http://www.example.com/readfile.php que se lee desde el archivo example.txt y hace algo con él (posiblemente muestra el contenido del archivo).

Además, si esto se puede hacer, ¿cuál es la mejor manera de hacerlo?

+0

http://httpd.apache.org/docs/current/mod/mod_rewrite.html –

+0

Quiere decir "... quiere que la gente pueda cargar http://www.example.com/readfile.php" no "readfile.txt". –

Respuesta

14

Sí, esto es fácil de hacer.

Existen dos formas principales de evitar que los usuarios accedan a example.txt. La primera es colocarla en una carpeta fuera de su carpeta web (generalmente llamada www o public_html), la segunda es poner un archivo .htaccess en la carpeta con su script example.txt que bloquea el acceso al archivo por completo. El .htaccess se vería como

<files "example.txt"> 
deny from all 
</files> 

pero se podía cambiar example.txt a algo así como *.txt si desea bloquear todas las .txt archivos de la carpeta.

continuación, puede utilizar file_get_contents() en su readfile.php para obtener el contenido del archivo de texto, o si simplemente desea que el archivo se puede utilizar readfile

+0

+1 para poner el archivo en el directorio web y usar .htaccess. Gracias. – mtahmed

+0

@mtahmed De nada :) ¡Gracias por la aceptación! – Paulpro

+0

Agregué el archivo .htaccess; sin embargo, recibo un error al intentar llamar a file_get_contents() :: no se pudo abrir la secuencia: ¡Falló la solicitud HTTP! HTTP/1.1 403 Prohibido. ¿Debo cambiar los permisos de php para acceder al archivo? También intenté usar cUrl sin suerte. –

8

Simplemente almacene los archivos que no desea que sean públicamente accesibles fuera de la raíz web.

/home 
    example.txt 
    /www 
     readfile.php 

Si /home/www/ es su carpeta de Webroot pública, por encima de cualquier archivo que no es accesible a través del servidor web. readfile.php todavía puede acceder al archivo perfectamente bien en ../example.txt embargo.

+0

WOW ... ¿por qué no pensé en esto? ¡Gracias! – mtahmed

0

Se puede poner el archivo fuera "example.txt" de la carpeta pública y leer desde readfile.php como $content = file_get_contents("../example.txt");

1

Si necesita almacenar los archivos en la web raíz, a continuación, poner los archivos en una carpeta y negar el acceso a esa carpeta. Si está usando Apache, hacer un archivo .htaccess en la carpeta y el tipo de deny from all

0

Puede llamar a un archivo como este y las personas no ven el nombre del archivo:

<?php 
$file = 'example.txt'; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

(fuente: php .net)

¿Eso funcionaría para usted?

1

que he hecho algo similar en el que los archivos contienen extremadamente sensible información y solo quiero que los usuarios validados puedan recuperar el archivo a través de una conexión HTTPS.

Lo que hice fue lo siguiente:

puse los archivos en una ruta de directorio que está fuera del alcance de lo que el servidor web (Apache, para mí) se puede ver. Por lo tanto, no hay posibles URL que hagan que el servidor web sirva directamente el archivo.Luego creé un script que permite a los usuarios iniciar sesión, hacer clic en el archivo que desean y luego el script PHP lee el archivo, coloca los encabezados apropiados y luego transmite el archivo a la computadora del usuario.

Por supuesto, la secuencia de comandos que muestra al usuario la lista de archivos y la secuencia de comandos que transmite el archivo al usuario debe tener al menos acceso de lectura a los archivos en la ruta donde se almacenan.

¡Buena suerte!

Cuestiones relacionadas