2016-07-19 11 views
2

Ich habe eine einfache Weiterleitung auf meiner Homepage, die auf den Benutzer reagiert auf einem Smartphone oder Tablet reagiert. Die Klasse funktioniert und gibt ein True zurück, wenn die Seite auf einem Smartphone geöffnet wird.php redirect funktioniert nicht richtig

Daher, wenn ich ein Echo in der If-Anweisung schreibe es wird Echo. Aber die Umleitung funktioniert nicht und ich kann keinen Sinn daraus machen. Jeder Ahnung, was ich hier verpasst habe?

include ('includes/Mobiledetecter.php');     
$detect = new Mobiledetecter;         
           // 
if($detect->isMobile() or $detect->isTablet()) {   
    header('Location: http://www.example.com/'); 
} 
+0

Sie sind nicht durch Zufall, alles vor dem 'Header ausgibt()' bist du? http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php – CD001

+0

Header kommen vor Körper. Das ist die Regel. Ein Redirect-Header bedeutet, dass der Client keine Zwischenstufe sieht. – apokryfos

Antwort

6

Ausgang unmittelbar nach dem Header Einstellung, wenn es nichts anderes zu tun:

if($detect->isMobile() or $detect->isTablet()) {   
    header('Location: http://www.example.com/'); 
    exit; 
} 

Beachten Sie auch, dass Header nur dann funktionieren, wenn Sie nicht bereits Ausgabe an den Browser gesendet haben, entweder explizit (zB : echo) oder implizit (zB durch etwas einschließlich Leerzeichen vor dem <?php Tag, das diesen Header enthält)

+0

Eins für den Zen-Meister auch ;-) – Poiz

2

Achten Sie darauf, Ihren Code mit Recht an der Spitze von yo Ihr Skript vor jeder Ausgabe und auch, dass Ihre öffnenden PHP-Tags keine Leerzeichen davor haben. Im Wesentlichen, so etwas wie das Skript aussehen sollte:

<?php // NOTICE THAT THERE IS NO SPACE BEFORE <?php & NO ECHO BEFORE header(...) 

    include ('includes/Mobiledetecter.php');     
    $detect = new Mobiledetecter;         
          // 
    if($detect->isMobile() or $detect->isTablet()) {   
     header("Location: http://www.example.com/"); 
     exit; 
    } 
+0

upvote: gutes Denken mit dem Raum vor ' BeetleJuice

+0

@BeetleJuice Es klingt vielleicht seltsam, das zu hören, aber ehrlich gesagt, du bist eine sehr aufrichtige und aufrichtige Person ... nur eine Beobachtung von ungefähr 2-3 Begegnungen mit dir bis jetzt ... und vielen Dank für die Abstimmung plus Empfehlung ;-) – Poiz

+0

Sehr geschätzt. * << Tipp des Hutes >> * – BeetleJuice

1

Zusätzlich zu, was alle anderen sagen, ist richtig, dass man nicht beide Echo und eine serverseitige Umleitung tun, hier ist ein Weg, um etwas zu sagen, und dann umleiten :

include ('includes/Mobiledetecter.php');     
$detect = new Mobiledetecter;         
           // 
if($detect->isMobile() or $detect->isTablet()) {   
    echo "Redirecting you to the example website"; 
    echo "Click <a href='http://www.example.com/'>here</a> if you are not redirected within 5 seconds";   
    echo "<script> setTimeout(function() { window.location.href='http://www.example.com/'; }, 3000);</script>" 
    exit; 
} 
+0

Das ist kreativ :-) – BeetleJuice

1

ob_end_clean Funktion vor Header Versuchen: http://php.net/manual/fr/function.ob-end-clean.php

+0

Wenn die Ausgangspufferung eingeschaltet ist, wird der 'Header' richtig gesetzt, ohne dass diese Funktion benötigt wird (nur getestet). Wenn die Pufferung der Ausgabe deaktiviert ist, behebt diese Funktion das Ausgabeproblem nicht, da kein Puffer zum Bereinigen vorhanden wäre. Also ich weiß nicht, welche Umstände diese Funktion tatsächlich verbessert. Missverständnis ich es? – BeetleJuice