X

Magento 1: Use of iconv.internal_encoding is deprecated in /lib/Zend/Validate/Hostname.php on line 521

Понадобилось поработать с Magento 1, которая успешно работает на PHP 5.4.16, но тк в убунте нет поддержки такой старой версии, а работать через докер мне лень, я установил проект локально с PHP 5.6. При попытке зайти на локальную версию сайта я получил Exception: Use of iconv.internal_encoding is deprecated in lib/Zend/Validate/Hostname.php on line 521
Стек Exception-а вот такой

Deprecated functionality: iconv_set_encoding(): Use of iconv.internal_encoding is deprecated  in lib/Zend/Validate/Hostname.php on line 521

#0 [internal function]: mageCoreErrorHandler(8192, 'iconv_set_encod...', '/...', 521, Array)
#1 lib/Zend/Validate/Hostname.php(521): iconv_set_encoding('internal_encodi...', 'UTF-8')
#2 lib/Zend/Uri/Http.php(449): Zend_Validate_Hostname->isValid('site.loc')
#3 lib/Zend/Uri/Http.php(281): Zend_Uri_Http->validateHost()
#4 lib/Zend/Uri/Http.php(154): Zend_Uri_Http->valid()
#5 lib/Zend/Uri.php(143): Zend_Uri_Http->__construct('http', '//site.loc/')
#6 app/code/core/Mage/Core/Model/Store.php(719): Zend_Uri::factory('http://site.lo...')
#7 app/code/core/Mage/Core/Controller/Varien/Front.php(332): Mage_Core_Model_Store->isCurrentlySecure()
#8 app/code/core/Mage/Core/Controller/Varien/Front.php(161): Mage_Core_Controller_Varien_Front->_checkBaseUrl(Object(Mage_Core_Controller_Request_Http))
#9 app/code/core/Mage/Core/Model/App.php(370): Mage_Core_Controller_Varien_Front->dispatch()
#10 app/Mage.php(691): Mage_Core_Model_App->run(Array)
#11 index.php(87): Mage::run('', 'store')
#12 {main}

Как видно из ошибки метод iconv_set_encoding устарел. Заменить его можно на установку default_charset через ini_set. Вот так

(PHP_VERSION_ID < 50600) ? iconv_set_encoding('internal_encoding', 'UTF-8') : ini_set('default_charset', 'UTF-8');

Соответственно надо пойти на указанную строку в указанном файле и поменять там iconv_set_encoding на ini_set.

Чтобы не мучаться с этим каждый раз, после того, как я сделал все эти правки руками, я приготовил патч: iconv.internal_encoding-is-deprecated.patch

Применяется он так

$ cd /var/www/site.com/public_html
$ patch -p1 < iconv.internal_encoding-is-deprecated.patch

Категории: Magento