모든 괜찮은 PHP 프로그래머가있다 print_r
또는 var_dump
그들에게 사랑과 할당 바로 가기 키를 사용하여 랩퍼, 우리는 왜하지 않는 우리의 마음에 드는 사람을 공유 .
모든 괜찮은 PHP 프로그래머가있다 print_r
또는 var_dump
그들에게 사랑과 할당 바로 가기 키를 사용하여 랩퍼, 우리는 왜하지 않는 우리의 마음에 드는 사람을 공유 .
답변:
이 질문을 한 후 1 년의 시간과 노력을 들여 마침내 var_dump, Kint 버전을 공개했습니다. 프로젝트 페이지 또는 github에서 직접 읽어보십시오 .
스크린 샷은 다음과 같습니다.
플러그 죄송합니다 :)
편집 : 나는 의견을 말하고 싶습니다. 지원 포럼이 아닙니다 . 문제가 있거나 기능이 필요 하면 문제를 제기하십시오 . 의견 요청 지원 삭제 플래그가 지정됩니다.
내는 IS에 선호 var_dump
, 기능 Xdebug는 확장에 의해 제공 : 단지 확장 설치 (쉬운 모두 윈도우와 리눅스)를 , 그리고 var_dump
더 나은 결과를 가져옵니다
그리고 빠른 스크린 샷 :
물론 Xdebug는 원격 디버깅 (예 : Eclipse PDT에서 PHP 애플리케이션의 그래픽 디버깅) , 프로파일 링 등과 같은 다른 유용한 기능을 제공합니다 .
dll
이 "디버그"를 사용합니다. 고마워, 잘 했어!
다음은 인라인을 사용하는 매우 유용한 광산입니다.
$pretty = function($v='',$c=" ",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'<NULL>':"<strong>$v</strong>");}return$r;};
echo $pretty($some_variable);
function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}
합니다. Var_dump는 매우 장황한 함수로, 모든 PHP 엣지 케이스 (LOTS가있는 경우)를 처리하며 읽을 수는 없지만 100 % 안정적입니다. 그러나 하루가 끝나면 구현이 자신에게 가장 적합한 것을 발견하면 반드시 사용해야합니다.
Krumo를 찾고 있습니다 ( 경고, Chrome은 Malware 알림 ).
간단히 말해 Krumo는 print_r () 및 var_dump ()를 대체합니다. 정의에 따르면 Krumo는 모든 PHP 변수에 대한 구조화 된 정보를 표시하는 디버깅 도구 (초기 PHP4 / PHP5 용, 현재는 PHP5 전용)입니다.
내가 사용하는 것의 완전한 예 ...
<pre>
<?php
//*********** Set up some sample data
$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);
$options = array(
'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
2=>'Car',
4=>'Bus',
'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));
//*********** Define the function
function dump($data, $indent=0) {
$retval = '';
$prefix=\str_repeat(' | ', $indent);
if (\is_numeric($data)) $retval.= "Number: $data";
elseif (\is_string($data)) $retval.= "String: '$data'";
elseif (\is_null($data)) $retval.= "NULL";
elseif ($data===true) $retval.= "TRUE";
elseif ($data===false) $retval.= "FALSE";
elseif (is_array($data)) {
$retval.= "Array (".count($data).')';
$indent++;
foreach($data AS $key => $value) {
$retval.= "\n$prefix [$key] = ";
$retval.= dump($value, $indent);
}
}
elseif (is_object($data)) {
$retval.= "Object (".get_class($data).")";
$indent++;
foreach($data AS $key => $value) {
$retval.= "\n$prefix $key -> ";
$retval.= dump($value, $indent);
}
}
return $retval;
}
//*********** Dump the data
echo dump($options);
?>
</pre>
출력 ...
Array (4)
[Orchestra] = Array (5)
| [1] = String: 'Strings'
| [8] = String: 'Brass'
| [9] = Object (stdClass)
| | a -> Number: 123
| | pl -> Number: 44
| | l -> Array (2)
| | | [0] = Number: 31
| | | [1] = Number: 32
| [3] = String: 'Woodwind'
| [16] = String: 'Percussion'
[2] = String: 'Car'
[4] = String: 'Bus'
[TV] = Array (5)
| [21] = String: 'Only Fools'
| [215] = String: 'Brass Eye'
| [23] = String: 'Vic Bob'
| [44] = NULL
| [89] = FALSE
여기 내 것이있다 :
class sbwDebug
{
public static function varToHtml($var = '', $key = '')
{
$type = gettype($var);
$result = '';
if (in_array($type, ['object', 'array'])) {
$result .= '
<table class="debug-table">
<tr>
<td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
<td class="debug-value-cell">';
foreach ($var as $akey => $val) {
$result .= sbwDebug::varToHtml($val, $akey);
}
$result .= '</td></tr></table>';
} else {
$result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
}
return $result;
}
}
스타일 :
table.debug-table {
padding: 0;
margin: 0;
font-family: arial,tahoma,helvetica,sans-serif;
font-size: 11px;
}
td.debug-key-cell {
vertical-align: top;
padding: 3px;
border: 1px solid #AAAAAA;
}
td.debug-value-cell {
vertical-align: top;
padding: 3px;
border: 1px solid #AAAAAA;
}
div.debug-item {
border-bottom: 1px dotted #AAAAAA;
}
span.debug-label {
font-weight: bold;
}
sbwDebug
게시하고 함수를 넣는 것을 잊어 버린 클래스 를 만들어야 합니다.
나는 최근에 무료 크롬 확장 프로그램 (작업 진행 중)을 개발하여 라이브러리, 프리 태그 및 각 앱마다 설치하지 않고 var 덤프를 아름답게했습니다. 모든 것은 JavaScript와 regEx로 이루어집니다. 확장 프로그램과 설치하기 만하면됩니다. Firefox 버전도 작업 중입니다. 여기 GitHub 페이지가 있습니다. 크롬 및 파이어 폭스 웹 스토어에서 곧 사용할 수 있기를 바랍니다.
https://github.com/alexnaspo/var_dumpling
다음은 예제 출력입니다.
Tracy 는 dump () 함수를 사용하여 축소 가능한 출력을 제공 합니다 .
멋진 라이브러리는 오버 헤드를 제외하고 훌륭합니다. 무한 매개 변수를 사용하는 간단하고 예쁜 var_dump를 원한다면 내 기능을 사용해보십시오. 간단한 HTML을 추가합니다. 데이터 속성도 추가됩니다. HTML5를 사용하는 경우 하위 버전은 무시하지만 브라우저 콘솔에서 요소를 쉽게 열고 화면에 표시되는 정보가 충분하지 않으면 더 많은 정보를 얻을 수 있습니다.
레이아웃은 오버 헤드없이 매우 간단합니다. 오브젝트 덤프 (XML 포함)의 이름 gettype
및 class
이름을 포함하여 각 매개 변수에 대한 많은 정보를 제공합니다 . 그것은 시도되고 사실이며, 수년 동안 사용해 왔습니다.
function preDump() { // use string "noEcho" to just get a string return only
$args = func_get_args();
$doEcho = TRUE; $sb;
if ($args) {
$sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
foreach (func_get_args() as $arg) {
if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
$sb .= '<pre data-type="'.gettype($arg).'"';
switch (gettype($arg)) {
case "boolean":
case "integer":
$sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
$sb .= json_encode($arg);
break;
case "string":
$sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
$sb .= $arg;
break;
default:
$sb .= ' data-dump="var_dump"';
if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
$sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
$sb .= '</b></p><p>';
ob_start();
var_dump($arg);
$sb .= ob_get_clean();
if (ob_get_length()) ob_end_clean();
}
$sb .= '</p></pre>';
}
$sb .= '</fieldset></div>';
}
else {
$sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
}
if ($doEcho) echo($sb);
return $sb;
}
Codeigniter를 사용하는 경우 CI를 매우 간단하게 추가하십시오. 먼저로 이동하여 application/config/autoload.php
켜져 있는지 확인하십시오 helper
'string'
.
$autoload['helper'] = array( 'string' );
그리고 단순히라는 이름의 파일을 만들 이동 MY_string_helper.php
에 application/helpers
전형적인에서 함수 삽입 간단한을 if
생존 확인을 위해 문.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
if (!function_exists('preDump')) {
function preDump() {
...
}
}
// DON'T CLOSE PHP
다른 방향으로 가져 가려면 | OR |
다음 스 니펫은 브라우저 콘솔에 변수를 표시한다는 점을 제외하고 위와 동일합니다. 이것은 때때로 키 이름 등이 빠진 SQL 객체 호출 및 기타 배열 및 객체 호출을 디버그하기가 더 쉬울 수 있습니다.
function consoleDump() { // use string "noEcho" to just get a string return only
$args = func_get_args();
$doEcho = TRUE; $sb;
if ($args) {
$sb = '<script type="text/javascript">console.log("<" + new Array('.(count($args) < 10 ? '49': '48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';
foreach (func_get_args() as $i => $arg) {
if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/', 'consoleDump: '.(count($args)-1), $sb); continue; }
$sb .= '{ "type": "'.gettype($arg).'", ';
switch (gettype($arg)) {
case "boolean":
case "integer":
case "string":
$sb .= '"value": '.json_encode($arg);
break;
default:
$sb .= '"value": '.json_encode($arg);
if (is_object($arg) || is_array($arg)) $sb .= ', "count": '.json_encode(count((array)$arg));
if (is_object($arg)) $sb .= ', "objectClass": "'.get_class($arg).'"';
}
$sb .= '}';
if ($i < count($args)-1) $sb .= ', ';
}
$sb .= ']); console.log("<" + new Array(120).join("-") + ">"); </script>';
}
else {
$sb = '<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';
}
if ($doEcho) echo($sb);
return $sb;
}
모든 것과 함께 작동합니다!
consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array( 'one' => 'bob', 'two' => 'bill' ), (object)array( 'one' => 'bob', 'two' => 'bill' ));
<------------------------------------------------[consoleDump: 6 items]------------------------------------------------->
[Object, Object, Object, Object, Object, Object]
// This drops down to show your variables in JS objects, like:
0: Object
count: 4
objectClass: "SimpleXMLElement"
type: "object"
value: Object
__proto__: Object
// ...etc...
<----------------------------------------------------------------------------------------------------------------------->
echo '<pre>';var_dump($var);echo '</pre>';
값을 추가하지 않는 텍스트를 더한 것입니다.
preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an
echo 'pre'를 제외한 @Raveren yea ; simple html
0 값을 추가하는 텍스트가 아닌 주변에 var_dump`가 있습니다 . lol kik. 마음에 들지 않으면 사용하지 마십시오. 그냥 제안입니다.
PHP Array Beautifier이 간단한 도구는 print_r () 문과 같이 PHP에서 배열 또는 객체 출력을 가져 와서 데이터를 쉽게 읽을 수 있도록 색상 코딩 형식으로 지정합니다. http://phillihp.com/toolz/php-array-beautifier/
또 다른 자체 개발 버전 :
http://github.com/perchten/neat_html
나는 그것이 매우 유연하다고 생각합니다. 특정 출력 환경을 목표로하지는 않지만 출력 / 인쇄 또는 동작을 변경하는 이유와 일부 영구 설정을 지정할 수있는 선택적 인수가 많이 있습니다.
이 문제를 해결하기 위해 작성한 크롬 확장 프로그램입니다.
https://chrome.google.com/webstore/detail/varmasterpiece/chfhddogiigmfpkcmgfpolalagdcamkl
var_dumps를 아름답게하기 위해 크롬 확장 프로그램과 jquery 플러그인 을 개발했습니다.
PHP에서 매우 큰 배열을 다루는 경우이 기능이 도움이 될 수 있습니다.
function recursive_print ($varname, $varval) {
if (! is_array($varval)):
print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
else:
print $varname . " = array();<br>\n";
foreach ($varval as $key => $val):
recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
endforeach;
endif;
}
기본적으로 각 요소가 별도의 줄에있는 전체 배열을 덤프하므로 특정 요소에 대한 올바른 전체 경로를 찾는 것이 좋습니다.
출력 예 :
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
Krumo와 비슷한 작은 클래스를 작성했지만 앱에 훨씬 쉽게 포함시킬 수 있습니다.
여기 링크가 있습니다 : https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php
그리고 여기 샘플 출력 : http://langpavel.php5.cz/debug_sample.html
내가 선호하는 것은 https://github.com/hazardland/debug.php 에서 디버그 입니다. 이것은 debug 라는 단일 함수 만 포함하는 라이브러리입니다 (프로젝트 또는 라이브러리에서 해당 함수를 복사하면됩니다) . 일반적인 debug () html 출력은 다음과 같습니다.
그러나 다음과 같이 동일한 기능 (공백 들여 쓰기 탭 4 개)을 사용하여 데이터를 일반 텍스트로 출력하고 필요한 경우 파일에 기록 할 수도 있습니다.
string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
bob : "alice"
1 : 5
2 : 1.4
object (test2)
another (test3)
string1 : "3d level"
string2 : "123"
complicated (test4)
enough : "Level 4"
이것은 버그가 PHP의 기능을 대체하기위한 것입니다 훌륭한 도구입니다 var_dump
및 print_r
올바르게 복잡한 객체 구조에서 재귀 적으로 참조 된 개체를 식별 할 수 있기 때문에. 또한 특정 변수의 무한 재귀 표시를 피하기 위해 재귀 깊이 제어 기능이 있습니다.
참조 : TVarDumper.php
.
이상 많은 이점을 제공 다른 대안 솔루션 var_dump
및 print_r
순환 참조를 지원하고, 확인하십시오 : 순환 참조 인 print_r와 위해서 var_dump를 사용 .
더 많은 아이디어를 얻으 려면 PHP 스크립트를 어떻게 디버깅합니까?
Mine은 더 간단합니다. 저는 인프라 설치 xdebug 등을 변경할 지식과 시간이별로 없습니다.
그리고 다른 경우에는 예를 들어 간단한 WP 웹 사이트에는별로 필요하지 않습니다.
그래서 나는 사용합니다 :
highlight_string("\n<?" . var_export($var, true) . "?>\n");
정말 많은 도움이됩니다.
그러나 DevConsole 환경을 선호하기 때문에이 훌륭하지만 간단한 기능을 사용합니다.
https://codeinphp.github.io/post/outputting-php-to-browser-console/
약간의 조정 :
<?php
/**
* Logs messages/variables/data to browser console from within php
*
* @param $name: message to be shown for optional data/vars
* @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
* @param $jsEval: whether to apply JS eval() to arrays/objects
*
* @return none
* @author Sarfraz
*/
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
if (! $name) return false;
$isevaled = false;
$type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';
if ($jsEval && (is_array($data) || is_object($data)))
{
$data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
$isevaled = true;
}
else
{
$data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
}
# sanitalize
$data = $data ? $data : '';
$search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
$replace_array = array('"', '', '', '\\n', '\\n');
$data = preg_replace($search_array, $replace_array, $data);
$data = ltrim(rtrim($data, '"'), '"');
$data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";
$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback
console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;
echo $js;
} # end logConsole
다른 솔루션의 단계를 실제로 거치고 싶지 않기 때문에 여기에 다른 답변을 추가해야했습니다. 그것은 매우 간단하고 확장명, 포함 등이 필요하지 않으며 내가 선호하는 것입니다. 매우 쉽고 빠릅니다.
먼저 문제의 변수를 json_encode하십시오.
echo json_encode($theResult);
결과를 http://jsoneditoronline.org/ 의 JSON 편집기에 복사하면 왼쪽 창에 복사 하고 복사>를 클릭 하면 JSON이 정말 멋진 트리 형식으로 인쇄됩니다.
각자 자신에게, 그러나 이것은 다른 사람들이 하나 더 좋은 옵션을 갖는 데 도움이되기를 바랍니다. :)