Hai due opzioni:
1. usi .htaccess per proteggere la cartella e i file. Il problema,dal mio punto di vista, è che gli utenti che possono accedere al file vanno gestiti tramite apache (il file .htpassword): Se registri gli utenti su un db, devi poi prevedere un sistema per aggiungerli al file della password di apache. Quindi te lo consiglierei se hai degli utenti "statici"
2. sposti i tuoi contenuti da proteggere fuori dalla root del sito, in una cartella cmq leggibile e scrivibile da php (in alternativa puoi ricorrere a .htaccess, punto 1, negando l'accesso a tutti).
A questo punto nessuno può accedere ai file, quindi ti prepari uno script php del tipo
readimg.php
Codice PHP:
<?php
session_start();
$file = $_GET['src'];
// Verifico se l'utente è loggato. Chiaramente puoi creare il tuo sistema di accesso, usando
// anche il db
if(!isset($_SESSION['user'])){
header("HTTP/1.0 403 Forbidden");
....
exit();
}
$file_path = $path_assoluto_cartella.$file;
if(!file_exists($file_path)){
header("HTTP/1.0 404 Not Found");
...
exit();
}
// Come content-type, sarebbe meglio prendere il MIME del file
header('Content-Type: application/octet-stream');
header('Content-Length: ' . filesize($file_path));
readfile($file_path);
?>
quindi se vuoi far visualizzare l'immagine basta fare
Codice PHP:
[img]/path/readimg.php?src=logo.png[/img]
Se l'utente è abilitato ed il file esiste nella cartella privata allora verrà visualizzato