2016-06-04 4 views
0

В течение нескольких лет я использую Magento в качестве платформы своего сайта для электронной коммерции.Запись больших динамических массивов/объектов в текстовые файлы журнала

Но мне иногда очень надоедает, когда я вижу недостаток функций PHP, например print_r или var_dump, для обработки большого массива объектов/массива в файл журнала (при печати этого большого количества данных в браузере об этом уже не говорится).

Например, когда я проверяю (отлаживаю, что это за контур и какие данные он хранит) большой объект коллекции (или объект, содержащий много других объектов из-за зависимостей), например category-collection или product-collection, если я запускаю код ниже :

$collection = Mage::getModel('catalog/category')->getCollection(); 

или

$collection = Mage::getModel('catalog/product')->getCollection(); 
Mage::log(print_r($collection, true), null, 'developer.log'); 

Тогда я много раз получаю ошибку Allowed memory size of ######## bytes exhausted ..., особенно если делать живые проекты (живые веб-сайты, размещенные на общих серверах).

Поэтому мне действительно нужно предложение core-php о том, как писать большие объекты/массивы, такие как коллекции Magento, в текстовые файлы журналов без использования PHP Engine, не имея необходимости устанавливать Xdebug или другие внешние утилиты.

Как (если можно) могу использовать buffering или string splitting в этом сценарии?

ответ

1

Скорее всего, вам не нужен весь объект сбора, зарегистрированный в файле, но $collection->getItems(). В свойствах объектов ваших коллекций могут быть рекурсии, поэтому они не могут быть правильно var_dump'ed.

+0

Но имеет ли каждая коллекция функцию 'getItems()' определена? Иногда я обнаружил, что некоторые объекты '$ collection' не имеют доступных' getItems() 'или как получить каждую функцию, которую коллекция может вызывать, включая базовые геттеры и сеттеры? Как это узнать? 'get_class_methods' не помогает в этом. –

+0

'getItems' - не волшебный метод в коллекциях Magento. Простейший простой способ PHP - 'if (is_callable ($ collection, 'getItems')) {...}' Более элегантным способом является проверка 'if ($ collection instanceof Varien_Data_Collection) {...}' –

Смежные вопросы