如何将var_dump的结果捕获到一个字符串中?

677
我想将var_dump的输出捕获到一个字符串中。
PHP文档中说:
引用: 与任何直接将结果输出到浏览器的内容一样,可以使用输出控制函数来捕获此函数的输出,并将其保存在一个字符串中(例如)。
那么,这可能是如何工作的一个例子呢? print_r()不是一个有效的选择,因为它不能给我所需的信息。

2
我知道时间有点过去了,但我在问题中读到了这句话:“不会给我我需要的信息”。因此,在问题中添加你需要的信息可能会很有用。 - Valerio Bozz
13个回答

1
我非常喜欢var_dump()的详细输出,不满意var_export()print_r()的输出,因为它没有提供足够多的信息(例如缺少数据类型、长度等)。
为了编写安全可预测的代码,有时区分空字符串和null很有用。或者区分1和true。或者区分null和false。因此,我希望在输出中包含我的数据类型。
虽然有帮助,但我没有找到现有响应中干净简单的解决方案,可以将var_dump()的彩色输出转换为人类可读的字符串输出,而不包括html标签,并包括var_dump()的所有细节。
请注意,如果您有一个彩色的var_dump(),这意味着您安装了Xdebug,它会覆盖php的默认var_dump()以添加html颜色。
基于这个原因,我创建了这个稍微变化的版本,正好满足我的需求:
function dbg_var_dump($var)
    {
        ob_start();
        var_dump($var);
        $result = ob_get_clean();
        return strip_tags(strtr($result, ['=>' => '=>']));
    }

返回以下漂亮的字符串:
array (size=6)
  'functioncall' => string 'add-time-property' (length=17)
  'listingid' => string '57' (length=2)
  'weekday' => string '0' (length=1)
  'starttime' => string '00:00' (length=5)
  'endtime' => string '00:00' (length=5)
  'price' => string '' (length=0)

希望它能帮助到某个人。

在2021年,对于调试应用程序错误日志记录,这是我认为最有用的答案。 - KingWigglett

-2

来自http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html

var_dump and print_r functions can only output directly to browser. So the output of these functions can only retrieved by using output control functions of php. Below method may be useful to save the output.

function assignVarDumpValueToString($object) {
    ob_start();
    var_dump($object);
    $result = ob_get_clean();
    return $result;
}

ob_get_clean() 只能清除最后输入到内部缓冲区的数据。因此,如果您有多个条目,则 ob_get_contents 方法将非常有用。

来自上述相同来源:

function varDumpToErrorLog( $var=null ){
    ob_start();                    // start reading the internal buffer
    var_dump( $var);          
    $grabbed_information = ob_get_contents(); // assigning the internal buffer contents to variable
    ob_end_clean();                // clearing the internal buffer.
    error_log( $grabbed_information);        // saving the information to error_log
}

1
请在引用其他来源的材料时正确标注。在我即将进行的编辑之前,这个答案中唯一格式化为引用的部分是你没有从某人的博客中复制和粘贴的部分。 - Mark Amery

-3

长字符串:只需使用echo($var);而不是dump($var);

对象数组var_dump('<pre>'.json_encode($var).'</pre>);'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接