Вы можете использовать исключения:
Настройте некоторый код следующим образом:
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, то после этого попытайтесь перехватить блок, просто позвоните:
restore_error_handler()