Php mkdir()异常处理

时间:2010-04-21 07:00:38

标签: php exception-handling mkdir

mkdir()工作正常这个问题更多的是关于捕获错误。当目录存在时,我只想让它在自定义日志中写入给我的消息,而不是打印它。如何创建此例外。

警告:mkdir()[function.mkdir]:文件存在

3 个答案:

答案 0 :(得分:10)

  

我只想在自定义日志中写信给我。

解决方案非常简单。 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*/}

答案 1 :(得分:3)

您可以使用以下类重写任何系统调用函数:

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 {...}处理所有系统错误。

答案 2 :(得分:2)

您可以通过使用display_errors设置全局(在配置或运行时)抑制错误消息来停止显示错误消息,或者通过在函数调用前加上@前缀来逐个显示错误消息。 。 (例如@mkdir('...'))。

mkdir返回false时,您可以使用error_get_last查看。

对于错误记录,应用全局规则。您可以使用error_log手动记录错误。

如需进一步阅读,请参阅Error handling上的手册部分。

编辑:

正如评论中所建议的那样,自定义错误处理程序也是可能的,可以说更强大(取决于您的实现),但肯定更优雅,解决方案。

function err_handler($errno, $errstr) {
    // Ignore or log error here
}

set_error_handler('err_handler');

这样,除非您明确地回显错误消息,否则不会显示错误消息。但请注意,使用自定义错误处理程序error_get_last时将返回NULL