Frontend OK, Backend weis, Ich will's wissen

  • Liebe Sportfreunde ich brauche Hilfe.
    Was hab ich gemacht.
    - subdomain test mit eigener Datenbank bei Strato angelegt
    - Dateien/Ordner einer umzustellenden Domain nach Test kopiert/importiert.
    - Wackelkandidaten auf der Testdomain deaktiviert
    - Umstellung von 2.5.28 per Update kurzzeit-support auf 3.5.1 durchgeführt
    - Anpassungen durchgeführt, Backend und Frontend der testdomain laufen ohne Zicken
    - Dateien auf Domain gelöscht, Datenbank der Testdomain in Domain-Datenbank importiert mit "delete if exist"
    - Ergebnis, Frontend der Domain läuft, Backend weise Seite
    - tabelle sessions in domain geleert, immer noch weise Seite
    - dump in index vor execute app

    Code
    echo "<pre><b> DUMP BEFORE EXECUTE APP CONTAINS:</b>", var_dump($app->execute), "</pre>";

    von administrator eingebaut
    - Ergebnis " DUMP BEFORE EXECUTE APP CONTAINS:NULL"
    - mach ich den Dump nur auf $app bekomme ich eine ellenlange Liste, welche ich allerdings nicht so recht interpretieren kann. Was mir auffällt ist das in dieser Liste die Daten der config nicht richtig interpretiert werde "Umlaute" , schein etwas mit UTF-8 zu sein obwohl die config utf-8 ohne bom ist.
    - besagte Liste kann ich natürlich nichtt öffentlich machen, da sie alle sensiblen Daten enthält.


    Ich brauch also einen Tipp, wie ich weiter vorgehe, denn ich will's wissen.
    z.B. wo im weiteren Verlauf lohnt es sich einen weiteren Dump einzufügen.


    Also bitte keine Tipps wie "Neu Installieren" oder ähnliches eine 1 zu 1 Kopie bei der lediglich die config angepasst wurde, das muss doch zu finden sein. search

  • besagte Liste kann ich natürlich nichtt öffentlich machen


    Da bin ich aber froh. Kannst eh nix mit anfangen.


    Falsche Textkodierung ist nur dein Browser. Musst in solchen Fällen entsprechend umstellen.


    Geh in die configuration.php. Ändere folgende Zeilen wie folgt:
    public $error_reporting = 'maximum';
    public $debug = '1';


    Dann lade Backend neu.
    Werf ggf. auch Blick in Quelltext, ob doch irgendwas drin.
    Prüfe auch auf JavaScriptfehler.

  • public $error_reporting = 'maximum';
    public $debug = '1';


    Debug Maximum ist wenig hilfreich, hat für Front und Backend einen Fehler 500 zur Folge.
    Nehm ich das wieder raus läuft zumindest das Frontend wieder.


    Wenn ich nun wüsste was index.php als nächsten aufruft, könnte ich mich mit var_dump weiter ranarbeiten.


    http://www.sc-apelern.ksv-nesselblatt.de/ der Link zur Main
    http://www.nesselblatt-test.ksv-nesselblatt.de/ der Link zur Test
    für den, der mal schauen möchte.

  • @firstlady
    ja sicher hätte sein können aber was soll da am Syntax falsch sein "public $error_reporting = 'maximum';"
    Ich glaube mit Notepad++ bin ich eigentlich zufrieden, aber man soll nie NIE sagen. vielleicht hat ja die aktuelle Version einen Knax.
    Ich werd's mal mit einer Alternative versuchen.


    @Later
    Wie lang der Weg wird ist mir egal, ich will's wissen und verstehen.


    Erst mal vielen Dank das ihr euch reingehängt habt :)

  • @'Indigo66
    Sicher, ich war so angefressen, dass ich mir die Datei in einen Hexeditor geladen habe um ja nichts zu übersehen.
    Seltsam ist nur das nach admin/indes "$app->execute();" nix aber auch nichts nachvollziehbares mehr zu sehen ist.
    Bau ich in die Configuration "public $error_reporting = 'maximum';" ein so knallt's mir mit error 500 nicht nur im Frontend sondern auch im Backend. Setzte ich Debugging auf 1 ist im Frontend alles gut aberim Backend sehe ich nichts, was auf einen Fehler hindeutet.
    Seltsam ist das im Frontend das Debugging erscheint aber beim Versuch sich ins Backend einzuloggen kommt da nix.
    Ist schon echt Misteriös, ich hab einfach noch keinen Anhaltspunkt wo es wirklich knallt.

  • Das Debugging ist eine Joomla-Funktionalität. Tritt zuvor ein PHP-Fehler auf, kann diese natürlich nicht mehr ausgeführt werden.


    Error reporting.
    Setze in der /administrator/index.php NACH den require_once-Zeilen, in denen auch framework.php vorkommt (kann grad nicht nachsehen, wo exakt):


    Code
    error_reporting(E_ALL);        ini_set('display_errors', 1);


    Und gleich danach zum Testen ein

    Code
    exit('Hallo. Habe Exit.');

    Sollte vor dem exit(...); durch die Zeilen ein Fehler auftreten, rührt z.B. der 500 daher, dass dein Server diese Manipulation hart blockiert und damit "ungenügend konfiguriert ist" für anständiges Arbeiten mit Joomla.


    Code
    $app->execute();


    $app ist ein Objekt, in diesem Fall eine Klasseninstanz. (Die gelernten Programmierer hier werden mich korrigieren bzgl. Begrifflichkeiten ...)


    execute(); ist eine Methode dieser Klasse (oder z.B. parent Klasse). Keine Eigenschaft der Klasse.


    Deshalb versteh ich nicht, was du mit deiner DEBUG-Zeile $app->execute eigentlich erreichen wolltest.


    Im besten Fall kann man $app selbst debuggen, nachdem die Zeile gelaufen ist. Kommt zuvor ein Fehler, weiß ich, dass innerhalb Methode execute() ein Fehler aufgetreten ist. Pure Theorie: Hier $app zu debuggen, macht wenig Sinn, da $app->execute(); irgendwo auf den langen Wegen durch die Eingeweide Joomlas einen Redirect durchführt. Die Debug-Zeile wird so niemals ausgeführt, wenn sie nach $app->execute(); steht.


    Steht sie davor ist $app sowieso nicht aussgaefähig, außer für die Fälle, wo bereits hier ein Fehler auftritt. Dann ist nämlich schlicht der Joomla-Core zerschossen, meist Dateien unvollständig oder gehackt oder so was. Installierte Erweiterungen können zu diesem Zeitpunkt nahezu beliebige Fehler haben. Wird nicht auffallen, sondern erst während execute().


    Wenn du wirklich schrittweise debuggen willst, beginnend am Urknall-Punkt Joomlas, musst also in die richtige Methode execute() gehen und dort schrittweise Debugzeilen setzen, die dich auf den Weg in andere Klassen und Methoden bringen, in denen der Fehler vorliegt, die du dann weiter schrittweise debuggen kannst, die dich auf den Weg in andere Klassen und Methoden bringen, in denen der Fehler vorliegt, die du dann weiter schrittweise debuggen kannst, die dich auf den Weg in andere Klassen und Methoden bringen, in denen der Fehler vorliegt, ... Dann hast noch hunderte extended Klassen, musst also die Parent-Klassen debuggen usw. usf.


    Mein Tipp: Stell einfach das geupdatete Subdomain-Verzeichnis auf die Hauptdomain um. Oder mach export/import mit Akeeba Backup und Space und Datenbank zuvor ordentlich platt.


    Nur nebenbei: Versteh auch nicht, wenn Datenbank händisch kopieren, wozu du das if exists brauchst. Löscht man die alte komplett und importiert die neue komplett oder ändert halt einfach in Domain die Datenbankdaten in configuration.php.

  • @Later
    du hast den entscheidenden Tipp gegeben, nun weis ich schon mal wo es knallt D A N K E

    Zitat

    Notice: Undefined property: LoginController::$input in /.../.../../../......./htdocs/ksv23001/administrator/components/com_login/controller.php on line 36 Fatal error: Call to a member function set() on null in /.../..../../../...../htdocs/ksv23001/administrator/components/com_login/controller.php on line 36


    Hmm grübel grübel, na gut dachte ich mir com_login hat nen Knall na gut kann ja beim Kopieren passiert sein also com_login auf dem Server gelöscht und aus "Joomla_3.5.1-Stable-Update_Package" rüberkopiert.
    Neuer Versuch, gleicher Fehler.
    Grummel Grummel das war's also noch nicht.
    Ergo was macht Zeile 36

    Zitat

    $this->input->set('view', 'login');


    Hmm function set() on null, was soll das denn!?

  • Kopier das gesamte Stable-Paket drüber ohne Ordner /installation/ und /templates/. Genereller Tipp. Wenns nix hilft, schadet's auch nicht, aber man hat was ausgeschlossen.



    Pech gehabt. Weil, nicht der com_login macht hier den Fehler, sondern du müsstest zurück gehen, in früheren Code, um zu ermitteln, warum

    Code
    $this->input

    NULL ist ("Undefined property") und nicht wie erwartet ein Objekt, genauer: joomlaspezifisch ein Registry-Objekt, dessen Eigenschaften und Werte man dann mit zugehöriger Klassen-Methode set(...) definieren kann.

    Ganz vermutlich findest im parent Controller JControllerLegacy einen Hinweis wie $this->input definiert wird, vielleicht aber auch erst in dessen parent Controller. Ganz vermutlich aus der $app (JFactory::getApplication()) geholt. Musst also schauen, warum dies $app->input null ist und weitere Schritte zurück gehen. Vielleicht ist aber schon $app oder $this "kaputt", obwohl dann die Meldung vrmtl. etwas anders lauten würde.


    Sag ja, das sind labyrinthische Wege, die meist an Rom vorbeigehen.


    Es riecht einfach nach unvollständigen Core-Dateien, wenn tatsächlich auf Domain und Subdomain exakt die selben Erweiterungen aktiv sind etc.
    Auch, dass du das error_reporting nicht umstellen kannst in der configuration.php.


    Ansonsten röche es vielleicht erst mal nach einem System-Plugin, das an falscher Stelle einsteigt und die $app kaputt macht / blockiert, sozusagen.


    Oder Erweiterungen, die ebenfalls unvollständig vorliegen oder auf Domain abweichend konfiguriert gehören (gibt ja so Blödelsicherheitstools).


    Da ist der schnellere Weg, Erweiterungen via DB zu deaktivieren (mit vorher Backup der extensions-Tabelle, natürlich).


    Und die schnellsten Wege hab ich dir ja schon genannt.
    Zusätzlich fällt mir noch ein: Beide Webspaces lokal runterladen und Unterschiede mit z.B. winmerge rausfinden. Fehlende Dateien etc.

  • Hi Later
    vielen Dank, du hast mir mit deinen Hinweisen Sehr geholfen.
    Das System läuft ohne Zicken im Front/Backend.


    Einfach neu rüberkopieren, neee. nicht mit mir.
    Dann läuft's eventuell aber man hat keine Ahnung warum.
    Also hab ich mich an die Kleinarbeit gemacht und die Dateien verglichen.
    Das ist zwar mühsam aber erfolgreich.
    Sonst hätte ich per FTP Stable drüberbügeln können bis ich grün werde.
    Der verdammte Filezilla hat sich bei der Menge einfach verstiegen, ohne Fehlermeldung, und es fehlten bei einigen, kriegsentscheidenden Datein einige Bytes.
    Hab meinen guten alten Totalcommder genommen und fragliche Dateien damit übertragen.
    Damit war es dann schon beinahe erledigt.
    Dein Geruchssinn hat dich also nicht getäuscht.
    Der nächste Knaller, den habe ich Dussel mir selbst zuzuschreiben.
    Also Augen auf beim Verkehr.
    Ich hatte beim Erstellen der Datenbank latin-codierung deutsch angegeben.
    Beim Importieren der Tabellen, welche utf-8 sind führte das dann natürlich zu unvorhergesehenen Ereignissen.
    Wenn dann nun Joomla mit einem Zugriff auf so eine Tabelle kam, hat Joomla zu Recht die Arbeit verweigert.


    Ich habe mit deiner Hilfe sehr viel gelernt, welches mir für die kommenden 12 Umstellungen viel Zeit sparen wird.
    Dafür nochmal an dieser Stelle mein ganz besonders herzliches D A N K E S C H Ö N für deine Mühe.
    Gruß Hans-Jürgen