我无法弄清楚应用程序的退出位置。我宁愿不打算使用调试器,并且为每个文件添加declare(ticks=1);
会很痛苦(我不想处理sed)。有人问过类似的问题,但没有这些限制。
如何确定代码退出的位置?
虽然这个问题类似于Fastest way to determine where PHP script exits,但我想找到一个没有调试器的解决方案。我知道如何使用调试器执行此操作,但我并不总是能够访问这些工具。
答案 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(捕获致命错误),然后在任何退出语句之前注入一个注释。