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ó?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top