답변:
출력 버퍼링을 사용하십시오.
<?php
ob_start();
var_dump($someVar);
$result = ob_get_clean();
?>
strip_tags()
.
var_export
체크 아웃하고 싶을 수도 있지만 두 번째 매개 변수를 var_export
제공하는 것과 동일한 출력을 제공하지는 않지만 출력하지 않고 출력을 반환합니다.var_dump
$return
$debug = var_export($my_var, true);
이 one-liner를 ob_start
and 사용하는 것이 ob_get_clean()
좋습니다. 또한 출력은 PHP 코드이기 때문에 조금 더 읽기 쉽습니다.
의 차이 var_dump
와는 var_export
즉 var_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);
$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,
)
$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
}
$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_dump
와 print_r
, 둘 다 *RECURSION*
순환 참조가 발생할 때 문자열을 출력합니다 .
int(1)
var_export 가 인쇄 되는 동안 인쇄됩니다 1
.
var_export
브라우저 검색 (int)
또는 (문자열)`등 을 수행 할 수 없기 때문에 실제로 디버깅에 더 좋지 않습니다 . 또한 많은 정보를 작은 공간으로 엉망으로 만들면 var_export(''); var_export('\'');
됩니다. 그리고 가장 중요한 것은 PHP 치명적 오류 : 중첩 수준이 너무 깊습니다. C : \ path \ file.php에서 75 행
이 serialize()
기능 을 사용하려고 할 수도 있습니다. 때로는 디버깅 목적으로 매우 유용합니다.
error_log
serialize의 출력에 null 바이트가 포함될 수 있고 null 바이트가 포함 된 error_log
문자열이 잘릴 수 있으므로이 솔루션을 사용하지 않아야 합니다 .
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);
도움이 될 수 있습니다
json_encode
모든 데이터 var_dump
가 포함 되지는 않습니다 (예를 들어 변수 유형으로). json_encode
와 동일한 정보를 print_R
다른 형식 으로 출력 합니다.
var_dump
. 그는 또한 print_R
자신의 요구에 불충분 한 정보를 제공 한다고 밝혔다 . 에서 제공하는 정보에 실제 차이가 없습니다 json_encode
및 print_r
데이터 만 형식이 다른이 -. 이 print_r
점이 충분하지 않으면 json_encode
. downvote에 대해 더 이상 불평하지 마십시오. 분명히 무작위 클릭이 아니 었으므로 처리하십시오.
이 함수는 유형과 값을 포함하는 하나 이상의 표현식에 대한 구조화 된 정보를 표시합니다.
다음은 실제로 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 '';
}
$argc
@hanshenrik이 지적한 것처럼 여기 의 확인은 불필요하고 틀림없이 부정확하며, 일단 가져 가면 실제로 추가하는 것은 call_user_func_array
and func_get_args
전화입니다.
다음은 함수로서 완벽한 솔루션입니다.
function varDumpToString ($var)
{
ob_start();
var_dump($var);
return ob_get_clean();
}
이것은 아마도 약간의 주제입니다.
PHP-FPM 컨테이너의 Docker 로그에 이러한 종류의 정보를 쓰는 방법을 찾고 있었고 아래 스 니펫을 생각해 냈습니다. Docker PHP-FPM 사용자가 사용할 수 있다고 확신합니다.
fwrite(fopen('php://stdout', 'w'), var_export($object, true));
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
정말 좋아 나는 var_dump()
'출력 자세한 S와 만족되지 않은 var_export()
's 또는 print_r()
그 많은 정보로 제공하지 않았기 때문에 (길이 누락, 예를 들어, 데이터 유형이없는)의 출력.
안전하고 예측 가능한 코드를 작성하려면 빈 문자열과 null을 구분하는 것이 유용한 경우가 있습니다. 또는 1과 true 사이입니다. 또는 null과 false 사이입니다. 출력에 데이터 유형을 원합니다.
도움이되었지만 기존 응답에서 색상이 지정된 출력을 var_dump()
사람이 읽을 수있는 출력으로 html 태그가없는 문자열로 변환하고의 모든 세부 정보를 포함 하는 깨끗하고 간단한 솔루션을 찾지 못했습니다 var_dump()
.
colored var_dump()
인 경우 var_dump()
html 색상을 추가하기 위해 php의 기본값 을 무시하는 Xdebug가 설치되어 있음을 의미합니다 .
이런 이유로, 나는 내가 필요한 것을 정확하게 제공하는이 작은 변형을 만들었습니다 :
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)
그것이 누군가를 돕기를 바랍니다.
에서 http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
var_dump 및 print_r 함수는 브라우저로 직접 출력 할 수 있습니다. 따라서 이러한 함수의 출력은 php의 출력 제어 함수를 사용해야 만 검색 할 수 있습니다. 아래 방법은 출력을 저장하는 데 유용 할 수 있습니다.
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 }