2009-07-30 13 views
9

Estoy tratando de depurar un enorme y anticuado servicio web PHP (circa 2001) y estoy encontrando fallas abiertas de archivos. La llamada fopen está en un módulo incluido, la persona que llama está registrando que el archivo no se pudo abrir, pero no se registra ningún motivo.Cómo dar salida al motivo de una falla abierta de archivo PHP

El código que realmente hace lo abierto es:

// Read the file 
    if (!($fp = @fopen($fileName, 'rb'))) { 
    $errStr = "Failed to open '{$fileName}' for read."; 
    break; // try-block 
    } 

¿Cómo puedo averiguar por qué fopen fallado?

Respuesta

1

grandes respuestas ya se han dado, sobre la @ operator, pero aquí hay un par de más información que podría ser útil, ya sea para usted o alguien más:

  • Si, con fines de depuración, se necesita el deshabilitar la @ operator, se puede instalar el scream extension- véase también the manual - que es muy útil cuando se está manteniendo algún tipo de aplicación de edad no está bien diseñada/codificado ^^
  • Dependiendo de su configuation PHP (si elLa opciónestá activada), es posible que pueda usar $php_errormsg para obtener el último mensaje de error.

Teniendo en cuenta este trozo de código:

// This file doesn't exist 
if ([email protected]('/tmp/non-existant-file.txt', 'r')) { 
    var_dump($php_errormsg); 
} 

// My Apache server doesn't have the right to read this file 
if ([email protected]('/tmp/vboxdrv-Module.symvers', 'w')) { 
    var_dump($php_errormsg); 
} 

que se obtendría 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) 

Así, los mensajes reales, útiles y significativas, error ;-)

9

Quítese el signo @.

El signo @ suprime los mensajes de error, por lo que se suprime el error que la función normalmente daría.

Cuestiones relacionadas