Мне нужно обновить свой сервер до PHP 5.3, но установить Magento, и я знаю, что Magento не играет хорошо с PHP 5.3.
Я думаю, что изменения не будут слишком обширными (из того, что я прочитал). Но я решил, что открою его для толпы SO.
Кто-нибудь сделал это успешно? Если да, вы взяли хорошие заметки?
Похоже, что они все еще находятся в процессе его совместимости:
http://www.magentocommerce.com/boards/viewthread/54158/
Если бы я был вами, я бы дождался официального релиза, прежде чем пытаться перейти на PHP5.3
Чтобы запустить Magento 1.3.x на PHP 5.3, вам необходимо заменить следующую функцию из соответствующих файлов:
1> index.php
error_reporting(E_ALL | E_STRICT);
в
error_reporting(E_ALL & E_STRICT & ~E_DEPRECATED);
2> lib / Varien / Object.php
__toString
в
__invoke
3> lib / Varien / Pear.php
error_reporting(E_ALL & ~E_NOTICE);
в
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
4> загрузчик / Maged / Pear.php
error_reporting(E_ALL & ~E_NOTICE);
в
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
5> app \ code \ core \ Mage \ Catalog \ Model \ Layer \ Filter \ Price.php
__toString
в
__invoke
6> app \ code \ core \ Mage \ Core \ Controller \ Request \ Http.php
split
в
explode
7> app \ code \ core \ Mage \ Catalog \ Model \ Category \ Attribute \ Backend \ Sortby.php
split
в
explode
8> app \ code \ core \ Mage \ Admin \ Model \ User.php
split
в
explode
Для пользователей терминалов, которые просто хотят применить патч, я бы рекомендовал использовать следующую статью: http://goivvy.com/blog/magento1.3fix/
Вы можете получить больше информации из следующего блога Magento:
http://www.blog.magepsycho.com/how-to-run-magento-1-3-x-on-php-5-3/
Надеюсь это поможет.
2 строки кода, но тогда это не безопасно для обновления …. производственный сервер никогда не должен запускать последнюю версию в любом случае, я бы никогда не обновлялся на производственном сервере … бета-тестирование или тестирование. __toString -> __invoke и split -> explode
Ну, если вы все-таки решите запустить Magento с PHP 5.3, вот как это сделать (протестировано с версией 1.3.2.3):
1: в index.php, вокруг строки 35, замените
error_reporting(E_ALL | E_STRICT);
с
error_reporting((E_ALL | E_STRICT) & !E_DEPRECATED)
(причина: Magento часто использует функцию split, которая устарела в PHP 5.3)
2: в /lib/Varien/Object.php, строка 484 изменяется
public function ___toString(array $arrAttributes = array(), $valueSeparator=',')
в
public function __invoke(array $arrAttributes = array(), $valueSeparator=',')
(причина: я действительно не знаю, но это работает!)
Re nic28: На установке 1.3.3.0 Magento мне также нужно было сделать __toString для изменения __invoke в приложении / коде / ядре / Маге / Каталоге / Модели / Слой / Фильтр / Price.php, строка 139:
$key=.=taxReq->__toString(array(), '_');
Я нашел длинный список файлов, которые используют функцию split. Его нужно заменить взрывом. Будет выполнено простое изменение имени функции. Этот список добавляет, что MagePsycho опубликовал выше. Папка загрузчика может содержать еще несколько файлов, поиск, который я использовал, находится в первой строке.
Search "\bspliti?\(" (68 hits in 54 files) E:\magento\shop\app\code\core\Mage\Adminhtml\controllers\System\ConfigController.php (1 hits) Line 155: foreach(split("\n", $e->getMessage()) as $message) { E:\magento\shop\app\code\core\Mage\Adminhtml\Model\Observer.php (1 hits) Line 63: $value = is_array($request->getPost($key)) ? $request->getPost($key) : split(',', $request->getPost($key)); E:\magento\shop\app\code\core\Mage\Adminhtml\Model\System\Config\Backend\Currency\Abstract.php (2 hits) Line 47: return split(',', Mage::getConfig()->getNode('currency/options/allow', $this->getScope(), $this->getScopeId())); Line 59: return split(',', Mage::getStoreConfig('system/currency/installed')); E:\magento\shop\app\code\core\Mage\Adminhtml\Model\System\Config\Backend\Locale.php (1 hits) Line 49: $values = split(',', $this->getValue()); E:\magento\shop\app\code\core\Mage\Bundle\sql\bundle_setup\mysql4-install-0.1.0.php (1 hits) Line 162: $applyTo = split(',', $installer->getAttribute('catalog_product', $field, 'apply_to')); E:\magento\shop\app\code\core\Mage\Catalog\Model\Category.php (1 hits) Line 756: $available = split(',', $available); E:\magento\shop\app\code\core\Mage\Catalog\Model\Convert\Adapter\Product.php (2 hits) Line 561: $websiteCodes = split(',', $importData['websites']); Line 592: $value = split(self::MULTI_DELIMITER, $value); E:\magento\shop\app\code\core\Mage\Catalog\Model\Resource\Eav\Mysql4\Url.php (2 hits) Line 502: $split = split('/', $category->getPath()); Line 710: $product->setCategoryIds(split(',', $product->getCategoryIds())); E:\magento\shop\app\code\core\Mage\Catalog\sql\catalog_setup\mysql4-upgrade-0.7.39-0.7.40.php (1 hits) Line 35: $applyTo = split(',', $installer->getAttribute('catalog_product', $field, 'apply_to')); E:\magento\shop\app\code\core\Mage\CatalogRule\Model\Rule\Condition\Product.php (1 hits) Line 361: $value = split(',', $value); E:\magento\shop\app\code\core\Mage\CatalogRule\sql\catalogrule_setup\mysql4-upgrade-0.7.1-0.7.2.php (1 hits) Line 44: foreach (split(',', $r['store_ids']) as $storeId) { E:\magento\shop\app\code\core\Mage\Customer\Model\Convert\Adapter\Customer.php (1 hits) Line 500: $value = split(self::MULTI_DELIMITER, $value); E:\magento\shop\app\code\core\Mage\Downloadable\Helper\Download.php (2 hits) Line 210: $contentType = split('; ', $this->_urlHeaders['content-type']); Line 225: $contentDisposition = split('; ', $this->_urlHeaders['content-disposition']); E:\magento\shop\app\code\core\Mage\Downloadable\sql\downloadable_setup\mysql4-install-0.1.0.php (1 hits) Line 46: $applyTo = split(',', $installer->getAttribute('catalog_product', $field, 'apply_to')); E:\magento\shop\app\code\core\Mage\Downloadable\sql\downloadable_setup\mysql4-upgrade-0.1.0-0.1.1.php (1 hits) Line 32: $applyTo = split(',', $installer->getAttribute('catalog_product', 'weight', 'apply_to')); E:\magento\shop\app\code\core\Mage\Eav\Model\Convert\Adapter\Entity.php (1 hits) Line 107: $split = split('/', $k); E:\magento\shop\app\code\core\Mage\Sales\Model\Order\Pdf\Abstract.php (1 hits) Line 157: foreach (split("\|", $address) as $str) { E:\magento\shop\lib\PEAR\SOAP\Parser.php (1 hits) Line 381: $this->message[$pos]['arrayOffset'] = split(',', substr($value, 1, strlen($value) - 2)); E:\magento\shop\lib\PEAR\SOAP\Transport\HTTP.php (2 hits) Line 272: $headers = split("\r?\n", $headers); Line 278: list($name, $value) = split(':', $value); E:\magento\shop\lib\Varien\Db\Adapter\Pdo\Mysql.php (1 hits) Line 585: $keyList[$v[1]] = split(',', str_replace($this->getQuoteIdentifierSymbol(), '', $v[2])); E:\magento\shop\lib\Zend\Cache\Frontend\Page.php (1 hits) Line 316: $tmp = split(':', $headerSent); E:\magento\shop\lib\Zend\Gdata\YouTube\VideoEntry.php (1 hits) Line 839: return split('(, *)|,', $keywordsString); E:\magento\shop\lib\Zend\Service\Amazon.php (1 hits) Line 202: $responseGroup = split(',', $options['ResponseGroup']);
Я бы не стал мешать Magento работать с 5.3, так как изменения, безусловно, будут более сложными, чем предполагает ваш источник. PHP 5.3 поставляется с пространствами имен, и механизм автозагрузки изменится точно. Это означает, что многие вещи будут меняться внутренне. Название длинных классов:
// Mage_Sales_Model_Order Mage::getModel('sales/order');
будет вызываться только как порядок в собственном пространстве имен, а не:
// maybe something like this Mage::getModel('order'); // or like this $order = new Order();
// зависит от того, как команда Magento будет внедрять пространства имен
Я затронул эту ситуацию в своем блоге . На самом деле это объясняет, как решить несовместимость между Magento 1.3.X и PHP 5.3.X. Я надеюсь, что это помогает.