Ergebnis 1 bis 15 von 15

Thema: [Gelöst] Contao Leads & Notification Center PHP 7 "Cannot use 'String'"

  1. #1
    Contao-Nutzer
    Registriert seit
    04.01.2015.
    Beiträge
    13

    Standard [Gelöst] Contao Leads & Notification Center PHP 7 "Cannot use 'String'"

    Hallo,

    erstmal vielen Dank für die saugeilen Erweiterungen, super flexibel & umfangreich zu konfigurieren!

    Unter Contao 3.5.12 und PHP 7.0.6 erhalte ich jedoch folgenden Fehler (bei aktivierter Fehlerausgabe, ansonsten weißen Bildschirm):
    Code:
    Fatal error: Cannot use 'String' as class name as it is reserved in [Pfad_zu_Contao]/system/modules/core/library/Contao/String.php on line 28
    in folgenden Fällen:
    - nach dem Absenden eines Formulars im Frontend und aktivierter Benachrichtigung (also Notification Center), Daten werden gespeichert
    - wenn ich mir die gespeicherten Daten im Backend ansehen will und bereits Daten vorhanden sind (also Leads; wenn noch keine Daten gespeichert wurden, wird die Seite normal aufgerufen ("Keine Einträge vorhanden")).

    Mit PHP 5.6 funktioniert es.

    Inhalt der String.php:
    PHP-Code:
    <?php

    /**
     * Contao Open Source CMS
     *
     * Copyright (c) 2005-2016 Leo Feyer
     *
     * @license LGPL-3.0+
     */

    namespace Contao;


    if (
    version_compare(PHP_VERSION'7.0''>=')) {
        throw new \
    RuntimeException(
            
    'The String class cannot be used in PHP ' PHP_VERSION '. Use the StringUtil class instead.'
        
    );
    }


    /**
     * Provides a String class for backwards compatibility.
     *
     * @author Leo Feyer <https://github.com/leofeyer>
     *
     * @deprecated Use the StringUtil class instead
     */
    class String extends \StringUtil
    {

        
    /**
         * Object instance (Singleton)
         * @var \StringUtil
         */
        
    protected static $objInstance;


        
    /**
         * Prevent direct instantiation (Singleton)
         *
         * @deprecated String is now a static class
         */
        
    protected function __construct() {}


        
    /**
         * Prevent cloning of the object (Singleton)
         *
         * @deprecated String is now a static class
         */
        
    final public function __clone() {}


        
    /**
         * Return the object instance (Singleton)
         *
         * @return \String The object instance
         *
         * @deprecated String is now a static class
         */
        
    public static function getInstance()
        {
            if (static::
    $objInstance === null)
            {
                static::
    $objInstance = new static();
            }

            return static::
    $objInstance;
        }
    }
    Contao Check ist alles grün.

    Wenn ich die Fehlermeldung richtig interpretiere, dürfte es nicht an den Erweiterungen, sondern an Contao selbst liegen (der Fehler tritt aber wie geschildert nur im Zusammenhang mit den beiden Erweiterungen auf)?

    Bin dankbar für Hinweise, was hier falsch laufen könnte.

    Gruß, Jens

    EDIT -Lösung-

    haste 4.11.4 ist noch nicht PHP7-fit:
    Zitat Zitat von Thraile Beitrag anzeigen
    Die Extension "haste" ist der Übeltäter, hier wird noch die String-Klasse verwendet (Angaben der Fundstellen mit Zeile:Spalte):

    Code:
    system/modules/haste/library/Haste/Util/StringUtil.php	
            $strText = \String::decodeEntities($strText);      [position 46:20]	
            $strBuffer = \String::parseSimpleTokens($strText, $arrTokens);      [position 59:22]	
            $strBuffer = \String::restoreBasicEntities($strBuffer);      [position 71:22]
    Hier einfach \String:: gegen \StringUtil:: austauschen und das sollte es gewesen sein. Es gibt hierfür auch schon einen PR auf Github https://github.com/codefog/contao-haste/pull/79. In den nächsten Versionen ist das Problem dann wohl Geschichte.
    bei Verwendung des Composer:
    Zitat Zitat von Thraile Beitrag anzeigen
    Ach ja, wenn du Composer verwendest änder mal die gleiche Datei unter Composer/vendor/codefog/Contao-haste/....
    der grund für die fehlende Meldung in der error.log:
    Zitat Zitat von Thraile Beitrag anzeigen
    Ich habe das mal versucht nachzustellen und einfach mal in der PageRegular-Klasse einen Aufruf der String-Klasse eingebaut. In der Error.log wird wirklich nichts geschrieben, hier scheint irgend etwas mit dem Error-Handling von Contao unter PHP7 nicht ganz rund zu laufen.
    Geändert von ikratki (25.05.2016 um 19:15 Uhr) Grund: gelöst

  2. #2
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Nimm doch die 5.6. Warum muss es Version 7 sein? Viele Erweiterungen werden damit vermutlich noch gar nicht laufen (wie die von dir genannten).

    P.S. Der Contao Check prüft nur die Lauffähigkeit von Contao. Nicht von Erweiterungen.

    VG
    Frank

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Welche Version von notification_center?

    // ah, du brauchst mindestens Version Contao 3.5 generell für PHP 7.
    Geändert von Spooky (20.05.2016 um 13:35 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    04.01.2015.
    Beiträge
    13

    Standard

    Hallo,

    danke für eure Antworten.

    Notification Center ist die 1.3.6, Leads die 1.2.2, Contao wie bereits geschrieben die 3.5.12.
    Möglicherweise ist es nützlich zu wissen, dass die Paketverwaltung installiert ist (0.16.4)?

    Contao ist ja wie erwähnt ab der 3.5(.6?) PHP 7 kompatibel, und zumindest für Notification Center habe ich auf Github gelesen, dass es PHP 7 fit gemacht wurde.
    Die im Fehler erwähnte Datei gehört ja zum Contao Core, der Fehler tritt wie geschrieben nur im Zusammenhang mit den genannten Erweiterungen auf.
    Alle sonstigen Erweiterungen (u. a. inputvar, changelanguage, dk_mmenu, dlh_googlemaps, rocksolid_slider) funktionieren.

    Ein Kunde möchte die Website auf einen eigenen Server umziehen, wo nur PHP 7 installiert ist..

    Gruß, Jens

  5. #5
    Contao-Fan
    Registriert seit
    16.05.2014.
    Beiträge
    295

    Standard

    Also contao-leads hat u.a. den MultiColumnWizard als Abhängigkeit und auch der ist wohl nocht nicht PHP 7 tauglich:
    https://github.com/menatwork/MultiCo...ard/issues/193

    Irgendeine oder mehrere der Erweiterungen wird wohl die String Klasse statt StringUtil verwenden.

  6. #6
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Die Version 3.3.5 von MCW sollte PHP7 kompatibel sein, ich habe das Ticket noch offen gelassen, falls beim Testen doch noch Fehler auftreten.

    Dein Problem kommt allerdings nicht aus dem Core, sondern aller Wahrscheinlichkeit nach aus einer Extension. Welche Genau, sollte der Stacktrace verraten.

    Normalerweise sollte es ausstreichen in der Extension \String:: gegen \StringUtil:: zu ersetzen. In PHP7 dürfen Klassen nicht mehr einfach nur String heißen.

    Gesendet von meinem D5803 mit Tapatalk

  7. #7
    Contao-Nutzer
    Registriert seit
    04.01.2015.
    Beiträge
    13

    Standard

    Hallo,

    entschuldigt bitte meine Unwissenheit: wie komme ich denn an den Stack Trace?
    Die Fehlermeldung besteht nur aus der einen Zeile im Eröffnungspost, in die error.log wird nichts geschrieben.

    Ich möchte nochmal auf die Situationen, in denen der Fehler auftritt, hinweisen:
    Zitat Zitat von ikratki Beitrag anzeigen
    in folgenden Fällen:
    - nach dem Absenden eines Formulars im Frontend und aktivierter Benachrichtigung (also Notification Center), Daten werden gespeichert
    - wenn ich mir die gespeicherten Daten im Backend ansehen will und bereits Daten vorhanden sind (also Leads; wenn noch keine Daten gespeichert wurden, wird die Seite normal aufgerufen ("Keine Einträge vorhanden")).
    Der Fehler tritt auch nach dem Deaktivieren sämtlicher Erweiterungen auf, die für Leads und Notification Center nicht benötigt werden (s. Anhang).
    Ohne Benachrichtigung (Notification Center) und Formulardatenspeicherung (Leads) treten auch keine Fehler auf, also kann es doch eigentlich nur an diesen Erweiterungen oder jenen, die für diese noch benötigt werden, liegen?

    haste: 4.11.4
    multicolumnwizard: 3.3.5
    dcawizard: 2.3.3

    Ich bin offen gesagt zu OOP / PHP Klassen noch nicht vorgedrungen und weiß nicht, wo ich überall (in welchen Verzeichnissen und dort Dateien) nach String suchen müsste, um es durch StringUtil zu ersetzen, deshalb meine Frage hier im Forum, wo der Fehler liegen könnte.

    Mit dem Deaktivieren fast aller Erweiterungen und den einzigen 2 Situationen, in denen der Fehler auftritt, sollte die Suche doch stark eingegrenzt worden sein?

    Danke für eure Hilfe!

    Gruß, Jens
    Angehängte Grafiken Angehängte Grafiken

  8. #8
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Zitat Zitat von ikratki Beitrag anzeigen
    Hallo,

    entschuldigt bitte meine Unwissenheit: wie komme ich denn an den Stack Trace?
    Die Fehlermeldung besteht nur aus der einen Zeile im Eröffnungspost, in die error.log wird nichts geschrieben.
    Ich habe das mal versucht nachzustellen und einfach mal in der PageRegular-Klasse einen Aufruf der String-Klasse eingebaut. In der Error.log wird wirklich nichts geschrieben, hier scheint irgend etwas mit dem Error-Handling von Contao unter PHP7 nicht ganz rund zu laufen.

    Da bleibt wohl nichts anderes übrig, als einfach mal mit der IDE / Editor über den ganze Contao-Ordner zu suchen . Ich bin auf dem Sprung, wenn du dich bis morgen gedulden kannst, werfe ich meine IDE mal an

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Installiere dir bspw. Sublime Text, öffne den Ordner der Contao Installation, mache einen Rechtsklick auf den Root Ordner und wähle "Search in Folder...", Suche nach "String::"

  10. #10
    Contao-Nutzer
    Registriert seit
    04.01.2015.
    Beiträge
    13

    Standard

    Hallo,

    besten Dank für eure Mühe.

    Ich kann mich gedulden oder selbst mal suchen, aber erst nach dem Wochenende..

    Gruß, Jens

  11. #11
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Die Extension "haste" ist der Übeltäter, hier wird noch die String-Klasse verwendet (Angaben der Fundstellen mit Zeile:Spalte):

    Code:
    system/modules/haste/library/Haste/Util/StringUtil.php	
            $strText = \String::decodeEntities($strText);      [position 46:20]	
            $strBuffer = \String::parseSimpleTokens($strText, $arrTokens);      [position 59:22]	
            $strBuffer = \String::restoreBasicEntities($strBuffer);      [position 71:22]
    Hier einfach \String:: gegen \StringUtil:: austauschen und das sollte es gewesen sein. Es gibt hierfür auch schon einen PR auf Github https://github.com/codefog/contao-haste/pull/79. In den nächsten Versionen ist das Problem dann wohl Geschichte.

  12. #12
    Contao-Nutzer
    Registriert seit
    04.01.2015.
    Beiträge
    13

    Standard

    Hallo,

    ich danke dir!

    Allerdings tritt der Fehler nach wie vor auf, ich werde Anfang kommender Woche die Contao-Installation mal durchsuchen..

    Gruß, Jens

  13. #13
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Ach ja, wenn du Composer verwendest änder mal die gleiche Datei unter Composer/vendor/codefog/Contao-haste/....

    Gesendet von meinem D5803 mit Tapatalk

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.063
    Partner-ID
    10107

    Standard

    Zitat Zitat von Thraile Beitrag anzeigen
    Ich habe das mal versucht nachzustellen und einfach mal in der PageRegular-Klasse einen Aufruf der String-Klasse eingebaut. In der Error.log wird wirklich nichts geschrieben, hier scheint irgend etwas mit dem Error-Handling von Contao unter PHP7 nicht ganz rund zu laufen.
    Liegt es nicht eher daran, dass es ein Parser Error ist, und man diesen Fehler zur Runtime gar nicht abfangen kann? Und insofern wäre dieser Code des Core unnötigt, da der Fehler nicht zur Runtime passiert.

  15. #15
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Liegt es nicht eher daran, dass es ein Parser Error ist, und man diesen Fehler zur Runtime gar nicht abfangen kann? Und insofern wäre dieser Code des Core unnötigt, da der Fehler nicht zur Runtime passiert.
    Yupp, aber ich hätte erwartet, dass der Error-Handler von Contao, der in der initialize registriert wird, den Fehler sauber in die Logdatei schreibt. Aber anscheinend wir der Fehler vom Typ E_COMPILE_ERROR nicht an den registrierten Error-Handler durchgereicht. Man kommt aber via shutdown_function an den Fehler:
    PHP-Code:
    register_shutdown_function(function() { var_dump(error_get_last()); }); 

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •