Функция триггера непосредственно перед выходом

Я использую DHTMLX Scheduler на интерфейсе и коннектор DHTMLX на бэкэнд как часть моего приложения для автоматизации радио. Каждый раз, когда пользователь редактирует календарь, вызов AJAX выполняется в файл, который выглядит следующим образом:

require_once("dhtmlxScheduler_v4/connector/scheduler_connector.php");
require_once('QDRAconf.php');

$res = mysql_connect($QDRAconf['mysqlHost'], $QDRAconf['mysqlUser'], $QDRAconf['mysqlPass']);
mysql_select_db($QDRAconf['mysqlDb']);

// init the schedulerconnector
$conn = new SchedulerConnector($res);

// render the table
$conn->render_table("events","id","start_date,end_date,text");

Этот файл является моей "прокладкой", которая соединяет фронт с задним концом. Я хочу запустить еще один PHP script, который записывает изменения в мой crontab, но это должно произойти после того, как библиотека DHTMLX обновила базу данных. Проблема заключается в том, что библиотека DHTMLX автоматически выйдет, когда она сочтет это возможным: иногда она может не пройти первую строку require_once('...'), поэтому я не могу просто поместить require_once('cronwriter.php'); в последнюю строку script.

Моим решением было создать класс с деструктором, который обновляет crontab с последними изменениями. Поскольку в справочнике php указано, что деструкторы будут выполняться, если вызывается функция exit() или die(), я добавил фиктивный класс с destructor, который запускает cronwriter.php script: (я добавил это в начало файла.)

class ExitCatcher
{
    function __destruct()
    {
        require_once('cronwriter.php');
    }
}
//init the class
$ExitCatcher = new ExitCatcher;

По какой-то причине он не работает.

Ответ 1

register_shutdown_function может предложить быстрое решение; но вы можете сэкономить некоторые будущие проблемы, проверив причину этого синхронного процесса.

Хорошее место для начала может быть...

  • ваш браузер JS console для ошибок JS
  • вкладка вашей консоли консоли JS для ошибок AJAX
  • журналы ошибок сервера для ошибок PHP