php - recorrer - var_dump($_post)
¿Cómo puedo capturar el resultado de var_dump a una cadena? (11)
Me gustaría capturar la salida de var_dump
a una cadena.
Los documentos de PHP dicen;
Al igual que con cualquier cosa que envíe su resultado directamente al navegador, las funciones de control de salida se pueden usar para capturar la salida de esta función y guardarla en una cadena (por ejemplo).
¿Puede alguien darme un ejemplo de cómo podría funcionar?
print_r()
no es una posibilidad válida porque no me dará la información que necesito.
Prueba var_export
Es posible que desee revisar var_export
: aunque no proporciona la misma salida que var_dump
, sí proporciona un segundo parámetro $return
que hará que devuelva su salida en lugar de imprimirla:
$debug = var_export($my_var, true);
¿Por qué?
Yo prefiero este one-liner a usar ob_start
y ob_get_clean()
. También encuentro que la salida es un poco más fácil de leer, ya que es solo el código PHP.
La diferencia entre var_dump
y var_export
es que var_export
devuelve una "representación de cadena analizable de una variable", mientras que var_dump
simplemente descarga información sobre una variable. Lo que esto significa en la práctica es que var_export
le proporciona un código PHP válido (pero puede que no le brinde tanta información sobre la variable, especialmente si está trabajando con resources ).
Manifestación:
$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);
La diferencia en la salida:
var_export ( $debug_export
en el ejemplo anterior):
array (
''bool'' => false,
''int'' => 1,
''float'' => 3.1400000000000001,
''string'' => ''hello world'',
''array'' =>
array (
),
''object'' =>
stdClass::__set_state(array(
)),
''resource'' => NULL, // Note that this resource pointer is now NULL
''null'' => NULL,
)
var_dump ( $debug_dump
en el ejemplo anterior):
array(8) {
["bool"]=>
bool(false)
["int"]=>
int(1)
["float"]=>
float(3.14)
["string"]=>
string(11) "hello world"
["array"]=>
array(0) {
}
["object"]=>
object(stdClass)#1 (0) {
}
["resource"]=>
resource(4) of type (stream)
["null"]=>
NULL
}
print_r ( $debug_printr
en el ejemplo anterior):
Array
(
[bool] =>
[int] => 1
[float] => 3.14
[string] => hello world
[array] => Array
(
)
[object] => stdClass Object
(
)
[resource] => Resource id #4
[null] =>
)
Advertencia: var_export
no maneja referencias circulares
Si está intentando volcar una variable con referencias circulares, llamar a var_export
dará como resultado una advertencia de PHP:
$circular = array();
$circular[''self''] =& $circular;
var_export($circular);
Resultados en:
Warning: var_export does not handle circular references in example.php on line 3
array (
''self'' =>
array (
''self'' => NULL,
),
)
Tanto var_dump
como print_r
, por otro lado, emitirán la cadena *RECURSION*
cuando encuentren referencias circulares.
Aquí está la solución completa como función.
function varDumpToString ($var)
{
ob_start();
var_dump($var);
return ob_get_clean();
}
De http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
Las funciones var_dump y print_r solo pueden enviarse directamente al navegador. Por lo tanto, la salida de estas funciones solo puede recuperarse utilizando las funciones de control de salida de php. El siguiente método puede ser útil para guardar la salida.
function assignVarDumpValueToString($object) { ob_start(); var_dump($object); $result = ob_get_clean(); return $result; }
ob_get_clean () solo puede borrar los últimos datos ingresados al búfer interno. Por lo tanto, el método ob_get_contents será útil si tiene varias entradas.
De la misma fuente que arriba:
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 }
Esto tal vez un poco fuera de tema.
Estaba buscando una manera de escribir este tipo de información en el registro de Docker de mi contenedor PHP-FPM y apareció el fragmento de código a continuación. Estoy seguro de que esto puede ser utilizado por los usuarios de Docker PHP-FPM.
fwrite(fopen(''php://stdout'', ''w''), var_export($object, true));
Si desea ver un contenido de variables durante el tiempo de ejecución, considere usar un depurador real como XDebug. De esa manera, no necesita desordenar su código fuente y puede usar un depurador incluso cuando los usuarios normales visitan su aplicación. Ellos no se darán cuenta.
Soy consciente de que esta pregunta es antigua, pero nadie mencionó este punto.
Del manual de PHP :
Esta función muestra información estructurada sobre una o más expresiones que incluye su tipo y valor.
Por lo tanto, aquí está la versión de retorno real de var_dump()
de PHP, que en realidad acepta una lista de argumentos de longitud variable.
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 '''';
}
Aclamaciones.
También echo json_encode($dataobject);
podría ser útil
También podrías hacer esto:
$dump = print_r($variable, true);
También puede intentar usar la función serialize()
, a veces es muy útil para depurar puprpose.
Utilice el búfer de salida:
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
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();
}