[php] var_dump의 결과를 문자열로 캡처하려면 어떻게해야합니까?

var_dump문자열 의 출력을 캡처하고 싶습니다 .

PHP 문서는 말합니다;

결과를 브라우저에 직접 출력하는 것과 마찬가지로 출력 제어 기능 을 사용하여이 기능의 출력을 캡처하고이를 문자열로 저장할 수 있습니다 (예 :).

그것이 어떻게 작동하는지에 대한 예는 무엇입니까?

print_r() 필요한 정보를 제공하지 않기 때문에 유효한 가능성이 아닙니다.



답변

출력 버퍼링을 사용하십시오.

<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>


답변

시험 var_export

체크 아웃하고 싶을 수도 있지만 두 번째 매개 변수를 var_export제공하는 것과 동일한 출력을 제공하지는 않지만 출력하지 않고 출력을 반환합니다.var_dump$return

$debug = var_export($my_var, true);

왜?

이 one-liner를 ob_startand 사용하는 것이 ob_get_clean()좋습니다. 또한 출력은 PHP 코드이기 때문에 조금 더 읽기 쉽습니다.

의 차이 var_dump와는 var_exportvar_export리턴한다 “변수의 구문 분석 문자열 표현” 동안 var_dump단순히 변수에 대한 정보를 덤프합니다. 이것이 실제로 의미하는 것은 var_export유효한 PHP 코드 를 제공 한다는 것입니다 (그러나 특히 리소스를 사용하는 경우 변수에 대한 많은 정보를 제공하지 못할 수 있습니다 ).

데모:

$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 ( $debug_export위 예에서) :

 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위 예에서) :

 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위 예에서) :

Array
(
    [bool] =>
    [int] => 1
    [float] => 3.14
    [string] => hello world
    [array] => Array
        (
        )

    [object] => stdClass Object
        (
        )

    [resource] => Resource id #4
    [null] =>
)

주의 사항 : var_export순환 참조를 처리하지 않습니다

순환 참조가있는 변수를 덤프하려고하면 호출 var_export하면 PHP 경고가 발생합니다.

 $circular = array();
 $circular['self'] =& $circular;
 var_export($circular);

결과 :

 Warning: var_export does not handle circular references in example.php on line 3
 array (
   'self' =>
   array (
     'self' => NULL,
   ),
 )

반면에 var_dumpprint_r, 둘 다 *RECURSION*순환 참조가 발생할 때 문자열을 출력합니다 .


답변

당신은 또한 이것을 할 수 있습니다 :

$dump = print_r($variable, true);


답변

serialize()기능 을 사용하려고 할 수도 있습니다. 때로는 디버깅 목적으로 매우 유용합니다.


답변

function return_var_dump(){
    // It works like var_dump, but it 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();
}


답변

또한 echo json_encode($dataobject);도움이 될 수 있습니다


답변

PHP 매뉴얼에서 :

이 함수는 유형과 값을 포함하는 하나 이상의 표현식에 대한 구조화 된 정보를 표시합니다.

다음은 실제로 PHP의 실제 리턴 버전이며 var_dump()가변 길이 인수 목록을 허용합니다.

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 '';
}