Domanda

Qualcuno sa come posso verificare se una directory è scrivibile in PHP?

La funzione is_writable doesn ' t funziona per le cartelle. (modifica: funziona. Vedi la risposta accettata.)

È stato utile?

Soluzione

Sì, funziona per le cartelle ....

  

Restituisce VERO se il nome file esiste ed è scrivibile. L'argomento del nome file può essere un nome di directory che consente di verificare se una directory è scrivibile.

Altri suggerimenti

questo è il codice :)

<?php 

$newFileName = '/var/www/your/file.txt';

if ( ! is_writable(dirname($newFileName))) {

    echo dirname($newFileName) . ' must writable!!!';
} else {

    // blah blah blah
}

per essere più specifici per proprietario / gruppo / mondo

$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";

pace ...

È possibile che tu stia inviando un percorso file completo alla funzione is_writable () . is_writable () restituirà false se il file non esiste già nella directory. È necessario controllare la directory stessa con il nome file rimosso, se questo è il caso. Se lo fai, is_writable ti dirà correttamente se la directory è scrivibile o meno. Se $ file contiene il percorso del file, procedere come segue:

$file_directory = dirname($file);

Quindi usa is_writable ($ file_directory) per determinare se la cartella è scrivibile.

Spero che questo aiuti qualcuno.

Secondo la documentazione per is_writable , dovrebbe funziona, ma hai detto " cartella " ;, quindi questo potrebbe essere un problema di Windows . I commenti suggeriscono una soluzione alternativa .

(Una lettura affrettata in precedenza mi ha fatto pensare che le barre finali fossero importanti, ma si è rivelato essere specifico per questo lavoro in giro).

Ho scritto un piccolo script (lo chiamo isWritable.php ) che rileva tutte le directory nella stessa directory in cui si trova lo script e scrive sulla pagina se ogni directory è scrivibile o meno. Spero che questo aiuti.

<?php
// isWritable.php detects all directories in the same directory the script is in
// and writes to the page whether each directory is writable or not.

$dirs = array_filter(glob('*'), 'is_dir');

foreach ($dirs as $dir) {
    if (is_writable($dir)) {
        echo $dir.' is writable.<br>';
    } else {
        echo $dir.' is not writable. Permissions may have to be adjusted.<br>';
    } 
}
?>

stat ()

Proprio come una stat di sistema, ma in PHP. Quello che vuoi controllare è il valore della modalità, proprio come faresti con qualsiasi altra chiamata a stat in altre lingue (I.E. C / C ++).

http://us2.php.net/stat

Secondo il manuale di PHP is_writable dovrebbe funzionare bene su directory.

ecco come lo faccio:

crea un file con file_put_contents () e controlla il valore di ritorno, se è positivo (numero di scritti in byte), puoi andare avanti e fare quello che devi fare, se lo è FALSO quindi non è scrivibile

$is_writable = file_put_contents('directory/dummy.txt', "hello");

if ($is_writable > 0) echo "yes directory it is writable";

else echo  "NO directory it is not writable";

quindi è possibile eliminare il file fittizio utilizzando unlink ()

unlink('directory/dummy.txt');

Nel mio caso, is_writable è tornato vero, ma quando si è tentato di scrivere il file è stato generato un errore.
Questo codice aiuta a verificare se $ dir esiste ed è scrivibile:

<?php
$dir = '/path/to/the/dir';

// try to create this directory if it doesn't exist
$booExists     = is_dir($dir) || (mkdir($dir, 0774, true) && is_dir($dir));
$booIsWritable = false;
if ($booExists && is_writable($dir)) {
    $tempFile = tempnam($dir, 'tmp');
    if ($tempFile !== false) {
        $res = file_put_contents($tempFile, 'test');

        $booIsWritable = $res !== false;
        @unlink($tempFile);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top