Intereting Posts
Android httppsot для вставки в базу данных mysql ,,, Неустранимая ошибка: исключить исключение «Zend_Gdata_App_HttpException» с сообщением «Ожидаемый код ответа 200, получил 401» Какова максимальная длина строки в PHP? Расширение openssl требуется для защиты SSL / TLS PHP, обслуживающий одну страницу за раз Представление PHP scandir explorer для отображения файлов общих сетевых файлов (файл: //) через WAMP. Работает на локальном хосте, но не по IP-адресу Почему, если я помещаю «-» тире в правило в моем htaccess, не работает? PHP mail () возвращает false, но ошибка не регистрируется используйте preg_split для разделения аккордов и слов PHP header () перенаправляет в Google App Engine Как присоединиться к строкам пути файловой системы в PHP? Как изменить ограничение памяти php на GoDaddy laravel – инъекция зависимостей и контейнер IoC Как получить доступ к параметрам маршрута, сообщения, получения и т. Д. В Zend Framework 2 Каковы методы кэширования, которые могут быть реализованы при разработке динамического веб-сайта?

Переключение с мобильной версии на полный сайт (настольная версия)

Я использую этот код, чтобы направить пользователей с настольной версии на мой мобильный сайт.

<?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|\-[aw])|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'); ?> 

я хотел бы дать пользователям возможность вернуться к настольной версии с мобильного сайта, но этот код перенаправит их обратно на мобильный сайт. Мне было интересно, могу ли я создать оператор if, чтобы заставить браузер оставаться на этой странице. например, если я могу связать назад с мобильного сайта с помощью www.mywebsite.com?device=desktop и изменить код для распознавания URL. мои знания PHP ограничены, поэтому любая помощь будет очень признательна.

РЕШЕНИЕ:

** Я попытался использовать функцию сессии, как это было предложено в комментариях, но у меня была проблема с мобильными устройствами. казалось, что некоторые мобильные браузеры не обрабатывают сеанс очень хорошо.

** Я использовал cookie вместо этого, и с помощью этого сообщения смог решить проблему. Ниже приведен код, который я использую.

** ПРИМЕЧАНИЕ: вы можете изменить код обнаружения и время для setcookie в соответствии с вашими потребностями

  <?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'); } ?> 

И вы можете использовать этот код для создания файла cookie

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

Когда пользователь нажимает ссылку «Полный сайт», вы можете передать переменную на PHP, добавив ее к URL-адресу. Вот пример того, как будет выглядеть ссылка HTML на мобильном сайте:

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

В PHP переменная, которую вы передали, будет храниться в $_GET['v'] ('v' для версии, но именование произвольно). В вашем PHP-коде вам сначала нужно будет проверить, установлен ли вообще $_GET['v'] . Если он установлен, вам нужно проверить, установлен ли он на «рабочий стол». Если оба значения истинны, тогда вы должны установить переменную сеанса, чтобы, если пользователь обновляет страницу, они не будут перенаправлены на мобильный сайт еще раз.

Теперь вам нужно проверить переменную сеанса, чтобы узнать, следует ли перенаправлять пользователя. Опять же, вам нужно сначала проверить, что $_SESSION['v'] установлен вообще. Если он не установлен, вы должны перенаправить пользователя. Если он установлен, вам нужно проверить, установлен ли он на «рабочий стол». Если он не установлен на «рабочий стол», вы должны перенаправить пользователя. Вот как выглядит код:

 // 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 } 

Одна из приятных особенностей PHP заключается в том, что она будет обрабатывать сеансы для вас, но вы должны явно указать PHP на это. Вы делаете это, используя функцию session_start() в верхней части каждой страницы, которая должна быть частью сеанса. В этом случае вам потребуется инструкция session_start() в верхней части страницы рабочего стола, а также страницы мобильного сайта.

 <?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'); ?> 

с $ _GET вы можете получить переменные в вашей query_string («hello = foo & bar = world с URL-адресами»). С $ _GET ['device'] вы можете явно использовать «device = desktop».

Мы спрашиваем: если переменная не установлена ​​или переменная не является рабочим столом (когда она установлена), мы перенаправляем на мобильную страницу.

EDIT: чтобы улучшить это, вы можете сохранить GET в переменной SESSION (сеансы будут запущены при открытии страницы и будут удалены только при закрытии браузера):

Просто добавьте часть и измените код:

 <?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'); ?>