How can I capture the result of var_dump to a string?
我想把
php文档说:
As with anything that outputs its result directly to the browser, the output-control functions can be used to capture the output of this function, and save it in a string (for example).
有人能给我举一个例子说明这可能是如何工作的吗?
试试
您可能希望签出
1 |
为什么?
我更喜欢这一行,而不是使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $demo = array( "bool" => false, "int" => 1, "float" => 3.14, "string" =>"hello world", "array" => array(), "object" => new stdClass(), "resource" => tmpfile(), "null" => null, ); // var_export -- nice, one-liner $debug_export = var_export($demo, true); // var_dump ob_start(); var_dump($demo); $debug_dump = ob_get_clean(); // print_r -- included for completeness, though not recommended $debug_printr = print_r($demo, true); |
输出差异:var_export(上述示例中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var_dump(上述示例中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
打印(上例中的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
警告:
如果试图用循环引用转储变量,调用
1 2 3 |
结果:
1 2 3 4 5 6 7 | Warning: var_export does not handle circular references in example.php on line 3 array ( 'self' => array ( 'self' => NULL, ), ) |
另一方面,当遇到循环引用时,
使用输出缓冲:
1 2 3 4 5 |
你也可以这样做:
1 |
您也可以尝试使用
1 2 3 4 5 6 7 | function return_var_dump(){ //works like var_dump, but returns a string instead of printing it. $args=func_get_args(); //for <5.3.0 support ... ob_start(); call_user_func_array('var_dump',$args); return ob_get_clean(); } |
另外,
我知道这个问题由来已久,但没有人提到这一点。
从PHP手册:
This function displays structured information about one or more expressions that includes its type and value.
所以,这里是php的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function var_dump_str() { $argc = func_num_args(); $argv = func_get_args(); if ($argc > 0) { ob_start(); call_user_func_array('var_dump', $argv); $result = ob_get_contents(); ob_end_clean(); return $result; } return ''; } |
干杯。
如果您想在运行时查看变量的内容,可以考虑使用像xdebug这样的真正的调试器。这样,您就不需要把源代码弄乱,甚至在普通用户访问您的应用程序时也可以使用调试器。他们不会注意到的。
以下是完整的功能解决方案。
1 2 3 4 5 6 |
这可能有点离题。
我正在寻找一种方法,将这种信息写到我的php-fpm容器的docker日志中,并得出下面的代码片段。我相信Docker PHP-FPM用户可以使用它。
1 |
我真的很喜欢
为了编写安全和可预测的代码,有时区分空字符串和空字符串很有用。或者介于1和1之间。或者介于零和假之间。所以我想在输出中输入我的数据类型。
虽然有帮助,但在现有的响应中,我没有找到一个干净而简单的解决方案来将
注意,如果你有一个彩色的
出于这个原因,我创造了这个微小的变化,给出了我所需要的:
1 2 3 4 5 6 7 | function dbg_var_dump($var) { ob_start(); var_dump($var); $result = ob_get_clean(); return strip_tags(strtr($result, ['=>' => '=>'])); } |
返回下面的尼斯字符串:
1 2 3 4 5 6 7 | 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) |
希望它能帮助别人。
从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.
1
2
3
4
5
6 function assignVarDumpValueToString($object) {
ob_start();
var_dump($object);
$result = ob_get_clean();
return $result;
}
ob_get_clean()只能清除最后输入到内部缓冲区的数据。所以如果您有多个条目,ob-get-contents方法将非常有用。
与上述来源相同:
1
2
3
4
5
6
7 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
}