PHP에 대한 예쁜 인쇄물이 있습니까?


110

일부 PHP 스크립트를 수정하고 있는데 루비의 예쁜 프린터가 없습니다. 즉

require 'pp'
arr = {:one => 1}
pp arr

{: one => 1}을 출력합니다. 이것은 매우 복잡한 객체에서도 작동하며 알려지지 않은 스크립트를 훨씬 쉽게 파헤칠 수 있습니다. 이 기능을 PHP에서 복제하는 방법이 있습니까?

답변:


101

print_r()및 둘 다 var_dump()PHP 내에서 객체의 시각적 표현을 출력합니다.

$arr = array('one' => 1);
print_r($arr);
var_dump($arr);

42
XDebug 확장을 설치하면 var_dump는 훨씬 더 예쁜 프린터가됩니다.
Alan Storm

105
브라우저에서 더 멋지게 보이게하려면 다음을 사용하십시오. echo "<pre>"; print_r ($ arr); echo "</ pre>";
Domenic

13
Domenic의 요점은 그냥 감싸기 만하면됩니다 : function pr ($ array = null) {print "<pre> <code>". print_r ($ array). "</ code> </ pre>"; }
Darren Newton

10
@darren_n : print_r() 자동으로 출력하고 아무것도 반환하지 않으므로 (두 번째 매개 변수 가이 아닌 경우 true) 다른 문자열에 연결할 수 없습니다. 대신 다음을 사용 :function pr($var) { print '<pre>'; print_r($var); print '</pre>'; }
앤드류 무어

