Magento shell命令致命错误:未找到类“法师”

时间:2013-08-19 16:27:49

标签: php magento magento-1.7 php-5.3

当我从/ shell /目录中运行此命令时:

php -f regularPromos.php

为什么会收到此错误?

PHP Fatal error: Class 'Mage' not found in /var/www/vhosts/yoohoo/httpdocs/shell/regularPromos.php on line 28

这是regularPromos.php:

<?php

require_once 'abstract.php';

class Mage_Shell_RegularPromos extends Mage_Shell_Abstract
{     
    //Day of week to repeat promotion
    protected $day;

    //ID of promotion
    protected $promoID;

    //Rule process object
    protected $rule;


    public function Mage_Shell_RegularPromos($promoID, $day)
    {
        $this->day = $day;
        $this->promoID = $promoID;
        $this->rule = Mage::getModel('salesrule/rule');
    }


    public function run()
    {
        date_default_timezone_set('America/New_York');
        $nextWeek = date('Y-m-d', strtotime('next '. $this->day));
        $rule = $rule->load($this->promoID);
        $rule->setFromDate($nextWeek)
                ->setToDate($nextWeek)
                ->save();
    }
}

$shell = new Mage_Shell_RegularPromos(7, 'monday');
$shell->run();

?>

根据我在这个问题上找到的所有SO线程:

  • 我尝试使用编译器开/关/清除/编译运行,并显示相同的错误消息

  • 我已通过管理面板清除缓存并手动删除 / var / cache /中的所有内容。

  • APC没有出现在phpinfo()中,所以这应该不是问题 任

我可以运行compiler.php就好了,所以我假设我在上面的php中犯了一个错误。

我正在运行Magento 1.7 CE,PHP 5.3.3

4 个答案:

答案 0 :(得分:7)

也许如果你在脚本的开头添加它:

require_once('./app/Mage.php');
Mage::app();

问候

答案 1 :(得分:5)

您错误地扩展了基本抽象类。如果你看一下抽象构造函数

#File: shell/abstract.php
public function __construct()
{
    if ($this->_includeMage) {
        require_once $this->_getRootPath() . 'app' . DIRECTORY_SEPARATOR . 'Mage.php';
        Mage::app($this->_appCode, $this->_appType);
    }

    $this->_applyPhpVariables();
    $this->_parseArgs();
    $this->_construct();
    $this->_validate();
    $this->_showHelp();
}

您可以在require应用程序类中看到这是shell脚本Mage的位置。您的类使用较旧的PHP语法重新定义了构造函数

public function Mage_Shell_RegularPromos($promoID, $day)
{
    $this->day = $day;
    $this->promoID = $promoID;
    $this->rule = Mage::getModel('salesrule/rule');
}

但你没有调用父构造函数。这意味着mage类不是requir,并且不会发生其他重要的初始化。我将重新定义您的构造方法,以便它使用较新的__construct语法,并调用父构造函数

public function __construct($promoID, $day)
{
    parent::__construct();
    $this->day = $day;
    $this->promoID = $promoID;
    $this->rule = Mage::getModel('salesrule/rule');
}

答案 2 :(得分:1)

我有同样的问题但是使用像indexer.php这样的核心shell脚本。我还不确定导致问题的原因,但它必须以某种方式与环境相关,因为shell脚本在开发服务器上运行良好,但在生产服务器上引起了问题。

基本上我收到了这个错误:

PHP Fatal error:  Class 'Mage' not found in abstract.php on line 86

这个有问题的代码是:

84. if ($this->_includeMage) {
85.    require_once $this->_getRootPath() . 'app' . DIRECTORY_SEPARATOR . 'Mage.php';
86.    Mage::app($this->_appCode, $this->_appType);
87. }

然后我将require_once更改为require并且错误消失了,一切正常。它似乎也适用于开发服务器。

答案 3 :(得分:-1)

发生此类错误时:

  

致命错误:班级&#39;法师&#39;在/home1/sumit/public_html/index.php

中找不到

如果不刷新页面,请将index.php替换为cache_flush,然后按Enter键。