7

我无法弄清楚应用程序退出的位置。我宁愿不打扰调试器,并且添加declare(ticks=1);到每个文件中会很痛苦(我没有心情处理 sed)。有人提出了类似的问题,但没有这些限制。

如何确定代码退出的位置?

澄清:

虽然这个问题类似于Fastest way to determine where PHP script exits,但我想找到一个无需调试器即可工作的解决方案。我知道如何使用调试器来做到这一点,但我并不总是可以使用这些工具。

4

2 回答 2

1

您不需要将 declare(ticks) 添加到所有文件中。一个入口点就足够了:

<?php
function my_tick()
{
    echo 'tick';
}

register_tick_function('my_tick');
declare (ticks=1)
{
    include("lib.php");
    echo "1";
    test();
}

和 lib.php:

<?php

echo "2";

function test(){

  echo "3";

}

当您正在寻找基于代码的解决方案时,我假设您的资源确实提供了单一入口点。

于 2013-08-10T07:54:32.410 回答
1

我通常使用一个变量来检测我的代码来记录事件,然后通过注册一个关闭函数来决定在退出点做什么:

class flightRecoder {
   var $data;
   var $err;
   function __constructor() {
     $this->data=array();
   }
   function error($errno, $errstr, $errfile, $errline)
   {
      if ($this->err<$errno) {
         $this->err=$errno;
      }
      $this->note("ERROR! $errno $errstr", $errfile, $errline);
   }
   function note($note, $infile, $atline) {
      $this->data[]="$note in $infile at $atline";
   }
   function finish() {
       if ($this->errno || rand(1,20)==19) {
           ....
       }
   }
}
$log=new flightRecorder();
register_shutdown_function(array($log, 'finish'));
set_error_handler(array($log, 'error'));

在您的情况下,只需确保启用了 error_logging (以捕获致命错误),然后在任何退出语句之前注入注释。

于 2013-08-11T00:05:31.757 回答