我正在尝试一种使用 PHP 更轻松地调试 Cronjob 脚本的方法。无需在服务器上访问 xdebug 等。
为此,我想获取代码输入的嵌套结构的数量。我将在代码中将其称为NESTING。
据我所知,至少有两种方法以某种方式使用嵌套级别。
打破$n; 逃脱 $n 嵌套。goto 不允许进入更深的。
<?php
print(__NESTING__);// 1
for($i=0;$i<10;$i++){
print(__NESTING__);// 2
}
print(__NESTING__);// 1
die;
背景:
这应该适用于 PHP > 5.3 + 7 到目前为止,我尝试用谷歌搜索最接近主题的是:
ob_get_level()
代码示例:
到目前为止的调试器想法:
argv[1]='somefile.php;'
<?php
$script=fopen(argv[1],'rb');
$tfilename='T'.substr(md5(mt_rand()), 0, 7).argv[1];//some random name
$tscript=fopen($tfilename,'wb+');
fputs($tscript,fgets($script).' $next_line=0;$nest_limit=1;'); //<?php +ini
$line_num=0;
while($line=fgets($script)){
$line='L'.($line_num++).': '.
'if((__LINE__>$next_line)&&(__NESTING__<=$nest_limit)){'.
'print("Line".__LINE__.date('r'));eval(rtrim(fgets(STDIN)));'.
'}'.$line;
fputs($tscript,$line);
}
fclose($tscript);
fclose($script);
print('debug script?');
while(rtrim(fgets(STDIN))==='y'){
try{include $tfilename;}catch(Exeption $e){print($e->getMessage());}
print('repeat?');
}
unlink($tfilename);
die;
因此可以执行脚本、跳过调试行、跳过循环、返回一行、使用特殊值测试脚本行为、打印变量等。
PS:我没有测试代码是否有错误,所以它可能无法运行它来解释这个想法和我需要什么
__NESTING__
为了。
编辑1:预期输出:
Line0 10:00:20 \\ press enter
Line1 10:00:20 \\ input: $next_line=10;
Line10 10:00:20 \\ enter
Line11 10:01:10 \\ someting takes a lot of time
PHP FATAL ERROR...
2cond try
Line0 10:01:15 \\ input $next_line=11
Line11 10:02:20 \\ input var_dump($something)
感谢任何指点,干杯
PS.:感谢橡皮鸭调试。注意到我只需要将 $next_line 设置为循环之后。仍然如果有人知道如何获得如此嵌套级别会很高兴知道