Domanda

Come posso controllare file permissions, senza dover eseguire il comando specifico del sistema operativo tramite passthru() O exec()?

È stato utile?

Soluzione

Utilizzo fileperms() funzione

clearstatcache();
echo substr(sprintf('%o', fileperms('/etc/passwd')), -4);

Altri suggerimenti

Puoi usare il è_leggibile(), è_eseguibile() eccetera..comandi.

I veri programmatori utilizzano operazioni bit a bit, non stringhe ;) Questo è un modo molto più elegante di gestire le autorizzazioni:

function checkPerms($path)
{
    clearstatcache(null, $path);
    return decoct( fileperms($path) & 0777 );
}

Utilizzo fileperms() funzione e sottostringa:

substr(decoct(fileperms(__DIR__)), -4); // 0777
substr(decoct(fileperms(__DIR__)), -3); // 777

Per il fascicolo:

substr(decoct(fileperms(__FILE__)), -4); // 0644
substr(decoct(fileperms(__FILE__)), -3); // 644

Sostituire __FILE__ E __DIR__ con il tuo percorso o variabile

Cosa vuoi fare controllando i permessi dei file?

Quando si scrive codice sicuro, è quasi sempre errato "controllare, quindi eseguire" qualsiasi cosa.Il motivo è che tra il verificare se si può fare qualcosa e il farlo effettivamente, lo stato del sistema potrebbe cambiare in modo tale che farlo avrebbe un risultato diverso.

Ad esempio, se controlli se un file esiste prima di scriverne uno, non controlla se hai scritto il file con successo (o non controlla in modo sufficientemente dettagliato), e poi dipende dal contenuto del file che hai scritto , potresti effettivamente leggere un file scritto da un utente malintenzionato.

Quindi, invece di controllare i permessi dei file, fai semplicemente quello che avresti fatto se il controllo dei permessi avesse avuto esito positivo e gestisci gli errori con garbo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top