在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
}
感谢
答案 0 :(得分:21)
您收到该错误的原因是
有问题的代码是
$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