Magento für PHP 5.3 anpassen und dabei kompatibel bleiben

| Keine Kommentare

Auf immer mehr Servern kommt inzwischen PHP 5.3.x zu Einsatz, da es ja einige neue nützliche Features mitbringt und man ja ohnehin up-to-date sein will/muss.

Will man einen bestehenden Magento-Shop weiter auf der neuen PHP-Version betreiben, so bedarf es einiger kleiner Anpassungen damit alles wie gewohnt funktioniert.

Als erstes müssen wir die magische Methode __toString() in Varien_Object (/lib/Varien/Object.php) reparieren, da diese keine Argumente entgegennehmen kann. Vor der Version 5.3 wurden optionale  Parameter geduldet, nun gibt es dafür eine Fehlermeldung.

Fatal error: Method Test::__tostring() cannot take arguments in ...

Dann halten wir uns doch einfach daran, wie PHP gerne sein __toString() hätte und entfernen die Parameterliste.

Damit alles trotzdem wie gewohnt funktioniert, holen wir uns die Parameter auf anderem Weg.

<?php
class Varien_Object implements ArrayAccess
{
  // ...
  public function __toString()
  {
    $args = func_get_args();
    $arrAttributes = isset($args[0]) ? (array)$args[0] : array();
    $valueSeparator = isset($args[1]) ? $args[1] : ',';

    $arrData = $this->toArray($arrAttributes);
    return implode($valueSeparator, $arrData);
  }
  // ...
}

Jetzt lässt sich die Funktion zwar weiter mit Parametern aufrufen, wirft aber kein fatal error mehr.

Im zweiten Schritt müssen wir nun sämtliche Aufrufe von split() gegen explode() austauschen, da die Funktion mittlerweile deprecated ist. Ob ihr das per Script oder manuell macht, überlasse ich euch.

Ich habe mir mal alle Stellen im Code anzeigen lassen und es war eine recht überschaubare Menge an Dateien.

Zuletzt können wir noch eine Anpassung am Error-Reporting-Level in der index.php vornehmen, um weitere deprecated-Notice zu unterdrücken.

An dieser Stelle müssen wir beachten, dass es die Konstante E_DEPRECATED auch erst ab Version 5.3 standardmäßig existiert. Um abwärtskompatibel zu bleiben müssen die Konstante abfragen.

Aus

error_reporting(E_ALL | E_STRICT);

wird dann

if (defined('E_DEPRECATED') {
  error_reporting((E_ALL | E_STRICT) & !E_DEPRECATED);
} else {
  error_reporting(E_ALL | E_STRICT);
}

Damit sollte die Magento-Installation dann wie gewohnt mit der neuen PHP-Version laufen.

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.


Schlagwörter: A/B-Test, AbstractType, Adapter, AddOn, Administration, Ajax, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, Auftrag, Ausbildung, Auswertung, Authentifizierung, AutoLoader, AWS, Bedienung, Bedingung, Benchmark, Berechtigung, Berlin, Bildbearbeitung, Bildschirmfoto, Blog, Blogroll, BOM, Bootstrap, Bot, Browser, Bugtracker, Byte Order Mark, Bücher, Cache, CakePHP, Call-Center, Callback, CamelCase, Canvas, Captcha, CDN, Cheatsheet, CLI, Clickout, Closure, Cloud, CodeSniffer, Collection, Community, Comparator, Config, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CRUD, CSS, CSV, CustomLibrary, Custom_Model, Daemon, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Datum, Debug, Decorator, Dekorierer, Design, Design Patterns, Doctrine, Dokumentation, Dump, Duplikat, each, EC2, Eclipse, Email, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Event, Eventhandling, Exception-Handling, Extension, Facebook, Factory, Fallback, Fehler, Fehlermeldung, Filter, Firefox, Flash, flexigrid, Foreach, Formatierung, Formular, Framework, FTP, Funktion, Futon, ga:pi(), Getter, Google Analytics, Hash, Hash-Bang, Header, htaccess, HTML5, htpasswd, HTTP, HTTPS, IDE, If, Implementierung, InnoDB, Interceptor, Interface, Internet Explorer, isset, Iterator, Java, JavaScript, Job, jQuery, Kommentar, Konfiguration, Konsole, Kontrollstruktur, kopieren, kostenlos, Kundenbetreuung, Late Static Binding, Layout, Links, Linux, Listeners, Lizenz, Logging, Löschen, Magento, Magic Methods, Manual, ManyToMany, Marketing, Methode, Model, Monolog, MVC, MySQL, NetBeans, Network, Nirvanix, Objekt, Observable, Observer, OneToMany, Online Tool, OOP, Open Source, Operator, OR-Mapper, Order, ORM, O’Reilly, Parameter, Partnersuche, Passwort, Performance, PHP, php.ini, PHP hates me, phpMyAdmin, PHPUnit, Plugin, Popup, Proxy, Prüfsumme, Prüfung, QR-Code, Qualitätssicherung, Query, Queue, Redesign, Refactoring, Reflection, Request, Response, Responsive Design, Rest-API, Rockstar, Rollback, Routing, S3, Samba, Scheifen, Schleife, Schutz, Screenshot, Secure Shell, Selbstreferenz, Server, Setter, setTimeout, Shop, Sicherheit, Sicherung, Sichtbarkeit, Singleton Pattern, Skin, SOAP, Social Network, Software, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, Splittest, SSH, SSL, Stammtisch, Statement, static, Statistik, Status, Stellvertreter, Strategy Pattern, Stream, String, Stuttgart, Stylesheet, Subversion, Sun VirtualBox, Support, SVN, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Theme, Thumbnail, Tool, Tour, Tracking, Twig, Twitter, Type-Cast, Ubuntu, Umwandlung, Underscore, unset, Update, Upload, Url, User Story, Validierung, Vererbung, Versionskontrolle, Versionsnummer, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Warteschlange, Webserver, Webservice, Weiterleitung, Werkzeug, Windows, WindowsAzure, WordPress, Wrapper, Writer, XML, Youtube, Zeitschleife, Zeitsteuerung, Zend Framework, Zend_Application, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Reflection, Zend_Service, ZPress, Zugangskontrolle, Zugriffsmethode