Jump to content

Mobile Device Redirect Issue with header()


mrswenner
Go to solution Solved by mrswenner,

Recommended Posts

I have a client that would like me to identify if the user has a mobile device, and if so redirect them to a mobile webpage; if not, then redirect them to a non-mobile webpage. I have used the code listed below with success for another client, but for my latest client it is not working.

 

Here is the code:

<?php
$mobileURL='http://my.url/mobile/index.php';
$url='http://my.url/index.php';
function isMobile() {
    return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}

// If the user is on a mobile device, redirect them
if(isMobile()){
//	echo '<a href="'.$mobileURL.'">'.$mobileURL.'</a>';
   header('Location: $mobileURL');  
	/* Make sure that code below does not get executed when we redirect. */
	exit;
}else{
//	echo '<a href="'.$url.'">'.$url.'</a>';
   header('Location: $url');  
}
?>

The code works fine when I use the echo statements in the if/then statement, but not if I use the header() coding. The following is what I get:

 

On Laptop: (the emoticon below is supposed to read the number 8 with a closed paranthesis)

Warning: Cannot modify header information - headers already sent by (output started at /users1/domains/evergreenlawnservice.com/web/mobile/mobiletest.php: 8) in/users1/domains/my.url/web/mobile/mobiletest.php on line 23

 

On iPhone: (the emoticon below is supposed to read the number 8 with a closed paranthesis)

Warning: Cannot modify header information - headers already sent by (output started at /users1/domains/evergreenlawnservice.com/web/mobile/mobiletest.php: 8) in/users1/domains/my.url/web/mobile/mobiletest.php on line 18

 

Please let me know what I am doing wrong and how to fix it.

Link to comment
Share on other sites

Couple things, first google actually has a php script that is much more advanced that what you are using to detect mobile devices and is much better at doing it than what you have.  So I suggest looking at that.  The header issue is because of the use of single quotes inside the header() in stead of double quotes, the vars are not being parsed as vars but rather literal text.

header('Location: '.$mobileURL); //one way to do it
header("Location: $mobileURL"); // other way to do it.
Link to comment
Share on other sites

OK, I changed all my single quotes for the URLs to double quotes, change the variable set and not the header set, changed the header set and not the variable set, and even tried the two different ways suggested by fastsol. I still get the errors with each test I did. Could it be something else?

 

fastsol, will you send me the google php script?

Link to comment
Share on other sites

Mobile detect - https://code.google.com/p/php-mobile-detect/

 

If the header is still failing then you must have something else being output to the browser before this script runs.  Is this the very FIRST thing that runs on the page or is this included later?  If it's included then you have another script that is outputting to the browser before this script runs.

Link to comment
Share on other sites

currently it is the only thing that runs on the page.

<html>
<head>
</head>

<body>
<?php
function isMobile() {
    return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}
// If the user is on a mobile device, redirect them
if(isMobile()){
   header("Location: http://my.url/mobile/index.php");
}else{
   header("Location: http://my.url/mobile/index.php");
}
?>
</body>
</html>

Link to comment
Share on other sites

So then I try the code from Google:

<head>
</head>

<body>
<?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))
header('Location: http://myurl/mobile/index.php');
?>
</body>
</html>

And I get the same errors.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.