Mage :: লগ স্ক্রিনে লেখেন


21

আমার একটি ডেভলপমেন্ট সিস্টেম রয়েছে, ডিসপ্লে_রিয়ারগুলি চালু আছে, ম্যাজেন্টো বিকাশকারী মোডে আছে এবং আমি চেষ্টা করেছি

Mage::log($layered_navigation_filter_block); // Mage_Catalog_Block_Layer_Filter_Attribute

এবং লগ ফাইলের পরিবর্তে পর্দায় সবকিছু লেখা হয়েছিল, কেন?

এটি এই কেসের মতো দেখাচ্ছে:

// app/Mage.php:837
if (is_array($message) || is_object($message)) {
    $message = print_r($message, true);
}

তবে মুদ্রণ_আর থেকে দ্বিতীয় যুক্তি উপেক্ষা করা হবে:

Mage_Catalog_Block_Layer_Filter_Category Object ( [_filter:protected] => ...

 

[28-Jan-2013 22:48:43 UTC] PHP Fatal error:  Allowed memory size of 268435456 bytes exhausted (tried to allocate 241434624 bytes) in /var/www/app/code/local/MyCompany/Motif/Model/Observer.php on line 47
[28-Jan-2013 22:48:43 UTC] PHP Stack trace:
[28-Jan-2013 22:48:43 UTC] PHP   1. {main}() /var/www/index.php:0
[28-Jan-2013 22:48:43 UTC] PHP   2. Mage::run() /var/www/index.php:87
[28-Jan-2013 22:48:43 UTC] PHP   3. Mage_Core_Model_App->run() /var/www/app/Mage.php:683
[28-Jan-2013 22:48:43 UTC] PHP   4. Mage_Core_Controller_Varien_Front->dispatch() /var/www/app/code/core/Mage/Core/Model/App.php:354
[28-Jan-2013 22:48:43 UTC] PHP   5. Mage_Core_Controller_Varien_Router_Standard->match() /var/www/app/code/core/Mage/Core/Controller/Varien/Front.php:176
[28-Jan-2013 22:48:43 UTC] PHP   6. Mage_Core_Controller_Varien_Action->dispatch() /var/www/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:250
[28-Jan-2013 22:48:43 UTC] PHP   7. Mage_Catalog_CategoryController->viewAction() /var/www/app/code/core/Mage/Core/Controller/Varien/Action.php:419
[28-Jan-2013 22:48:43 UTC] PHP   8. Mage_Core_Controller_Varien_Action->generateLayoutBlocks() /var/www/app/code/core/Mage/Catalog/controllers/CategoryController.php:146
[28-Jan-2013 22:48:43 UTC] PHP   9. Mage_Core_Model_Layout->generateBlocks() /var/www/app/code/core/Mage/Core/Controller/Varien/Action.php:344
[28-Jan-2013 22:48:43 UTC] PHP  10. Mage_Core_Model_Layout->generateBlocks() /var/www/app/code/core/Mage/Core/Model/Layout.php:210
[28-Jan-2013 22:48:43 UTC] PHP  11. Mage_Core_Model_Layout->_generateBlock() /var/www/app/code/core/Mage/Core/Model/Layout.php:205
[28-Jan-2013 22:48:43 UTC] PHP  12. Mage_Core_Model_Layout->addBlock() /var/www/app/code/core/Mage/Core/Model/Layout.php:239
[28-Jan-2013 22:48:43 UTC] PHP  13. Mage_Core_Model_Layout->createBlock() /var/www/app/code/core/Mage/Core/Model/Layout.php:472
[28-Jan-2013 22:48:43 UTC] PHP  14. Mage_Core_Block_Abstract->setLayout() /var/www/app/code/core/Mage/Core/Model/Layout.php:456
[28-Jan-2013 22:48:43 UTC] PHP  15. Mage::dispatchEvent() /var/www/app/code/core/Mage/Core/Block/Abstract.php:239
[28-Jan-2013 22:48:43 UTC] PHP  16. Mage_Core_Model_App->dispatchEvent() /var/www/app/Mage.php:447
[28-Jan-2013 22:48:43 UTC] PHP  17. Mage_Core_Model_App->_callObserverMethod() /var/www/app/code/core/Mage/Core/Model/App.php:1317
[28-Jan-2013 22:48:43 UTC] PHP  18. MyCompany_Motif_Model_Observer->coreBlockAbstractPrepareLayoutAfter() /var/www/app/code/core/Mage/Core/Model/App.php:1338
[28-Jan-2013 22:48:43 UTC] PHP  19. print_r() /var/www/app/code/local/MyCompany/Motif/Model/Observer.php:47

ঠিক আছে, একটি মারাত্মক ত্রুটি ঘটে, কোনও শাটডাউন_ ফাংশন নিবন্ধিত হয় না, তবে মুদ্রণ_আর কেন প্রতিধ্বনিত হয়? :-) আমি এখনও বুঝতে পারছি না কি হচ্ছে।


