2013-02-19 2 views
0

Как я могу выйти из php-скрипта (например, с помощью функции exit()), но без запуска всех ранее зарегистрированных функций выключения (с register_shutdown_function)?Выход из команды php без запуска функций выключения

Спасибо!

EDIT: альтернативно, есть ли способ очистить от всех зарегистрированных функций выключения?

+0

Убедитесь, что первая зарегистрированная завершающая функция содержит путь, который вызывает выход() –

+0

я работаю с очень сложной системой, и я на самом деле не знаю, что является первой зарегистрирован функцией отключения. Я просто хотел бы выйти, не вызывая функции выключения, поэтому я могу легко отлаживать. – fstab

+2

Если вы хотите легко отлаживать, используйте отладчик (например, xdebug), где вы можете установить контрольные точки и проверить значения и т. Д. –

ответ

4

Функции выключения не будут выполняться, если процесс был убит сигналом SIGTERM или SIGKILL.

posix_kill(posix_getpid(), SIGTERM); 
2

Не используйте функцию register_shutdown_function напрямую. Создайте класс, который управляет всеми функциями выключения и имеет свою собственную функцию и свойство enable.

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

} 
Смежные вопросы