¿Cómo verifico si un directorio se puede escribir en PHP?

3 minutos de lectura

avatar de usuario
Sean Downey

¿Alguien sabe cómo puedo verificar si un directorio se puede escribir en PHP?

La función is_writable no funciona para carpetas.

Editar: funciona. Ver la respuesta aceptada.

Sí, funciona para carpetas…

Devuelve VERDADERO si el nombre de archivo existe y se puede escribir. El argumento del nombre de archivo puede ser un nombre de directorio que le permita verificar si un directorio es escribible.

  • El truco es que no puedes especificar un expediente que aún no existe dentro de la carpeta que realmente desea probar, solo especifique la carpeta.

    – Philfreo

    24 de septiembre de 2010 a las 17:33

avatar de usuario
Irfan EVRENS

este es el codigo 🙂

<?php 

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

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

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

    // blah blah blah
}

  • Ah, dirname($new_file_name), eso es más simple que lo que iba a hacer. iba a usar pathinfo($new_file_name,PATHINFO_DIRNAME). Gracias.

    -Buttle Butkus

    24 de abril de 2014 a las 7:57

para ser más específico para propietario/grupo/mundo

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

paz…

  • Esta función debería mejorarse. En este momento devolvería falso para permisos como 0777.

    – Eslava

    27 de enero de 2016 a las 13:27


Es posible que esté enviando una ruta de archivo completa al is_writable() función. is_writable() devolverá falso si el archivo aún no existe en el directorio. Debe verificar el directorio en sí mismo con el nombre de archivo eliminado, si este es el caso. Si haces eso, is_writable le dirá correctamente si el directorio es escribible o no. Si $file contiene la ruta de su archivo, haga esto:

$file_directory = dirname($file);

Entonces usa is_writable($file_directory) para determinar si se puede escribir en la carpeta.

Espero que esto ayude a alguien.

avatar de usuario
Quentin

De acuerdo a la documentación para is_writabledebería funcionar, pero dijiste “carpeta”, por lo que podría ser un problema de Windows. Los comentarios sugieren una solución.

(Una lectura apresurada anterior me hizo pensar que las barras diagonales finales eran importantes, pero eso resultó ser específico para este trabajo).

avatar de usuario
Studocquien

He escrito un pequeño guión (lo llamo esEscribible.php) que detecta todos los directorios en el mismo directorio en el que se encuentra el script y escribe en la página, independientemente de si se puede escribir en cada directorio 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>';
    } 
}
?>

avatar de usuario
jason simulacro

estadística()

Muy parecido a una estadística del sistema, pero en PHP. Lo que desea verificar es el valor del modo, como lo haría con cualquier otra llamada a stat en otros idiomas (IE C/C++).

http://us2.php.net/stat

¿Ha sido útil esta solución?