আপনি যে আউটপুটটি স্ক্রিনে পাচ্ছেন তা ব্লক অবজেক্ট ডাম্প বা এটি ব্যতিক্রম? আপনি Mage :: লগ কল হওয়ার আগে একটি ব্যতিক্রম ধরা পড়তে পারে।
mybluevan

ঠিক কী, পর্দায় কী লিখেছেন?
অ্যালান ঝড়

প্রশ্নটি আপডেট করেছেন
ফ্যাবিয়ান ব্লাচস্মিদট

আপনি কোন স্ট্যাক, ম্যাজেন্টো এবং / অথবা পিএইচপি সংস্করণ ব্যবহার করছেন?
B00MER

এমএএমপি প্রো (অ্যাপাচি / ২.২.২২, পিএইচপি ৫.৪.৩) ম্যাজেন্টো ১.7.০.২০
ফ্যাবিয়ান

উত্তর:


29

আমি এটির জন্য একটি খুব ছোট এবং মিষ্টি পুনরুত্পাদনযোগ্য টেস্ট কেস তৈরি করেছি:

<?php

error_reporting(-1);
ini_set('display_errors', true);
ini_set('memory_limit', '1M');

$chunk = base64_encode(openssl_random_pseudo_bytes(1024));

while (true) {
    $a[] = print_r($chunk, true);
}

আপনি যে তথ্যটি রেখেছেন তা হ'ল কারণটি তথ্য print_rক্যাপচারের জন্য অভ্যন্তরীণভাবে আউটপুট বাফারিং ব্যবহার করা। print_rপিএইচপি উত্স থেকে ফাংশনটির সংজ্ঞাটি একবার দেখুন :

/* {{{ proto mixed print_r(mixed var [, bool return])
   Prints out or returns information about the specified variable */
PHP_FUNCTION(print_r)
{
    zval *var;
    zend_bool do_return = 0;

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &var, &do_return) == FAILURE) {
        RETURN_FALSE;
    }

    if (do_return) {
        php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
    }

    zend_print_zval_r(var, 0 TSRMLS_CC);

    if (do_return) {
        php_ob_get_buffer (return_value TSRMLS_CC);
        php_end_ob_buffer (0, 0 TSRMLS_CC);
    } else {
        RETURN_TRUE;
    }
}

যেহেতু পিএইচপি স্মৃতিশক্তি হারিয়েছে এবং মরে যাচ্ছে, আউটপুট বাফারটি print_rকল করার মাধ্যমে এটি পরিষ্কার করার আগে ফ্লাশ করা হবেphp_ob_get_buffer

আমি নিশ্চিত না যে যাইহোক এটি প্রায় হতে পারে। কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি উত্পাদনে এই লগিংটি অক্ষম করেছেন, বা পৃষ্ঠাতে এই ধরণের আউটপুট আটকাতে মোড_সিকিউরিটি চালান।


এই বিস্তারিত উত্তরের জন্য আপনাকে অনেক ধন্যবাদ। আমার সি শিখতে পুনরায় চালু করা উচিত এবং পিএইচপি উত্সকোডটি পড়তে হবে :)
ফ্যাবিয়ান ব্ল্যাচসমিট

6

ডেভিডালগার কী দেখায় তা গুরুত্বপূর্ণ। আপনি যে বস্তুটি লগ করার চেষ্টা করছেন তা খুব বড় এবং পিএইচপি মেমরির বাইরে চলে যাওয়ার কারণ ঘটায়। আপনার মেমরির সীমা এবং আপনার ব্লকের আকারের উপর নির্ভর করে আপনি ব্যবহার করতে সক্ষম হতে পারেন:

Mage::log($layered_navigation_filter_block->debug());

Varien_Object প্রসারিত সমস্ত বস্তু অন্তর্নিহিত _ডাটা সম্পত্তি পুনরাবৃত্তভাবে আউটপুট করতে ডিবাগ () ব্যবহার করতে পারে।

আরও বিশদ ব্যাখ্যার জন্য আমার একজন সহকর্মীর দ্বারা এই ব্লগ পোস্টটি দেখুন।


2

এই কারণ হতে পারে?

/programming/9329877/using-print-r-in-ob-start

"পিএইচপি ডকুমেন্টেশন থেকে: যখন রিটার্ন প্যারামিটার ব্যবহার করা হয়, তখন এই ফাংশনটি অভ্যন্তরীণ আউটপুট বাফারিং ব্যবহার করে যাতে এটি একটি ob_start () কলব্যাক ফাংশনের অভ্যন্তরে ব্যবহার করা যায় না।" এখানে আরও তথ্য: [php.net/manual/en/function.print-r.php]

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.