класс magento zend_log не найден - PullRequest
9 голосов
/ 17 марта 2011

После написания нескольких вспомогательных классов в magento, теперь у меня возникла эта проблема, я получаю эту ошибку

Неустранимая ошибка : класс 'Zend_Log' не найден в app \ code \ local \ Uhma \ Programme \ Helper \ Data.php в строке 33

в строке 33 у меня есть

function WBSAPI_OnceProbe ()
{
    return ( $this->WBSAPI_CurlCall ( "once?action=probe" , &$result) );//LINE 33
}

функция, которую я вызываю с помощьювозвращаемое это

function WBSAPI_CurlCall ( $service , &$result=null )
{
    try {
        $s = curl_init();
            curl_setopt($s,CURLOPT_URL,MYWBSAPIURL.$service);
            curl_setopt($s,CURLOPT_POST,false);
            curl_setopt($s, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($s);
            curl_close($s);
        $result = json_decode ( $output , TRUE );
        if (!is_array($result)) return (false);
        if (!key_exists('status',$result)) return (false);
        if ($result['status'] != 0) return (false);

        return ( true );
    } catch ( Exception $e ) {
        return ( false );
    }
} 

Я был в Google некоторое время, некоторые говорят, что это функция в моем помощнике, которая перезаписывает функцию из magento, я помещаю WBSAPI_ ввсе мои функции в начале, так что это не может быть причиной, я продолжаю получать ту же ошибку, и я не знаю, что еще попробовать, нужна помощь здесь

если это может помочь, у меня есть некоторыедругие определения в моем файле, что-то вроде этого

define ('MYWBSAPIURL','wbsapi.withings.net/');
define ('MYAPIURL','scalews.withings.net/cgi-bin/');

define ('pound',0.453592);
define ('inch', 0.0254);
class Uhma_Program_Helper_Data extends Mage_Core_Helper_Abstract{
    //CLASS CONTENT
}

спасибо

Ответы [ 2 ]

21 голосов
/ 17 марта 2011

Причина, по которой вы получаете эту ошибку

  1. У вас есть код PHP, который выдает предупреждения
  2. Magento работает с ошибкой обработки до 11
  3. Magento пытается записать ошибку и не может найти класс.

Код, о котором идет речь,

$this->WBSAPI_CurlCall ( "once?action=probe" , &$result) );

Вы передаете переменную по ссылке во время вызова (&$result). Это осуждается в современных версиях PHP. Без специальной обработки ошибок вы получите предупреждение типа

PHP Warning:  Call-time pass-by-reference has been deprecated;

Итак, пройдите в $result без &. Учитывая, что ваш метод объявил в своем прототипе параметр paramater как передачу по ссылке, это не изменит функционально ваш код. Это должно решить вашу непосредственную проблему.

Большая причина, по которой Magento выдает эту ошибку, - это пользовательский обработчик ошибок.

#File: app/code/core/Mage/Core/functions.php
function mageCoreErrorHandler($errno, $errstr, $errfile, $errline)
{
    ...
    if (Mage::getIsDeveloperMode()) {
        throw new Exception($errorMessage);
    } else {
        Mage::log($errorMessage, Zend_Log::ERR);
    }
}

Поскольку вы не работаете в режиме разработчика , Magento пытается записать ошибку, используя константу Zend_Log в качестве ее типа. Проблема заключается (или кажется) в том, что если ваша ошибка возникает слишком рано в процессе начальной загрузки / отправки Magento, Zend_Log еще не загружен и автозагрузчик об этом не позаботится. Вот почему вы получаете свою ошибку.

Вы должны исправить свой код, чтобы не использовать передачу времени вызова по ссылке (уберите &$result из вашего вызывающего кода, но не из определений функций). Если вы не хотите этого делать, попробуйте включить lib/Zend/Log.php ранее. Я думаю, что это плохая идея, поэтому я оставлю инструкции в качестве упражнения для читателя.

Кроме того, для тех, кто не знаком с термином «передача вызова по ссылке», это означает, что переменная должна передаваться по ссылке при вызове метода .

foo(&$bar);

Передача ссылки на функцию

$bar = &baz;
foo($bar);

Или объявление параметра в прототипе метода, указывающее, что его следует передать по ссылке

public function applyInApp(&$content)
{
}

все еще допустимый код PHP.

1 голос
/ 15 июня 2012

Убедитесь, что имена ваших методов не являются общими.Я обнаружил, что проблема заключалась в названии одного из методов в моем пользовательском классе.Метод был назван getData ().Как только я переименовал его, проблема была решена.Так что, скорее всего, проблема в названии вашего метода.Попробуйте переименовать подозрительные имена функций.Источник:

http://www.netismine.com/magento/fatal-error-class-zend_log-not-found

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...