サーバーをPHP5.3にアップグレードする必要がありますが、Magentoをインストールしていて、MagentoがPHP5.3でうまく機能しないことを知っています。
(私が読んだものから)変更はそれほど広範囲ではないと思います。しかし、私はそれをSOの群衆に開放すると思いました。
誰かがこれを成功させましたか?もしそうなら、あなたは良いメモを取りましたか?
PHP5.3でMagento1.3.xを実行するには、対応するファイルから次の関数を置き換える必要があります。
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/
お役に立てれば。
互換性を確保する過程にあるようです。
http://www.magentocommerce.com/boards/viewthread/54158/
もし私があなたなら、PHP5.3へのアップグレードを試みる前に公式リリースを待つでしょう
2行のコードですが、アップグレードは安全ではありません....本番サーバーはとにかく最新リリースを実行するべきではありません。本番サーバーでアップグレードすることは決してありません...ベータ版またはテストしてください。__toString->__呼び出しと分割->爆発
とにかくPHP5.3でMagentoを実行することにした場合は、次の方法で実行できます(バージョン1.3.2.3でテスト済み)。
1:index.phpの35行目あたりを置き換えます
error_reporting(E_ALL | E_STRICT);
と
error_reporting((E_ALL | E_STRICT) & !E_DEPRECATED)
(理由:Magentoは、PHP 5.3で非推奨となったsplit関数を使用することがよくあります)
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のインストールでは、app / code / core / Mage / Catalog / Model / Layer / Filter / Price.phpの139行目で__toStringから__invokeへの変更も行う必要がありました:
$key=.=taxReq->__toString(array(), '_');
関数splitを使用するファイルの長いリストを見つけました。explodeに置き換える必要があります。関数名を変更するだけで十分です。このリストは、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']);
5.3で動作するようにMagentoを変更することは気にしないでしょう。変更は、ソースが想定しているよりも間違いなく複雑になるからです。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チームが名前空間を実装する方法によって異なります
この状況についてはブログで取り上げました。実際には、Magento1.3.XとPHP5.3.Xの間の非互換性を解決する方法を説明しています。お役に立てば幸いです。