Как найти причину, из-за которой mkdir терпит неудачу с PHP?

Функция mkdir PHP возвращает только 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(); 

Однако мне это не нравится, потому что он использует глобальную переменную. Любая идея для более чистого решения?

Вы можете подавить предупреждение и использовать error_get_last() :

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

Вы можете использовать исключения:

Настройте некоторый код следующим образом:

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

Я использую что-то вроде следующего:

 if(! @mkdir('$fileLocation', 0777, $recursive = true)){ $mkdirErrorArray = error_get_last(); throw new Exception('cant create directory ' .$mkdirErrorArray['message'], 1); }