मानव-पठनीय के प्रारूप में एक बहु-स्तरीय सरणी को आउटपुट (लॉग करने के लिए) कैसे करें?


91

मैं एक ड्रुपल साइट पर काम कर रहा हूं और जब डिबगिंग कर रहा हूं, तो मुझे हमेशा लंबे, नेस्टेड सरणियों के माध्यम से पढ़ना पड़ता है। नतीजतन, मेरे जीवन का एक बड़ा हिस्सा तीर, वापसी और टैब कुंजियों का उपयोग करके खर्च किया जाता है, ताकि 1000+ वर्ण तार को एक नेस्टेड, पठनीय प्रारूप में विभाजित किया जा सके।

ड्रुपल देवों के लिए, मैं डेवेल्स डीएसएम () का उपयोग नहीं कर सकता, क्योंकि मैं मल्टी-स्टेप # अहा / # अजाक्स रूपों के साथ काम कर रहा हूं, और मैं केवल एरियर्स लॉग को आउटपुट कर सकता हूं, स्क्रीन पर नहीं।

दृश्य उदाहरण:

बुराई:

array ('form_wrapper' => array ('#tree' => true, '#type' => 'fieldet', '#prefix' => '', '#suffix' => '' ',' #value '=) > '', 'नाम' => सरणी ('# टाइप' => 'टेक्स्टफील्ड', '# शीर्षक' => NULL, '# आकार' => 60, '# लक्ष्मण' => 60, '# पाठ' = '' > असत्य, '# शब्द' '=> पूर्ण,' # गुण '=> सरणी (' प्लेसहोल्डर '=>' ईमेल '),' '# पद' => सरणी ('' फॉर्म_वॉपर ''> सरणी ('नाम' =) '', 'पास' => '',),
...

अच्छा:

array ( 
'form_wrapper' => array ( 
    '#tree' => true, 
    '#type' => 'fieldset', 
    '#prefix' => '<div>', 
    '#suffix' => '</div>', 
    '#value' => '', 
    'name' => array ( 
        '#type' => 'textfield', 
        '#title' => NULL, 
        '#size' => 60, 
        '#maxlength' => 60, 
        '#required' => false, 
        '#description' => NULL, 
        '#attributes' => array ( 
            'placeholder' => 'Email', 
        ), 

संपादित करें : क्षमा करें, "स्क्रीन पर आउटपुट नहीं" से मेरा मतलब ड्रुपल के सिस्टम संदेशों के माध्यम से है, जहां क्लिक करने योग्य, नेस्टेड प्रारूप (devel.module का उपयोग करके) में सरणियों का उत्पादन संभव है।


1
<; php गूंज '<pre>'; Print_r ($ सरणी, 1)। '</ pre>'; ?>
रूफिनस

जवाबों:


203

यदि आपको अपाचे त्रुटि लॉग में त्रुटि दर्ज करने की आवश्यकता है तो आप यह कोशिश कर सकते हैं:

error_log( print_r($multidimensionalarray, TRUE) );

3
लगता है कि यह print_r(लोअरकेस) है। क्या print_Rवास्तव में भी काम करता है ?
evanrmurphy

धन्यवाद @AkhilrajNS क्या आप मुझे इस बारे में अधिक बता सकते हैं कि मैं सम्मिलित प्रश्न या किसी भी क्वेरी को कैसे भेज सकता हूं जिसे इस लॉग संदेश के बीच निष्पादित किया गया है।
अंकित सुथार

@ankitsuthar का मतलब क्या था SQL क्वेरी?
अखिलराज एनएस

हां, लेकिन मुझे यह सीआई में अंतिम क्वेरी फ़ंक्शन द्वारा मिला। दरअसल, मैं एक डेटा लॉग इन करना चाहता हूं जो डाला या एडिट किया हुआ हो, डिलीट हो।
अंकित सुथार

यह डम है। यह \nवास्तविक newlines के बजाय newline वर्णों को शाब्दिक के रूप में आउटपुट करता है।
ओथियस

23

http://php.net/manual/en/function.print-r.php इस फ़ंक्शन का उपयोग आउटपुट स्वरूपित करने के लिए किया जा सकता है:

$output = print_r($array,1);

$outputएक स्ट्रिंग चर है, इसे हर दूसरे स्ट्रिंग की तरह लॉग किया जा सकता है। शुद्ध php में आप उपयोग कर सकते हैंtrigger_error

पूर्व। trigger_error($output);

http://php.net/manual/en/function.trigger-error.php

अगर आपको इसे html में भी प्रारूपित करने की आवश्यकता है, तो आप <pre>टैग का उपयोग कर सकते हैं


1
प्रश्न पढ़ें - लॉग आउटपुट के लिए ओपी को ऐसा करना होगा - स्क्रीन आउटपुट नहीं।
मैट

@ मैट ने जवाब पढ़ा,if you need to format it also in html
कोड-जफ

@Fivell, मैं कोशिश करता हूं। यदि आप अपना उत्तर स्पष्ट करने के लिए कहते हैं कि आउटपुट को लॉग फ़ाइल में भेजा जा सकता है, तो मैं अपना -1 हटा दूंगा।
मैट

1
@Fivell इसके साथ एक छोटी सी समस्या है जो trigger_errorसंदेशों को अधिकतम 1024 लंबाई या कुछ इसी तरह तक सीमित करती है। कुछ लंबे var_exports/ print_rस्ट्रिंग्स बनाने से कट-ऑफ मिलता है। यह सरल संरचनाओं के लिए उपयोगी है।
महाई स्टैंचु

7

साधारण सामान:

यदि आप HTML मोड में नहीं बल्कि व्यू-सोर्स मोड में परिणाम देखते हैं या @Joel Larson ने कहा है कि यदि आप किसी टैग में सब कुछ लपेटते हैं print_r, तो इसका उपयोग करना , var_dumpया var_exportइसे बहुत अच्छी तरह से करना चाहिए <pre>

print_r पठनीयता के लिए सबसे अच्छा है, लेकिन यह अशक्त / गलत मूल्यों को नहीं छापता है।

var_dump मूल्यों और लंबाई और अशक्त / झूठे मूल्यों की जाँच के लिए सबसे अच्छा है।

var_exportसिमेरिलर है, var_dumpलेकिन इसका उपयोग डंप किए गए स्ट्रिंग को प्राप्त करने के लिए किया जा सकता है।

इनमें से किसी के द्वारा लौटाया गया फॉर्मेट सोर्स कोड में सही तरीके से इंडेंट होता है और var_exportलॉगिंग के लिए इस्तेमाल किया जा सकता है क्योंकि इसका इस्तेमाल डंपिंग स्ट्रिंग को वापस करने के लिए किया जा सकता है।

उन्नत सामान:

PHP के लिए xdebug प्लग-इन का उपयोग करें क्योंकि यह var_dumpHTML प्रारूपित स्ट्रिंग्स को कच्चे डंप प्रारूप के रूप में प्रिंट नहीं करता है और साथ ही आपको एक कस्टम फ़ंक्शन की आपूर्ति करने की अनुमति देता है जिसे आप स्वरूपण के लिए उपयोग करना चाहते हैं।


2
जवाब पढ़ें var_exportआपको एक स्ट्रिंग वापस करने की अनुमति देता है।
मिहाई स्टैंचु

2

Drupal के Devel मॉड्यूल में अन्य उपयोगी फ़ंक्शंस शामिल हैं, जो फ़ाइलों को लॉग करने के लिए स्वरूपित सरणियों और ऑब्जेक्ट्स को प्रिंट कर सकते हैं। Http://ratatosk.net/drupal/tutorials/debugging-drupal.html पर गाइड देखें

dd ()

साइट के अस्थायी निर्देशिका में "drupal_debug.txt" नामक किसी भी चर को लॉग करता है। इस फ़ंक्शन से सभी आउटपुट को लॉग फ़ाइल में जोड़ा जाता है, जिससे यह देखना आसान हो जाता है कि आपके कोड को संशोधित करने के साथ ही चर की सामग्री कैसे बदल जाती है।

यदि आप Mac OS X का उपयोग कर रहे हैं, तो आप लॉग फ़ाइल की सामग्री की निगरानी के लिए लॉगिंग कंसोल का उपयोग कर सकते हैं।

यदि आप लिनक्स के स्वाद का उपयोग कर रहे हैं, तो आप फ़ाइल में लॉग किए जा रहे डेटा को देखने के लिए "पूंछ -f drupal_debug.txt" कमांड का उपयोग कर सकते हैं।


1

इससे आपको मदद मिलेगी

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

संपादित करें

का उपयोग echo '<pre>';करना बेकार है, लेकिन var_export($var);वह काम करेंगे जो आप उम्मीद कर रहे हैं।


1
@Matt जब यह पैरामीटर TRUE पर सेट होता है, तो print_r () प्रिंट करने के बजाय सूचना लौटा देगा।
कोड-जफ

0

आपको पूर्व टैग के भीतर एक var_dump () का उपयोग करने में सक्षम होना चाहिए। अन्यथा आप एक पुस्तकालय जैसे डम्प_r.php का उपयोग करके देख सकते हैं: https://github.com/leeoniya/dump_r.pp

मेरा समाधान गलत है। ओपी लॉग फ़ाइल में स्टोर करने के लिए रिक्त स्थान के साथ स्वरूपित समाधान की तलाश में था।

एक समाधान var_dump के साथ आउटपुट बफ़रिंग का उपयोग करने के लिए हो सकता है, फिर str_replace () रिक्त स्थान के साथ सभी टैब को लॉग फ़ाइल में प्रारूपित करने के लिए।


प्रश्न पढ़ें - लॉग आउटपुट के लिए ओपी को ऐसा करना होगा - स्क्रीन आउटपुट नहीं।
मैट

मैंने सवाल पढ़ा। उस छोटी सी आखिरी टिप्पणी को याद किया। मुझे बताने के लिए धन्यवाद। यह समाधान तब काम करने वाला नहीं है।
जोएल लार्सन

0

मुझे आश्चर्य है कि जिस तरह से मैं किसी ऐरे को डिबग करना पसंद करता हूं, उसका कोई भी उपयोग या अनुशंसा नहीं करता है:

error_log(json_encode($array));

मेरे ब्राउज़र के बगल में मैं tailकंसोल में मेरा सर्वर लॉग इन करता हूँ।

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