[英]Php mkdir( ) exception handling
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
设置全局抑制错误消息(在config或运行时)来停止显示错误消息,或者通过在函数调用前加上@
-character前缀来逐个显示错误消息。 (例如@mkdir('...')
)。
然后,当mkdir
返回false
时,您可以使用error_get_last
进行检查。
对于错误记录,应用全局规则。 您可以使用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 {...}
正常处理所有系统错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.