¿Alguien sabe cómo puedo verificar si un directorio es grabable en PHP?¿Cómo verifico si un directorio es grabable en PHP?
La función is_writable
no funciona para las carpetas. (Edit:. No trabajo Ver la respuesta aceptada.)
¿Alguien sabe cómo puedo verificar si un directorio es grabable en PHP?¿Cómo verifico si un directorio es grabable en PHP?
La función is_writable
no funciona para las carpetas. (Edit:. No trabajo Ver la respuesta aceptada.)
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.
De acuerdo con el manual de PHP is_writable debería funcionar bien en los directorios.
Según the documentation for is_writable, debería funcionar, pero dijiste "carpeta", por lo que podría ser a Windows issue. Los comentarios sugieren a workaround.
(Una lectura apresurada anterior me hizo pensar que las barras posteriores eran importantes, pero eso resultó ser específico de este trabajo).
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++).
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.
El código :)
<?php
$newFileName = '/var/www/your/file.txt';
if (! is_writable(dirname($newFileName))) {
echo dirname($newFileName) . ' must writable!!!';
} else {
// blah blah blah
}
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. –
Para ser más específicos para el propietario/grupo/mundo
$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";
paz ...
Esta función debe mejorarse. En este momento, devolvería false para permisos como '0777'. –
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');
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
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>';
}
}
?>
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