functions.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. // 全局函数
  3. // 捕获所有请求信息,包含fatal error
  4. register_shutdown_function('shutdownHandler');
  5. function shutdownHandler()
  6. {
  7. if ($error = error_get_last()) {
  8. // $filename 必须是一个绝对路径
  9. if (!defined('REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME')) {
  10. $filename = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'register_shutdown_function.log';
  11. } else {
  12. $filename = REGISTER_SHUTDOWN_FUNCTION_LOG_FILENAME;
  13. }
  14. if ($error['type'] < 3) {
  15. $message = '时间 : ' . date('Y-m-d H:i:s') . PHP_EOL;
  16. $message .= '文件 : ' . $error['file'] . PHP_EOL;
  17. $message .= '行数 : ' . $error['line'] . PHP_EOL;
  18. $message .= '错误 : ' . $error['message'] . PHP_EOL;
  19. $message .= '类型 : ' . $error['type'] . PHP_EOL . PHP_EOL;
  20. file_put_contents($filename, $message, FILE_APPEND);
  21. }
  22. }
  23. }
  24. function isMobile()
  25. {
  26. // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
  27. if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) {
  28. return true;
  29. }
  30. // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
  31. if (isset ($_SERVER['HTTP_VIA'])) {
  32. // 找不到为flase,否则为true
  33. return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
  34. }
  35. // 脑残法,判断手机发送的客户端标志,兼容性有待提高
  36. if (isset ($_SERVER['HTTP_USER_AGENT'])) {
  37. $clientkeywords = array('nokia',
  38. 'sony',
  39. 'ericsson',
  40. 'mot',
  41. 'samsung',
  42. 'htc',
  43. 'sgh',
  44. 'lg',
  45. 'sharp',
  46. 'sie-',
  47. 'philips',
  48. 'panasonic',
  49. 'alcatel',
  50. 'lenovo',
  51. 'iphone',
  52. 'ipod',
  53. 'blackberry',
  54. 'meizu',
  55. 'android',
  56. 'netfront',
  57. 'symbian',
  58. 'ucweb',
  59. 'windowsce',
  60. 'palm',
  61. 'operamini',
  62. 'operamobi',
  63. 'openwave',
  64. 'nexusone',
  65. 'cldc',
  66. 'midp',
  67. 'wap',
  68. 'mobile'
  69. );
  70. // 从HTTP_USER_AGENT中查找手机浏览器的关键字
  71. if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
  72. return true;
  73. }
  74. }
  75. // 协议法,因为有可能不准确,放到最后判断
  76. if (isset ($_SERVER['HTTP_ACCEPT'])) {
  77. // 如果只支持wml并且不支持html那一定是移动设备
  78. // 如果支持wml和html但是wml在html之前则是移动设备
  79. if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
  80. return true;
  81. }
  82. }
  83. return false;
  84. }
  85. function removeBOM($data) {
  86. if (0 === strpos(bin2hex($data), 'efbbbf')) {
  87. return substr($data, 3);
  88. }
  89. return $data;
  90. }