找不到magento class zend_log

时间:2011-03-17 20:41:15

标签: php magento

在magento中写了几个帮助类之后,现在我遇到了这个问题,我收到了这个错误

致命错误:第33行的 app \ code \ local \ Uhma \ Program \ Helper \ Data.php中找不到类'Zend_Log'

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

我已经在谷歌呆了一段时间了,有人说我的助手中的一个功能是覆盖了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 个答案:

答案 0 :(得分:21)

您收到该错误的原因是

  1. 你有PHP代码产生警告
  2. Magento以错误处理方式运行,最多可达11个
  3. Magento尝试记录错误,但找不到该类。
  4. 有问题的代码是

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

    您在通话时(&$result)通过引用传递变量。这在现代版本的PHP中已被折旧。如果没有自定义错误处理,您将收到类似

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

    因此,在没有$result的情况下传递&。鉴于你的方法在其原型中声明的参数是传递参考,所以这样做不会在功能上改变你的代码。这应该照顾你当前的问题。

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

    由于您未在developer mode中工作,Magento尝试使用常量Zend_Log作为其类型来记录错误。问题是(或似乎是)如果您的错误在Magento引导程序/调度过程中发生得太快,则Zend_Log尚未加载,并且自动加载器不会处理它。这就是你收到错误的原因。

    应该修复您的代码,不要使用调用时通过引用传递(从调用代码中删除&$result,而不是从函数定义中删除)。如果您不想这样做,可以尝试先包括lib/Zend/Log.php。我认为这是一个坏主意,所以我将把这些方法留作读者的练习。

    此外,对于那些不熟悉“通过引用传递呼叫时间”这一术语的人,这意味着当您调用方法时,表示应通过引用传递变量。

    foo(&$bar);
    

    传递对函数的引用

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

    或者在方法的原型中声明一个参数,表明它应该通过引用传递

    public function applyInApp(&$content)
    {
    }
    

    仍然是合法的PHP代码。

答案 1 :(得分:1)

确保您的方法名称不是通用名称。 我发现问题是我的自定义类中的一个方法的名称。该方法称为getData()。一旦我重命名它,问题就解决了。所以,最有可能的问题是你的方法命名。尝试重命名可疑的函数名称。来源:

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