> Faqs > Solucionar problemas con ficheros: supplied argument is not a valid stream resource

Solucionar problemas con ficheros: supplied argument is not a valid stream resource

Os pido ayuda despues de haber mirado por todos los lados a ver cual es es problema, pero no encuentro nada. Ahora mismo estoy con el manejo de ficheros y tengo un error que no puedo solucionar. Os comento.

El codigo es el siguiente:

<?php  
// Esto es para escribir ficheros;  
  
$nombre_fichero = "Mis_datos";  
$estado = fopen($nombre_fichero,"w+");  
echo "estado en apertura" . $estado . "<br>";  
echo fwrite($nombre_fichero,"esto es lo que quiero grabar");  
$estado = fclose ($nombre_fichero);  
echo "Estado al final " . $estado;  
?>

Y esto es lo que me da el navegador:

Estado en aperturaResource id #3

Warning: fwrite(): supplied argument is not a valid stream resource in C:\AppServ\www\escribeficheros.php on line 7
Warning: fclose(): supplied argument is not a valid stream resource in C:\AppServ\www\escribeficheros.php on line 8 Estado al final

Estoy en windows y no es un problema de permisos, ya que estoy en una sesion como administrador.

En fin, lo mismo es una chorrada. Si alguien que sepa me dijera por que lo agradecería mucho.

Respuestas

Hola! Cuando te sale el error Warning: fwrite(): supplied argument is not a valid stream resource quiere decir que el identificador del fichero no es correcto.

Usualmente es porque el archivo que has intentado abrir no existe.

Deberías de verificar la ruta y el nombre del fichero que le has pasado a la función fopen() para ver si el fichero existe realmente en el servidor.

De todos modos, en tu caso tu error parece ser que estás usando la cadena con el nombre del fichero en vez del identificador del fichero.

Cuando haces el fopen() la función te devuelve el identificador del fichero abierto.

$estado = fopen($nombre_fichero,"w+");

Esa variable $estado es la que tienes que usar luego para invocar las funciones de lectura o escritura.

echo fwrite($estado, "esto es lo que quiero grabar");  
Agustín
245 5 15 14

Segun el manual de PHP (www.php.net): fclose no puede ser asignado a una variable solo sirve para cerrar el archivo:

Closes an open file pointer. bool fclose ( resource $handle )

fopen: es para asignar el archivo a abrir

Opens file or URL

Y los mensajes de los Warning te están diciendo que no le estas pasando un recurso válido.

Ejemplo básico:

$archivo = "C:\\archivo.txt"; 
$file = fopen($archivo, "modo_de_apertura"); 
fwrite($file, "cadena_o_datos_a_escribir"); 
fclose($file); 

Diego, nadie nació sabiendo, se aprende en modo solitario, en modo cooperativo, o no se aprende. Metele pata y segui pa delante. Saludos

Hector Del Mestre