代码之家  ›  专栏  ›  技术社区  ›  BonsaiOak

退出前的触发函数

  •  10
  • BonsaiOak  · 技术社区  · 12 年前

    我正在使用 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脚本,将更改写入我的crontab,但需要这样做 之后 DHTMLX库已更新数据库。问题是,只要DHTMLX库认为完成了,它就会自动退出:有时它可能无法通过第一个 require_once('...') 所以我不能放 require_once('cronwriter.php'); 在脚本的最后一行。

    我的解决方案是创建一个带有析构函数的类,用最新的更改更新crontab。自php手册 states that 如果调用exit()或die()函数,析构函数仍将运行,我添加了一个带有析构函数的伪类 cronwriter.php 脚本:(我将其添加到文件的开头。)

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

    由于某种原因,它不起作用。

    1 回复  |  直到 12 年前
        1
  •  2
  •   chaseisabelle    12 年前

    register_shutdown_function 可以提供快速解决方案;但是,您可以通过检查该库偶尔出现的进程中断的原因来为自己节省一些将来的麻烦。

    一个好的开始可能是。。。

    • 浏览器的JS console 对于JS错误
    • AJAX错误的JS控制台网络选项卡
    • PHP错误的服务器错误日志
    推荐文章