PHP में एक अधिक सुंदर / सूचनात्मक Var_dump विकल्प? [बन्द है]


130

हर सभ्य PHP प्रोग्रामर के पास एक print_rया var_dumpरैपर होता है, वे शॉर्टकट कुंजी का उपयोग करते हैं, प्यार करते हैं और असाइन करते हैं, हम अपने पसंदीदा लोगों को साझा क्यों नहीं करते हैं


39
मैं सिर्फ इको '<प्री>' का उपयोग करता हूं; प्रिंट_आर ($ वर); निकास; मैं भी इसे बंद नहीं करते। मुझे लगता है मैं सभ्य नहीं हूँ
कायरता दोस्त

मैंने जीथब को इंगित करने के लिए लिंक संपादित किया, जहां मैं किंट विकास जारी रखता हूं, और यदि आपके पास अभी भी इसके साथ कोई समस्या है, तो कृपया मुझे किसी भी माध्यम से बताएं।
बजे

1
अरे, किंट शांत है! इसने मेरा दिन बचा लिया।
इस्तवान उज्ज-मेसाज़ोस

2
क्यों एक प्रश्न जो 100% है एक कार्यक्रम का विज्ञापन नोटिस "मैं अपना खुद का var_dump ()" कर रहा हूँ? पहला प्रश्न यह होगा कि प्रश्न के रूप में किसी उत्पाद के विज्ञापन की अनुमति क्यों है।
m3nda

11
क्योंकि मैंने सवाल पूछने के बाद एक साल से अधिक समय बाद टूल बनाया। मुझे नहीं पता कि आपको क्या परेशान कर रहा हूं, मैंने एक 10k + लाइन परिपक्व ओपन सोर्स टूल बनाया है और वर्षों बाद लगातार इसमें सुधार कर रहा हूं। मैंने सवाल में अपना जवाब दिया - जैसा कि एसओ में परंपरा है।
11

जवाबों:


70

यह पूछने के बाद कि पूरे साल का समय और श्रम, मैंने आखिरकार var_dump, Kint के अपने संस्करण को खोल दिया है। इसके बारे में प्रोजेक्ट पेज में या सीधे पढ़ें जीथब में

यहाँ एक स्क्रीनशॉट है:

Kint

प्लग के लिए क्षमा करें :)


संपादित करें: मैं सिर्फ टिप्पणीकारों को याद दिलाना चाहूंगा, कि यह एक समर्थन मंच नहीं है, अगर आपको समस्या हो रही है / एक सुविधा चाहते हैं, तो कृपया एक समस्या दर्ज करें । हटाने के लिए समर्थन अनुरोध वाली टिप्पणियों को चिह्नित किया जाएगा।


मुझे फ़ॉन्ट आकार बदलना था, और CSS कोड को सुशोभित करना था, लेकिन अच्छा काम, मुझे यह पसंद है ... एक लंबे समय से आने वाले Krumo उपयोगकर्ता
Quamis

1
आपने क्या परिवर्तन किए, यदि आप इसे सुधारते हैं, तो आप मुझे rveren@gmail.com पर परिवर्तन भेज सकते हैं
raveren

मुझे क्रुमो में इस्तेमाल किया गया था और मुझे छोटे फोंट चाहिए थे, और मैंने सीएसएस कोड को भी सुशोभित किया। कुछ भी नहीं है कि एक वास्तविक सुधार कहा जा सकता है, एक पुरानी आदत की तरह :)
Quamis

अच्छी तरह से विचार था कि सीएसएस को जेएस के साथ-साथ संकुचित किया जाना चाहिए ताकि वास्तविक आउटपुट के साथ जितना संभव हो उतना कम हस्तक्षेप किया जा सके। बेशक, उत्पन्न स्रोत का बहुत ही इंडेंटेशन नियोजित किया गया था, लेकिन मेरे पास फिलहाल
किंट

2
एक उदाहरण के रूप में, किंट एक वस्तु को डंप करने पर संरक्षित और निजी चर दिखाता है, क्रामो नहीं करता है (क्योंकि केवल पूर्व का उपयोग करता है प्रतिबिंब कक्षाएं जो मुझे लगता है)। आम तौर पर बोलते हुए मैंने किंट को श्रेष्ठ पाया; हालाँकि मुझे इसे और अधिक प्रयोग करने योग्य बनाने के लिए सीएसएस को भी ट्विस्ट करना पड़ा (यह बहुत बड़ा फॉन्ट बहुत अच्छा काम नहीं करता जब नेस्टेड प्रॉपर्टीज़ के टन को डंप किया जाता है)। ओह, और इसके पीछे का कोड गड़बड़ नहीं है, कुछ ऐसा जो क्रुमो (सॉरी क्रुमो लेखक!) के बारे में नहीं कहा जा सकता
Mahn

