I have a PHP google map application that I want to make visible to users when they are using a desktop but redirect to another PHP page if the visitor is using a mobile device. I know there are numerous ways to do this from OS to browser type detection but was wondering if someone could provide some code they feel is the best way to handle this and it being the most consistent?
Asked
Active
Viewed 2.9k times
13
-
use `window.location.href = "http://url-that-you-want.com"` (JS) – Peeyush Kushwaha Oct 28 '12 at 15:20
6 Answers
24
If you don't want to use javascript, you can handle it via php. Take a look at this lib: http://code.google.com/p/php-mobile-detect/. And then you could do something like:
<?php
include 'Mobile_Detect.php';
$detect = new Mobile_Detect();
if ($detect->isMobile()) {
header('Location: yourpage.php');
exit(0);
}

jacoz
- 3,508
- 5
- 26
- 42
-
-
1Up voted because even today this library is very reliable and usable. – Jesse Elser Aug 06 '15 at 18:28
-
-
7
- Some servers have $_SERVER['HTTP_USER_AGENT'] as not set, so make sure to check if empty first
- Readability is important to us, so we are using this instead of others complex regex. Just add other devices as you see fit.
Here is the code we use:
<?php
if(! empty($_SERVER['HTTP_USER_AGENT'])){
$useragent = $_SERVER['HTTP_USER_AGENT'];
if( preg_match('@(iPad|iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Opera Mini|Windows CE|Nokia|SonyEricsson|webOS|PalmOS)@', $useragent) ){
header('Location: ./mobile/');
}
}
?>
0
Do you want javascript or php solution? Using JS you can just check if there is 'Mobile' in UA:
if (navigator.userAgent.indexOf('Mobile') > -1) location.href = 'your-mobile-page-url';

klh
- 605
- 7
- 23
-
-
Check this: http://stackoverflow.com/questions/10823144/is-there-a-quintessential-mobile-user-agent-regexp-pattern – techfoobar Oct 28 '12 at 15:03
-
http://www.zytrax.com/tech/web/mobile_ids.html Of course we are talking about phones that can actually use the application, right? – klh Oct 28 '12 at 15:06
-
1Yes. But this would show the actual app for phones which don't; which may not be what the OP wants. Also, I believe you meant `== -1` instead of `!= -1` in your answer. – techfoobar Oct 28 '12 at 15:10
-
And look at this monstrous regex used in http://detectmobilebrowsers.com/ Thats just not right. – klh Oct 28 '12 at 15:14
-
Yes, a bit of an overkill for sure. But then it depends on how mobile-proof the OP wants it. The *best* imo would be to make the app compatible with mobile browsers. – techfoobar Oct 28 '12 at 15:16
0
You could try using simple dimension conditions
if (screen.width < 600 || screen.height < 200) {
window.location = 'anotherPage.html'
}
screen
and window
dimensions will be different if browser window minimized
Can use combination of window/screen tests and alert user to issues also and give them option to redirect

charlietfl
- 170,828
- 13
- 121
- 150
-
6
-
But he may want to add something special for mobile users, enlarge buttons, etc. – klh Oct 28 '12 at 15:15
-
@Killah I don't know what OP wants in his app..am simply trying to offer a potential solution other than browser sniffing – charlietfl Oct 28 '12 at 15:17
0
Using the user-agent string
$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|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://detectmobilebrowser.com/mobile');

Prinzhorn
- 22,120
- 7
- 61
- 65
-
And I was curious why most of the sites written in php just don't care about performance. Such a monstrous regex just to check if site is viewed from mobile? Think how it would behave under few thousands of users wanting to access the app. – klh Oct 28 '12 at 15:19
-
detectmobilebrowsers.com is ok, but it doesn't match ipad in useragent when I try their latest regex version from their site. Use with caution – fedmich Aug 26 '13 at 08:22
0
Checking for devices:
function UserAgentRegCheck($regText)
{
$useragent = $_SERVER['HTTP_USER_AGENT'];
return preg_match('@('.$regText.')@', $useragent);
}
function isIphone() {
return UserAgentRegCheck('iPad|iPod|iPhone');
}
function isAndroid() {
return UserAgentRegCheck('Android');
}
function isMobile(){
return UserAgentRegCheck('iPad|iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Opera Mini|Windows CE|Nokia|SonyEricsson|webOS|PalmOS');
}
Redirection code:
if(isIphone()) {
header('Location: http://www.google.com.ua');
exit();
}
if(isAndroid()) {
header('Location: http://youtube.com');
exit();
}

Andrew_STOP_RU_WAR_IN_UA
- 9,318
- 5
- 65
- 101