2008-09-20 12 views

Respuesta

80

Sí, funciona para las carpetas ....

devuelve verdadero si el fichero indicado existe y se puede escribir. El argumento de nombre de archivo puede ser un nombre de directorio que le permite verificar si un directorio es escribible.

+22

El truco es que no puede especificar un * archivo * que aún no existe dentro de la carpeta que realmente desea probar, simplemente especifique la carpeta. – philfreo

0

De acuerdo con el manual de PHP is_writable debería funcionar bien en los directorios.

1

stat()

Al igual que una estadística sistema, pero en PHP. Lo que desea verificar es el valor de modo, al igual que lo haría con cualquier otra llamada a stat en otros idiomas (I.E. C/C++).

http://us2.php.net/stat

3

Usted puede estar enviando una ruta de archivo completa a la función is_writable(). is_writable() devolverá falso si el archivo no existe en el directorio. Debe verificar el directorio con el nombre del archivo eliminado, si este es el caso. Si lo hace, is_writable le dirá correctamente si el directorio es escribible o no. Si $file contiene la ruta de archivo de hacer esto:

$file_directory = dirname($file); 

A continuación, utilice is_writable($file_directory) para determinar si la carpeta se puede escribir.

Espero que esto ayude a alguien.

12

El código :)

<?php 

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

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

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

    // blah blah blah 
} 
+0

Ahh, 'dirname ($ new_file_name)', eso es más simple de lo que iba a hacer. Iba a usar 'pathinfo ($ new_file_name, PATHINFO_DIRNAME)'. Gracias. –

5

Para ser más específicos para el propietario/grupo/mundo

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

paz ...

+0

Esta función debe mejorarse. En este momento, devolvería false para permisos como '0777'. –

0

así es como lo hago:

crear un archivo con file_put_contents() y comprobar el valor de retorno, si es positivo (número de escritos en Bytes), entonces usted puede seguir adelante y hacer lo que tiene que hacer, si es falso, entonces no se puede escribir en

$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"; 

continuación, se puede eliminar el archivo de prueba mediante el uso de desvinculación()

unlink('directory/dummy.txt'); 
+0

Si bien esto técnicamente funciona, definitivamente no es el método recomendado. Las operaciones del sistema de archivos son relativamente lentas e implican una gran sobrecarga, por lo que crear un archivo ficticio y luego eliminarlo/desvincularlo es ** mucho ** más lento que la mayoría de los otros métodos. – Byson

0

He escrito un pequeño guión (lo llamo isWritable.php) que detecta todos los directorios en el mismo directorio en el que se encuentra el script y escribe en la página si cada directorio es escribible o no. Espero que esto ayude.

<?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>'; 
    } 
} 
?> 
Cuestiones relacionadas