将全局变量导出到有效的PHP文件以获得可重现性

时间:2014-02-23 07:57:12

标签: php debugging webserver

我有一个在PHP上运行的Web应用程序。它有时会有错误,我想 能够通过CLI SAPI在本地重现特定请求。我的方式 想象这样做是这样的:

<?php
// index.php
if (!empty($_GET["export_for_debug"]) && DEBUG_MODE) {
    file_put_contents("request.dat", serialize(get_defined_vars()));
}

// resume normal execution

这不适用于任何面向公众的功能,只是为了允许重现 请求使用phpdbg或类似的调试。

但是,我无法将请求变量提取到当前 全球性的。

<?php
// test_request.php

// get the request variables
$vars = unserialize(file_get_contents("request.dat"));

// this doesn't work
extract($vars);

// neither does this
foreach ($vars as $key => $val) {
    $$key = $val;
}

tl; dr:如何提取如下所示的数组:

array("_SERVER" => array("foo" => "bar"))

进入当前范围?


编辑:

我明白了。你可以覆盖全局变量,但似乎代码需要 eval'd。经过一些试验和错误,这就是我得到的:

<?php

// get the request variables
$vars = unserialize(file_get_contents("request.dat"));

foreach ($vars as $key => $val) {
    eval("\${$key} = \$val;");
}

有更好的方法吗?

0 个答案:

没有答案