Magento 1.7: строгое предупреждение после исправления безопасности SUPEE-10975 - PullRequest
0 голосов
/ 29 ноября 2018

После установки SUPEE-10975 в Magento 1.7.0.2 я получил следующее уведомление 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 голосов
/ 04 декабря 2018

Я видел ту же проблему, она выглядит как регрессия в патче SUPEE-10975 для 1.7.

Изменение вашей конфигурации PHP для подавления уведомлений о строгом режиме заставит вас работать, но если вы предпочитаете работать в строгом режиме, есть способ также исправить патч.

Когда выКак уже отмечалось, SUPEE-10975 добавляет новый класс Mage_Core_Controller_Request_Http, который расширяет новый класс Zend Zend_Controller_Request_Http, расположенный в новом файле 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 вернется к использованию основного файла автоматически, хотя и со строгими уведомлениями о режиме.

Единственная проблема ...

Мы создаем техническую задолженность

СледующееКогда происходит исправление безопасности или обновление, если исходный файл изменяется, созданная нами локальная копия не будет исправлена ​​или обновлена.Вам нужно будет проверить, требуется ли это изменение, и, если это так, повторно скопировать файл ядра в локальную папку и повторно пропатчить файл, как указано выше.

...