如何从 php 脚本退出(例如使用 exit() 函数),但不触发所有先前注册的关闭函数(使用 register_shutdown_function)?
谢谢!
编辑:或者,有没有办法清除所有注册的关闭功能?
如果使用 SIGTERM 或 SIGKILL 信号终止进程,则不会执行关闭函数。
posix_kill(posix_getpid(), SIGTERM);
不要直接使用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;
}
}
来自 https://www.php.net/manual/en/function.register-shutdown-function.php
如果您在一个已注册的关闭函数中调用 exit(),处理将完全停止,并且不会调用其他已注册的关闭函数。
使用以下代码将新处理程序添加到代码的最顶部:
exit();