用phpdbg调试codeigniter

用phpdbg调试codeigniter,php,codeigniter,phpdbg,Php,Codeigniter,Phpdbg,我正在尝试调试一个基于CodeIgniter(2.x)框架的web应用程序。我尝试了var_转储$_服务器,并在调试会话(引导phpdbg)开始时重新创建它 但是它给了我一个404。即使通过浏览器请求页面也会得到正确的结果。有人能告诉我如何正确引导phpdbg,使其在codeigniter中加载正确的页面吗?这是我的引导代码,如果有帮助的话 <?php $_SERVER = array ( 'HTTP_USER_AGENT' => 'Mozilla/5.0 (X11; Ubu

我正在尝试调试一个基于CodeIgniter(2.x)框架的web应用程序。我尝试了var_转储$_服务器,并在调试会话(引导phpdbg)开始时重新创建它

但是它给了我一个404。即使通过浏览器请求页面也会得到正确的结果。有人能告诉我如何正确引导phpdbg,使其在codeigniter中加载正确的页面吗?这是我的引导代码,如果有帮助的话

<?php
$_SERVER = array (
    'HTTP_USER_AGENT' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 38.0) Gecko/20100101 Firefox/38.0',
    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5',
    'HTTP_ACCEPT_ENCODING' => 'identity,gzip,deflate',
    'HTTP_CONNECTION' => 'keep-alive',
    'PATH' => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
    'SERVER_SIGNATURE' => '<address>Apache/2.4.12 (Ubuntu) Server at api.timzwart.local.mybit.nl Port 80</address>',
    'SERVER_SOFTWARE' => 'Apache/2.4.12 (Ubuntu)',
    'SERVER_NAME' => 'api.timzwart.local.mybit.nl',
    'SERVER_ADDR' => '192.168.1.35',
    'SERVER_PORT' => '80',
    'REMOTE_ADDR' => '192.168.1.35',
    'DOCUMENT_ROOT' => '/var/www/vhosts/api.timzwart.local.mybit.nl',
    'REQUEST_SCHEME' => 'http',
    'CONTEXT_PREFIX' => '',
    'CONTEXT_DOCUMENT_ROOT' => '/var/www/vhosts/api.timzwart.local.mybit.nl',
    'SERVER_ADMIN' => 'webmaster@localhost',
    'SCRIPT_FILENAME' => '/var/www/vhosts/api.timzwart.local.mybit.nl/index.php',
    'REMOTE_PORT' => '40706',
    'GATEWAY_INTERFACE' => 'CGI/1.1',
    'SERVER_PROTOCOL' => 'HTTP/1.0',
    'REQUEST_METHOD' => 'GET',
    'QUERY_STRING' => '',
    'REQUEST_URI' => '/events/185151',
    'SCRIPT_NAME' => '/index.php',
    'PATH_INFO' => '/events/185151',
    'PATH_TRANSLATED' => 'redirect:/index.php/events/185151/185151',
    'PHP_SELF' => '/index.php/events/185151',
    'REQUEST_TIME_FLOAT' => 1435128205.281,
    'REQUEST_TIME' => 1435128205,
    'REDIRECT_URL' => '/events/185151',
    'REQUEST_URI' => '/events/185151',
    'argv' => array('events','185151'),
);
?>
“恩我们,恩;q=0.5’,
'HTTP_ACCEPT_ENCODING'=>'identity,gzip,deflate',
“HTTP_连接”=>“保持活动状态”,
'路径'=>'/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/sbin:/bin',
'SERVER_SIGNATURE'=>'位于api.timzwart.local.mybit.nl端口80'的Apache/2.4.12(Ubuntu)服务器,
“服务器软件”=>“Apache/2.4.12(Ubuntu)”,
'服务器名称'=>'api.timzwart.local.mybit.nl',
“服务器地址”=>“192.168.1.35”,
“服务器端口”=>“80”,
“远程地址”=>“192.168.1.35”,
'DOCUMENT_ROOT'=>'/var/www/vhosts/api.timzwart.local.mybit.nl',
“请求\u方案”=>“http”,
'上下文前缀'=>'',
'CONTEXT_DOCUMENT_ROOT'=>'/var/www/vhosts/api.timzwart.local.mybit.nl',
'服务器管理'=>'webmaster@localhost',
'SCRIPT_FILENAME'=>'/var/www/vhosts/api.timzwart.local.mybit.nl/index.php',
“远程_端口”=>“40706”,
“网关接口”=>“CGI/1.1”,
“服务器_协议”=>“HTTP/1.0”,
'请求\方法'=>'获取',
'查询字符串'=>'',
'请求URI'=>'/events/185151',
'SCRIPT_NAME'=>'/index.php',
'路径信息'=>'/events/185151',
'PATH_TRANSLATED'=>'重定向:/index.php/events/185151/185151',
'PHP_SELF'=>'/index.PHP/events/185151',
“请求时间浮动”=>1435128205.281,
“请求时间”=>1435128205,
'REDIRECT_URL'=>'/events/185151',
'请求URI'=>'/events/185151',
'argv'=>array('events','185151'),
);
?>

那么,您可以随时检查从phpdbg cli打印该常量,并查看其是否已定义。您必须开始在codeigniter代码上创建中断。。查找文件:返回404并在其中或之前添加一个中断的行,然后一步一步地进行,如果缺少某些内容,您将发现。

如果您可以编辑框架本身的版本,一个可能的解决方案是查找所有引用输入法的行,并编辑这些行以接受一些伪造的调试常量。它变成这样。然后,您可以在实际调试之前,在phpdbg中使用ev设置常量

system/core/Input.php:      return (!defined('DEBUGGING_FAKE_WEBREQUEST') AND (php_sapi_name() === 'cli' OR defined('STDIN')));
system/core/URI.php:            if (!defined('DEBUGGING_FAKE_WEBREQUEST') AND (php_sapi_name() == 'cli' or defined('STDIN')))

您的引导文件检索调试会话配置,您仍然需要exec index.php,然后是run命令。我要做的是从实际会话中捕获一个$_服务器并将其用作引导。phpI使用了-e命令行开关,因此执行上下文已经设置好(因此不需要使用exec)。这适用于codeigniter cli程序,但不适用于此web应用程序。实际上,这个$\u服务器也几乎是从真实会话复制的,但这对我来说并不适用。我向它添加了argv,因为REQUEST_URI没有像通常那样用于路由。你是否尝试设置其余的全局变量?也许代码点火器使用$\u REQUEST/$\u POST/$\u GET。我设置了所有这些以及工程!我通常执行$\u服务器转储+打印(get\u defined\u vars(),1);有了这些变量,我确信我拥有了我所需要的一切。不,这不是其中之一,我认为它没有使用它们,但它可能与codeigniter中的config.php有关。如何确保未定义STDIN onstant?此常量由CLI sapi定义。当然,在执行web请求时没有定义。codeigniter检查这个。理论上,我可以用runkit扩展重新定义它,但在实践中,这可能意味着重新编译php,我在这方面遇到了很多麻烦。
system/core/Input.php:      return (!defined('DEBUGGING_FAKE_WEBREQUEST') AND (php_sapi_name() === 'cli' OR defined('STDIN')));
system/core/URI.php:            if (!defined('DEBUGGING_FAKE_WEBREQUEST') AND (php_sapi_name() == 'cli' or defined('STDIN')))