Problem mit PHP redirect auf lokaler Installation

Irgendwelche Probleme mit XAMPP für Windows? Dann ist hier genau der richtige Ort um nachzufragen.

Problem mit PHP redirect auf lokaler Installation

Postby srichter » 02. March 2023 23:26

Guten Abend zusammen,
Ich habe ein Problem mit einem Redirect in Laravel. Es handelt sich um eine lokale Umgebung, XAMPP Version 8.1.12, Laravel 8. Auf einer AWS Umgebung funktioniert der Code, von daher gehe ich davon aus, dass die Ursache in der Konfigration bei mir lokal liegt, kann aber leider nicht finden wo und hoffe hier Hilfe zu finden.
Der Redirect ist nach dem Login. In der folgenden IF-Abfrage springt der Code and die richtige Stelle (habe ich getestet), aber es wird nicht das Dashboard aufgerufen, sondern die Software bleibt im Login. Hier der Code:
Code: Select all
public function postLogin(Request $request)
    {
        $result = User::checkCredential($request->all());
        if ($result['status'] == 0) {
            return redirect()->to('/register')->with('message', $result['message']);
        } elseif ($result['status'] == 1) {
            return redirect()->to('/dashboard')->with('message', $result['message']);
        } elseif ($result['status'] == 2) {
            return redirect()->to('/login')->withInput()->with('message', $result['message'])->with('resend_status', 1);
        } else {
            return redirect()->to('/login')->with('message', $result['message']);
        }
    }