45

मेरे द्वारा पसंद किया गया var_dumpफ़ंक्शन है, जैसा कि Xdebug एक्सटेंशन द्वारा प्रदान किया गया है : बस एक्सटेंशन स्थापित करें (आसान, दोनों विंडोज़ और लिनक्स पर) , और var_dumpबेहतर आउटपुट प्राप्त होता है:

  • बेहतर निर्माण
    • एचटीएमएल
    • रंग की
  • और आपके पास यह विकल्प है कि आप कितना ट्यून प्रदर्शित करें

और एक त्वरित स्क्रीनशॉट:

xdebug


और, ज़ाहिर है, Xdebug रिमोट डीबगिंग (उदाहरण के लिए एक्लिप्स पीडीटी में आपके PHP एप्लिकेशन के ग्राफिकल डिबगिंग) , प्रोफाइलिंग, जैसे अन्य उपयोगी सामान का भार लाता है ...


1
मुझे एक साझा होस्ट में इस xdebug स्वरूपण वर्ग का उपयोग करने की आवश्यकता है। क्या मेरे व्यक्तिगत प्रोजेक्ट में इसे शामिल करने का कोई तरीका है?
Anyul Rivas

1
यदि आप अपने सर्वर के व्यवस्थापक (रूट) नहीं हैं, तो आप सबसे अधिक संभावना एक PHP एक्सटेंशन को स्थापित करने में सक्षम नहीं होंगे (मैंने एक साझा होस्टिंग सेवा कभी नहीं देखी है जो PHP एक्सटेंशन स्थापित करने के लिए एक स्थापित करेगा) ; इसलिए, नहीं, आप Xdebug का उपयोग नहीं कर पाएंगे (वैसे भी, उत्पादन सर्वर पर इसे स्थापित करना आम तौर पर अच्छा विचार नहीं है: यह डिबगिंग एक्सटेंशन, आफ्टर) ; आपको एक चर-आउटपुट फ़ंक्शन के PHP-आधारित कार्यान्वयन पर वापस आना होगा (कुछ अन्य उत्तर देखें)
पास्कल मार्टिन

1
हां, मुझे बस कक्षा की आवश्यकता थी जब कोई त्रुटि होती है तो मैं खुद को कुछ आउटपुट भेजता हूं
Anyul Rivas

34

मैंने अपना लिखा: REF ( डेमो ):

आर () आउटपुट

योजनाएं केवल पाठ जोड़ने के लिए हैं, और इनपुट अभिव्यक्ति के बारे में जानकारी जैसे किंट करता है ...


4
अच्छा काम, बहुत अच्छा उपकरण
ssuperczynski

2
आरईएफ भयानक, रंगीन, तेज है। मैं इसका हर समय उपयोग करता हूं।
मार्टी मैकगी

2
महान उपकरण, मैं बस इसे बंद कर दिया। धन्यवाद!
एंड्रीस

कुछ लोग संगीतकार का उपयोग करते हैं, ठीक है ... मैं नहीं। यदि आप dllI बनाने के लिए इस "डीबग" का उपयोग करेंगे। धन्यवाद, और अच्छा काम!
एलेक्स

27

यहाँ मेरा है, जो मैं इनलाइन का उपयोग करता हूं, बहुत उपयोगी:

$pretty = function($v='',$c="&nbsp;&nbsp;&nbsp;&nbsp;",$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)?'&lt;NULL&gt;':"<strong>$v</strong>");}return$r;};

echo $pretty($some_variable);

2
इस फ़ंक्शन को प्यार करें - आसान और स्पष्ट और क्या मैंने बहुत आसान उल्लेख किया है :)
derekdreery

धन्यवाद। मैं इसका हर समय उपयोग करता हूं। वास्तव में PHP में बनाया जाना चाहिए। आप दूसरे पैरामीटर का उपयोग करके अपने स्वयं के स्वरूपण में रख सकते हैं। उदाहरण के लिए $ सुंदर ($ some_variable, "-");
गुइलेर्मो फिलिप्स

