如果对指定路径的unlink()调用返回false,你如何找出失败的原因(即EISDIR,ENOENT,ELOOP等)? PHP 5.x在redhat linux上运行。
答案 0 :(得分:20)
答案 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,但似乎并没有引起太多关注。 ;)