allora la teoria è banale, la pratica quasi ma va capita. tramite il file .htaccess hai la possibilità di creare un "login" che blocchi l'accesso alla directory in cui risiede l'htaccess (qui un esempio sul mio sito, clicca il link e vedi che sono richiesti dati di autenticazione). Se usi altervista, nel pannello di controllo questo si fa tramite una procedura guidata molto semplice.
Altrimenti ti devi arrangiare ma resta moltos emplice, potrei spiegartelo ma finirei per confonderti, trovo invece questa guida molto chiara e semplice.
ATTENZIONE: le immagini nella cartella protetta non saranno più accessibili nemmeno nei tag <img />
se quindi avrai in una pagina che risiede in una cartella non protetta ma che cerca di usare il file che è nella cartella protetta ad esempio così
codice:
[img]www.miosito.it/file/immagini/pippo.jpg[/img]
verrà comunque richiesto il login.
la soluzione è altrettanto semplice: se hai un minimo di conoscenza di come funziona un server saprai che apache (il motore che compila il php) può tutto (diciamo quasi dai :P) mentre il login per accedere alla cartella è limitato al protocollo http, quindi se vorrai usare l'immagine di cui sopra rendendola accessibile agli utenti il procedimento è inserire l'immagine in questo modo
codice:
[img]www.miosito.it/renderer.php?img=pippo.jpg[/img]
a questo punto ti crei il tuo bel file renderer.php in questo modo
Codice PHP:
<?php
$path = "/var/www/miosito/file/immagini/"; //percorso indicativo
$fullPath = $path.$_GET['download_file'];
if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$mime = getMimeType(strtolower($path_parts["extension"]));
header("Content-type: $mime");
header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
header("Content-length: $fsize");
header("Cache-control: private");
while(!feof($fd)) {
$buffer = fread($fd, 2048);
echo $buffer;
}
}
fclose ($fd);
exit;
function getMimeType($ext){
switch($ext){
case "png": return "image/png";
case "bmp": return "image/bmp";
case "gif": return "image/gif";
case "jpg": return "image/jpeg";
default: return "application/octet-stream";
}
}
?>
questo ti permette di fare eventuali controlli su chi può vedere il file ad esempio puoi controllare se un utente è loggato al tuo sito e decidere solo allora di mostrare il file oppure puoi semplicemente fare un contatore di downloads o qualunque altra cosa il php ti permetta.
spero di essere stato utile