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 (!@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エラーハンドラーを保持したい場合は、その後、catchブロックを試してください。
restore_error_handler()
私は次のようなものを使用します:
if(! @mkdir('$fileLocation', 0777, $recursive = true)){
$mkdirErrorArray = error_get_last();
throw new Exception('cant create directory ' .$mkdirErrorArray['message'], 1);
}