PHP mkdir() 异常处理

发布于 2024-08-30 04:27:52 字数 121 浏览 5 评论 0原文

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

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

mkdir() is working correctly this question is more about catching an error. Instead of printing this when the directory exists I would just like to have it write to a message to me in a custom log. How do I create this exception.

Warning: mkdir() [function.mkdir]: File exists

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

丑丑阿 2024-09-06 04:27:52

我只想让它在自定义日志中写入一条消息给我。

解决办法很简单。 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*/}

I would just like to have it write to a message to me in a custom log.

the solution is very easy. PHP already have everything for you:

ini_set('display_errors',0);
ini_set('log_errors',1);
ini_set('error_log','/path/to/custom.log');

or same settings in the php.ini or .htaccess
I think it would be better than write each possible error manually

If you don't want this error to be logged (as it may be not error but part of application logic), you can check folder existence first

if (!file_exists($folder)) mkdir($folder);
else {/*take some appropriate action*/}
所谓喜欢 2024-09-06 04:27:52

您可以通过使用 display_errors 设置,或者根据具体情况在函数调用前添加 @ 字符。 (例如@mkdir('...'))。

然后,您可以使用 error_get_lastmkdir返回false时。

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

如需进一步阅读,请参阅有关错误处理的手册部分。

编辑:

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

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

set_error_handler('err_handler');

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

You can stop the error message from displaying either by suppressing error messages globally (in config or runtime) with the display_errors setting, or case by case by prefixing the function call with an @-character. (E.g. @mkdir('...')).

You can then check with error_get_last when mkdir returns false.

For error logging global rules apply. You can log errors manually with error_log.

For further reading, see the manual section on Error handling.

Edit:

As suggested in the comments, a custom error handler is also a possible, arguably more robust (depending on your implementation) but certainly more elegant, solution.

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

set_error_handler('err_handler');

This way, the error message will not display, unless you explicitly echo it. Note, though, when using a custom error handler error_get_last will return NULL.

花想c 2024-09-06 04:27:52

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

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

You can rewrite any system call function with a class like this:

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);
    }

}

Then you can call the method and intercept the exception:

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);
} 

Now you can treat all the system errors with the try {...} catch(...) {...} finally {...} normally.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文