PDA

View Full Version : [PHP] Accesso a cartella solo da codice


tomino87
20-11-2009, 22:19
Salve a tutti, avrei un problema con cui mi sto scontrando nello sviluppo di un sito.
Il problema è il seguente: ci sono delle zone del sito alle quali vorrei si potesse accedere solamente da codice php... ad esempio, se nel server c'è una cartella images (percorso http://www.sito.it/percorso/images/) e dentro vi sono delle immagini, vorrei che gli utenti non possano visualizzare il contenuto della cartella, inserendo (ad esempio) il percorso nella barra degli indirizzi.. ma al tempo stesso vorrei poter scrivere nel codice php cose tipo


echo "<img src=\"...\" ecc ecc />";


Cambiando i permessi probabilmente non riuscirei ad accedervi nemmeno da codice php (è corretto..?)....
Qualcuno può propormi una soluzione?
Spero di aver spiegato chiaramente il problema, aspetto vostre risposte!!

Grazie,
Piero

cionci
21-11-2009, 09:47
La cosa dipende da server a server. Ci sono varie possibilità:
- se gli script php girano sotto un utente diverso dal server web basta cambiare i permessi
- con server Apache puoi usare qualche direttiva locale nel file .htaccess per impedire l'accesso tramite il server web. Php potrà continuare a lavorarci.
- puoi mettere la cartella al di fuori del percorso condiviso dal server web

In ogni caso devi dare come proprietà source del tag img il tuo script php. Ad esempio:

<img src="getimage.php?img=pincopallino.jpg">

Tu dovrai prima di tutto fornire il mime type corretto nell'header Content-Type tramite la funzione php "header", poi devi andare ad aprire il file, recuperarne il contenuto e produrlo in output.
Se ti serve un anti-leech, ovvero un sistema che renda impossibile linkare le tue immagini su un sito diverso dal tuo (ovviamente se le salvano puoi fare ben poco), puoi controllare l'header della richiesta http andando a cercare il campo referer che contiene il sito dal quale la richiesta di visualizzazione dell'immagine è partita. Se non è il tuo sito ovviamente puoi visualizzare qualsiasi altra immagine (ad esempio qualcosa con un messaggio che dice che non è possibile il linking diretto).