PHP header redirect funktioniert nicht
Ich weiß, das wurde abgedeckt, bevor aber ich kann nicht finden, eine Antwort auf diese,
Habe ich immer diese verwendet;
header("Location: http://www.website.com/");
exit();
Dies hat immer funktioniert in meinem aktuellen Projekt und alle von einer plötzlichen es nicht funktioniert in keinem meiner Browser
Möchte ich, um das problem herauszufinden und es zu beheben, anstatt mit
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>";
Ich habe auch die Fehlerberichterstattung aktiviert und es zeigt keine Fehler
//SET ERROR REPORTING
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
ini_set('display_errors', TRUE);
Irgendwelche Ideen, warum es nicht funktionieren wird?
- ^ ist xor-so: E_ALL ^ E_WARNING ^ E_NOTICE = 111111111 ^ 000001000 ^ 000000010 = 111110101 Bedeutung alle Fehler außer Warnungen und Hinweise.
- danke, ich wünschte, ich wäre fand dies heraus, vor langer Zeit, es muss Tausende von Mitteilungen auf meiner Seite =(
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Sehen, was Sie bekommen. Sie sollten nicht verwenden, ^ (xor) in der error_reporting () - Aufruf, weil Sie unbeabsichtigt bitten für alle Fehler AUßER hinweisen und Warnungen.. das ist es, was eine "headers already sent" - Fehler.
Edit:
Auch versuchen, indem Sie flush (), rechts über dem header () - Aufruf.
Versuchen, entfernen Sie das Leerzeichen Zwischen Ort und die erste h in http.
verwandelt sich in
Ich hatte dieses problem auf meinem WAMP-Server.
Obwohl es sollte nicht das problem sein, wenn man bedenkt, dass ist, wie es dokumentiert ist in der PHP-Dokumentation. Aber Sie sollten wahrscheinlich versuchen Sie es trotzdem. Ich weiß, dass es bei mir geklappt hat in einer Reihe von Fällen.
COMMON PROBLEME SIND:
1) es sollte keine Ausgabe (d.h.
echo..
oder HTML-codes) vor demheader(.......);
Befehl.2) es sollte ein white-space(oder newline) vor
<?php
und nach?>
tags.3) GOLDER REGEL! - die Datei (und andere
include()
-d-Dateien) sollten UTF8 ohne BOM Kodierung (und nicht nur UTF-8). Der problem ist, ist in vielen Fällen (da die typischen UTF8 codierte Datei hat etwas besonderes Zeichen in der start-Datei-Ausgabe)!!!!!!!!!!!4) Wenn umleiten, nach
header(...);
müssen Sieexit;
5) Empfohlen - verwenden Sie immer die 301 oder 302 in Referenz:
6) Wenn keine der oben genannten hilft, verwenden Sie JAVSCRIPT-Umleitung(aber es ist sehr nicht auch Von Google empfohlen), aber es könnte die Letzte chance...:
UTF-8
in notepad++, aber nicht mitUTF-8-BOM
Sie geändert für notepad++versuchen. arbeitete für mich.
echo "<meta http-equiv='refresh' content='0;url=http://www.yoursite.com'>";
Auch wenn Sie mit der header-Funktion hat es die erste Sache, die aufgerufen wird, bevor jeder text (auch ein Leerzeichen) in den client geschrieben, so überprüfen Sie immer wieder, dass es keine Leerzeichen ausgegeben wird, bevor Sie Ihren Anruf auch vor th
Kann es seltsame Lösung, aber versuchen Sie diese, ändern Sie die Seite Codierung von utf8 auf ANSI-und es wird funktionieren.
verwenden Sie alle text-editor und speichern Sie die Seite als ANSI-Codierung und laden Sie Sie auf Ihren online-server.
Hinzufügen ob_start() hat dieses Problem gelöst.
Was passiert genau, wenn Sie besuchen Sie die Seite? Sie können versuchen, Firebug oder einem anderen tool, das Ihnen erlaubt, zu analysieren, HTTP-Header und überprüfen, ob die Umleitung wirklich passiert und ob die
Location
header ist wirklich vorhanden.Sollten Sie auch überprüfen, den Sie umleiten, um einen gültigen Speicherort, und dass der Standort mit den richtigen 404 und 500 error Meldungen/Seiten-setup. Es könnte sein, dass Sie einfach umleiten, ein schlechter Platz.
Komisch, aber das entfernen von leeren Zeilen in php für mich gearbeitet :-\
code vor:
code, der funktioniert hat:
Versuchen, diese (für mich arbeiten):
echo '<script>window.location.replace("http://www.example.com")</script>';
Statt
header("Location: http://www.example.com");
Wenn Sie Ihre index-Seite ist eine html-Datei, kann es nicht funktionieren. Ändern Sie es zu index.php und diesen code verwenden:
Hatte ich eigentlich ein Fall wie dieser, wo ich eine admin-Seite, die enthalten war auf der Oberseite der alle meine anderen Seiten. Oben auf jeder Seite unter der Zeile:
Ich würde die php-Logik:
Das problem dabei war, dass irgendwo sonst war ich auch den Aufruf/manipulieren
header(...
. Nach eine Menge Zeit geht durch mein code, ich gebe zu, ich konnte nicht herausfinden, wo das problem war. Dann dachte ich, dass jede dieser Dateien hat meinadmin.php
Datei, bevor Sie etwas anderes zu tun. Also habe ich mir überlegt, was passieren würde, wenn ich setzen würde, die Logik, die war am Anfang jedes meiner Ansichten (weil ich nicht wollen, etwas zu sichtbar sein, es sei denn, Sie wurden protokolliert-in) in meinemadmin.php
- Datei?Was geschah, war, dass, bevor es bekam sogar jeder von der php/html in meine Ansichten, es bewertet oder nicht, ob jemand angemeldet war (
$_SESSION['username'])
) und wenn esNULL
ich habe dann einfach umgeleitet, um den adminLogin-Seite. Ich habe diese Logik direkt vor meinem Schalter und es funktionierte perfekt für alle meine Dateien, die einmal erforderlich, die Logik. Die Art und Weise, die ich hatte, arbeitete er in der Entwicklung, sondern stellte eine Reihe von Problemen in der Produktion. Ich fand, dass das verschieben der Umleitung Logik meineradmin.php
Datei nicht nur vermeiden den doppeltenheader(...
manipulation aber tatsächlich mein code effizienter, indem Sie entfernen das überschüssige Logik aus meiner Sicht-Dateien und in meinemadmin.php
- Datei.Anstatt die Logik in jeder view-Datei, legte es in den controller einmal, bevor Ihr wechseln. Funktioniert wie ein Charme! Dies ist nützlich, wenn Sie nicht wollen, dass jemand Zugriff auf die sensiblen Ansichten, es sei denn, Sie sich anmelden. In meinem Fall war wichtig für mein CMS. Allerdings, wenn es gibt einige Dateien, die Sie möchten, angezeigt werden kann, ohne sich anzumelden, dann denke ich, die ursprüngliche Logik wäre ausreichend. Es scheint, dass Sie bereits eine Lösung gefunden, aber hoffentlich kann hilfreich sein, wenn Sie in dieser Fehlermeldung wieder. 🙂