2012-06-03 19 views
5

Fondamentalmente ciò che dice sulla latta:PHP is_readable fallisce ma opendir funziona

if(is_dir($dir)) 
    echo $dir . " is a directory\n"; 

if(is_readable($dir)) 
    echo $dir . " is readable\n"; 

if($this->handle = opendir($dir)) 
    echo $dir . " opened\n"; 

Returns:

\\ HTPC \ Movies è una directory

\\ HTPC \ FILM aperti

Quale è strano? Posso scorrere i file nella directory ma a quanto pare non è leggibile. Non ha molta importanza, come ho detto, posso ancora leggere i file, tuttavia lo trovo un po 'strano.

Qualcuno ha qualche idea?

+0

Che cos'è il sistema operativo sulla macchina "HTPC"? È Windows? –

+0

Sì, Windows 7! –

+0

Non sono sicuro, ma forse a causa del file system di Windows (FAT o NTFS) Potresti avere il permesso di "elencare il contenuto" ma "leggere" non è permesso! –

risposta

3

Sembra che si sia verificato un errore di autorizzazione. Assegnato a quella cartella particolare era un gruppo home. L'homegroup non veniva effettivamente utilizzato sulla rete. Dopo aver rimosso il gruppo home e aggiunto nuovamente il gruppo di utenti, is_readable ha restituito true. Ancora strano come opendir è tornato vero ma non è leggibile. Sicuramente ti aspetteresti che qualcosa che non è leggibile fallisca all'apertura.

Grazie per il vostro aiuto ragazzi.

+0

Interessante. 'is_readable()' è solo un sottile involucro attorno a 'stat', quindi era sicuramente un problema di autorizzazione; ancora sorpreso di vedere che le informazioni possono essere così fuorvianti :) –

0

Controllare le politiche di sicurezza se si desidera impedire l'inserimento della directory, cercare il controllo di attraversamento di bypass o qualcosa del genere.

Se si esclude tale controllo, è possibile inserire una directory vietata da ACL, tuttavia non è possibile leggere il contenuto.

Se le ACL sono impostate e selezionate accuratamente e correttamente per l'intero albero, di solito non è necessario toccarle.

+0

Questo genere di cose non dovrebbe essere applicato a tutte le unità e non a una sola? –

+0

Questa è la funzione di sicurezza e si applica all'intero sistema in una sola volta. È abilitato o disabilitato globalmente, non fornisce o toglie la vera sicurezza. Se le ACL sono impostate e selezionate accuratamente e correttamente per l'intero albero, normalmente non è necessario toccarle. –

Problemi correlati