当我从/ 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
答案 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键。