我在 1&1 上托管了一个 Magento 1.6.2 站点。由于某些已安装的扩展,我必须支持 PHP 5.3 版,但遗憾的是 1&1 的可用选项是 PHP 5.2 或他们称之为 PHP Dev 的东西。快速phpinfo()
显示这实际上是 PHP 5.4。
我的问题是,当我设置为 5.4 时,后端的 Categories 页面会抛出 500 错误。回滚到 5.2 解决了这个问题,但这会破坏我的产品页面。在短期内我可以处理它们之间的交换,但是当站点交给客户时,这对于长期解决方案显然是不可接受的。
任何人都可以建议这种不兼容性可能在哪里,以及我可以采取哪些步骤来解决它?我最大的障碍是托管在共享服务器上,所以我不能查看 Apache 日志。
更新:
根据 CCBlackburn 在评论中的建议,我试图追踪错误的起源点,但我不得不承认我并不真正理解我得到的结果。类别页面的 URL 如下所示:
example.com/index.php/admin/catalog_category/index/key/blahblah
我认为这Mage_Adminhtml_CatalogController
将是开始查找的地方,但是Mage::log()
作为第一行的调用indexAction()
未能写入日志。
我决定向上移动继承并切入构造函数,因此将以下内容添加到Mage_Adminhtml_Controller_Action
:
function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array()) {
Mage::log('construct pre');
parent::__construct($request,$response,$invokeArgs);
Mage::log('construct post');
}
这更好,因为第一个日志调用写入文件,但第二个没有。
接下来我再次将继承上移,并将构造函数修改Mage_Core_Controller_Varien_Action
如下:
public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array())
{
Mage::log('request: '.$request);
$this->_request = $request;
Mage::log('response: '.$response);
$this->_response= $response;
Mage::log('pre set action');
Mage::app()->getFrontController()->setAction($this);
Mage::log('post set action');
$this->_construct();
}
问题是这些日志调用都没有做任何事情。这让我很困惑,因为在它做任何事情之前肯定应该至少再执行一次日志调用parent::__construct();
。Mage_Adminhtml_Controller_Action
除非传入值存在问题,但我不知道如何检查/调试它?