如何获取取消链接的错误结果

时间:2010-02-25 09:47:24

标签: php

如果对指定路径的unlink()调用返回false,你如何找出失败的原因(即EISDIR,ENOENT,ELOOP等)? PHP 5.x在redhat linux上运行。

3 个答案:

答案 0 :(得分:20)

这是一种方式

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

有关详细信息,请参阅Error handling

答案 1 :(得分:2)

我认为不可能找回系统发出的任何错误代码。这可能是因为PHP应该是可移植的,不同的操作系统有不同的报告错误的方法。

您当然可以执行exec('rm ....')并获取错误级别,但这不是非常便携,并且会使您的应用依赖exec()权限。

否则,如果你确实真的需要这个,那么只会想到一个非常讨厌的解决方法:创建一个custom error handler function,试图从警告unlink投掷中获取失败的原因 - 例如检查“权限被拒绝”,或者只是获取整个错误消息。

围绕unlink创建一个包装函数,用于设置和重新设置错误处理程序。像这样:

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

 }

你得到我的漂移。

如果有人知道更好的解决方案 - 我也有兴趣听到它......

答案 2 :(得分:1)

这是不可能的,我害怕。这是在php 5.3中处理unlink的C代码。

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;
}

如你所见,errno没有返回,以后无法访问它。

关于此问题已经有bugreport,但似乎并没有引起太多关注。 ;)

另见discussion