繁体   English   中英

Php mkdir()异常处理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM