退出前触发功能

Bon*_*Oak 10 php debian dhtmlx-scheduler

我在前端使用DHTMLX Scheduler,在后端使用DHTMLX Connector作为我的无线电自动化应用程序的一部分.每次用户编辑日历时,都会对一个如下所示的文件进行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");
Run Code Online (Sandbox Code Playgroud)

这个文件是我的"垫片",它将前端连接到后端.我想运行另一个PHP脚本,将更改写入我的crontab,但它需要在DHTMLX库更新数据库之后发生.麻烦的是,DHTMLX库会在它认为完成时自动退出:有时它可能不会越过第一require_once('...')行,所以我不能只放在require_once('cronwriter.php');脚本的最后一行.

我的解决方案是创建一个带有析构函数的类,该类使用最新的更改来更新crontab.由于php手册指出如果调用exit()或die()函数仍将运行析构函数,我添加了一个带有运行cronwriter.php脚本的析构函数的虚拟类:(我将其添加到文件的开头.)

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

出于某种原因,它不起作用.

cha*_*lle 2

register_shutdown_function可以提供一个快速的解决方案;但是,您可以通过检查该库偶发的进程停止的原因来为自己节省一些未来的麻烦。

一个好的起点可能是......

  • 你的浏览器的 JS控制台用于 JS 错误
  • 您的 JS 控制台的网络选项卡是否存在 AJAX 错误
  • 服务器的 PHP 错误的错误日志