VM暫存
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
8 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <?php
  2. /*
  3. file: carpark.php 停車管理
  4. */
  5. if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  6. // require_once(MQ_CLASS_FILE);
  7. class Parkingquery extends CI_Controller
  8. {
  9. var $vars = array(); // 共用變數
  10. function __construct()
  11. {
  12. parent::__construct();
  13. // ----- 程式開發階段log設定 -----
  14. if (@ENVIRONMENT == 'development')
  15. {
  16. ini_set('display_errors', '1');
  17. //error_reporting(E_ALL ^ E_NOTICE);
  18. error_reporting(E_ALL);
  19. }
  20. set_error_handler(array($this, 'error_handler'), E_ALL); // 資料庫異動需做log
  21. /*
  22. // 共用記憶體
  23. $this->vars['mcache'] = new Memcache;
  24. $this->vars['mcache']->connect(MEMCACHE_HOST, MEMCACHE_PORT) or die ('Could not connect memcache');
  25. // mqtt subscribe
  26. $this->vars['mqtt'] = new phpMQTT(MQ_HOST, MQ_PORT, uniqid());
  27. if(!$this->vars['mqtt']->connect()){ die ('Could not connect mqtt'); }
  28. */
  29. // ----- 定義常數(路徑, cache秒數) -----
  30. define('APP_VERSION', '100'); // 版本號
  31. define('MAX_AGE', 604800); // cache秒數, 此定義1個月
  32. define('APP_NAME', 'parkingquery'); // 應用系統名稱
  33. define('PAGE_PATH', APP_BASE.'ci_application/views/'.APP_NAME.'/'); // path of views
  34. define('SERVER_URL', 'http://'.(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'localhost').'/'); // URL
  35. define('APP_URL', SERVER_URL.APP_NAME.'.html/'); // controller路徑
  36. define('WEB_URL', SERVER_URL.APP_NAME.'/'); // 網頁路徑
  37. define('WEB_LIB', SERVER_URL.'libs/'); // 網頁lib
  38. define('BOOTSTRAPS', WEB_LIB.'bootstrap_sb/'); // bootstrap lib
  39. define('LOG_PATH', FILE_BASE.APP_NAME.'/logs/'); // log path
  40. $this->load->model('parkingquery_model');
  41. $this->load->model('security_model'); // 鎖車
  42. // $this->parkingquery_model->init($this->vars);
  43. }
  44. // 發生錯誤時集中在此處理
  45. public function error_handler($errno, $errstr, $errfile, $errline, $errcontext)
  46. {
  47. $str = date('H:i:s')."|{$errstr}|{$errfile}|{$errline}|{$errno}\n";
  48. //error_log($str, 3, $log_file . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名
  49. error_log($str, 3, LOG_PATH.APP_NAME . '.' . date('Ymd').'.log.txt'); // 3代表參考後面的檔名
  50. }
  51. // 顯示靜態網頁(html檔)
  52. protected function show_page($page_name, &$data = null)
  53. {
  54. $page_file = PAGE_PATH.$page_name.'.php';
  55. $last_modified_time = filemtime($page_file);
  56. // 若檔案修改時間沒有異動, 或版本無異動, 通知瀏覽器使用cache, 不再下傳網頁
  57. header('Cache-Control:max-age='.MAX_AGE); // cache 1個月
  58. header('Last-Modified: '.gmdate('D, d M Y H:i:s', $last_modified_time).' GMT');
  59. header('Etag: '. APP_VERSION);
  60. header('Cache-Control: public');
  61. if (!empty($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == APP_VERSION && @strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time)
  62. {
  63. header('HTTP/1.1 304 Not Modified');
  64. }
  65. else
  66. {
  67. $this->load->view(APP_NAME.'/'.$page_name, $data);
  68. }
  69. }
  70. // response http
  71. protected function http_return($return_code, $type)
  72. {
  73. if ($type == 'text') echo $return_code;
  74. else echo json_encode($return_code, JSON_UNESCAPED_UNICODE);
  75. }
  76. // 查詢各樓層剩餘車位
  77. public function check_space()
  78. {
  79. $seqno = $this->uri->segment(3);
  80. $data = $this->parkingquery_model->check_space($seqno);
  81. $data['result']['num'] = $seqno;
  82. $data['result_code'] = 'OK';
  83. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  84. }
  85. // 查詢各樓層剩餘車位 (身障)
  86. public function check_space2()
  87. {
  88. $seqno = $this->uri->segment(3);
  89. $data = $this->parkingquery_model->check_space($seqno, 2);
  90. $data['result']['num'] = $seqno;
  91. $data['result_code'] = 'OK';
  92. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  93. }
  94. // 停車位置查詢(板橋好停車)
  95. // http://203.75.167.89/parkingquery.html/check_location/ABC1234
  96. public function check_location()
  97. {
  98. $lpr = $this->uri->segment(3);
  99. $data = $this->parkingquery_model->check_location($lpr);
  100. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  101. }
  102. // 空車位導引
  103. // http://203.75.167.89/parkingquery.html/get_valid_seat
  104. public function get_valid_seat()
  105. {
  106. $pksno = $this->uri->segment(3, 0); // 從某一個車位開始, 若無則設0
  107. $data = $this->parkingquery_model->get_valid_seat($pksno);
  108. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  109. }
  110. // 空車位導引 (身障)
  111. // http://203.75.167.89/parkingquery.html/get_valid_seat2
  112. public function get_valid_seat2()
  113. {
  114. $pksno = $this->uri->segment(3, 0); // 從某一個車位開始, 若無則設0
  115. $data = $this->parkingquery_model->get_valid_seat($pksno, 2);
  116. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  117. }
  118. // 防盜鎖車
  119. // http://203.75.167.89/parkingquery.html/security_action/ABC1234/pswd/2
  120. public function security_action()
  121. {
  122. $lpr = $this->uri->segment(3);
  123. $pswd = $this->uri->segment(4);
  124. $action = $this->uri->segment(5);
  125. $data = $this->security_model->security_action($lpr, $pswd, $action);
  126. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  127. }
  128. // 查詢樓層總覽
  129. public function q_local_pks()
  130. {
  131. $seqno = $this->uri->segment(3);
  132. if(empty($seqno))
  133. $seqno = 'B1';
  134. $data = $this->parkingquery_model->q_local_pks($seqno);
  135. $data['result']['num'] = $seqno;
  136. $data['result_code'] = 'OK';
  137. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  138. }
  139. // [警急求救] 警急求救地圖
  140. public function floor_map()
  141. {
  142. $this->show_page("floor_map");
  143. }
  144. // [警急求救] 警急求救地圖, 讀取緊急求救檔
  145. public function floor_map_read_sos()
  146. {
  147. if($this->my_ip() != '192.168.10.202') // 限制車辨主機
  148. {
  149. trigger_error(__FUNCTION__ . '..unknown host..' . $this->my_ip());
  150. exit;
  151. }
  152. if (file_exists(SOS_MSG))
  153. {
  154. $str = file_get_contents(SOS_MSG);
  155. unlink(SOS_MSG);
  156. echo $str;
  157. }
  158. else
  159. {
  160. echo 'NONE';
  161. }
  162. }
  163. // [警急求救] 緊急求救 API
  164. // http://XXXXXXXXXXXXXXXX/parkingquery.html/send_sos/B2/111/123
  165. public function send_sos()
  166. {
  167. $floor = $this->uri->segment(3);
  168. $x = $this->uri->segment(4);
  169. $y = $this->uri->segment(5);
  170. file_put_contents(SOS_MSG, "{$floor},{$x},{$y}");
  171. $data = $this->parkingquery_model->send_sos($floor, $x, $y);
  172. echo json_encode($data, JSON_UNESCAPED_UNICODE);
  173. }
  174. // 取得 IP
  175. function my_ip()
  176. {
  177. if (getenv('HTTP_X_FORWARDED_FOR'))
  178. {
  179. $ip = getenv('HTTP_X_FORWARDED_FOR');
  180. }
  181. elseif (getenv('HTTP_X_REAL_IP'))
  182. {
  183. $ip = getenv('HTTP_X_REAL_IP');
  184. }
  185. else {
  186. $ip = $_SERVER['REMOTE_ADDR'];
  187. }
  188. return $ip;
  189. }
  190. }