Я видел ту же проблему, она выглядит как регрессия в патче 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 вернется к использованию основного файла автоматически, хотя и со строгими уведомлениями о режиме.
Единственная проблема ...
Мы создаем техническую задолженность
СледующееКогда происходит исправление безопасности или обновление, если исходный файл изменяется, созданная нами локальная копия не будет исправлена или обновлена.Вам нужно будет проверить, требуется ли это изменение, и, если это так, повторно скопировать файл ядра в локальную папку и повторно пропатчить файл, как указано выше.