PHP Probleme mit TWIG

HeelPhakdi

Newbie
Registriert
Apr. 2022
Beiträge
7
Hallo zusammen,

bin neu hier im Forum und absoluter Programmier-Noob. Früher hatte ich mal eine Phase bei denen ich grundlegende Fähigkeiten zu html und php hatte, aber davon ist leider nichts mehr übrig.

Nun habe ich als Hobbie ein altes Projekt von mir wieder aufleben lassen und nach Tagelangen Problemen mit den php Versionen habe ich nun das Backend immerhin ans Laufen bekommen, dass ich meine Arbeiten dort beginnen kann.

Jedoch komme ich wegen eines Fatal Error noch nicht ins Frontend. Ich habe jetzt Stundenlang versucht selber schlau zu werden, aber ich bin einfach nicht in der Sprache und allem mehr drin und kann das Problem nicht nachvollziehen.

Es geht um folgendes Frontend: https://www.fussballmanagersim.de/manager/
Wie man sieht wird folgender Fehler eingeblendet.
Opera Momentaufnahme_2022-04-18_172201_www.fussballmanagersim.de.png


Das ganze Projekt basiert auf der https://github.com/owsPro/open-websoccer Github open Software.

Auszug aus der WebSoccer.class.php on line 3542
Code:
    $loader=new Twig\Loader\FilesystemLoader(TEMPLATES_FOLDER.'/'.TEMPLATE_SUBDIR_DEFAULT);
Ich schätze mal das wird noch nicht zur Problemlösung reichen, aber vllt kennt sich einer hier deutlich besser aus, als ich das tue und wir kommen vllt der Lösung nahe. Sollte es Fragen geben kann ich es auch versuchen zu konkretisieren sofern meine Kompetenz dazu reicht (wie gesagt kenne mich nicht mehr mit der ganzen Programmiersprache aus)

Vielen Dank im Voraus!

Grüße HeelPhakdi
 
Hi Evolutio,

ja die Datei existiert habe hier mal ein Anhang damit vllt ein Fehler im Verzeichnis ausgeschlossen werden kann.
 

Anhänge

  • Screenshot.png
    Screenshot.png
    27,3 KB · Aufrufe: 164
floq0r schrieb:
Es könnte mit den Namespace Definitions zu tun haben, uU hat sich in den PHP Versionen da was geändert.

Was kann man da versuchen um zu schauen ob es daran liegt bzw. welche Möglichkeiten hat man das auszubessern?
 
Damit hab ich leider zu wenig Erfahrung, hatte aber einmal ähnliche Probleme weil der Namespace nicht definiert war. Dadurch kann es auch zu solchen Exceptions kommen. Es gibt hier aber noch ein paar Pros die sich sicher dazu melden werden.
 
  • Gefällt mir
Reaktionen: HeelPhakdi
Versuch mal so
PHP:
$loader = new \Twig\Loader\FilesystemLoader(TEMPLATES_FOLDER.'/'.TEMPLATE_SUBDIR_DEFAULT);

Wenn es nicht klappt, schau mal auf das Encoding der Datei und vergleich es mit anderen.
Da gibt es LF und CRLF.

LF ist für Unix Systeme, RFLF für Windows.
Falsches Encoding sorgt für kaputte Files die nicht geparst werden können von PHP.

Als nächstes würde ich versuchen einen andere Loader zu Testzwecken zu laden, im gleichen Order liegt der Array und ChainLoader.
 
  • Gefällt mir
Reaktionen: HeelPhakdi und Evolutio
[ChAoZ] schrieb:
Versuch mal so
PHP:
$loader = new \Twig\Loader\FilesystemLoader(TEMPLATES_FOLDER.'/'.TEMPLATE_SUBDIR_DEFAULT);

Wenn es nicht klappt, schau mal auf das Encoding der Datei und vergleich es mit anderen.
Da gibt es LF und CRLF.

LF ist für Unix Systeme, RFLF für Windows.
Falsches Encoding sorgt für kaputte Files die nicht geparst werden können von PHP.

Als nächstes würde ich versuchen einen andere Loader zu Testzwecken zu laden, im gleichen Order liegt der Array und ChainLoader.
Danke schon mal für die Antwort.
Versuch ein hat schon mal nicht geklappt.

Schaue morgen dann mal nach dem Encoding der Datei (der Loader müsste eigentlich passen da meines Wissens nach das backend mit dem selben System arbeitet und das ohne Probleme funktioniert [aber das auch nur mit meinem Lateinwissen prognostiziert.])

Werde dann den Beitrag hier editieren, sollten bis dahin nicht noch Ideen dazu kommen. :daumen:
 
Das sieht soweit richtig aus.
Kannst du der Datei einfach mal Testweise die rechte 0777 geben und schauen ob es geht?
 
Evolutio schrieb:
Das sieht soweit richtig aus.
Kannst du der Datei einfach mal Testweise die rechte 0777 geben und schauen ob es geht?

