php mkdir()异常处理
-
30-09-2019 - |
题
Mkdir()正常工作,这个问题更多地是关于捕获错误。而不是在目录存在时打印此内容,我只想在自定义日志中写给我的消息。我如何创建此例外。
警告:mkdir()[function.mkdir]:文件存在
解决方案
我只想在自定义日志中写给我的消息。
解决方案非常容易。 PHP已经为您提供了一切:
ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','/path/to/custom.log');
或php.ini或.htaccess中的相同设置
我认为这比手动写下每个可能的错误要好
如果您不希望此错误记录(因为这可能不是错误,而是应用程序逻辑的一部分),则可以先检查文件夹的存在
if (!file_exists($folder)) mkdir($folder);
else {/*take some appropriate action*/}
其他提示
您可以通过使用全局抑制错误消息(在配置时间或运行时)来停止错误消息显示 display_errors
设置,或通过情况下的情况将功能调用以 @
-特点。 (例如 @mkdir('...')
).
然后您可以检查 error_get_last
什么时候 mkdir
返回 false
.
为了进行错误记录全局规则。您可以手动记录错误 error_log
.
要进一步阅读,请参见有关的手册部分 错误处理.
编辑:
正如评论中建议的那样,自定义错误处理程序也是一种可能的,可以说是更健壮的(取决于您的实现),但肯定会更优雅,解决方案。
function err_handler($errno, $errstr) {
// Ignore or log error here
}
set_error_handler('err_handler');
这样,除非您明确回声,否则错误消息将不会显示。但是请注意,使用自定义错误处理程序时 error_get_last
将返回 NULL
.
您可以使用这样的类重写任何系统调用功能:
file: system.php
namespace abc;
class System {
const CAN_NOT_MAKE_DIRECTORY = 1;
static public function makeDirectory($path) {
$cmd = "mkdir " . $path;
$output = \shell_exec($cmd . " 2>&1"); // system call
if ($output != "") {
throw new \Exception($output, System::CAN_NOT_MAKE_DIRECTORY);
}
return(\TRUE);
}
}
然后,您可以调用该方法并拦截例外:
file: index.php
namespace abc;
require 'system.php';
try {
System::makeDirectory($directoryName);
} catch (\Exception $e) {
throw new \Exception($e->getMessage(), System::CAN_NOT_MAKE_DIRECTORY);
}
现在您可以用 try {...} catch(...) {...} finally {...}
一般。
不隶属于 StackOverflow