7
यह खूबसूरती से print_r, var_dump और var_export से सभी सबसे खराब विशेषताओं को जोड़ती है । कोई HTML बचना, केवल एकल पैरामीटर को स्वीकार करता है, पुनरावृत्ति पर लटका देता है, आउटपुट वापस नहीं कर सकता है, और बस इसे बंद करने के लिए, यह पूरी तरह से अपठनीय है । मैं एक गधे नहीं बनना चाहता, लेकिन टिप्पणी सिर्फ इतना सही लगता है।
बजे

आपकी टिप्पणी @Raveren के लिए धन्यवाद। यदि आप अधिक विशिष्ट हो सकते हैं, तो मैं अपने उत्तर में सुधार करूंगा।
गिलर्मो फिलिप्स

2
IMO सबसे अच्छी सिंगल लाइन समाधान है 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 एक बहुत ही क्रियात्मक कार्य है, यह PHPs बढ़त के सभी मामलों को संभालता है (जिनमें से बहुत सारे हैं) और 100% स्थिर है, भले ही वह पठनीय न हो। लेकिन दिन के अंत में, यदि आप पाते हैं कि आपका कार्यान्वयन आपके लिए सबसे अच्छा है, तो यह वही है जो आपको निश्चित रूप से उपयोग करना चाहिए।
8

16

आप क्रुमो ( चेतावनी, मैलवेयर के लिए क्रोम अलर्ट ) की तलाश कर रहे हैं ।

इसे सीधे शब्दों में कहें, क्रुमो प्रिंट_आर () और वेर_डंप () के लिए एक प्रतिस्थापन है। परिभाषा के अनुसार क्रुमो एक डिबगिंग टूल है (शुरुआत में PHP4 / PHP5 के लिए, अब केवल PHP5 के लिए), जो किसी भी PHP चर के बारे में संरचित जानकारी प्रदर्शित करता है।


ये जबरदस्त है! धन्यवाद। +1
the_drow

2
जब मैंने कोशिश की, तो वह टूट गया। मैंने इसकी सूचना दी, लेकिन कोई उत्तर नहीं और कोई नया संस्करण नहीं है
मावग का कहना है कि मोनिका

2
@Pekka लिंक Chrome में मैलवेयर चेतावनी फेंक रहा है।
टिम पोस्ट

