2010-02-25 11 views

Respuesta

20

Ésta es una forma

unlink("/path/that/does/not/exist"); 
print_r(error_get_last()); 

Ver Error handling para más detalles

+0

yo quería tratar con el error de programación, pero por ahora sólo voy a hacer un registro de uso de esta sugerencia; - si (@unlink ('xyz.abc') === false) {$ e = error_get_last (); trigger_error ($ e ['mensaje'], E_USER_NOTICE); } –

2

no creo que es posible recuperar ningún código (s) de error emitido por el sistema. Eso es quizá al hecho de que PHP se supone que es portátil y diferentes sistemas operativos tienen diferentes métodos de errores de información.

Por supuesto, puede hacer un exec('rm ....') y recuperar el nivel de error, pero eso no es muy portátil, y hace que su aplicación dependa de los derechos exec().

De lo contrario, si realmente, realmente necesita esto, solo viene a la mente una solución muy hacky: Cree un custom error handler function que intente buscar el motivo del error unlink throws - p. busca "Permiso denegado", o simplemente busca el mensaje de error completo.

crear una función de envoltura alrededor de unlink que establece y re-establece el gestor de errores. Algo como esto:

function my_unlink($file) 
{ 
    set_error_handler("my_error_handler"); 
    unlink($file); 
    restore_error_handler(); 

} 

obtienes mi deriva.

Si alguien conoce una solución mejor - Me interesaría oír hablar de eso, también ....

1

Este no es posible, me temo Aquí está el código C que maneja desvincular en php 5.3.

ret = VCWD_UNLINK(url); <-- calls unlink(2) 
if (ret == -1) { 
    if (options & REPORT_ERRORS) { 
     php_error_docref1(NULL TSRMLS_CC, url, E_WARNING, "%s", strerror(errno)); 
    } 
    return 0; 
} 

como se puede ver, errno no se devuelve y no hay manera de acceder a él más tarde.

Ya hay un bugreport sobre esto, pero parece que no llamar demasiado la atención. ;)

Ver también este artículo discussion

Cuestiones relacionadas