php warning fclose () espera que el parámetro 1 sea un recurso booleano dado

Uso newrelic para hacer un seguimiento de cualquier cosa en mi sitio web y siempre obtengo este error:

Mensaje de error: E_WARNING: fclose () espera que el parámetro 1 sea resource, boolean given Stack trace: en fclose llamado a /etc/snmp/bfd-stats.php (68)

Así es como se ve /etc/snmp/bfd-stats.php

  $res[0]) { $res[0] = 0; $res[1] = 0; } } $fh = fopen('/var/log/bfd_log', 'r'); fseek($fh,$res[1]); $blocks = 0; if(!$fh) { echo "Error! Couldn't open the file."; } else { while (!feof($fh)) { $data = fgets($fh); if(preg_match('/executed\sban/',$data)) { $blocks++; } } } $lfh = fopen('/etc/snmp/bfd-log-pos.stat','w'); $timestamp = time(); $pos = ftell($fh); fwrite($lfh,"$timestamp,$pos"); fclose($lfh); if(!fclose($fh)) { echo "Error! Couldn't close the file."; } print("bfd_blocks\n$blocks"); ?> 

En la línea 40: $fh = fopen('/var/log/bfd_log', 'r'); Miré el directorio /var/log y no hay un archivo llamado bfd_log , no sé si tengo que crearlo yo mismo o si se crea automáticamente.

¿Alguien puede ayudarme a solucionar este error? Gracias de antemano.

El error indica que está intentando pasar una variable con un valor booleano (verdadero / falso) a una función que necesita un recurso en lugar de un valor booleano.

Asegúrese de que antes de usar los recursos de las variables, la función que devuelve el recurso no haya tenido problemas. Solo en caso de éxito realice las otras funciones que usan este recurso / variable.

 $fh = fopen('/var/log/bfd_log', 'r'); // check fh before other functions use this variable if (!$fh) { echo "Error! Couldn't open the file."; } else { // perform task with resource $fh fseek($fh, $res[1]); [...] $lfh = fopen('/etc/snmp/bfd-log-pos.stat', 'w'); // check before other code block is executed and use this variable if( $lfh ) { // perform task with resource $lfh $pos = ftell($fh); fwrite($lfh, "$timestamp,$pos"); fclose($lfh); fclose($fh); [...] } else { // lfh error } } 

Si siempre revisa antes de usar variables, ya no se encontrará con este error.

Tratar

 $fh = fopen('/var/log/bfd_log', 'a+'); 

un modo + creará el archivo si no existe