退出php命令而不触发关闭功能

问题描述 投票:0回答:3

如何从 php 脚本退出(例如使用 exit() 函数),但不触发所有先前注册的关闭函数(使用 register_shutdown_function)?

谢谢!

编辑:或者,有没有办法清除所有注册的关闭功能?

php callback exit abort atexit
3个回答
7
投票

如果使用 SIGTERM 或 SIGKILL 信号终止进程,则不会执行关闭函数。

posix_kill(posix_getpid(), SIGTERM);

4
投票

不要直接使用register_shutdown_function。创建一个管理所有关闭功能并具有自己的功能和启用属性的类。

class Shutdown {

    private static $instance = false;
    private $functions;
    private $enabled = true;

    private function Shutdown() {
        register_shutdown_function(array($this, 'onShutdown'));
        $this->functions = array();
    }

    public static function instance() {
        if (self::$instance == false) {
            self::$instance = new self();
        }

        return self::$instance;
    }

    public function onShutdown() {
        if (!$this->enabled) {
            return;
        }

        foreach ($this->functions as $fnc) {
            $fnc();
        }
    }

    public function setEnabled($value) {
        $this->enabled = (bool)$value;
    }

    public function getEnabled() {
        return $this->enabled;
    }

    public function registerFunction(callable $fnc) {
        $this->functions[] = $fnc;
    }

}

0
投票

来自 https://www.php.net/manual/en/function.register-shutdown-function.php

如果您在一个已注册的关闭函数中调用 exit(),处理将完全停止,并且不会调用其他已注册的关闭函数。

使用以下代码将新处理程序添加到代码的最顶部:

exit();
© www.soinside.com 2019 - 2024. All rights reserved.