Die Route existiert (und wird auf dem Server auch ohne Probleme angesprungen). Ich habe beim entsprechenden "elseif" ein dd eingefügt und bekomme dort folgendes Ergebnis:
Code: Select all
Illuminate\Http\RedirectResponse {#807 ▼
  +headers: Symfony\Component\HttpFoundation\ResponseHeaderBag {#782 ▶}
  #content: """
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8" />
            <meta http-equiv="refresh" content="0;url='http://mesnja.local/dashboard'" />
   
            <title>Redirecting to http://mesnja.local/dashboard</title>
        </head>
        <body>
            Redirecting to <a href="http://mesnja.local/dashboard">http://mesnja.local/dashboard</a>.
        </body>
    </html>
    """
  #version: "1.0"
  #statusCode: 302
  #statusText: "Found"
  #charset: null
  #targetUrl: "http://mesnja.local/dashboard"
  #request: Illuminate\Http\Request {#44 ▶}
  #session: Illuminate\Session\Store {#341 ▶}
  +original: null
  +exception: null
}

Ich habe die .htaccess geprüft, sie entspricht der vom Server (wo es funktioniert):
Code: Select all
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>


mod_rewrite ist enabled.

Ich habe verschiedene Versionen von Apache probiert, den Code nei geklont und alle Depenencies neu installiert, aber ohne irgendeinen Erfolg.

Wie gesagt: der exakt selbe Code läuft auf dem Server einwandfrei und auch in einer älteren Version war das nie ein Problem.

Hat irgendjemand eine Idee?
srichter
 
Posts: 5
Joined: 02. March 2023 19:21
Location: Wiesbaden, Germany
XAMPP version: 8.1.12
Operating System: Windows 11

Re: Problem mit PHP redirect auf lokaler Installation

Postby Nobbie » 03. March 2023 12:21

Das müsstest Du in einem Laravel Forum fragen, dazu muss man genau wissen, wie Laravel einen Redirect ausführt. Es gibt keinen nativen Redirect für HTTP, typischerweise wird dafür der sog. Location Header im Protokoll HTTP benutzt, um dem Browser mitzuteilen, dass ein Request auf einer anderen Location zu finden ist.

Dafür bestückt PHP diesen Location Header mit der URL des Ziels. Das funktioniert aber dann nicht mehr, wenn Apache den Header bereits versendet hat, bevor das PHP Script den Wert bestückt. Das passiert typischerweise dann, wenn beispielsweise ene Fehlermeldung oder irgendeine Warnung geschickt wird. Wenn es gut ist , könntest Du im Error Log etwas entsprechendes finden. Insbesondere kommt meistens eine Folgemeldung "Headers already sent" o.ä., was darauf aufmerksam machen soll, dass u.a. keine Möglichkeit mehr für einen Redirect besteht.

Eine globale Möglichkeit zu verhindern, dass der Header vorzeitigt verschickt wird, besteht darin, das sog. Output Buffering zu aktivieren. Das kann man implizit im PHP Script durch den Aufruf ob_ start() erreichen, oder auch grundsätzlich durch eine Einstellung in php.ini. Das müsstest Du mal googeln, ich weiss jetzt nicht auswändig, welcher Wert das ist. Danach Apache neu starten.

Eine alternative Möglichkeit besteht im kompletten Abschalten des Error Messaging. Allerdings führt das nicht in 100% zum Erfolg, es kann auch andere Ursachen für den zu frühen Versand des Headers geben. Das Output Buffering sollte in jedem Fall helfen. Lies Dir mal die PHP Doku dazu durch.

Tiefergehende Fragen, wie der Redirect realisiert wird, musst Du bei Laravel erfragen.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Problem mit PHP redirect auf lokaler Installation

Postby srichter » 03. March 2023 12:53

Hi Nobbie,
danke erstmal für Deine Antwort.

Da genau dieser Code auf dem Live-Server ohne Probleme funktioniert, gehe ich eigentlich davon aus, dass es nicht mit dem Laravel zu tun hat, sondern in der Konfiguration der lokalen Umgebung begründet liegt. Der Code ist auch nicht neu geschrieben, sondern bereits lange in genau dieser Form im Einsatz und macht nur auf der lokalen Umgebung Probleme. All das deutet, aus meiner Sicht, eher auf ein Konfigurationsproblem hin.
srichter
 
Posts: 5
Joined: 02. March 2023 19:21
Location: Wiesbaden, Germany
XAMPP version: 8.1.12
Operating System: Windows 11

Re: Problem mit PHP redirect auf lokaler Installation

Postby Nobbie » 03. March 2023 13:11

Es ist trotzdem ein Laravel Problem. Wahrscheinlich ist auf dem Server output_buffering=On in php.ini eingestellt. Das kannst Du mal in Xampp auch versuchen. Apache neu starten und dann schauen.

Das ist aber nur eine Umgehungslösung für das eigentliche Problem, nämlich dass in Laravel (oder in Deinem eigenen Code) ein Logikfehler drin ist, der verursacht, dass der Header schon geschickt wird, bevor PHP den Location Header anpassen kann. Aber da das output_buffering das Problem wahrscheinlich löst, geben sich die wenigsten Programmierer die Mühe und korrigieren ihren Code. Da reicht übrigens schon so eine kleines Übersehen, dass man ganz am Anfang, vor dem ersten PHP Tag "<?php"" eine Leerzeile oder auch nur eine einzige Leerstelle hat. Das ist schon ein Fehler und führt dazu, dass der Header vorzeitig verschickt wird. Das fällt nur erst dann auf, wenn man mit Location Headern arbeitet. Manchmal steht auch das sog. "BOM" Mark am Anfang des PHP Codes (siehe Wikipedia), das ist eine Zeichenkette, die der Editor einfügt, wenn der Text in UTF-8 codiert ist. Auch diese "unsichtbare" Zeichenkette verursacht einen vorzeitigen Versand des HTTP Headers.

Eine zweite Möglichkeit wäre allerdings, dass Laravel nicht den HTTP Header benutzt, sondern wie in dem HTML Code zu sehen den meta-Tag mit der redirect Anweisung. Wenn das so ist (das weiß ich nicht), dann kann es auch am Browser liegen, man kann in verschiedenen Browser einstellen, dass sie auf bestimmten Servern diesen meta-Tag nicht ausführen. Es wäre denkbar, dass der Browser so eingestellt ist, dass für localhost der Redirect ignoriert wird. Aber das setzt eben voraus, dass Laravel nicht den Location Header benutzt, sondern den HTML Code. Das glaube ich eigentlich nicht, das geschieht hier jetzt an dieser Stelle nur, weil da etwas gedebugged wird.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Problem mit PHP redirect auf lokaler Installation

Postby Nobbie » 03. March 2023 13:41

Ich habe mal nach "Laravel output_buffering" gegoogelt - also Laravel hat tonnenweise Probleme dieser Art. Das ist auch vollkommen klar. Da wird mit einem Framework fröhlich drauflos programmiert und die HTTP Header verbogen, aber kaum einer der Programmierer hat Kenntnis vom Protokoll HTTP und weiß überhaupt nicht, was er da "verbricht". Im Grunde "rettet" das output_buffering oft den falschen Code. Aber entsprechend gibt es dann immer wieder Probleme mit Servern, wo das Buffering nicht aktiv ist, oder wo eine Kompression aktiviert ist oder wo der Anwender selbst schon eigenes Buffering betreibt.

Das ist ziemlich schlimmes Zeug teilweise. Vielleicht sollte man den Leuten erst einmal einen Lehrgang über das HTTP Protokoll nahelegen, damit sie auch verstehen, was sie da überhaupt machen.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Problem mit PHP redirect auf lokaler Installation

Postby srichter » 04. March 2023 15:50

Das hatte ich auch gemacht - die Einträge sind allesamt etwas älter (6+ Jahre)...

Trotzdem danke fürs nochmal reinschauen. Leider konnte ich es bisher nicht lösen. Ich schaue mal weiter.
srichter
 
Posts: 5
Joined: 02. March 2023 19:21
Location: Wiesbaden, Germany
XAMPP version: 8.1.12
Operating System: Windows 11

Re: Problem mit PHP redirect auf lokaler Installation

Postby Nobbie » 04. March 2023 16:12

srichter wrote:Das hatte ich auch gemacht - die Einträge sind allesamt etwas älter (6+ Jahre)....


Nein, bei Stackoverflow (das ist erste Treffer bei Google) ist der Eintrag 3 Jahre alt und das ist vom Problem her identisch. Aber selbst wenn es 6 Jahre wären, das Problem ist immer das gleiche, weil es das gleiche Konzept ist. Ich habe auch Beiträge gefunden, wo es genau anders herum ist, da klappt die Weiterleitung auf dem localhost, nicht aber auf dem Server.

Es ist einfach absolut ärgerlich, dass eine bestimmte Serverkonfiguration (die eigentlich keine restriktiven Auswirkungen hat) das Verhalten der Software so massiv beeinflusst. Ich sage ja, da liegt ein Logikfehler vor, der durch eine Serverkonfiguration gerettet werden soll. So etwas darf eigentlich nicht sein.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Problem mit PHP redirect auf lokaler Installation

Postby srichter » 05. March 2023 15:26

Inzwischen habe ich herausgefunden, dass es mit dem Laravel eigenen Webserver funktioniert. Für XAMP/Apache habe ich noch keine Lösung.
srichter
 
Posts: 5
Joined: 02. March 2023 19:21
Location: Wiesbaden, Germany
XAMPP version: 8.1.12
Operating System: Windows 11

Re: Problem mit PHP redirect auf lokaler Installation

Postby Nobbie » 05. March 2023 15:46

Ist denn sicher, dass Laravel auch richtig unter Xampp installiert und eingerichtet wurde? Nach dieser Anleitung ist da ja einiges zu berücksichtigen, insbesondere müssen die VirtualHosts richtig funktionieren:

https://divpusher.com/blog/how-to-run-l ... ith-xampp/
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04

Re: Problem mit PHP redirect auf lokaler Installation

Postby srichter » 05. March 2023 16:08

Ziemlich - ich habe es 2 Jahre lang ohne Probleme genutzt, erst mit der Umstellung auf PHP8 kam dieses Problem auf. Der Code läuft ohne Veränderung einwandfrei auf mehreren Installationen. Da dieses Problem nur bei mir auftritt, glaube ich weiterhin an ein Konfigurationsproblem.
Ich unternehme kommende Woche noch ein paar Versuche und hoffe dann eine plausible Antwort zu haben.
srichter
 
Posts: 5
Joined: 02. March 2023 19:21
Location: Wiesbaden, Germany
XAMPP version: 8.1.12
Operating System: Windows 11

Re: Problem mit PHP redirect auf lokaler Installation

Postby Nobbie » 05. March 2023 20:52

Ach so - Stück für Stück Knabberglück...

Weiso nennst Du uns nicht die einzig relevante Info, dass Du auf PHP8 umgestellt hast? Wie soll man denn die Ursache finden, wenn die wichtigsten Unterschiede nicht genannt werden? Wir können überraschenderweise keine Gedanken lesen.
Nobbie
 
Posts: 13176
Joined: 09. March 2008 13:04


Return to XAMPP für Windows

Who is online

Users browsing this forum: No registered users and 108 guests