24

PHP 的 mkdir 函数只返回 true 和 false。问题是当它返回 false 时。

如果我在启用错误报告的情况下运行,我会在屏幕上看到错误消息。我还可以在 Apache 日志中看到错误消息。但我想获取消息的文本并用它做其他事情(例如通过 IM 发送给我自己)。如何获取错误文本?

更新:按照艾曼的想法,我得出了这个结论:

function error_handler($errno, $errstr) {
    global $last_error;
    $last_error = $errstr;
}

set_error_handler('error_handler');
if (!mkdir('/somedir'))
    echo "MKDIR failed, reason: $last_error\n";
restore_error_handler();

但是,我不喜欢它,因为它使用全局变量。对更清洁的解决方案有任何想法吗?

4

3 回答 3

66

您可以抑制警告并使用error_get_last()

if (!@mkdir($dir)) {
    $error = error_get_last();
    echo $error['message'];
}
于 2009-05-30T10:22:55.317 回答
19

你可以使用例外:

像这样设置一些代码:

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

然后做:

try {
   mkdir('/somedir');
} catch(ErrorException $ex) {
   echo "Error: " . $ex->getMessage();
}

那应该做你想做的事。

如果你想保留 php 错误处理程序,那么在 try catch 块之后,只需调用:

restore_error_handler()
于 2009-05-30T10:31:08.683 回答
4

我使用如下内容:

if(! @mkdir('$fileLocation', 0777, $recursive = true)){
    $mkdirErrorArray = error_get_last();
    throw new Exception('cant create directory ' .$mkdirErrorArray['message'], 1);
}
于 2013-03-24T21:01:10.927 回答