Hab a) Der Datei die 777 gegeben - unverändert.
b) zum testen auch dem Twig / Loader Ordner die 777 und zum Schluss
c) auch noch der FilesystemLoader.php die vollen Rechte gegeben

leider auch alles unverändert.

Muss wohl doch auch morgen hoffen mit dem Encoding der Datei, dazu muss ich mich aber auch erstmal schlau machen wie man das nachprüft.
 
ganz doof, includiere mal die Datei in der zweiten Zeile in der WebSoccer.php

in etwa so:
PHP:
<?php
include_once('Twig/Loader/FilesystemLoader.php');

...

Könnte allerdings auch der TwigAutoloader sein.

PHP:
<?php
...
class TwigAutoloader{
    static function register(){spl_autoload_register([__CLASS__,'autoload'],true);}
    static function autoload($class){
        if(0!==strpos($class,'Twig')){return;}
        require(__DIR__.'/Twig/'.str_replace(['Twig\\','\\',"\0"],['','/',''],$class).'.php');}}

Wenn du möchtest, richte mir mal bitte einen FTP-Account ein, dann kann ich das morgen gerne mal debuggen wenn du möchtest, wäre am einfachsten.

Meine Vermutung ist, dass der nicht zum require kommt im TwigAutoloader und er deswegen die Klassen nicht lädt und die Namespaces nicht kennt.

Alternativ könnten wir das auch mal abends über Teamviewer, Discord oder Teams zusammen machen wenn du magst.
 
Zuletzt bearbeitet:
Evolutio schrieb:
ganz doof, includiere mal die Datei in der zweiten Zeile in der WebSoccer.php

in etwa so:
PHP:
<?php
include_once('Twig/Loader/FilesystemLoader.php');

...
Hab das schon mal in die WebsoccerClass eingefügt und dann war die Seite blank. (Sollte ja eigentlich nicht passieren, sondern eine Fehlermeldung ausgegeben werden oder?)
 
Für das Autoloading am besten Composer verwenden (https://getcomposer.org/). Dann eine composer.json erzeugen und die PSR4- (oder PSR1-) Namespaces einfügen. Nach Änderungen am Autoloading immer $ composer dump ausführen. Zum Schluss in deinen Endpoints einen require auf die composer autoload machen (z. B. in der index.php).

(Hintergrund hierzu ist: in PHP gibt es von Haus aus kein Autoloading; bedeutet, wenn eine Klasse/Funktion aufgerufen wird, muss PHP wissen, in welcher Datei der Kram überhaupt steht. Das ist das Autoloading. Vor Composer wurden für Libraries of eigene "Loader" geschrieben (mithilfe der spl_autoload_register - wenn PHP eine Funktion/Klasse nicht findet, wird diese Funktion aufgerufen). Das ist mittlerweile nicht mehr üblich. Stattdessen werden Klassen und Funktionen einfach in einen Namespace gepackt, diese werden in der composer.json hinzugefügt und dann kümmert sich Composer um den Rest.)

Hier das erstbeste Tutorial von Google mit den entsprechen Details: https://code.tutsplus.com/tutorials/how-to-autoload-classes-with-composer-in-php--cms-35649
 
  • Gefällt mir
Reaktionen: HeelPhakdi
Hab es gefixt. Geht wieder @HeelPhakdi .
Das Problem war der Twig/Autoloader.php
PHP:
if (is_file($file = __DIR__.'/../'.str_replace(['_', "\0"], ['/', ''], $class).'.php')) {
            require $file;
        } elseif (is_file($file = __DIR__.'/../../src/'.str_replace(['Twig\\', '\\', "\0"], ['', '/', ''], $class).'.php')) {
            require $file;
        } elseif (is_file($file = __DIR__.'/../'.str_replace(['_', '\0', '\\'], ['/', '', '/'], $class).'.php')) {
            require $file;
        }

Das letzte Elseif war die Lösung.

Das Problem war Twig\Loader\FilesystemLoader dass der Loader versucht hat die Klasse mit den \ auf Unix zu laden und die deswegen nicht gefunden werden kann. Habe ein replace von \ auf / integriert und nu geht es.
 
  • Gefällt mir
Reaktionen: HeelPhakdi
Top vielen Dank an alle Antworten und natürlich auch für das Lösen des Problems @ Evolutio
Schätze werde trotzdem noch mal bei Zeit ein paar Tutorials zum ganzen Thema angehen um nicht immer so hilflos zu sein, sollte doch noch mal ein Problem auftreten 🤓

(siehe da nach dem einloggen will er nun ein neues Problem aber da versuche ich mich morgen erst mal selber dran)
 

Anhänge

  • Opera Momentaufnahme_2022-04-22_182510_www.fussballmanagersim.de.png
    Opera Momentaufnahme_2022-04-22_182510_www.fussballmanagersim.de.png
    23,7 KB · Aufrufe: 154
Zuletzt bearbeitet: (neuer Fehler)
  • Gefällt mir
Reaktionen: Evolutio
Zurück
Oben