脚本超时的 Final 子句替代方案

发布于 2024-11-07 19:50:44 字数 171 浏览 1 评论 0原文

我正在训练一个 PHP 脚本作为一个表现良好的 cron 作业运行。为了避免无限循环等,我添加了 set_time_limit

据我所知,PHP 没有finally 子句功能。我希望有这样的功能来清理,比如在达到时间限制时取消链接文件。

实现这一目标的替代方法是什么?

I'm training a PHP script to run as a well behaved cron job. To escape infinite loops and such I've added set_time_limit.

As far as I know there is not finally clause functionality for PHP. I would like to have such functionality to cleanup, like unlinking files when the time limit is reached.

What would be an alternative way to accomplish this?

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

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

发布评论

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

评论(2

墨小沫ゞ 2024-11-14 19:50:44

布鲁斯·奥尔德里奇已经回答了如何到达。
我向您展示另一种方式:RAII 模式(并不是说更好或更坏)
示例:

class AutoUnlinker
{
    private $files;

    public function OpenFile($filepath, $mode)
    {
        $handler = fopen($filepath, $mode);
        $this->files[$filepath] = $handler;
        return $handler;
    }

    public function __destruct()
    {
        if (!empty($this->files))
        {
            foreach ($this->files as $filepath => $handler)
            {
                if (!empty($handler)) fclose($handler);
                if (file_exists($filepath)) unlink($filepath);
            }
        }
    }
}

如果此类将用于打开文件,则所有文件都将在脚本终止时关闭并取消链接。这个例子专门针对您的问题 - 通常使用 1 个对象来访问 1 个资源。

Bruce Aldridge already answered, how it can be reached.
I show you another way: RAII pattern (not to say that is better or worse)
Example:

class AutoUnlinker
{
    private $files;

    public function OpenFile($filepath, $mode)
    {
        $handler = fopen($filepath, $mode);
        $this->files[$filepath] = $handler;
        return $handler;
    }

    public function __destruct()
    {
        if (!empty($this->files))
        {
            foreach ($this->files as $filepath => $handler)
            {
                if (!empty($handler)) fclose($handler);
                if (file_exists($filepath)) unlink($filepath);
            }
        }
    }
}

If this class will be used for opening files, all files will be closed and unlinked on script termination. This example specially for your question - usually 1 object being used to give access to 1 resource.

半城柳色半声笛 2024-11-14 19:50:44

http://php.net/manual/en/function.register-shutdown -function.php

实际上,这不会在脚本超时时运行。
并且最好在代码中处理无限循环的捕获。

http://php.net/manual/en/function.register-shutdown-function.php

actually, this won't run on script timeout.
and it would be better to handle catches for infinite loops in the code.

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