I got a simple redirect on my homepage, which reacts to the user being on a smartphone or tablett. The Class is working and gives back a true when the side is opened on a smartphone.
Therefore if i write an echo in the if-statement it gets echoed. But the redirection doesn't work and i can't make a sense of it. Anyone any clue what i missed here?
include ('includes/Mobiledetecter.php');
$detect = new Mobiledetecter;
//
if($detect->isMobile() or $detect->isTablet()) {
header('Location: http://www.example.com/');
}
Exit immediately after setting the header if there is nothing else to do:
if($detect->isMobile() or $detect->isTablet()) {
header('Location: http://www.example.com/');
exit;
}
Also consider that headers only work if you haven't already sent output to the browser, either explicitly (eg: echo
) or implicitly (eg: by having anything including blank space before the <?php
tag that contains this header)
Make sure your code is right at the very top of your Script before any output and also that your opening php tags has no white-space character(s) before it. In essence, your script should look something like this:
<?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;
}
Further to what everyone else is correctly saying that you can't both echo and do a server-side redirect, here's a way to say something and then redirect:
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;
}
Try ob_end_clean function before header : http://php.net/manual/fr/function.ob-end-clean.php