How to find a reason when mkdir fails from PHP?

Milan Babuškov picture Milan Babuškov · May 29, 2009 · Viewed 37.1k times · Source

PHP's mkdir function only returns true and false. Problem is when it returns false.

If I'm running with error reporting enabled, I see the error message on the screen. I can also see the error message in the Apache log. But I'd like to grab the text of the message and do something else with it (ex. send to myself via IM). How do I get the error text?

Update: Following Ayman's idea, I came to this:

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();

However, I don't like it because it uses global variable. Any idea for a cleaner solution?

Answer

soulmerge picture soulmerge · May 30, 2009

You can suppress the warning and make use of error_get_last():

if (!@mkdir($dir)) {
    $error = error_get_last();
    echo $error['message'];
}