Unterschiedliche Ergebnisse auf PC / Mobiltelefon

Igäl

Erfahrenes Mitglied
Hallo Leute, ich mal wieder.

Wiedermal habe ich mich an ein Projekt gesetzt und habe nun folgendes Problem und ich komme nicht dahinter an was es liegen könnte:
Eine Klasse "CreatePage" soll Daten zusammensammeln und an den Viewer übergeben. Dort drin habe ich eine funktion "get_module_data", die den Controller eines spezifischen Moduls (bspw. Login) ansteuert. Der Controller sammelt die Daten aus dem spezifischen Modul und gibt sie zurück. Via Templatesystem werden sie dann ausgegeben. Hier mal die Funktion, wie sie gerade ist:

PHP:
    private function get_module_data($error_handler, $module_name, $mid, $smid)    {
        require_once("modules/".$module_name."/".ucfirst($module_name).".class.php");

        echo "Mobiltelefon: bis hier<br />"; //das wird auf dem Mobiltelefon & PC angezeigt
        $class = new $module_name; //hier scheint - für das Mobiltelefon - der Wurm drin zu sein
        echo "auf dem Mobiltelefon sehe ich das nicht mehr<br />"; //selbsterklärend
        var_dump($class); //das wird nur noch auf dem PC angezeigt

        // call main method of required class. gets back a hash with smarty variables to show in templates
        $smarty_var = $class->generate_page($smid);

        // send error output messages to the smarty hash
        $smarty_var['errorMsg'] = $error_handler->error_msg;

        $smarty_var['activeModule'] = $mid;
        $smarty_var['activeSubModule'] = $smid;

        return $smarty_var;
    }
Funktioniert blendend im Browser auf dem PC. Auf dem Mobiltelefon bekomme ich eine leere Seite. Bzw. "Mobiltelefon: bis hier" wird ausgegeben. Fehlermeldungen erhalte ich keine.

Wie kann das möglich sein, wo doch das Ganze nicht vom Viewport abhängig sein sollte? Auch wenn ich mit dem Mobiltelefon zugreife, wird die Page auf dem Webserver generiert und sollte sich nicht von dem unterscheiden was an den Browser des PC gesendet wird. Dennoch bricht mein Script ab, wenn ich die Klasse instanziere (Mobiltelefon). Nicht aber, wenn ich mit dem PC Browser zugreife.

Kann sich da jemand einen Reim darauf machen? Ich bin sehr verwirrt.

Danke für Gewinnbringendes und auch sonstige Mühen :)

So long, dä Igäl
 
Zuletzt bearbeitet:
Das ist in der Tat sehr komisch :unsure:

Hast du denn auch schon den Quelltext der Seite auf Mobiltelefon und PC verglichen? Vielleicht stellt ja dein mobiler Browser die Seite nur nicht richtig dar?

Gruß Technipion
 
Danke für die Antwort. Das habe ich nun gemacht. Dem Mobilebrowser wird kein Quelltext übergeben. Möglicherweise liegt ein Problem der Rückwärtskompatibilität vor. Die Scripts sind von Anfang 20. Jedoch habe ich die PHP-Version und die Bootstrap-Version aktualisiert. Mal weitersuchen.
 
An der PHP-Version wird es garantiert nicht liegen, denn PHP läuft auf dem Server und nicht auf dem Client. Ich glaube auch nicht, dass es an Bootstrap (wofür auch immer man das heutzutage noch benutzt) liegen wird.
 
Habe es damals benutzt und keine Zeit ein komplett neues Framework herzustellen. Ausserdem bin ich designtechnisch eine Niete. Aber ja... Anfang 2020 funktionierte es und der Code war zu Anfang derselbe, wie damals. Ausser dass die PHP-Version und die Bootstrap-Version geändert haben. Und natürlich die Browserversionen der Mobiltelefone :)

Ich kann mir halt wirklich keinen Reim darauf machen, warum die Routine in Firefox auf dem PC durchläuft und im Mobilebrowser nicht...
 
Das habe ich nun gemacht. Dem Mobilebrowser wird kein Quelltext übergeben.
Das kann aber irgendwie nicht sein, denn dann würdest du auf dem Smartphone gar nichts sehen.

Du meinst bestimmt, dass der Quelltext ab dieser bestimmten Stelle fehlt?

Kannst du mal den Seitenquelltext vom PC und vom mobilen Browser posten?

Gruß Technipion
 
Die Kontrollzeilen habe ich rausgenommen. Aber tatsächlich, auf meinem Android Mobiltelefon ist null Quelltext übergeben. Auf dem iPhone konnte ich es nicht überprüfen. Ich bin mit meinem Latein etwas am Ende :)
 
Habe mal die Accesslogs des Servers (Entwicklungsumgebung mit XAMPP) überprüft. Der Zugriff wird angezeigt. Prinzipiell kommt der mobile Browser also auf die Seite. Nur wird halt das Script bei der Klasseninstanzierung abgebrochen. Hat jemand sonst noch Ideen, welche Logs ich prüfen könnte?

Ausserdem kann ich, mobil, nur via PHP (echo, print_r, var_dump etc.) Ausgaben machen. Und nur an Orten, die vor der Klasseninstanzierung liegen. Alles was ich in HTML ausgeben möchte, wird nicht angezeigt.
 
Hast du mal das Error-Reporting hochgedreht? Vielleicht kommt dann ein Hinweis auf's Display. Wobei ich immer noch erstaunt bin, warum das nur auf einem Smartphone passieren soll.
 
Lösung
Wow. Ich hau meinen Kopf ein paar Stunden auf den Tisch. Danke für den entscheidenden Hinweis bdt600.

Habe aufgrund deines Inputs mein error_reporting überprüft und gesehen, dass ich die aktuelle Adresse meines Entwicklungsservers nicht in die Liste der lokalen Server eingetragen habe. Das hat verhindert, dass ich es von ausserhalb des PCs ansteuern konnte. Ich fühle mich gerade sehr, sehr dumm.

Hier wirds überprüft:
PHP:
        if($_SESSION['LiveServer']) {
            error_reporting(0);
            set_error_handler(array($this->error_handler, "handle_error"), E_NOTICE | E_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);
        }else{
            error_reporting(-1);
            set_error_handler(array($this->error_handler, "handle_error"), E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE);
        }

Hier wirds gesetzt:
PHP:
    private function set_root_dir()    {
        $local_servers = array("::1", "127.0.0.1");

        if(in_array($_SERVER['SERVER_ADDR'], $local_servers))    {
            $_SESSION['RootDir'] = "../";
            $_SESSION['LiveServer'] = false;
        }else{
            $_SESSION['RootDir'] = "/web/";
            $_SESSION['LiveServer'] = true;
        }
    }
Kann man vermutlich eleganter lösen. Ich werde das mal anschauen. Danke euch vielmals...
 
Zuletzt bearbeitet:
Zurück