आज क्रामो को इस आदमी द्वारा अपडेट किया गया है github.com/mmucklo/krumo (लेकिन
किंट

9

मैं प्यार FirePHP प्लस फ़ायरबग

  • यह हेडर का उपयोग करके लॉगिंग जानकारी लिखता है, इसलिए यह AJAX को नहीं तोड़ता है।
  • आपके द्वारा लॉग की जाने वाली चर / वस्तुओं का एक बहुत अच्छा चित्रमय प्रतिनिधित्व देता है
  • फ़ाइल नाम और लाइन नंबर प्रदर्शित कर सकते हैं जहाँ प्रत्येक लॉग स्टेटमेंट होता है
  • अपनी परियोजना में उपयोग करने के लिए आसान, या तो एक प्रक्रियात्मक या वस्तु-उन्मुख एपीआई के साथ

8

मैं डीबग का उपयोग कर रहा हूं, जो कोल्डफ्यूजन के भयानक cfdumpटैग का अनुकरण करता है :

http://dbug.ospinto.com/examples.php


मेरे जैसे किसी भी कोल्डफ्यूज़न डेवलपर्स के लिए सुरुचिपूर्ण समाधान
वफादार

8

इसके लिए मेरा (आंशिक) समाधान केवल इस तरह से एक फ़ंक्शन जोड़ें (Google Chrome का उपयोग करके) है:

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>

Ctrl + Shift + J दबाएँ (कंसोल को खोलता है), और आप वहां JSON संरचना पा सकते हैं। जोंस प्रतिक्रियाओं के एक सुंदर प्रिंट के लिए और भी अधिक उपयोगी है।


8

मैं जो उपयोग करता हूं उसका एक पूरा उदाहरण ...

<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

1
मैंने \ n को PHP_EOL में बदल दिया और विंडो के CMD से php का उपयोग करने पर यह अच्छी तरह से काम करता है
iewebguy

7

यह रहा मेरा:

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

2
वास्तव में बुरा नहीं है। शायद वोट दिया गया हो सकता है आपने आउटपुट का एक उदाहरण दिखाया था।
मावग का कहना है कि

@acSlater मेरे लिए काम करता है, आपको बस उस sbwDebugवर्ग को बनाने की ज़रूरत है जिसे वह पोस्ट करना भूल गया है और इसमें फ़ंक्शन डाल दिया है।
डेनिस 98

6

मैंने हाल ही में अपने पुस्तकालयों को बिना किसी लाइब्रेरियों, किसी पूर्व टैग और प्रत्येक ऐप के साथ संस्थापन के लिए तैयार करने के लिए एक मुफ्त क्रोम एक्सटेंशन (प्रगति में काम) विकसित किया है। सभी जावास्क्रिप्ट और regEx के साथ किया। आपको बस इतना करना है कि एक्सटेंशन स्थापित करें और जाने के लिए आपका अच्छा है। मैं फ़ायरफ़ॉक्स संस्करण पर भी काम कर रहा हूँ। यहाँ GitHub पेज है। मुझे उम्मीद है कि यह जल्द ही क्रोम और फ़ायरफ़ॉक्स वेबस्टोर्स पर उपलब्ध होगा!

https://github.com/alexnaspo/var_dumpling

यहाँ एक उदाहरण आउटपुट है:

उदाहरण आउटपुट


6
बडिया इंसान! बस अपना एक्सटेंशन डाउनलोड किया है और यह पूरी तरह से काम करता है! धन्यवाद!
coryj

5
यार ... शुक्रिया। मैं थोड़ी देर के लिए कुछ इस तरह की तलाश कर रहा है
ब्रॉडबेंट

1
अवास्तविक। सबसे अच्छा विकल्प अभी तक!
ईसाई

फ़ायरफ़ॉक्स 15 के साथ कोशिश की, यह संगत नहीं कहा। इस को दरकिनार करने का कोई मौका?
सायबरफ्लाई

1
यह सुंदर है, काश मैंने इसे जल्द ही ढूंढ लिया होता!


2

उन फैंसी पुस्तकालयों महान हैं ... ओवरहेड को छोड़कर। यदि आप एक सरल, सुंदर var_dump चाहते हैं जो अनंत पैरामीटर लेता है, तो मेरे फ़ंक्शन का प्रयास करें। यह कुछ सरल HTML जोड़ता है। डेटा विशेषताएँ भी जोड़ दी जाती हैं, यदि आप HTML5 का उपयोग करते हैं, तो कम संस्करण उन्हें अनदेखा करेंगे, लेकिन ब्राउज़र कंसोल में तत्व को खोलना और स्क्रीन पर जो आप देखते हैं, उसके बारे में जानकारी प्राप्त करना आसान नहीं है।

लेआउट बहुत सरल है, कोई ओवरहेड नहीं है। प्रत्येक पैरामीटर के लिए एक टन जानकारी प्रदान करता है, जिसमें ऑब्जेक्ट डंप और एक्सएमएल सहित ऑब्जेक्ट नाम 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 EXTREMELY SIMPLY में भी जोड़ें। सबसे पहले, 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...
<-----------------------------------------------------------------------------------------------------------------------> 

1
एक विकास उपकरण में नगण्य प्रदर्शन के बारे में चिंता क्यों घटनी चाहिए? यह फ़ंक्शन वस्तुतः echo '<pre>';var_dump($var);echo '</pre>';प्लस और कुछ शून्य-मूल्य-जोड़ पाठ है।
raveren

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 इको 'प्री' को छोड़कर @ रेवरेन याया ; var_dump` इसके simple htmlचारों ओर कुछ के साथ , 0-मान-जोड़ने वाला पाठ नहीं। योग्य किक। यदि आपको यह पसंद नहीं है, तो इसका उपयोग न करें। केवल एक सलाह।
SpYk3HH

@ रेवरेन और अगर आपको यह पसंद आया है ... तो आप वास्तव में मेरे अपडेट को प्यार करेंगे: पी
SpYk3HH

1

PHP ऐरे ब्यूटिफायर यह सरल टूल PHP में एक सरणी या ऑब्जेक्ट आउटपुट लेता है, जैसे कि एक print_r () स्टेटमेंट और इसे कलर कोडिंग में आसानी से आपके डेटा को पढ़ने के लिए फॉर्मेट करता है। http://phillihp.com/toolz/php-array-beautifier/


var_dump आउटपुट के साथ काम नहीं करता है, उद्धरणों को तोड़ता है, बड़े डंप के लिए बेहद भ्रमित करता है।
raveren

1

अभी तक एक और घर संस्करण:

http://github.com/perchten/neat_html

मुझे लगता है कि यह बहुत लचीला है। यह विशेष रूप से आउटपुट वातावरण के लिए लक्षित नहीं है, लेकिन आपके पास वैकल्पिक तर्कों का एक समूह है, जो यह निर्दिष्ट कर सकते हैं कि आउटपुट / प्रिंट या व्यवहार, साथ ही कुछ लगातार सेटिंग्स क्यों बदलें।




1

यदि आप 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';

देखें: PHP सरणी कैसे निर्यात करें जहां प्रत्येक कुंजी-मूल्य जोड़ी अलग लाइन में है?


1

मुझे आश्चर्य है कि किसी ने सबसे आसान (यद्यपि बहुत सुंदर नहीं) कोड का उल्लेख नहीं किया। यदि आप केवल एक पठनीय आउटपुट (कोई रंग या इंडेंटेशन) प्राप्त नहीं करना चाहते हैं , तो काम के <pre>आसपास एक सरल var_dump, जैसा कि:

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

इस से बहुत कम उपरि नहीं मिल सकता है!


0

मैंने छोटी कक्षा लिखी जो क्रुमो के समान है, लेकिन ऐप में एम्बेड करना बहुत आसान है।

यहाँ लिंक है: https://github.com/langpavel/PhpSkelet/blob/master/Classes/Debug.php

और यहाँ नमूना आउटपुट: http://langpavel.php5.cz/debug_sample.html


डेमो टूट गया है, हालांकि कोड GitHub पर उपलब्ध है
Mawg का कहना है कि मोनिका

0

मेरी पसंद है https://github.com/hazardland/debug.php से डीबग है , जो केवल डिबग के रूप में नामित एकल फ़ंक्शन के साथ लाइब्रेरी है (आप अपने प्रोजेक्ट में या अपनी लाइब्रेरी में उस फ़ंक्शन को कॉपी कर सकते हैं) । विशिष्ट डीबग () 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"

0

TVarDumper

यह एक बेहतरीन टूल है, जिसे बग्गी PHP फंक्शन को रिप्लेस करने का इरादा है var_dumpऔरprint_r , क्योंकि यह जटिल ऑब्जेक्ट संरचना में पुनरावर्ती रूप से संदर्भित ऑब्जेक्ट की सही पहचान कर सकता है। कुछ अजीबोगरीब चर के अनिश्चित पुनरावर्ती प्रदर्शन से बचने के लिए इसका पुनरावर्ती गहराई नियंत्रण भी है।

देख: TVarDumper.php


अन्य वैकल्पिक समाधान है जिस पर अधिक लाभ प्रदान करता है के लिए var_dumpऔरprint_r परिपत्र संदर्भों का समर्थन कर सकते हैं, कृपया देखें: परिपत्र संदर्भों के साथ print_r और var_dump का उपयोग करना


अधिक विचारों के लिए, यह भी जांचें: आप PHP स्क्रिप्ट को कैसे डीबग करते हैं?


0

मेरा, एक अधिक सरल है, मेरे लिए मुझे बहुत ज्ञान / समय नहीं है कि बुनियादी ढांचे को स्थापित करने के लिए 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

0

एक और विकल्प है

composer require symfony/var-dumper --save-dev

तब आपकी फ़ाइल में आप बस उपयोग करते हैं dump($var) और आप इस तरह एक आउटपुट के साथ समाप्त करेंगेयहाँ छवि विवरण दर्ज करें


0

मुझे यहाँ एक और उत्तर जोड़ना था क्योंकि मैं वास्तव में अन्य समाधानों में चरणों से नहीं गुजरना चाहता था। यह अत्यंत सरल है और इसमें कोई एक्सटेंशन नहीं है, आदि शामिल हैं और यही वह है जो मुझे पसंद है। यह बहुत आसान है और बहुत तेज है।

पहले सिर्फ सवाल में चर json_encode:

echo json_encode($theResult);

जो परिणाम आपको JSON संपादक में http://jsoneditoronline.org/ पर मिलता है, उसे बस बाईं ओर के फलक में कॉपी करें, कॉपी करें> पर क्लिक करें और यह JSON को वास्तव में अच्छे ट्री प्रारूप में प्रिंट करता है।

प्रत्येक अपने स्वयं के लिए, लेकिन उम्मीद है कि यह कुछ अन्य लोगों के लिए एक और अच्छा विकल्प है! :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.