Cómo mostrar el motivo de un error de apertura de archivo PHP
-
05-07-2019 - |
Pregunta
Estoy tratando de depurar un servicio web PHP enorme y anticuado (alrededor de 2001) y encuentro fallas en la apertura de archivos. La llamada final está en un módulo incluido, la persona que llama está registrando que el archivo no se pudo abrir pero no se está registrando ninguna razón.
El código que realmente abre es:
// Read the file
if (!($fp = @fopen($fileName, 'rb'))) {
$errStr = "Failed to open '{$fileName}' for read.";
break; // try-block
}
¿Cómo puedo saber por qué fopen falló?
Solución
Ya se han dado excelentes respuestas acerca de @ operator , pero aquí hay un par de informaciones más que podrían ser útiles, ya sea para usted o para otra persona:
- Si, para fines de depuración, necesita deshabilitar el
@ operador
, puede instalar extensión de grito - vea también el manual - lo que es realmente útil cuando se mantiene algún tipo de aplicación antigua que no está bien diseñada / codificada ^^ - Dependiendo de su configuración de PHP (si
track_errors
está activada) , es posible que pueda usar$ php_errormsg
para obtener el último mensaje de error.
Considerando este fragmento de código:
// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
var_dump($php_errormsg);
}
// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
var_dump($php_errormsg);
}
Obtendrías esto:
string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)
string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)
Entonces, mensajes de error reales, útiles y significativos ;-)
Otros consejos
Quita el signo @.
El signo @ suprime los mensajes de error, por lo que está suprimiendo el error que la función daría normalmente.
Elimine el supresor de errores .