2016-07-19 6 views
2

私は自分のホームページに簡単なリダイレクトを受け取りました。このリダイレクトは、スマートフォンやタブレットにいるユーザーに反応します。クラスが機能していて、サイドがスマートフォンで開かれているときに真実を返します。PHPリダイレクトが正常に動作しない

したがって、if文にエコーを書き込むと、エコーされます。しかし、リダイレクトは機能せず、私はそれを理解できません。誰かが私がここで逃した何かの手がかり?

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

あなたは 'ヘッダ()'あなたになる前に何かを出力し、万が一、じゃありませんか? http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php – CD001

+0

ヘッダーは本文の前に来ます。それがルールです。リダイレクトヘッダーは、クライアントが中間を何も見ないことを意味します。 – apokryfos

答えて

6

すぐに行うには他に何も存在しない場合、ヘッダーを設定した後、終了:あなたはすでに明示的に、ブラウザに出力を送信していない場合

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

はまた、ヘッダのみ動作することを検討してください(例: :echo)または暗黙的に(例:このヘッダが含まれてい<?phpタグの前に空白を含むを有することにより)

+0

また、禅マスターのために1つアップ;-) – Poiz

2

は、あなたのコードは、ヨーヨーの最上部に右であることを確認してくださいur出力前にスクリプトを作成しておき、あなたのPHPタグの前に空白文字がないことを確認してください。本質的には、スクリプトは次のようなものになります。誰もが正しくあなたがエコーとサーバー側のリダイレクトを行うことはできません両方のことを言っていることにさらに

<?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: '<?php'の前のスペースで良い考え方。あなたがこのルールについて知らないならば、修正するのは簡単な間違いであり、そうした難しいバグです。 – BeetleJuice

+0

@BeetleJuiceこれを聞くのは何とか不思議に聞こえるかもしれませんが、正直なところ、あなたは非常に誠実で直接的な人です...これまでの2〜3回の出会いからの観察だけです...そして、プラス表彰;-) – Poiz

+0

非常に感謝します。 * "帽子の先端" * – BeetleJuice

1

を、ここで何かを言った後、リダイレクトする方法です:

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

それは創造的です:-) – BeetleJuice

1

は、ヘッダの前にob_end_clean機能を試してみてください: http://php.net/manual/fr/function.ob-end-clean.php

+0

出力バッファリングがオンの場合、この機能を必要とせずに 'header'が正しく設定されます。出力バッファリングがオフの場合、この関数は出力バッファーがないため出力の問題を解決しません。だから私はこの機能が実際にどのような状況で改善するのか分かりません。私はそれを誤解していますか? – BeetleJuice

関連する問題