Ответ 1
Вы можете подавить предупреждение и использовать error_get_last()
:
if ([email protected]($dir)) {
$error = error_get_last();
echo $error['message'];
}
Функция 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();
Однако мне это не нравится, потому что он использует глобальную переменную. Любая идея для более чистого решения?
Вы можете подавить предупреждение и использовать error_get_last()
:
if ([email protected]($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);
}