简体   繁体   中英

Switch From Mobile Version to Full Website (Desktop Version)

I'm using this code to direct the users from desktop version to my mobile site.

 <?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/android.+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|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(di|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://mywebsite.com/mobile');
?>

i would like to give the users the option to switch back to desktop version from the mobile website but this code will redirect them back to mobile site. I was wondering if i can create an if statement to force the browser to stay on that page. for example if i can link back from mobile website using www.mywebsite.com?device=desktop and modify the code to recognize the url. my knowledge of PHP is limited so any help would be greatly appreciated.

SOLUTION:

** I tried to use session function as it was suggested in comments but i had issue with mobile devices. it seemed that some mobile browsers doesn't handle session very well.

** I used cookie instead and with the help of this post was able to solve the issue. Below is the code i'm using.

** NOTE: you can modify the detection code and time for setcookie to suit your needs

    <?php

    if (isset($_COOKIE['nomobile'])) {
      $version = "desktop";
    } else {

    if (preg_match('/iPhone|(...etc...)/', $_SERVER['HTTP_USER_AGENT'])) {
       $version = "mobile";
    } 

if ($version == "mobile") {
header('Location: http://yourwebsite.com/mobile');
}

    ?>

And you can use this code to create the cookie

<?php 
setcookie('nomobile', 'true');
   header('Location: http://yourwebsite.com');
?>

When the user clicks the 'Full Site' link, you can pass a variable to PHP by appending it to the URL. Here's an example of what the HTML link would look like on the mobile site:

<a href="http://mywebsite.com/?v=desktop">Full Site</a>

In PHP, the variable you passed in will be stored in $_GET['v'] ('v' is for version, but the naming is arbitrary). In your PHP code, you will first need to check whether $_GET['v'] is even set at all. If it is set, then you need to check whether or not it is set to 'desktop'. If both are true, then you should set a session variable so that if the user refreshes the page they won't be redirected to the mobile site again.

Now you need to check the session variable to see whether or not you should redirect the user. Again, you will need to first check that $_SESSION['v'] is set at all. If it is not set, then you should redirect the user. If it is set, then you need to check whether or not it is set to 'desktop'. If it is not set to 'desktop', then you should redirect the user. Here's what the code would look like:

// Set a session variable if the user prefers the desktop version
if (isset($_GET['v']) && $_GET['v'] == 'desktop') {
    $_SESSION['v'] == 'desktop';
}

// Detect browser and redirect mobile users unless they've already opted out
if (!isset($_SESSION['v']) || (isset($_SESSION['v']) && $_SESSION['v'] != 'desktop')) {
    // Place browser detection and redirection code here
}

One of the nice things about PHP is that it will handle sessions for you, but you must explicitly tell PHP to do so. You do this by using the session_start() function at the top of each page that needs to be part of the session. In this case, you would need a session_start() statement at the top of both the desktop site's page as well as the mobile site's page.

<?php 
    $useragent = $_SERVER['HTTP_USER_AGENT']; 
    if(preg_match('ultralongregex', substr($useragent,0,4)) && (!isset($_GET['device']) || $_GET['device'] != 'desktop'))
    header('Location: http://mywebsite.com/mobile'); 
?> 

with $_GET you can get the variables in your query_string (the ?hello=foo&bar=world with urls). With $_GET['device'] you can explicitly use the ?device=desktop.

We ask: if the variable is not set or the variable is not desktop(when it's set) we redirect to mobile page.

EDIT: To improve this, you can store the GET in a SESSION variable (sessions will be started when you open a page and will only deleted when you close the browser):

Just add some part and modify the code:

<?php 
    //Check if GET['device'] is set AND the session variable is not set. If true, set the session variable
    if(isset($_GET['device']) && !isset($_SESSION['device'])) $_SESSION['device'] = $_GET['device'];
    //code from top
    $useragent = $_SERVER['HTTP_USER_AGENT']; 
    //Modify here: $_SESSION instead of $_GET
    if(preg_match('ultralongregex',substr($useragent,0,4)) && (!isset($_SESSION['device']) || $_SESSION['device'] != 'desktop'))
    header('Location: http://mywebsite.com/mobile'); 
?> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM