PageRenderTime 46ms CodeModel.GetById 5ms RepoModel.GetById 0ms app.codeStats 0ms

/helpers/browser.php

https://github.com/MilkZoft/zan
PHP | 232 lines | 232 code | 0 blank | 0 comment | 1 complexity | a150a8897d4ac6aa1e015c6dfb1984ec MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. if (!defined("ACCESS")) {
  3. die("Error: You don't have permission to access here...");
  4. }
  5. if (!function_exists("browser")) {
  6. function browser()
  7. {
  8. $browsers = array(
  9. "op" => "(Opera)",
  10. "ff" => "((Firebird)|(Firefox))",
  11. "ga" => "(Galeon)",
  12. "mo" => "(Gecko)",
  13. "my" => "(MyIE)",
  14. "ly" => "(Lynx)",
  15. "ne" => "((Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79))",
  16. "ko" => "(Konqueror)",
  17. "ie" => "((MSIE 10\.[0-9]+))",
  18. "ie" => "((MSIE 9\.[0-9]+))",
  19. "ie" => "((MSIE 8\.[0-9]+))",
  20. "ie" => "((MSIE 7\.[0-9]+))",
  21. "ie" => "((MSIE 6\.[0-9]+))",
  22. "ie" => "((MSIE 5\.[0-9]+))",
  23. "ie" => "((MSIE 4\.[0-9]+))",
  24. "ch" => "((Chrome))"
  25. );
  26. foreach ($browsers as $browser => $pattern) {
  27. if (preg_match($pattern, $_SERVER["HTTP_USER_AGENT"])) {
  28. if ($browser === "mo") {
  29. if (strstr($_SERVER["HTTP_USER_AGENT"], "Chrome") !== false) {
  30. return "ch";
  31. }
  32. if (strstr($_SERVER["HTTP_USER_AGENT"], "Safari") !== false) {
  33. return "sf";
  34. }
  35. } else {
  36. return $browser;
  37. }
  38. } elseif (strstr($_SERVER["HTTP_USER_AGENT"], "MSIE") !== false) {
  39. return "ie";
  40. }
  41. }
  42. return "un";
  43. }
  44. }
  45. if (!function_exists("isMobile")) {
  46. function isMobile($iphone = true, $ipad = true, $android = true , $opera = true, $blackberry = true, $palm = true, $windows = true, $redirect = false, $desktopRedirect = false) {
  47. $mobile = false;
  48. $userAgent = $_SERVER["HTTP_USER_AGENT"];
  49. $accept = $_SERVER["HTTP_ACCEPT"];
  50. $array = array(
  51. "1207" => "1207", "3gso" => "3gso", "4thp" => "4thp", "501i" => "501i", "502i" => "502i", "503i" => "503i",
  52. "504i" => "504i", "505i" => "505i", "506i" => "506i", "6310" => "6310", "6590" => "6590", "770s" => "770s",
  53. "802s" => "802s", "a wa" => "a wa", "acer" => "acer", "acs-" => "acs-", "airn" => "airn", "alav" => "alav",
  54. "asus" => "asus", "attw" => "attw", "au-m" => "au-m", "aur " => "aur ", "aus " => "aus ", "abac" => "abac",
  55. "acoo" => "acoo", "aiko" => "aiko", "alco" => "alco", "alca" => "alca", "amoi" => "amoi", "anex" => "anex",
  56. "anny" => "anny", "anyw" => "anyw", "aptu" => "aptu", "arch" => "arch", "argo" => "argo", "bell" => "bell",
  57. "bird" => "bird", "bw-n" => "bw-n", "bw-u" => "bw-u", "beck" => "beck", "benq" => "benq", "bilb" => "bilb",
  58. "blac" => "blac", "c55/" => "c55/", "cdm-" => "cdm-", "chtm" => "chtm", "capi" => "capi", "cond" => "cond",
  59. "craw" => "craw", "dall" => "dall", "dbte" => "dbte", "dc-s" => "dc-s", "dica" => "dica", "ds-d" => "ds-d",
  60. "ds12" => "ds12", "dait" => "dait", "devi" => "devi", "dmob" => "dmob", "doco" => "doco", "dopo" => "dopo",
  61. "el49" => "el49", "erk0" => "erk0", "esl8" => "esl8", "ez40" => "ez40", "ez60" => "ez60", "ez70" => "ez70",
  62. "ezos" => "ezos", "ezze" => "ezze", "elai" => "elai", "emul" => "emul", "eric" => "eric", "ezwa" => "ezwa",
  63. "fake" => "fake", "fly-" => "fly-", "fly_" => "fly_", "g-mo" => "g-mo", "g1 u" => "g1 u", "g560" => "g560",
  64. "gf-5" => "gf-5", "grun" => "grun", "gene" => "gene", "go.w" => "go.w", "good" => "good", "grad" => "grad",
  65. "hcit" => "hcit", "hd-m" => "hd-m", "hd-p" => "hd-p", "hd-t" => "hd-t", "hei-" => "hei-", "hp i" => "hp i",
  66. "hpip" => "hpip", "hs-c" => "hs-c", "htc " => "htc ", "htc-" => "htc-", "htca" => "htca", "htcg" => "htcg",
  67. "htcp" => "htcp", "htcs" => "htcs", "htct" => "htct", "htc_" => "htc_", "haie" => "haie", "hita" => "hita",
  68. "huaw" => "huaw", "hutc" => "hutc", "i-20" => "i-20", "i-go" => "i-go", "i-ma" => "i-ma", "i230" => "i230",
  69. "iac" => "iac", "iac-" => "iac-", "iac/" => "iac/", "ig01" => "ig01", "im1k" => "im1k", "inno" => "inno",
  70. "iris" => "iris", "jata" => "jata", "java" => "java", "kddi" => "kddi", "kgt" => "kgt", "kgt/" => "kgt/",
  71. "kpt " => "kpt ", "kwc-" => "kwc-", "klon" => "klon", "lexi" => "lexi", "lg g" => "lg g", "lg-a" => "lg-a",
  72. "lg-b" => "lg-b", "lg-c" => "lg-c", "lg-d" => "lg-d", "lg-f" => "lg-f", "lg-g" => "lg-g", "lg-k" => "lg-k",
  73. "lg-l" => "lg-l", "lg-m" => "lg-m", "lg-o" => "lg-o", "lg-p" => "lg-p", "lg-s" => "lg-s", "lg-t" => "lg-t",
  74. "lg-u" => "lg-u", "lg-w" => "lg-w", "lg/k" => "lg/k", "lg/l" => "lg/l", "lg/u" => "lg/u", "lg50" => "lg50",
  75. "lg54" => "lg54", "lge-" => "lge-", "lge/" => "lge/", "lynx" => "lynx", "leno" => "leno", "m1-w" => "m1-w",
  76. "m3ga" => "m3ga", "m50/" => "m50/", "maui" => "maui", "mc01" => "mc01", "mc21" => "mc21", "mcca" => "mcca",
  77. "medi" => "medi", "meri" => "meri", "mio8" => "mio8", "mioa" => "mioa", "mo01" => "mo01", "mo02" => "mo02",
  78. "mode" => "mode", "modo" => "modo", "mot " => "mot ", "mot-" => "mot-", "mt50" => "mt50", "mtp1" => "mtp1",
  79. "mtv " => "mtv ", "mate" => "mate", "maxo" => "maxo", "merc" => "merc", "mits" => "mits", "mobi" => "mobi",
  80. "motv" => "motv", "mozz" => "mozz", "n100" => "n100", "n101" => "n101", "n102" => "n102", "n202" => "n202",
  81. "n203" => "n203", "n300" => "n300", "n302" => "n302", "n500" => "n500", "n502" => "n502", "n505" => "n505",
  82. "n700" => "n700", "n701" => "n701", "n710" => "n710", "nec-" => "nec-", "nem-" => "nem-", "newg" => "newg",
  83. "neon" => "neon", "netf" => "netf", "noki" => "noki", "nzph" => "nzph", "o2 x" => "o2 x", "o2-x" => "o2-x",
  84. "opwv" => "opwv", "owg1" => "owg1", "opti" => "opti", "oran" => "oran", "p800" => "p800", "pand" => "pand",
  85. "pg-1" => "pg-1", "pg-2" => "pg-2", "pg-3" => "pg-3", "pg-6" => "pg-6", "pg-8" => "pg-8", "pg-c" => "pg-c",
  86. "pg13" => "pg13", "phil" => "phil", "pn-2" => "pn-2", "pt-g" => "pt-g", "palm" => "palm", "pana" => "pana",
  87. "pire" => "pire", "pock" => "pock", "pose" => "pose", "psio" => "psio", "qa-a" => "qa-a", "qc-2" => "qc-2",
  88. "qc-3" => "qc-3", "qc-5" => "qc-5", "qc-7" => "qc-7", "qc07" => "qc07", "qc12" => "qc12", "qc21" => "qc21",
  89. "qc32" => "qc32", "qc60" => "qc60", "qci-" => "qci-", "qwap" => "qwap", "qtek" => "qtek", "r380" => "r380",
  90. "r600" => "r600", "raks" => "raks", "rim9" => "rim9", "rove" => "rove", "s55/" => "s55/", "sage" => "sage",
  91. "sams" => "sams", "sc01" => "sc01", "sch-" => "sch-", "scp-" => "scp-", "sdk/" => "sdk/", "se47" => "se47",
  92. "sec-" => "sec-", "sec0" => "sec0", "sec1" => "sec1", "semc" => "semc", "sgh-" => "sgh-", "shar" => "shar",
  93. "sie-" => "sie-", "sk-0" => "sk-0", "sl45" => "sl45", "slid" => "slid", "smb3" => "smb3", "smt5" => "smt5",
  94. "sp01" => "sp01", "sph-" => "sph-", "spv " => "spv ", "spv-" => "spv-", "sy01" => "sy01", "samm" => "samm",
  95. "sany" => "sany", "sava" => "sava", "scoo" => "scoo", "send" => "send", "siem" => "siem", "smar" => "smar",
  96. "smit" => "smit", "soft" => "soft", "sony" => "sony", "t-mo" => "t-mo", "t218" => "t218", "t250" => "t250",
  97. "t600" => "t600", "t610" => "t610", "t618" => "t618", "tcl-" => "tcl-", "tdg-" => "tdg-", "telm" => "telm",
  98. "tim-" => "tim-", "ts70" => "ts70", "tsm-" => "tsm-", "tsm3" => "tsm3", "tsm5" => "tsm5", "tx-9" => "tx-9",
  99. "tagt" => "tagt", "talk" => "talk", "teli" => "teli", "topl" => "topl", "hiba" => "hiba", "up.b" => "up.b",
  100. "upg1" => "upg1", "utst" => "utst", "v400" => "v400", "v750" => "v750", "veri" => "veri", "vk-v" => "vk-v",
  101. "vk40" => "vk40", "vk50" => "vk50", "vk52" => "vk52", "vk53" => "vk53", "vm40" => "vm40", "vx98" => "vx98",
  102. "virg" => "virg", "vite" => "vite", "voda" => "voda", "vulc" => "vulc", "w3c " => "w3c ", "w3c-" => "w3c-",
  103. "wapj" => "wapj", "wapp" => "wapp", "wapu" => "wapu", "wapm" => "wapm", "wig " => "wig ", "wapi" => "wapi",
  104. "wapr" => "wapr", "wapv" => "wapv", "wapy" => "wapy", "wapa" => "wapa", "waps" => "waps", "wapt" => "wapt",
  105. "winc" => "winc", "winw" => "winw", "wonu" => "wonu", "x700" => "x700", "xda2" => "xda2", "xdag" => "xdag",
  106. "yas-" => "yas-", "your" => "your", "zte-" => "zte-", "zeto" => "zeto", "acs-" => "acs-", "alav" => "alav",
  107. "alca" => "alca", "amoi" => "amoi", "aste" => "aste", "audi" => "audi", "avan" => "avan", "benq" => "benq",
  108. "bird" => "bird", "blac" => "blac", "blaz" => "blaz", "brew" => "brew", "brvw" => "brvw", "bumb" => "bumb",
  109. "ccwa" => "ccwa", "cell" => "cell", "cldc" => "cldc", "cmd-" => "cmd-", "dang" => "dang", "doco" => "doco",
  110. "eml2" => "eml2", "eric" => "eric", "fetc" => "fetc", "hipt" => "hipt", "http" => "http", "ibro" => "ibro",
  111. "idea" => "idea", "ikom" => "ikom", "inno" => "inno", "ipaq" => "ipaq", "jbro" => "jbro", "jemu" => "jemu",
  112. "java" => "java", "jigs" => "jigs", "kddi" => "kddi", "keji" => "keji", "kyoc" => "kyoc", "kyok" => "kyok",
  113. "leno" => "leno", "lg-c" => "lg-c", "lg-d" => "lg-d", "lg-g" => "lg-g", "lge-" => "lge-", "libw" => "libw",
  114. "m-cr" => "m-cr", "maui" => "maui", "maxo" => "maxo", "midp" => "midp", "mits" => "mits", "mmef" => "mmef",
  115. "mobi" => "mobi", "mot-" => "mot-", "moto" => "moto", "mwbp" => "mwbp", "mywa" => "mywa", "nec-" => "nec-",
  116. "newt" => "newt", "nok6" => "nok6", "noki" => "noki", "o2im" => "o2im", "opwv" => "opwv", "palm" => "palm",
  117. "pana" => "pana", "pant" => "pant", "pdxg" => "pdxg", "phil" => "phil", "play" => "play", "pluc" => "pluc",
  118. "port" => "port", "prox" => "prox", "qtek" => "qtek", "qwap" => "qwap", "rozo" => "rozo", "sage" => "sage",
  119. "sama" => "sama", "sams" => "sams", "sany" => "sany", "sch-" => "sch-", "sec-" => "sec-", "send" => "send",
  120. "seri" => "seri", "sgh-" => "sgh-", "shar" => "shar", "sie-" => "sie-", "siem" => "siem", "smal" => "smal",
  121. "smar" => "smar", "sony" => "sony", "sph-" => "sph-", "symb" => "symb", "t-mo" => "t-mo", "teli" => "teli",
  122. "tim-" => "tim-", "tosh" => "tosh", "treo" => "treo", "tsm-" => "tsm-", "upg1" => "upg1", "upsi" => "upsi",
  123. "vk-v" => "vk-v", "voda" => "voda", "vx52" => "vx52", "vx53" => "vx53", "vx60" => "vx60", "vx61" => "vx61",
  124. "vx70" => "vx70", "vx80" => "vx80", "vx81" => "vx81", "vx83" => "vx83", "vx85" => "vx85", "wap-" => "wap-",
  125. "wapa" => "wapa", "wapi" => "wapi", "wapp" => "wapp", "wapr" => "wapr", "webc" => "webc", "whit" => "whit",
  126. "winw" => "winw", "wmlb" => "wmlb", "xda-" => "xda-"
  127. );
  128. switch (true) {
  129. case (preg_match('/ipad/i', $userAgent)):
  130. $mobile = $ipad;
  131. $mark = 'Apple iPad';
  132. if(substr($ipad, 0, 4) === "http") {
  133. $redirect = $ipad;
  134. }
  135. break;
  136. case (preg_match('/ipod/i', $userAgent) or preg_match('/iphone/i', $userAgent)):
  137. $mobile = $iphone;
  138. $mark = 'Apple';
  139. if(substr($iphone, 0, 4) === "http") {
  140. $redirect = $iphone;
  141. }
  142. break;
  143. case (preg_match('/android/i', $userAgent)):
  144. $mobile = $android;
  145. $mark = 'Android';
  146. if(substr($android, 0, 4) === "http") {
  147. $redirect = $android;
  148. }
  149. break;
  150. case (preg_match('/opera mini/i', $userAgent)):
  151. $mobile = $opera;
  152. $mark = 'Opera';
  153. if(substr($opera, 0, 4) === "http") {
  154. $redirect = $opera;
  155. }
  156. break;
  157. case (preg_match('/blackberry/i', $userAgent)):
  158. $mobile = $blackberry;
  159. $mark = 'Blackberry';
  160. if(substr($blackberry, 0, 4) === "http") {
  161. $redirect = $blackberry;
  162. }
  163. break;
  164. case (preg_match('/(pre\/|palm os|palm|hiptop|avantgo|plucker|xiino|blazer|elaine)/i', $userAgent)):
  165. $mobile = $palm;
  166. $mark = 'Palm';
  167. if(substr($palm, 0, 4) === "http") {
  168. $redirect = $palm;
  169. }
  170. break;
  171. case (preg_match('/(iris|3g_t|windows ce|opera mobi|windows ce; smartphone;|windows ce; iemobile)/i', $userAgent)):
  172. $mobile = $windows;
  173. $mark = 'Windows Smartphone';
  174. if(substr($windows, 0, 4) === "http") {
  175. $redirect = $windows;
  176. }
  177. break;
  178. case (preg_match('/(mini 9.5|vx1000|lge |m800|e860|u940|ux840|compal|wireless| mobi|ahong|lg380|lgku|lgu900|lg210|lg47|lg920|lg840|lg370|sam-r|mg50|s55|g83|t66|vx400|mk99|d615|d763|el370|sl900|mp500|samu3|samu4|vx10|xda_|samu5|samu6|samu7|samu9|a615|b832|m881|s920|n210|s700|c-810|_h797|mob-x|sk16d|848b|mowser|s580|r800|471x|v120|rim8|c500foma:|160x|x160|480x|x640|t503|w839|i250|sprint|w398samr810|m5252|c7100|mt126|x225|s5330|s820|htil-g1|fly v71|s302|-x113|novarra|k610i|-three|8325rc|8352rc|sanyo|vx54|c888|nx250|n120|mtk |c5588|s710|t880|c5005|i;458x|p404i|s210|c5100|teleca|s940|c500|s590|foma|samsu|vx8|vx9|a1000|_mms|myx|a700|gu1100|bc831|e300|ems100|me701|me702m-three|sd588|s800|8325rc|ac831|mw200|brew |d88|htc\/|htc_touch|355x|m50|km100|d736|p-9521|telco|sl74|ktouch|m4u\/|me702|8325rc|kddi|phone|lg |sonyericsson|samsung|240x|x320|vx10|nokia|sony cmd|motorola|up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|psp|treo)/i', $userAgent)):
  179. $mobile = true;
  180. $mark = 'Other';
  181. break;
  182. case ((strpos($accept, "text/vnd.wap.wml") > 0) or (strpos($accept, "application/vnd.wap.xhtml+xml") > 0)):
  183. $mobile = true;
  184. $mark = 'Wap';
  185. break;
  186. case (isset($_SERVER["HTTP_X_WAP_PROFILE"]) or isset($_SERVER["HTTP_PROFILE"])):
  187. $mobile = true;
  188. $mark = 'Unknwon';
  189. break;
  190. case (in_array(strtolower(substr($userAgent, 0, 4)), $array)):
  191. $mobile = true;
  192. $mark = 'List';
  193. break;
  194. default:
  195. $mobile = false;
  196. $mark = 'Desktop';
  197. break;
  198. }
  199. if($redirect = ($mobile === true) ? $redirect : $desktopRedirect) {
  200. header('Location: '. $redirect);
  201. exit;
  202. } else {
  203. if(!$mobile) {
  204. return false;
  205. } else {
  206. return array("mobile" => $mobile, "mark" => $mark);
  207. }
  208. }
  209. }
  210. }