2012-10-11 10 views
5

Estoy usando unlink en mi página de PHP. En algunas situaciones, se puede denegar el permiso para eliminar el directorio. En lugar de tenerPHP - método error_get_last para advertencias?

Warning: unlink(stuff/New folder) [function.unlink]: Permission denied in ... on line 30

mostrará en la página representada, ¿hay alguna manera de hacer un "warning_get_last" que capturará la última advertencia dada, por lo que puede hacer salir bien? ¿O lo incluye error_get_last?

Sé que puedo suprimir las advertencias con @unlink y que también puedo comprobar para ver si unlink vuelve falsa, pero me gustaría saber el mensaje de error que va junto con él si lo hace fallar.

Respuesta

7

Use error_reporting(0) para no mostrar la advertencia o cualquier error en la página representada. Seguirá apareciendo en los registros de errores del servidor y aún puede usar error_get_last() para obtener el último error.

Puede probarlo con esto:

error_reporting(0); 
unlink('some file that does not exist'); // generates a warning 
print_r(error_get_last()); 
+0

'error_reporting (E_ERROR | E_WARNING) '- ¿hará que error_get_last muestre errores o advertencias? Puedo usar @ para evitar que aparezcan las advertencias. Solo necesito una forma de obtener el mensaje de ellos. –

+0

He actualizado la respuesta para mayor claridad. – Trott

+0

He actualizado la respuesta, pero házmelo saber si estoy simplemente malinterpretando la pregunta o algo así. – Trott

1

usted escribe establecer su propio gestor de errores, permitir que justo antes de la llamada, y volver a la normalidad después.

Utilice set-error-handler para activar el controlador de errores, guárdelo en una variable global (que es la más simple, quizás no la más "correcta") y muestre si hubo un error. O el usuario error_get_last() (como lo sugiere Trott).

function myErrorHandler($errno, $errstr, $errfile, $errline) { 
    global $lastErrorString; 
    $lastErrorString = $errstr; 
    return false; 
} 

// Calling function: 
global $lastErrorString; 
$lastErrorString=false; 
$old_error_handler = set_error_handler("myErrorHandler"); 
unlink($file); 
restore_error_handler(); 
if ($lastErrorString !== false) { 
    echo 'Went wrong: ' . $lastErrorString; 
} 
0

No entiendo por qué el siguiente es peor que las otras 2 propuestas; de hecho, yo diría que es mejor porque es más corta que la respuesta de Robbie y no tiene un efecto global a diferencia de la respuesta de Trott:

$ok = @unlink(...); 
if ($ok === FALSE) 
    throw new Exception(error_get_last()['message']); 

de salida cuando se ejecuta:

PHP Fatal error: Uncaught exception 'Exception' with message 'unlink(foobar.txt): No such file or directory' in /Users/erik/code/test.php:5 
Stack trace: 
#0 {main} 
    thrown in /Users/erik/code/test.php on line 5 
Cuestiones relacionadas