我有一个在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;");
}
有更好的方法吗?