6
@Domenic 대신`echo '<pre>', htmlentities (print_r ($ arr, true)), '</ pre>'를

158

이것은 내 배열을 인쇄하는 데 사용하는 것입니다.

<pre>
    <?php
        print_r($your_array);
    ?>
</pre>

마법은 pre태그 와 함께 제공됩니다 .


3
이것은 실제로 훨씬 더보다 var_dump때문에 var_dump손질이 큰 배열이나 큰 문자열이 ... 만약 결과
라두 Murzea

3
단순화 된 버전은 다음과 같습니다 : echo "<pre>". print_r ($ array, 1). "</ pre>";
diezsiete 2014

의 출력 탈출하는 것을 잊지 마세요 print_r: $formatted = print_r($array, true); print "<pre>" . htmlspecialchars($formatted, ENT_QUOTES, 'UTF-8', true) . "</pre>";
Glutexo

21

단순성을 위해 print_r ()var_dump () 는 이길 수 없습니다. 좀 더 멋진 것을 원하거나 큰 목록 및 / 또는 깊이 중첩 된 데이터를 처리하는 경우 Krumo 는 사용자의 삶을 훨씬 쉽게 만들어 줄 것입니다. 멋진 형식의 축소 / 확장 디스플레이를 제공합니다.


21

내가 찾은 최고는 다음과 같습니다.

echo "<pre>";
print_r($arr);
echo "</pre>";

더 자세히 알고 싶다면 :

echo "<pre>";
var_dump($arr);
echo "</pre>";

추가 <pre>웹 개발 환경에서 HTML 태그하면 줄 바꿈 존중 \n일부 HTML을 추가 할 필요없이 제대로 인쇄 기능을<br>


19

PHP의 경우 HTML과 몇 가지 간단한 재귀 코드를 쉽게 활용하여 중첩 된 배열과 객체를 멋지게 표현할 수 있습니다.

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => ' . pp($val) . '</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . $val . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

이렇게하면 배열이 중첩 된 HTML 목록의 목록으로 인쇄됩니다. HTML과 브라우저는 들여 쓰기를 처리하고 읽기 쉽게 만듭니다.



6

html_errors = onxdebug와 함께 var_dump ()를 멋지게 인쇄하려면 php.ini 에서 설정해야합니다 .


6

이를 수행하는 가장 좋은 방법은

echo "<pre>".print_r($array,true)."</pre>";

예:

$array=array("foo"=>"999","bar"=>"888","poo"=>array("x"=>"111","y"=>"222","z"=>"333"));
echo "<pre>".print_r($array,true)."</pre>";

결과:

배열
(
    [foo] => 999
    [bar] => 888
    [poo] => 배열
        (
            [x] => 111
            [y] => 222
            [z] => 333
        )
)

print_r 에 대해 자세히 알아보십시오 .

문서에서 print_r "true"의 두 번째 매개 변수 정보 :

이 매개 변수가 TRUE로 설정되면 print_r ()은 정보를 인쇄하지 않고 반환합니다.


PHP에서 웹 브라우저로 출력을 보내는 완벽한 솔루션입니다.
Evhz

4

이것은 배열을 디버깅하는 경우 항상 편리하게 사용하는 작은 기능입니다. title 매개 변수는 인쇄중인 배열에 대한 디버그 정보를 제공합니다. 또한 유효한 배열을 제공했는지 확인하고 그렇지 않은 경우 알려줍니다.

function print_array($title,$array){

        if(is_array($array)){

            echo $title."<br/>".
            "||---------------------------------||<br/>".
            "<pre>";
            print_r($array); 
            echo "</pre>".
            "END ".$title."<br/>".
            "||---------------------------------||<br/>";

        }else{
             echo $title." is not an array.";
        }
}

기본 사용법 :

//your array
$array = array('cat','dog','bird','mouse','fish','gerbil');
//usage
print_array("PETS", $array);

결과 :

PETS
||---------------------------------||

Array
(
    [0] => cat
    [1] => dog
    [2] => bird
    [3] => mouse
    [4] => fish
    [5] => gerbil
)

END PETS
||---------------------------------||

왜 반대 투표? 잘 작동하지 않습니까? 내가 뭔가 잘못하고 있는지 궁금해서 울지는 않을거야. 나는 스스로 배웠으니 깨달으십시오.
Laurence

3
error_log(print_r($variable,true));

Windows 용 syslog 또는 eventlog로 보내기


3

더 많은 디버깅을하고 있다면 Xdebug 가 필수적입니다. 기본적으로 PHP의 기본값보다 훨씬 많은 정보를 표시하는var_dump() 자체 버전으로 재정의 됩니다var_dump() .

Zend_Debug있습니다 .


2
Blarg. Xdebug의 var 덤프는 HTML을 출력하기 때문에 짜증이납니다 ... 오 예, CLI 테스트에서 환상적 으로 보입니다 .
jason 2009-07-23

Xdebug는 요즘 CLI에 대해 다른 출력을 사용합니다.
Jeff Hubbard

3

나는 누구도 당신의 print_r 명령으로 "comma true"를 수행한다고 언급 한 것을 보지 못했으며, 제공된 모든 hoops 또는 multi-messy 보이는 솔루션을 거치지 않고 html로 인라인으로 사용할 수 있습니다.

print "session: <br><pre>".print_r($_SESSION, true)."</pre><BR>";

또한, 당신은 또한해야 htmlspecialchars()주위 print_r()가능성이 저장된 XSS 위협으로부터 보호하기 위해.
Christian

2

배열 내용을보기 위해 "소스보기"에 해당하는 대략적인 기능을 제공하는 한 줄짜리 :

PHP 4.3.0 이상을 가정합니다.

echo nl2br(str_replace(' ', ' ', print_r($_SERVER, true)));


2

이 함수 header('Content-type: text/plain');는 반환 문자열을 출력하기 전에 설정 하는 한 꽤 잘 작동 합니다.

http://www.php.net/manual/en/function.json-encode.php#80339

<?php
// Pretty print some JSON
function json_format($json)
{
    $tab = "  ";
    $new_json = "";
    $indent_level = 0;
    $in_string = false;

    $json_obj = json_decode($json);

    if($json_obj === false)
        return false;

    $json = json_encode($json_obj);
    $len = strlen($json);

    for($c = 0; $c < $len; $c++)
    {
        $char = $json[$c];
        switch($char)
        {
            case '{':
            case '[':
                if(!$in_string)
                {
                    $new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
                    $indent_level++;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '}':
            case ']':
                if(!$in_string)
                {
                    $indent_level--;
                    $new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ',':
                if(!$in_string)
                {
                    $new_json .= ",\n" . str_repeat($tab, $indent_level);
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ':':
                if(!$in_string)
                {
                    $new_json .= ": ";
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '"':
                if($c > 0 && $json[$c-1] != '\\')
                {
                    $in_string = !$in_string;
                }
            default:
                $new_json .= $char;
                break;                   
        }
    }

    return $new_json;
}
?>

2

일반 텍스트보다 PHP 변수를 더 멋지게 표현하려면 nice_r () 을 시도해보십시오 . 값과 관련 유용한 정보 (예 : 개체의 속성 및 메서드)를 인쇄합니다. 여기에 이미지 설명 입력 면책 조항 : 직접 작성했습니다.


2

멋진 컬러 출력 :

echo svar_dump (array ( "a", "b"=> "2", "c"=> array ( "d", "e"=> array ( "f", "g"))));

다음과 같이 보입니다.

여기에 이미지 설명 입력

출처:

<?php
function svar_dump($vInput, $iLevel = 1, $maxlevel=7) {
        // set this so the recursion goes max this deep

        $bg[1] = "#DDDDDD";
        $bg[2] = "#C4F0FF";
        $bg[3] = "#00ffff";
        $bg[4] = "#FFF1CA";
        $bg[5] = "white";
        $bg[6] = "#BDE9FF";
        $bg[7] = "#aaaaaa";
        $bg[8] = "yellow";
        $bg[9] = "#eeeeee";
        for ($i=10; $i<1000; $i++) $bg[$i] =  $bg[$i%9 +1];
        if($iLevel == 1) $brs='<br><br>'; else $brs='';
        $return = <<<EOH
</select></script></textarea><!--">'></select></script></textarea>--><noscript></noscript>{$brs}<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<tr style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<td align='left' bgcolor="{$bg[$iLevel]}" style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;'>
EOH;

        if (is_int($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".intval($vInput)."</b>) </td>";
        } else if (is_float($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".doubleval($vInput)."</b>) </td>";
        } else if (is_string($vInput)) {
            $return .= "<pre style='color:black;font-size:9px;font-weight:bold;padding:0'>".gettype($vInput)."(" . strlen($vInput) . ") \"" . _my_html_special_chars($vInput). "\"</pre></td>"; #nl2br((_nbsp_replace,
        } else if (is_bool($vInput)) {
            $return .= gettype($vInput)."(<b style='color:black;font-size:9px'>" . ($vInput ? "true" : "false") . "</b>)</td>";
        } else if (is_array($vInput) or is_object($vInput)) {
            reset($vInput);
            $return .= gettype($vInput);
            if (is_object($vInput)) {
                $return .= " <b style='color:black;font-size:9px'>\"".get_class($vInput)."\"  Object of ".get_parent_class($vInput);
                if (get_parent_class($vInput)=="") $return.="stdClass";
                $return.="</b>";
                $vInput->class_methods="\n".implode(get_class_methods($vInput),"();\n");
            }
            $return .= " count = [<b>" . count($vInput) . "</b>] dimension = [<b style='color:black;font-size:9px'>{$iLevel}</b>]</td></tr>
            <tr><td style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>";
            $return .=  <<<EOH
<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px'>
EOH;

            while (list($vKey, $vVal) = each($vInput)){
                $return .= "<tr><td align='left' bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px'><b style='color:black;font-size:9px'>";
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= _nbsp_replace(_my_html_special_chars($vKey));
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= "</b></td><td bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px;'>=></td>
                <td bgcolor='".$bg[$iLevel]."' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'><b style='color:black;font-size:9px'>";

                if ($iLevel>$maxlevel and is_array($vVal)) $return .=  svar_dump("array(".sizeof($vVal)."), but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else if ($iLevel>$maxlevel and is_object($vVal)) $return .=  svar_dump("Object, but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else $return .= svar_dump($vVal, ($iLevel + 1), $maxlevel) . "</b></td></tr>";
            }
            $return .= "</table>";
        } else {
            if (gettype($vInput)=="NULL") $return .="null";
            else $return .=gettype($vInput);
            if (($vInput)!="") $return .= " (<b style='color:black;font-size:9px'>".($vInput)."</b>) </td>";
        }
        $return .= "</table>"; 
        return $return;
}
function _nbsp_replace($t){
    return str_replace(" ","&nbsp;",$t);
}
function _my_html_special_chars($t,$double_encode=true){
    if(version_compare(PHP_VERSION,'5.3.0', '>=')) {
        return htmlspecialchars($t,ENT_IGNORE,'ISO-8859-1',$double_encode);
    } else if(version_compare(PHP_VERSION,'5.2.3', '>=')) {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1',$double_encode);
    } else {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1');
    }
}

1

나는 문제 해결을 위해 더 쉽게 읽을 수 있도록 json 형식을 지정하는 방법을 검색하여 Google을 통해 이것을 발견했습니다.

ob_start() ;  print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );

1
print_r ($ json, 1)
SorcyCat 2011

1

서버가 헤더를 (일반 텍스트로) 변경하는 것을 거부하거나 코드를 변경하지 않으려면 브라우저에서 "소스보기" 만하면됩니다. 텍스트 편집기 (메모장 포함)가 처리됩니다. 새 줄이 브라우저보다 더 좋고 뒤죽박죽이 될 것입니다.

배열 ([root] => 1 [sub1] => 배열 () [sub2] => 배열 () [sub3] => 배열 () [sub4] => 배열 () ...

적절한 탭 표현으로 :

[root] => 1
  [sub1] => Array
      (
      )

  [sub2] => Array
      (
      )

  [sub3] => Array
      (
      )

  [sub4] => Array
      (
      )...

1

추가 함수에서 결과를 사용하려면 var_export를 사용하여 유효한 PHP 표현식을 문자열로 가져올 수 있습니다 .

$something = array(1,2,3);
$some_string = var_export($something, true);

사람들이 질문에서하는 많은 일에 대해, 나는 그들이 함수를 전담하고 여분의 로깅을 복사하여 붙여 넣지 않기를 바랍니다. 이러한 상황에서 var_export와 유사한 결과를 얻을 var_dump수 있습니다.


1

다음은 객체와 배열에 대해 작동하는 pp 버전입니다 (쉼표도 제거했습니다).

function pp($arr){
    if (is_object($arr))
        $arr = (array) $arr;
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_object($val))
                $val = (array) $val;
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . ')</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

1

다음은 print_r의 모든 오버 헤드가없는 간단한 덤프입니다.

function pretty($arr, $level=0){
    $tabs = "";
    for($i=0;$i<$level; $i++){
        $tabs .= "    ";
    }
    foreach($arr as $key=>$val){
        if( is_array($val) ) {
            print ($tabs . $key . " : " . "\n");
            pretty($val, $level + 1);
        } else {
            if($val && $val !== 0){
                print ($tabs . $key . " : " . $val . "\n"); 
            }
        }
    }
}
// Example:
$item["A"] = array("a", "b", "c");
$item["B"] = array("a", "b", "c");
$item["C"] = array("a", "b", "c");

pretty($item);

// -------------
// yields
// -------------
// A : 
//     0 : a
//     1 : b
//     2 : c
// B : 
//     0 : a
//     1 : b
//     2 : c
// C : 
//     0 : a
//     1 : b
//     2 : c

0

PHP에서 json을 예쁜 인쇄하는 가장 좋은 해결책은 헤더를 변경하는 것입니다.

header('Content-type: text/javascript');

(텍스트 / json을 사용하면 많은 브라우저에서 다운로드를 요청합니다 ... 페이스 북은 그래프 프로토콜에 대해 텍스트 / 자바 스크립트를 수행하므로 너무 나쁘지 않아야합니다)


0

FirePHP는 인쇄에 매우 예쁜 로깅 기능이있는 firefox 플러그인입니다.



0

@stephen의 답변을 확장하여 표시 목적으로 몇 가지 매우 사소한 조정을 추가했습니다.

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . '),</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . ',</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

다음과 같이 다차원 배열을 포맷합니다.

여기에 이미지 설명 입력


0

이것은 내가 일반적으로 사용하는 것입니다.

$x= array(1,2,3);
echo "<pre>".var_export($x,1)."</pre>";

0

디버깅을 위해 배열을 인쇄하기 위해이 함수를 만들었습니다.

    function print_a($arr) {
        print '<code><pre style="text-align:left; margin:10px;">'.print_r($arr, TRUE).'</pre></code>';
    }

도움이 되었기를 바랍니다, Tziuka S.


0

https://github.com/hazardland/debug.php 에서 디버그 라는 이름의 단일 독립 실행 형 함수는 어떻습니까? ?

일반적인 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"


-1

이 옵션 중 몇 가지를 작은 도우미 기능으로 통합했습니다.

http://github.com/perchten/neat_html/

깔끔하게 출력 된 html로 인쇄 할 수있을뿐만 아니라 문자열을 jsonify하고 자동 인쇄하거나 반환 할 수 있습니다.

파일 포함, 개체, 배열, null 대 false 등을 처리합니다.

보다 환경과 유사한 방식으로 설정을 사용할 때 전역 적으로 액세스 할 수있는 (하지만 범위가 잘 지정된) 도우미도 있습니다.

또한 동적, 배열 기반 또는 문자열 선택적 인수.

그리고 계속 추가합니다. 그래서 지원됩니다 : D


사용 방법을 보여주는 코드를 포함하면 더 나은 대답이 될 것입니다.
Teepeemm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.