mrswenner Posted April 30, 2014 Share Posted April 30, 2014 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: 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: 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. Quote Link to comment Share on other sites More sharing options...
ginerjm Posted April 30, 2014 Share Posted April 30, 2014 Double quotes, not single quotes. Quote Link to comment Share on other sites More sharing options...
fastsol Posted April 30, 2014 Share Posted April 30, 2014 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. Quote Link to comment Share on other sites More sharing options...
mrswenner Posted April 30, 2014 Author Share Posted April 30, 2014 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? Quote Link to comment Share on other sites More sharing options...
mrswenner Posted April 30, 2014 Author Share Posted April 30, 2014 Also I did grab the code from https://github.com/serbanghita/Mobile-Detect/releases and I could not get the if/then statement to work. I could echo out the device I used. Perhaps you could help me with that instead. Quote Link to comment Share on other sites More sharing options...
fastsol Posted April 30, 2014 Share Posted April 30, 2014 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. Quote Link to comment Share on other sites More sharing options...
mrswenner Posted April 30, 2014 Author Share Posted April 30, 2014 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> Quote Link to comment Share on other sites More sharing options...
fastsol Posted April 30, 2014 Share Posted April 30, 2014 Ahh, well yeah you're outputting the <html> and <head> stuff before running the code, so of course it throws the error. You need to put that code above all other code on the page. Quote Link to comment Share on other sites More sharing options...
mrswenner Posted April 30, 2014 Author Share Posted April 30, 2014 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. Quote Link to comment Share on other sites More sharing options...
Solution mrswenner Posted April 30, 2014 Author Solution Share Posted April 30, 2014 AHHHHH, Thanks fastsol!!! That worked! Quote Link to comment Share on other sites More sharing options...
ttocskcaj Posted May 3, 2014 Share Posted May 3, 2014 Just a note, redirecting to a different site for a mobile device is kind of old fashioned now. Have you looked at things like Bootstrap, that help you have one site that scales to any device? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.