使用代码确定PHP的退出位置,而不是调试器

时间:2013-08-10 06:38:03

标签: php

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

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

澄清:

虽然这个问题类似于Fastest way to determine where PHP script exits,但我想找到一个没有调试器的解决方案。我知道如何使用调试器执行此操作,但我并不总是能够访问这些工具。

2 个答案:

答案 0 :(得分:1)

您无需为所有文件添加声明(刻度)。一个切入点就足够了:

<?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";

}

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

答案 1 :(得分: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(捕获致命错误),然后在任何退出语句之前注入一个注释。