Magento 1.7:SUPEE-10975安全补丁后发出严格通知警告

时间:2018-11-29 10:35:38

标签: php magento magento-1.7

在Magento 1.7.0.2中安装SUPEE-10975后,我得到此PHP通知:

Strict Notice: Declaration of Mage_Core_Controller_Request_Http::getBaseUrl() should be compatible with that of Zend_Controller_Request_Http::getBaseUrl()  in app/code/core/Mage/Core/Controller/Request/Http.php on line 36

#0 app/code/core/Mage/Core/Controller/Request/Http.php(36): mageCoreErrorHandler(2048, 'Declaration of ...', '/kunden/12345_8...', 36, Array)
#1 lib/Varien/Autoload.php(93): include('/kunden/12345_8...')
#2 [internal function]: Varien_Autoload->autoload('Mage_Core_Contr...')
#3 app/code/core/Mage/Core/Model/App.php(1219): spl_autoload_call('Mage_Core_Contr...')
#4 app/code/core/Mage/Core/Model/Cookie.php(83): Mage_Core_Model_App->getRequest()
#5 app/code/core/Mage/Core/Model/Cookie.php(273): Mage_Core_Model_Cookie->_getRequest()
#6 app/code/core/Mage/Core/Model/App.php(568): Mage_Core_Model_Cookie->get()
#7 app/code/core/Mage/Core/Model/App.php(488): Mage_Core_Model_App->_checkCookieStore('website')
#8 app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Model_App->_initCurrentStore('', 'store')
#9 app/Mage.php(683): Mage_Core_Model_App->run(Array)
#10 index.php(87): Mage::run('', 'store')
#11 {main}

该代码在我的安装中两次可用:

  • app/code/core/Zend/Controller/Request/Http.php =>与SUPEE-10975一起引入
  • lib/Zend/Controller/Request/Http.php =>在Magento 1.7.0.2的基本安装包中可用

这是SUPEE-10975的回归版本还是我的安装问题?

1 个答案:

答案 0 :(得分:2)

我也看到了同样的问题,它看起来确实像是SUPEE-10975补丁1.7中的回归。

更改PHP配置以禁止显示严格模式通知将使您工作,但是,如果您更喜欢以严格模式工作,则也可以通过此方法来修补补丁。

如您所见,SUPEE-10975添加了一个新类Mage_Core_Controller_Request_Http,它扩展了新文件Zend_Controller_Request_Http中新捆绑的Zend类app/code/core/Zend/Controller/Request/Http.php

发出严格模式通知是因为Mage_Core_Controller_Request_Http::getBaseUrl()方法签名与扩展的新Zend_Controller_Request_Http::getBaseUrl()的方法签名不正确。

Mage_Core_Controller_Request_Http :: getBaseUrl()

class Mage_Core_Controller_Request_Http extends Zend_Controller_Request_Http
...
public function getBaseUrl() //getBaseUrl has no parameters here
{
    ...
}

Zend_Controller_Request_Http :: getBaseUrl()

class Zend_Controller_Request_Http extends Zend_Controller_Request_Abstract
...
public function getBaseUrl($raw = false) //getBaseUrl in the ancestor class has the parameter $raw
{
    ...
}

Mage_Core_Controller_Request_Http::getBaseUrl()方法应具有参数$raw,以避免严格的模式通知。这并不是真正的错误,PHP可以解决它,但理想情况下应该更正。

重新开始

通过在PHP配置中禁止严格模式通知,代码可以忽略该错误,但如果代码只能在严格模式下运行会更好,不是吗?

以下是解决方法,使其可以在严格模式下运行

app/code/core/Mage/Core/Controller/Request/Http.php复制到本地代码池:app/code/local/Mage/Core/Controller/Request/Http.php(请注意,我们正在 local 文件夹中创建替代)

编辑app/code/local/Mage/Core/Controller/Request/Http.php并从

更改行号265
public function getBaseUrl()

public function getBaseUrl($raw = false)

如果代码已编译,并且编译器在运行时没有出错,则可能需要清除编译后的版本才能看到所做的更改。 从Magento的网络根目录中,发出命令php shell/compiler.php clear

现在,应用了SUPEE-10975补丁程序,商店应该可以正常运行。

这是做什么的

我们在本地代码文件夹中创建核心Magento文件的副本,Magento将在使用核心文件之前尝试文件的本地副本,因此该本地副本将覆盖原始文件。

我们对文件的编辑,使getBaseUrl的方法签名与祖先类匹配,从而取消了严格模式通知。

可以这样做,因为Magento 1.7代码中都没有使用$raw参数,并且该方法的默认行为与没有该参数的情况完全相同。

要撤消此更改,只需删除我们刚刚制作的本地副本app/code/local/Mage/Core/Controller/Request/Http.php。 Magento将自动返回使用核心文件,尽管会有严格的模式通知。

唯一的问题是...

我们正在制造技术债务

下次发生安全补丁或升级时,如果原始文件被更改,我们制作的本地副本将不会被补丁或更新。您需要检查是否仍需要进行此更改,如果需要,请重新将核心文件复制到本地文件夹,然后如上所述重新修补文件。