renovables recursos para niños naturales los importancia ejemplos dibujos definicion php fopen fwrite fread

recursos - ¿Cómo verificar si un recurso de flujo PHP es legible o escribible?



recursos renovables y no renovables para niños (2)

Bastante sencillo. Simplemente llame a stream_get_meta_data($resource) desde su script, luego verifique el elemento de matriz de mode del valor de retorno:

$f = fopen($file, ''r''); $meta = stream_get_meta_data($f); var_dump($meta[''mode'']); // r

Y si quieres saber si los datos subyacentes son de escritura:

var_dump(is_writable($meta[''uri''])); // true if the file/uri is writable

En PHP, ¿cómo verifico si un recurso de flujo (o un puntero de archivo, un identificador, o lo que quiera llamarlos) se puede leer o escribir? Por ejemplo, si se enfrenta a una situación en la que no sabe cómo se abrió o creó el recurso, ¿cómo verifica si es legible? ¿Y cómo se comprueba si se puede escribir?

Basado en las pruebas que he realizado (solo con archivos de texto normales que usan PHP 5.3.3), fread() no arroja ningún error en ningún nivel cuando el recurso no es legible. Simplemente devuelve una cadena vacía, pero también lo hace para un archivo vacío. E idealmente, sería mejor tener una verificación que no modifique el recurso en sí. Probar si un recurso es legible al intentar leerlo cambiará la posición del puntero.

A la inversa, fwrite() no lanza ningún error en ningún nivel cuando el recurso no se puede escribir. Simplemente devuelve cero. Esto es un poco más útil, porque si intentaba escribir un cierto número de bytes en un archivo y fwrite() devuelve cero, sabe que algo salió mal. Pero aún así, este no es un método ideal, porque sería mucho mejor saber si se puede escribir antes de que tenga que escribir en lugar de intentar escribir en él y ver si falla.

Además, idealmente, la verificación debería funcionar en cualquier tipo de recurso de flujo, no solo en archivos.

es posible? ¿Existe algo como esto? No he podido encontrar nada útil. Gracias de antemano por sus respuestas.


Bien, puede que esta no sea la mejor solución, pero creo que es suficiente, dado que no hay nada en PHP para hacer esto de forma automática.

Para el primer paso, obtendrá el inodo del recurso del archivo y luego leerá el nombre del archivo:

$stat = fstat($fp); $inode = $stat[''ino'']; system("find -inum $inode", $result);

Tomado directamente de esta pregunta sobre cómo encontrar el nombre de archivo de un identificador de archivo .

Ahora que tiene el nombre de archivo (en $result ), puede hacer un fileperms($result) para obtener los permisos.

Tenga en cuenta que fileperms() devuelve un int, y la documentación hace la magia (en realidad, solo trata al int como un octal) de retener ese 0 inicial (por ejemplo, 0755).

También tenga en cuenta que la documentación hace la magia de convertir ese int en una buena cadena como -rw-r--r--