Subversion Repositories php-qbpwcf

Rev

Rev 226 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
239 liveuser 6
    Copyright (C) 2014~2026 MIN ZHI, CHEN
3 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
提供http header相關應用的類別.
29
備註:
30
無.
31
*/
32
class header{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#參考資料:
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	*/
47
	public function __call($method,$arguments){
226 liveuser 48
 
3 liveuser 49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
226 liveuser 51
 
3 liveuser 52
		#設置執行不正常
53
		$result["status"]="false";
226 liveuser 54
 
3 liveuser 55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
226 liveuser 57
 
3 liveuser 58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
226 liveuser 60
 
3 liveuser 61
		#回傳結果
62
		return $result;
226 liveuser 63
 
3 liveuser 64
		}#function __call end
226 liveuser 65
 
3 liveuser 66
	/*
67
	#函式說明:
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
69
	#回傳結果:
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
71
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
72
	#$result["function"],當前執行的函式名稱.
73
	#必填參數:
74
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
75
	#$arguments,陣列,為呼叫方法時所用的參數.
76
	#參考資料:
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
78
	*/
79
	public static function __callStatic($method,$arguments){
226 liveuser 80
 
3 liveuser 81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
226 liveuser 83
 
3 liveuser 84
		#設置執行不正常
85
		$result["status"]="false";
226 liveuser 86
 
3 liveuser 87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
226 liveuser 89
 
3 liveuser 90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
226 liveuser 92
 
3 liveuser 93
		#回傳結果
94
		return $result;
226 liveuser 95
 
3 liveuser 96
		}#function __callStatic end
97
 
98
	/*
99
	#函式說明:
100
	#設定檢視該網頁時預設的編碼
101
	#必填參數:
102
	#$conf["encodingName"],字串,為網頁顯示的編碼的名稱.例如:"utf-8","big5".
103
	$conf["encodingName"]="utf-8";
104
	#可省略參數:
105
	#無.
106
	#參考資料:
107
	#無.
108
	#備註:
109
	#無.
110
	*/
111
	public static function htmlEncoding($conf){
112
 
113
		#設定網頁顯示的編碼
114
		header("Content-Type: text/html; charset='".$conf["encodingName"]."'");
226 liveuser 115
 
3 liveuser 116
		#避免header指定的檔案內容形態被修改
117
		#https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
118
		header("X-Content-Type-Options: text/html");
119
 
120
		#讓網頁本文也能識別是UTF-8編碼
121
		echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">";
122
 
123
		}#function htmlEncoding end
124
 
125
	/*
126
	#函式說明:
127
	#設定待網頁的前端程式執行完後n秒後轉址,
128
	#回傳結果:
129
	#$result["status"],"true"正常;"false"代表不正常.
130
	#$result["error"],錯誤訊息.
131
	#$result["argu"],使用的參數.
132
	#必填參數:
133
	#$conf["redirctionLocation"],為要轉址到的地方,若爲 $SERVER["PHP_SELF"],則爲回到目前頁面。
134
	$conf["redirctionLocation"]="";
135
	#$conf["interval"],幾秒後轉向,"0"為等待前端程式執行完後立即轉址。
136
	$conf["interval"]="";
137
	#可省略參數
138
	#$conf["exitNow"],預設為"true"後面的程式就不要執行了,反之為"false"後面的程式繼續執行.
139
	#$conf["exitNow"]="";
140
	#參考資料:
141
	#無.
142
	#備註:
143
	#無.
144
	*/
145
	public static function redirection($conf){
146
 
147
		#初始化要回傳的結果
148
		$result=array();
149
 
150
		#取得當前執行的函數名稱
151
		$result["function"]=__FUNCTION__;
152
 
153
		#如果沒有參數
154
		if(func_num_args()==0){
155
 
156
			#設置執行失敗
157
			$result["status"]="false";
158
 
159
			#設置執行錯誤訊息
160
			$result["error"]="函數".$result["function"]."需要參數";
161
 
162
			#回傳結果
163
			return $result;
164
 
165
			}#if end
166
 
167
		#取得參數
168
		$result["argu"]=$conf;
169
 
170
		#如果 $conf 不為陣列
171
		if(gettype($conf)!=="array"){
172
 
173
			#設置執行失敗
174
			$result["status"]="false";
175
 
176
			#設置執行錯誤訊息
177
			$result["error"][]="\$conf變數須為陣列形態";
178
 
179
			#如果傳入的參數為 null
180
			if(is_null($conf)){
181
 
182
				#設置執行錯誤訊息
183
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
184
 
185
				}#if end
186
 
187
			#回傳結果
188
			return $result;
189
 
190
			}#if end
191
 
192
		#函式說明:
193
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
194
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
195
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
196
		#$result["function"],當前執行的函式名稱.
197
		#$result["argu"],設置給予的參數.
198
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
199
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
200
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
201
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
202
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
203
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
204
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
205
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
206
		#必填寫的參數:
207
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
208
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
209
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
210
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
211
		#可以省略的參數:
212
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
213
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("redirctionLocation","interval");
214
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
215
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
216
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
217
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
218
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
219
		#$conf["canNotBeEmpty"]=array();
220
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
221
		#$conf["canBeEmpty"]=array();
222
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
223
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("exitNow");
224
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
225
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("exitNow");
226
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
227
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
228
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
229
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
230
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
231
		#$conf["disallowAllSkipableVarIsEmpty"]="";
232
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
233
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
234
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
235
		#$conf["arrayCountEqualCheck"][]=array();
236
		#參考資料來源:
237
		#array_keys=>http://php.net/manual/en/function.array-keys.php
238
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
239
		unset($conf["variableCheck::checkArguments"]);
240
 
241
		#如果檢查參數失敗
242
		if($checkArguments["status"]==="false"){
226 liveuser 243
 
3 liveuser 244
			#設置執行失敗
245
			$result["status"]="false";
226 liveuser 246
 
3 liveuser 247
			#設置錯誤訊息
248
			$result["error"]=$checkArguments;
226 liveuser 249
 
3 liveuser 250
			#回傳結果
251
			return $result;
226 liveuser 252
 
3 liveuser 253
			}#if end
226 liveuser 254
 
3 liveuser 255
		#如果檢查參數失敗
256
		if($checkArguments["passed"]==="false"){
226 liveuser 257
 
3 liveuser 258
			#設置執行失敗
259
			$result["status"]="false";
226 liveuser 260
 
3 liveuser 261
			#設置錯誤訊息
262
			$result["error"]=$checkArguments;
226 liveuser 263
 
3 liveuser 264
			#回傳結果
265
			return $result;
226 liveuser 266
 
3 liveuser 267
			}#if end
268
 
269
		#設定 $interval 秒後,轉向至 $redirectionLocation
270
		header("Refresh: ".$conf["interval"]."; url=".$conf["redirctionLocation"]);
271
 
272
		#如果要立即結束執行
273
		if($conf["exitNow"]==="true"){
274
 
275
			#停止執行後面的程式,因爲要馬上進行轉址.
276
			exit;
226 liveuser 277
 
175 liveuser 278
			}#if end
3 liveuser 279
 
280
		#設置執行失敗
281
		$result["status"]="true";
226 liveuser 282
 
3 liveuser 283
		#設置錯誤訊息
284
		return $result;
285
 
66 liveuser 286
		}#function redirection end
3 liveuser 287
 
288
	/*
289
	#函式說明:
290
	#設定session變數後,立即轉址.
291
	#回傳的結果:
292
	#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
293
	#$result["function"],當前執行的函數名稱.
294
	#$result["error"],錯誤訊息陣列.
295
	#必填參數:
296
	#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
297
	$conf["headerLocation"]="";
298
	#可省略參數:
299
	#$conf["sessionName"],字串陣列,可以指派session變數的名稱.
300
	#$conf["sessionName"]=array("");
301
	#$conf["sessionValue"]字串陣列,可以指派session變數的內容.
302
	#$conf["sessionValue"]=array("");
303
	#參考資料:
304
	#http://php.net/manual/en/reserved.variables.server.php
305
	#備註:
306
	#無.
226 liveuser 307
	*/
3 liveuser 308
	public static function redirectionNow(&$conf){
309
 
310
		#初始化要回傳的內容
311
		$result=array();
226 liveuser 312
 
3 liveuser 313
		#設置當前執行的函數
314
		$result["function"]=__FUNCTION__;
315
 
316
		#如果 $conf 不為陣列
317
		if(gettype($conf)!="array"){
226 liveuser 318
 
3 liveuser 319
			#設置執行失敗
320
			$result["status"]="false";
226 liveuser 321
 
3 liveuser 322
			#設置執行錯誤訊息
323
			$result["error"][]="\$conf變數須為陣列形態";
324
 
325
			#如果傳入的參數為 null
326
			if($conf==null){
226 liveuser 327
 
3 liveuser 328
				#設置執行錯誤訊息
329
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 330
 
3 liveuser 331
				}#if end
332
 
333
			#回傳結果
334
			return $result;
226 liveuser 335
 
3 liveuser 336
			}#if end
337
 
338
		#初始化ifrmae語法內容
339
		$result["content"]="";
226 liveuser 340
 
3 liveuser 341
		#如果 $conf 不為陣列
342
		if(gettype($conf)!="array"){
226 liveuser 343
 
3 liveuser 344
			#設置執行失敗
345
			$result["status"]="false";
226 liveuser 346
 
3 liveuser 347
			#設置執行錯誤訊息
348
			$result["error"][]="\$conf變數須為陣列形態";
349
 
350
			#回傳結果
351
			return $result;
226 liveuser 352
 
3 liveuser 353
			}#if end
226 liveuser 354
 
3 liveuser 355
		#檢查參數
356
		#函式說明:
357
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
358
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
359
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
360
		#$result["function"],當前執行的函式名稱.
361
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
362
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
363
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
364
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
365
		#必填寫的參數:
366
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
367
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
368
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
369
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("headerLocation");
226 liveuser 370
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3 liveuser 371
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
372
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
373
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
374
		#可以省略的參數:
375
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
376
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
377
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
378
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sessionName","sessionValue");
226 liveuser 379
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 380
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array");
381
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
382
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
383
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
384
		#$conf["arrayCountEqualCheck"][]=array();
385
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
386
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 387
 
3 liveuser 388
		#如果檢查失敗
389
		if($checkResult["status"]=="false"){
226 liveuser 390
 
3 liveuser 391
			#設置執行不正常
392
			$result["status"]="false";
226 liveuser 393
 
3 liveuser 394
			#設置錯誤訊息
395
			$result["error"]=$checkResult;
226 liveuser 396
 
3 liveuser 397
			#回傳結果
398
			return $result;
226 liveuser 399
 
3 liveuser 400
			}#if end
226 liveuser 401
 
3 liveuser 402
		#如果檢查不通過
403
		if($checkResult["passed"]=="false"){
226 liveuser 404
 
3 liveuser 405
			#設置執行不正常
406
			$result["status"]="false";
226 liveuser 407
 
3 liveuser 408
			#設置錯誤訊息
409
			$result["error"]=$checkResult;
226 liveuser 410
 
3 liveuser 411
			#回傳結果
412
			return $result;
226 liveuser 413
 
3 liveuser 414
			}#if end
226 liveuser 415
 
3 liveuser 416
		#如果 $conf["sessionName"] 與 $conf["sessionValue"] 皆為 true 代表皆有設置.
417
		if( isset($conf["sessionName"])==true && isset($conf["sessionValue"])==true ){
226 liveuser 418
 
3 liveuser 419
			#有幾個 $conf["sessionName"] 就執行幾次.
420
			for($i=0;$i<count($conf["sessionName"]);$i++){
421
 
422
				#函式說明:
423
				#建立session變數,並指派其內容
424
				#回傳的結果:
425
				#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗.
426
				#$result["error"],錯誤訊息陣列.
427
				#$result["function"],當前執行的函數名稱.
428
				#必填參數:
429
				$conf["session"]["create"]["sessionName"]=$conf["sessionName"][$i];#要建立的session變數名稱,建議可採用name1.name2.name3的格式。
226 liveuser 430
				#可省略的參數:
431
				$conf["session"]["create"]["sessionValue"]=$conf["sessionValue"][$i];#session變數的內容要存放什麼呢?
3 liveuser 432
				$sessionCreatedResult=session::create($conf["session"]["create"]);
433
				unset($conf["session"]["create"]);
434
 
435
				#如果建立session變數失敗
436
				if($sessionCreatedResult["status"]=="false"){
226 liveuser 437
 
3 liveuser 438
					#設置執行不正常
439
					$result["status"]="false";
226 liveuser 440
 
3 liveuser 441
					#設置錯誤訊息
442
					$result["error"]=$sessionCreatedResult;
226 liveuser 443
 
3 liveuser 444
					#回傳結果
445
					return $result;
226 liveuser 446
 
3 liveuser 447
					}#if end
448
 
449
				}#for end
450
 
451
			}#if end
226 liveuser 452
 
3 liveuser 453
		#立即轉址到特定網址.
454
		#header("Refresh: 0; url=".$conf["headerLocation"]);
455
		header("location:".$conf["headerLocation"]);
456
 
457
		#停止執行後面的程式,因爲要馬上進行轉址.
458
		exit;
226 liveuser 459
 
3 liveuser 460
		}#function redirectionNow end.
461
 
462
	/*
463
	#函式說明:
464
	#用data:mimeType;base64,fileVar的形式來提供檔案的連結,亦即檔案儲存在變數裡面.
465
	#回傳結果:
466
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
467
	#$result["error"],錯誤訊息
468
	#$result["content"],檔案變數的內容
469
	#$result["fileTypeName"],副檔名,ex:「.tar.xz」.
226 liveuser 470
	#$result["function"],當前執行的函數名稱
3 liveuser 471
	#必填參數:
472
	#$conf["filePosition"],要轉存成2元碼的圖片檔案位置與名稱
473
	$conf["filePosition"]="";
474
	#$conf["mimeType"],2元碼的內容是什麼
475
	$conf["mimeType"]="";
476
	#可省略參數:
477
	#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
478
	#$conf["compressType"]="base64";
479
	#$conf["delFile"],讀取完檔案後,要移除檔案嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
480
	#$conf["delFile"]="false";
481
	#參考資料:
482
	#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
483
	#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
484
	#備註:
485
	#無.
486
	*/
487
	public static function data(&$conf){
226 liveuser 488
 
3 liveuser 489
		#與fileAccess類別的data函數一樣
490
		return fileAccess::data($conf);
226 liveuser 491
 
3 liveuser 492
		}#function data end
493
 
494
	/*
495
	#函式說明:
496
	#透過轉址的方式來下載檔案.
497
	#回傳結果:
498
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
499
	#$result["error"],錯誤訊息
226 liveuser 500
	#$result["function"],當前執行的函數名稱
3 liveuser 501
	#必填參數:
502
	#$conf["filePosition"],字串,爲要下載的檔案位置
503
	$conf["filePosition"]="";
504
	#$conf["fileType"],字串,檔案類型
505
	$conf["fileType"]="";
506
	#$conf["fileName"],字串,儲存時的檔案名稱.
507
	$conf["fileName"]="";
508
	#可省略參數:
509
	#$conf["fileTypeName"],字串,副檔名,ex:「.tar.gz」.
510
	#$conf["fileTypeName"]="";
511
	#參考資料:
512
	#header=>http://php.net/manual/en/function.header.php
513
	#備註:
514
	#請在沒有任何html輸出的頁面使用
226 liveuser 515
	*/
3 liveuser 516
	public static function downloadFile($conf){
517
 
518
		#初始化要回傳的變數
519
		$result=array();
226 liveuser 520
 
3 liveuser 521
		#記錄當前執行的函數名稱
522
		$result["function"]=__FUNCTION__;
226 liveuser 523
 
3 liveuser 524
		#如果 $conf 不為陣列
525
		if(gettype($conf)!="array"){
226 liveuser 526
 
3 liveuser 527
			#設置執行失敗
528
			$result["status"]="false";
226 liveuser 529
 
3 liveuser 530
			#設置執行錯誤訊息
531
			$result["error"][]="\$conf變數須為陣列形態";
532
 
533
			#如果傳入的參數為 null
534
			if($conf==null){
226 liveuser 535
 
3 liveuser 536
				#設置執行錯誤訊息
537
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 538
 
3 liveuser 539
				}#if end
540
 
541
			#回傳結果
542
			return $result;
226 liveuser 543
 
3 liveuser 544
			}#if end
545
 
546
		#檢查參數
547
		#函式說明:
548
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
549
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
550
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
551
		#$result["function"],當前執行的函式名稱.
552
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
553
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
554
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
555
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
556
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
557
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
558
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
559
		#必填寫的參數:
560
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
561
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
562
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
563
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePosition","fileType","fileName");
226 liveuser 564
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3 liveuser 565
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
566
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
567
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
568
		#可以省略的參數:
569
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
570
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
571
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
572
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileTypeName");
226 liveuser 573
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 574
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
575
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
576
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
577
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
578
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
579
		#參考資料來源:
580
		#array_keys=>http://php.net/manual/en/function.array-keys.php
581
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
582
		unset($conf["variableCheck::checkArguments"]);
583
 
584
		#debug
585
		#var_dump($checkResult);
586
		#exit;
587
 
588
		#如果檢查失敗
589
		if($checkResult["status"]=="false"){
226 liveuser 590
 
3 liveuser 591
			#設置錯誤狀態
592
			$result["status"]="false";
226 liveuser 593
 
3 liveuser 594
			#設置錯誤提示
595
			$result["error"]=$checkResult;
226 liveuser 596
 
3 liveuser 597
			#回傳結果
598
			return $result;
226 liveuser 599
 
3 liveuser 600
			}#if end
601
 
602
		#如果檢查不通過
603
		if($checkResult["passed"]=="false"){
226 liveuser 604
 
3 liveuser 605
			#設置錯誤狀態
606
			$result["status"]="false";
226 liveuser 607
 
3 liveuser 608
			#設置錯誤提示
609
			$result["error"]=$checkResult;
226 liveuser 610
 
3 liveuser 611
			#回傳結果
612
			return $result;
226 liveuser 613
 
3 liveuser 614
			}#if end
615
 
616
		#描述內容為檔案傳輸
617
		header("Content-Description: File Transfer");
618
 
619
		#設定檔案的類型
620
		header("Content-Type:".$conf["fileType"]);
621
 
622
		#如果 $conf["fileTypeName"] 存在
623
		if(isset($conf["fileTypeName"])){
226 liveuser 624
 
3 liveuser 625
			#加上副檔名
626
			$conf["fileName"]=$conf["fileName"].$conf["fileTypeName"];
226 liveuser 627
 
3 liveuser 628
			}#if end
629
 
630
		#提示下載檔案與其資訊
631
		header("Content-Disposition: attachment; filename=\"".$conf["fileName"]."\"");
632
 
633
		header("Content-Transfer-Encoding: binary");#傳送模式爲2原碼傳送
634
		header("Expires: 0");
635
		header("Cache-Control: must-revalidate");
636
		header("Pragma: public");
637
		ob_clean();#清除物件
638
		flush();#清除記憶題
639
 
640
		#設定檔案的所在
641
		readfile($conf["filePosition"]);
642
 
643
		}#function downloadFile end
644
 
645
	/*
646
	#函式說明:
647
	#要求使用者Download某檔案
648
	#回傳結果:
649
	#$result["status"],字串,"true"爲成功,"false"反之失敗
650
	#$result["error"],陣列,錯誤訊息
651
	#$result["function"],字串,當前執行的函數名稱.
652
	#必填參數:
653
	$conf["filePositionAndName"],字串,檔案的位置與名稱
654
	$conf["filePositionAndName"]="";
655
	#可省略參數:
656
	#$conf["fileDisplayName"],字串,要顯示的檔案名稱,若要放中文請將其文字放在()裏面,這樣種文字才會顯現。預設為 basename($conf["filePositionAndName"])." date:".$系統時間;
657
	#$conf["fileDisplayName"]="";
658
	#$conf["mimeType"],字串,檔案的mimeType,預設為"application/octet-stream".
659
	#$conf["mimeType"]="application/octet-stream";
660
	#參考資料:
661
	#http:#php.net/manual/en/function.readfile.php
662
	#備註:
663
	#建議改用data與downloadFile函數
664
	*/
665
	public static function askUserDownloadFile(&$conf){
226 liveuser 666
 
3 liveuser 667
		#初始化要回傳的變數
668
		$result=array();
226 liveuser 669
 
3 liveuser 670
		#初始化當前執行的函數名稱
671
		$result["funciton"]=__FUNCTION__;
226 liveuser 672
 
3 liveuser 673
		#如果 $conf 不為陣列
674
		if(gettype($conf)!="array"){
226 liveuser 675
 
3 liveuser 676
			#設置執行失敗
677
			$result["status"]="false";
226 liveuser 678
 
3 liveuser 679
			#設置執行錯誤訊息
680
			$result["error"][]="\$conf變數須為陣列形態";
681
 
682
			#如果傳入的參數為 null
683
			if($conf==null){
226 liveuser 684
 
3 liveuser 685
				#設置執行錯誤訊息
686
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 687
 
3 liveuser 688
				}#if end
689
 
690
			#回傳結果
691
			return $result;
226 liveuser 692
 
3 liveuser 693
			}#if end
226 liveuser 694
 
3 liveuser 695
		#檢查參數
696
		#函式說明:
697
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
698
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
699
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
700
		#$result["function"],當前執行的函式名稱.
701
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
702
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
703
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
704
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
705
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
706
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
707
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
708
		#必填寫的參數:
709
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
710
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
711
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
712
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePositionAndName");
226 liveuser 713
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3 liveuser 714
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
715
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
716
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
717
		#可以省略的參數:
718
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
719
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
720
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
721
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileDisplayName","mimeType");
226 liveuser 722
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 723
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
724
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
725
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"application/octet-stream");
726
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
727
		#$conf["arrayCountEqualCheck"][]=array();
728
		#參考資料來源:
729
		#array_keys=>http://php.net/manual/en/function.array-keys.php
730
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
731
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 732
 
3 liveuser 733
		#如果檢查失敗
734
		if($checkResult["status"]=="false"){
226 liveuser 735
 
3 liveuser 736
			#設置執行不正常
737
			$result["status"]="false";
226 liveuser 738
 
3 liveuser 739
			#設置錯誤訊息
740
			$result["error"]=$checkResult;
226 liveuser 741
 
3 liveuser 742
			#回傳結果
743
			return $result;
226 liveuser 744
 
745
			}#if end
746
 
3 liveuser 747
		#如果檢查不通過
748
		if($checkResult["passed"]=="false"){
749
 
750
			#設置執行不正常
751
			$result["status"]="false";
226 liveuser 752
 
3 liveuser 753
			#設置錯誤訊息
754
			$result["error"]=$checkResult;
226 liveuser 755
 
3 liveuser 756
			#回傳結果
757
			return $result;
758
 
759
			}#if end
226 liveuser 760
 
3 liveuser 761
		#如果 $conf["fileDisplayName"] 不存在
762
		if(!isset($conf["fileDisplayName"])){
763
 
764
			#回傳西元的目前時間,格式為2010年07月24日15時30分33秒
765
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
766
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
767
			#$result["function"],當前執行的函式名稱.
768
			#$result["content"],西元的目前時間.
769
			#必填參數:
770
			$conf["time"]["getFullDateAndTime"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http:#www.php.net/manual/en/timezones.php
771
				#ex:"Asia/Taipei"
772
			#可省略的參數:
226 liveuser 773
			$conf["time"]["getFullDateAndTime"]["showSecond"]="true";#若爲"true"則會顯示秒數
3 liveuser 774
			$systemTime=time::getFullDateAndTime($conf["time"]["getFullDateAndTime"]);
775
			unset($conf["time"]["getFullDateAndTime"]);
776
 
777
			#如果取得系統時間失敗
778
			if($systemTime["status"]=="false"){
226 liveuser 779
 
3 liveuser 780
				#設置執行不正常
781
				$result["status"]="false";
226 liveuser 782
 
3 liveuser 783
				#設置錯誤訊息
784
				$result["error"]=$systemTime;
226 liveuser 785
 
3 liveuser 786
				#回傳結果
787
				return $result;
226 liveuser 788
 
3 liveuser 789
				}#if end
790
 
791
			#函式說明:
792
			#將固定格式的字串分開,並回傳分開的結果。
793
			#回傳的參數:
794
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
795
			#$result["error"],錯誤訊息陣列
796
			#$result["function"],當前執行的函數名稱.
797
			#$result["oriStr"],要分割的原始字串內容
798
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
799
			#$result["dataCounts"],爲總共分成幾段
800
			#必填參數:
801
			$conf["stringPross"]["spiltString"]["stringIn"]=basename($conf["filePositionAndName"]);#要處理的字串。
802
			$conf["stringPross"]["spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
803
			$fileNameString=stringProcess::spiltString($conf["stringPross"]["spiltString"]);
226 liveuser 804
			unset($conf["stringPross"]["spiltString"]);
3 liveuser 805
 
806
			#如果分割字串失敗
807
			if($fileNameString["status"]=="false"){
226 liveuser 808
 
3 liveuser 809
				#設置錯誤識別
810
				$result["status"]="false";
226 liveuser 811
 
3 liveuser 812
				#設置錯誤訊息
813
				$result["error"]=$fileNameString;
226 liveuser 814
 
3 liveuser 815
				#回傳結果
816
				return $result;
226 liveuser 817
 
3 liveuser 818
				}#if end
819
 
820
			#檔案名稱為 / 後面的內容
821
			$conf["fileDisplayName"]="(".$fileNameString["dataArray"][0]." date:".$systemTime["content"].")";
822
 
823
			#若原始檔案名稱有副檔名
824
			for($i=1;$i<$fileNameString["dataCounts"];$i++){
226 liveuser 825
 
3 liveuser 826
				#組合副檔名
827
				$conf["fileDisplayName"]=$conf["fileDisplayName"].".".$fileNameString["dataArray"][$i];
226 liveuser 828
 
3 liveuser 829
				}#for end
830
 
831
			}#if end
832
 
833
		#如果檔案存在
834
		if(file_exists($conf["filePositionAndName"])){
835
 
836
			header("Content-Description: File Transfer");#描述
837
			header("Content-Type: ".$conf["mimeType"]);#設定檔案類型
838
			header("Content-Disposition: attachment; filename=\"".$conf["fileDisplayName"]);#附件檔案顯示名稱
839
			header("Content-Transfer-Encoding: binary");#傳送模式爲2原碼傳送
840
			header("Expires: 0");
841
			header("Cache-Control: must-revalidate");
842
			header("Pragma: public");
843
			header("Content-Length:".filesize($conf["filePositionAndName"]));#headr的大小等於檔案的大小
844
			ob_clean();#清除物件
845
			flush();#清除記憶題
846
			readfile($conf["filePositionAndName"]);#讀取檔案
226 liveuser 847
 
3 liveuser 848
			#設置執行正常
849
			$result["status"]="true";
850
 
851
			#回傳結果
852
			return $result;
853
 
854
			}#if end
855
 
856
		#如果檔案不存在則回傳錯誤訊息
857
		else{
858
 
859
			#設置錯誤識別
860
			$result["status"]="false";
226 liveuser 861
 
3 liveuser 862
			#設置錯誤訊息
863
			$result["error"][]="要下載的檔案不存在";
226 liveuser 864
 
3 liveuser 865
			#回傳結果
866
			return $result;
867
 
868
			}#else end
226 liveuser 869
 
870
		#照理說不應該執行到這邊
871
 
3 liveuser 872
		#設置錯誤識別
873
		$result["status"]="false";
226 liveuser 874
 
3 liveuser 875
		#設置錯誤訊息
876
		$result["error"][]="下載檔案失敗";
226 liveuser 877
 
3 liveuser 878
		#回傳結果
879
		return $result;
880
 
881
		}#function end
882
 
883
	/*
884
	#函式說明:
885
	#建立網頁的標題,納入網絡搜尋的依據.
886
	#回傳的內容:
887
	#$result["status"],字串,"true"爲成功,"false"反之失敗.
888
	#$result["error"],陣列,錯誤訊息.
889
	#$result["function"],字串,當前執行的函數名稱.
890
	#$result["content"],字串,設定網頁資訊的字串變數.
891
	#必填參數:
892
	#$conf["title"],字串,網頁的標題.
893
	$conf["title"]="";
894
	#可省略參數:
895
	#$conf["desc"],字串,網站的描述.
896
	$conf["desc"]="";
897
	#參考資料:
898
	#無.
899
	#備註:
900
	#無.
901
	*/
902
	public static function setPageInfo($conf){
903
 
904
		#初始化要回傳的變數
905
		$result=array();
226 liveuser 906
 
3 liveuser 907
		#初始化當前執行的函數名稱
908
		$result["funciton"]=__FUNCTION__;
226 liveuser 909
 
3 liveuser 910
		#如果 $conf 不為陣列
911
		if(gettype($conf)!="array"){
226 liveuser 912
 
3 liveuser 913
			#設置執行失敗
914
			$result["status"]="false";
226 liveuser 915
 
3 liveuser 916
			#設置執行錯誤訊息
917
			$result["error"][]="\$conf變數須為陣列形態";
918
 
919
			#如果傳入的參數為 null
920
			if($conf==null){
226 liveuser 921
 
3 liveuser 922
				#設置執行錯誤訊息
923
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 924
 
3 liveuser 925
				}#if end
926
 
927
			#回傳結果
928
			return $result;
226 liveuser 929
 
3 liveuser 930
			}#if end
226 liveuser 931
 
3 liveuser 932
		#檢查參數
933
		#函式說明:
934
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
935
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
936
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
937
		#$result["function"],當前執行的函式名稱.
938
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
939
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
940
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
941
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
942
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
943
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
944
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
945
		#必填寫的參數:
946
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
947
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
948
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
949
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("title");
226 liveuser 950
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3 liveuser 951
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
952
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
953
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
954
		#可以省略的參數:
955
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
956
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
957
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
958
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("desc");
226 liveuser 959
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 960
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
961
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
962
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"title\"]");
963
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
964
		#$conf["arrayCountEqualCheck"][]=array();
965
		#參考資料來源:
966
		#array_keys=>http://php.net/manual/en/function.array-keys.php
967
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
968
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 969
 
3 liveuser 970
		#如果檢查失敗
971
		if($checkResult["status"]=="false"){
226 liveuser 972
 
3 liveuser 973
			#設置執行不正常
974
			$result["status"]="false";
226 liveuser 975
 
3 liveuser 976
			#設置錯誤訊息
977
			$result["error"]=$checkResult;
226 liveuser 978
 
3 liveuser 979
			#回傳結果
980
			return $result;
226 liveuser 981
 
982
			}#if end
983
 
3 liveuser 984
		#如果檢查不通過
985
		if($checkResult["passed"]=="false"){
986
 
987
			#設置執行不正常
988
			$result["status"]="false";
226 liveuser 989
 
3 liveuser 990
			#設置錯誤訊息
991
			$result["error"]=$checkResult;
226 liveuser 992
 
3 liveuser 993
			#回傳結果
994
			return $result;
995
 
996
			}#if end
997
 
998
		#設置 title
999
		$title="<title>".$conf["title"]."</title>";
1000
 
1001
		#設置 meta desc
1002
		$meta="<meta name=\"description\" content=\"".$conf["desc"]."\" ></meta>";
226 liveuser 1003
 
3 liveuser 1004
		#設定資訊字串
1005
		$result["content"]="<head>".$title.$meta."</head>";
226 liveuser 1006
 
3 liveuser 1007
		#設置執行正常
1008
		$result["status"]="true";
226 liveuser 1009
 
3 liveuser 1010
		#回傳設定資訊
1011
		return $result;
1012
 
1013
		}#function setPageInfo end
226 liveuser 1014
 
3 liveuser 1015
	/*
1016
	#函式說明:
1017
	#用彈出式視窗顯示訊息,接著設置seesion變數,最後進行轉址.
1018
	#回傳的結果:
1019
	#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
1020
	#$result["error"],錯誤訊息陣列.
1021
	#$result["function"],當前執行的函數名稱.
1022
	#必填參數:
1023
	#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1024
	$conf["headerLocation"]="";
1025
	#$conf["alertMessage"],字串陣列,要顯示的彈出式視窗內容,第n個元素代表第n行的內容.
1026
	$conf["alertMessage"]=array("");
1027
	#可省略參數:
1028
	#$conf["sessionName"],字串陣,可以指派要建立的session變數名稱.
1029
	#$conf["sessionName"]=array("");
1030
	#$conf["sessionValue"]字串陣列,可以指派要建立的session變數的內容.
1031
	#$conf["sessionValue"]=array("");
1032
	#參考資料:
1033
	#http://php.net/manual/en/reserved.variables.server.php
1034
	#備註:
1035
	#無.
226 liveuser 1036
	*/
3 liveuser 1037
	public static function redirectionAfterAlertWindows(&$conf){
226 liveuser 1038
 
3 liveuser 1039
		#初始話要回傳的變數
1040
		$result=array();
226 liveuser 1041
 
3 liveuser 1042
		#記錄當前執行的函數
1043
		$result["function"]=__FUNCTION__;
226 liveuser 1044
 
3 liveuser 1045
		#如果 $conf 不為陣列
1046
		if(gettype($conf)!="array"){
226 liveuser 1047
 
3 liveuser 1048
			#設置執行失敗
1049
			$result["status"]="false";
226 liveuser 1050
 
3 liveuser 1051
			#設置執行錯誤訊息
1052
			$result["error"][]="\$conf變數須為陣列形態";
1053
 
1054
			#如果傳入的參數為 null
1055
			if($conf==null){
226 liveuser 1056
 
3 liveuser 1057
				#設置執行錯誤訊息
1058
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1059
 
3 liveuser 1060
				}#if end
1061
 
1062
			#回傳結果
1063
			return $result;
226 liveuser 1064
 
3 liveuser 1065
			}#if end
226 liveuser 1066
 
3 liveuser 1067
		#檢查參數
1068
		#函式說明:
1069
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1070
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1071
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1072
		#$result["function"],當前執行的函式名稱.
1073
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1074
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1075
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1076
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1077
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1078
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1079
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1080
		#必填寫的參數:
1081
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1082
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1083
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1084
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("headerLocation","alertMessage");
226 liveuser 1085
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 1086
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
1087
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1088
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1089
		#可以省略的參數:
1090
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1091
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1092
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1093
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sessionName","sessionValue");
226 liveuser 1094
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 1095
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array");
1096
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1097
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null);
1098
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1099
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("sessionName","sessionValue");
1100
		#參考資料來源:
1101
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1102
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1103
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1104
 
3 liveuser 1105
		#如果 檢查出錯
1106
		if($checkResult["status"]=="false"){
226 liveuser 1107
 
3 liveuser 1108
			#設置執行失敗
1109
			$result["status"]="false";
226 liveuser 1110
 
3 liveuser 1111
			#設置錯誤訊息
1112
			$result["error"]=$checkResult;
226 liveuser 1113
 
3 liveuser 1114
			#回傳結果
1115
			return $result;
226 liveuser 1116
 
3 liveuser 1117
			}#if end
226 liveuser 1118
 
3 liveuser 1119
		#如果 檢查 不通過
1120
		if($checkResult["passed"]=="false"){
226 liveuser 1121
 
3 liveuser 1122
			#設置執行失敗
1123
			$result["status"]="false";
226 liveuser 1124
 
3 liveuser 1125
			#設置錯誤訊息
1126
			$result["error"]=$checkResult;
226 liveuser 1127
 
3 liveuser 1128
			#回傳結果
1129
			return $result;
226 liveuser 1130
 
3 liveuser 1131
			}#if end
226 liveuser 1132
 
3 liveuser 1133
		#初始化要顯示的彈出式視窗內容
1134
		$msg="";
226 liveuser 1135
 
3 liveuser 1136
		#將 $conf["alertMessage"] 中 每個元素視為 $lineContent
1137
		foreach($conf["alertMessage"] as $lineContent){
226 liveuser 1138
 
3 liveuser 1139
			#結尾加換行符號
1140
			$msg=$msg.$lineContent."\\n";
226 liveuser 1141
 
1142
			}#foreach end
1143
 
3 liveuser 1144
		#函式說明:
1145
		#彈出視窗
1146
		#回傳的結果:
1147
		#$result["status"],執行正確與否,"true"為執行正確,"false"為執行失敗.
1148
		#$result["error"],錯誤訊息陣列.
1149
		#$result["content"],avaScript語法.
1150
		#必填的參數
1151
		$conf["javaScript"]["alertWindow"]["alertSentence"]=$msg;#爲要彈出式視窗的內容。
1152
		$javaScript=javaScript::alertWindow($conf["javaScript"]["alertWindow"]);
1153
		unset($conf["javaScript"]);
226 liveuser 1154
 
3 liveuser 1155
		#如果 $javaScript["status"] 等於 "false"
1156
		if($javaScript["status"]=="false"){
226 liveuser 1157
 
3 liveuser 1158
			#設置執行失敗
1159
			$result["status"]="false";
226 liveuser 1160
 
3 liveuser 1161
			#設置錯誤訊息
1162
			$result["error"]=$javaScript;
226 liveuser 1163
 
3 liveuser 1164
			#回傳結果
1165
			return $result;
226 liveuser 1166
 
3 liveuser 1167
			}#if end
226 liveuser 1168
 
3 liveuser 1169
		#印出javaScript
1170
		echo $javaScript["content"];
226 liveuser 1171
 
1172
		#如果 $conf["sessionName"] 參數存在
3 liveuser 1173
		if(isset($conf["sessionName"])){
226 liveuser 1174
 
3 liveuser 1175
			#$conf["sessionName"]有幾個元素就執行幾次
1176
			for($i=0;$i<count($conf["sessionName"]);$i++){
226 liveuser 1177
 
3 liveuser 1178
				#設置session變數
1179
				#函式說明:
1180
				#建立session變數,並指派其內容
1181
				#回傳的結果:
1182
				#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗。
1183
				#$result["error"],錯誤訊息陣列
1184
				#必填參數:
1185
				$conf["session"]["create"]["sessionName"]=$conf["sessionName"][$i];#要建立的session變數名稱,建議可採用name1.name2.name3的格式。
226 liveuser 1186
				#可省略的參數:
1187
				$conf["session"]["create"]["sessionValue"]=$conf["sessionValue"][$i];#session變數的內容要存放什麼呢?
3 liveuser 1188
				$createSessionResult=session::create($conf["session"]["create"]);
1189
				unset($conf["session"]);
226 liveuser 1190
 
3 liveuser 1191
				#如果 $createSessionResult["status"] 等於 "false"
1192
				if($createSessionResult["status"]=="false"){
226 liveuser 1193
 
3 liveuser 1194
					#設置執行失敗
1195
					$result["status"]="false";
226 liveuser 1196
 
3 liveuser 1197
					#設置錯誤訊息
1198
					$result["error"]=$createSessionResult;
226 liveuser 1199
 
3 liveuser 1200
					#回傳結果
1201
					return $result;
226 liveuser 1202
 
3 liveuser 1203
					}#if end
226 liveuser 1204
 
3 liveuser 1205
				}#for end
226 liveuser 1206
 
3 liveuser 1207
			}#if end
226 liveuser 1208
 
3 liveuser 1209
		#函式說明:
1210
		#設定網頁n秒後轉址
1211
		#必填參數:
1212
		$conf["header"]["redirection"]["redirctionLocation"]=$conf["headerLocation"];#為要轉址到的地方
1213
			#若爲 $SERVER["PHP_SELF"],則爲回到目前頁面。
1214
		$conf["header"]["redirection"]["interval"]="0";#幾秒後轉向,"0"為等待javacript程式執行完後再立即轉址。
1215
		header::redirection($conf["header"]["redirection"]);
1216
		unset($conf["header"]);
226 liveuser 1217
 
3 liveuser 1218
		#執行到這邊代表不正常
226 liveuser 1219
 
3 liveuser 1220
		#設置執行失敗
1221
		$result["status"]="false";
226 liveuser 1222
 
3 liveuser 1223
		#設置錯誤訊息
1224
		$result["error"][]="非預期的錯誤";
226 liveuser 1225
 
3 liveuser 1226
		#回傳結果
226 liveuser 1227
		return $result;
3 liveuser 1228
 
226 liveuser 1229
		}#function redirectionAfterAlertWindows end
1230
 
3 liveuser 1231
	/*
1232
	#函式說明:
1233
	#接收表單變數後,轉存成session變數後,立即轉址.
1234
	#回傳的結果:
1235
	#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗.
1236
	#$result["function"],當前執行的函數.
1237
	#$result["error"],錯誤訊息.
1238
	#必填參數:
1239
	#$conf["receivedVarName"],字串陣列,要接收的變數名稱.
1240
	$conf["receivedVarName"]=array();
1241
	#$conf["limitPrePage"],字串陣列,表單變數的來源頁面必須是陣列元素之一(不包含檔案路徑)
1242
	$conf["limitPrePage"]=array();
1243
	#$conf["sessionName"],字串陣列,表單變數要轉換成的session變數的名稱.
1244
	$conf["sessionName"]=array("");
1245
	#$conf["redirectionTo"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1246
	$conf["redirectionTo"]="";
1247
	#可省略參數:
1248
	#$conf["receiveFormMethod"],字串,傳送過來的資料是用"post/POST"還是"get/GET",預設為"post"
1249
	#$conf["receiveFormMethod"]="post";
1250
	#$conf["additionSessionName"]字串陣列,額外指派的session變數名稱.
226 liveuser 1251
	#$conf["additionSessionName"]=array("");
3 liveuser 1252
	#$conf["additionSessionValue"]字串陣列,可額外指派的session變數的內容.
1253
	#$conf["additionSessionValue"]=array("");
1254
	#參考資料:
1255
	#無.
1256
	#備註:
1257
	#無.
1258
	*/
1259
	public static function formVarToSessionThenRedirection(&$conf){
226 liveuser 1260
 
3 liveuser 1261
		#設置要回傳的結果
1262
		$result=array();
226 liveuser 1263
 
3 liveuser 1264
		#設置當前執行的函數
1265
		$result["function"]=__FUNCTION__;
226 liveuser 1266
 
3 liveuser 1267
		#如果 $conf 不為陣列
1268
		if(gettype($conf)!="array"){
226 liveuser 1269
 
3 liveuser 1270
			#設置執行失敗
1271
			$result["status"]="false";
226 liveuser 1272
 
3 liveuser 1273
			#設置執行錯誤訊息
1274
			$result["error"][]="\$conf變數須為陣列形態";
1275
 
1276
			#如果傳入的參數為 null
1277
			if($conf==null){
226 liveuser 1278
 
3 liveuser 1279
				#設置執行錯誤訊息
1280
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1281
 
3 liveuser 1282
				}#if end
1283
 
1284
			#回傳結果
1285
			return $result;
226 liveuser 1286
 
3 liveuser 1287
			}#if end
226 liveuser 1288
 
3 liveuser 1289
		#設置要回傳的語法
1290
		$result["content"]="";
226 liveuser 1291
 
3 liveuser 1292
		#檢查參數
1293
		#函式說明:
1294
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1295
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1296
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1297
		#$result["function"],當前執行的函式名稱.
1298
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1299
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1300
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1301
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1302
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1303
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1304
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1305
		#必填寫的參數:
1306
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1307
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1308
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1309
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("receivedVarName","limitPrePage","sessionName","redirectionTo");
226 liveuser 1310
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 1311
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array","array","string",);
1312
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1313
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1314
		#可以省略的參數:
1315
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1316
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1317
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1318
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("receiveFormMethod","additionSessionName","additionSessionValue");
226 liveuser 1319
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 1320
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","array");
1321
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1322
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("post",null,null);
1323
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1324
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("sessionName","sessionValue");
1325
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("additionSessionName","additionSessionValue");
1326
		#參考資料來源:
1327
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1328
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1329
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1330
 
3 liveuser 1331
		#如果 檢查出錯
1332
		if($checkResult["status"]=="false"){
226 liveuser 1333
 
3 liveuser 1334
			#設置執行失敗
1335
			$result["status"]="false";
226 liveuser 1336
 
3 liveuser 1337
			#設置錯誤訊息
1338
			$result["error"]=$checkResult;
226 liveuser 1339
 
3 liveuser 1340
			#回傳結果
1341
			return $result;
226 liveuser 1342
 
3 liveuser 1343
			}#if end
226 liveuser 1344
 
3 liveuser 1345
		#如果 檢查 不通過
1346
		if($checkResult["passed"]=="false"){
226 liveuser 1347
 
3 liveuser 1348
			#設置執行失敗
1349
			$result["status"]="false";
226 liveuser 1350
 
3 liveuser 1351
			#設置錯誤訊息
1352
			$result["error"]=$checkResult;
226 liveuser 1353
 
3 liveuser 1354
			#回傳結果
1355
			return $result;
226 liveuser 1356
 
3 liveuser 1357
			}#if end
226 liveuser 1358
 
3 liveuser 1359
		#函式說明:
1360
		#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數
1361
		#回傳的結果:
1362
		#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗.
1363
		#$result["function"],當前執行的函數.
1364
		#$result["error"],錯誤訊息.
1365
		#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。
1366
		#$result["lostVarName"],沒有皆收到的變數名稱陣列
1367
		#$result["inputDataContent"],所接收的參數陣列.
1368
		#$result["inputDataContent"]["變數名稱"],所接收變數的內容.
1369
		#$result["inputDataCount"],總共接收到幾個元素.
1370
		#必填參數:
1371
		#$conf["form.responseMultiInputDataSecurityEnhance"]["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?
1372
		$conf["form.responseMultiInputDataSecurityEnhance"]["method"]=$conf["receiveFormMethod"];
1373
		#可省略的參數:
1374
		#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.
1375
		#$conf["allowGet"]="true";
1376
		#$conf["form.responseMultiInputDataSecurityEnhance"]["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.
1377
		$conf["form.responseMultiInputDataSecurityEnhance"]["limitPrePage"]=$conf["limitPrePage"];
1378
		#$conf["transferLocation"],字串,遇到get傳值的時候要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"
1379
		#$conf["transferLocation"]="";
1380
		#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.
1381
		#$conf["ignore"]=array();
1382
		#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.
1383
		#$conf["correctCharacter"]="false";
1384
		#$conf["form.responseMultiInputDataSecurityEnhance"]["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.
1385
		$conf["form.responseMultiInputDataSecurityEnhance"]["checkedVarName"]=$conf["receivedVarName"];
1386
		#參考資料來源:
1387
		#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php
1388
		#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php
1389
		#備註:
1390
		#表單變數的名稱若含有「.」,則會變成「-」。
1391
		$receiveVar=form::responseMultiInputDataSecurityEnhance($conf["form.responseMultiInputDataSecurityEnhance"]);
1392
		unset($conf["form.responseMultiInputDataSecurityEnhance"]);
226 liveuser 1393
 
3 liveuser 1394
		#如果接收變數失敗
1395
		if($receiveVar["status"]=="false"){
226 liveuser 1396
 
3 liveuser 1397
			#設置錯誤
1398
			$result["status"]="false";
226 liveuser 1399
 
3 liveuser 1400
			#設置錯誤訊息
1401
			$result["error"]=$receiveVar;
226 liveuser 1402
 
3 liveuser 1403
			#回傳結果
1404
			return $result;
226 liveuser 1405
 
3 liveuser 1406
			}#if end
226 liveuser 1407
 
3 liveuser 1408
		#如果變數有缺
1409
		if($receiveVar["passed"]=="false"){
226 liveuser 1410
 
3 liveuser 1411
			#設置錯誤
1412
			$result["status"]="false";
226 liveuser 1413
 
3 liveuser 1414
			#設置錯誤訊息
1415
			$result["error"]=$receiveVar;
226 liveuser 1416
 
3 liveuser 1417
			#回傳結果
1418
			return $result;
226 liveuser 1419
 
3 liveuser 1420
			}#if end
226 liveuser 1421
 
3 liveuser 1422
		#$conf["additionSessionName"]字串陣列,額外指派的session變數名稱.
226 liveuser 1423
		#$conf["additionsessionName"]=array("");
3 liveuser 1424
		#$conf["additionSessionValue"]字串陣列,可額外指派的session變數的內容.
226 liveuser 1425
		#$conf["additionSessionValue"]=array("");
1426
 
3 liveuser 1427
		#如果有設置要另外設置的seesion變數
1428
		if(isset($conf["additionSessionName"]) && isset($conf["additionSessionValue"])){
226 liveuser 1429
 
3 liveuser 1430
			#函式說明:
1431
			#建立多個session變數
1432
			#回傳結果:
1433
			#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗.
1434
			#$reuslt["function"],當前執行的函數.
1435
			#$result["error"],錯誤訊息陣列.
1436
			#必填參數:
1437
			#$conf["session.createMulti"]["sessionArrayName"],字串陣列,要建立的session陣列變數名稱,建議可採用name1.name2.name3的格式。
1438
			$conf["session.createMulti"]["sessionArrayName"]=$conf["additionSessionName"];
1439
			#$conf["session.createMulti"]["sessionArrayValue"],字串陣列,session變數的內容要存放什麼呢?
1440
			$conf["session.createMulti"]["sessionArrayValue"]=$conf["additionSessionValue"];
1441
			#可省略參數:
1442
			#無
1443
			$additionSessionCreateResult=session::createMulti($conf["session.createMulti"]);
1444
			unset($conf["session.createMulti"]);
226 liveuser 1445
 
3 liveuser 1446
			#如果建立session變數失敗
1447
			if($additionSessionCreateResult["status"]=="false"){
226 liveuser 1448
 
3 liveuser 1449
				#設置錯誤
1450
				$result["status"]="false";
226 liveuser 1451
 
3 liveuser 1452
				#設置錯誤訊息
1453
				$result["error"]=$additionSessionCreateResult;
226 liveuser 1454
 
3 liveuser 1455
				#回傳結果
1456
				return $result;
226 liveuser 1457
 
3 liveuser 1458
				}#if end
226 liveuser 1459
 
1460
			}#if end
1461
 
3 liveuser 1462
		#初始化要轉存成session的表單變數內容
1463
		$formToSessionVarValue=array();
226 liveuser 1464
 
3 liveuser 1465
		#針對每個要接收的變數
1466
		for($i=0;$i<count($conf["receivedVarName"]);$i++){
226 liveuser 1467
 
3 liveuser 1468
			#取得要轉存成session變數的數值
1469
			$formToSessionVarValue[]=$receiveVar["inputDataContent"][$conf["receivedVarName"][$i]];
226 liveuser 1470
 
3 liveuser 1471
			}#for end
226 liveuser 1472
 
3 liveuser 1473
		#設置session變數並轉址
1474
		#函式說明:
1475
		#設定session變數後,立即轉址.
1476
		#回傳的結果:
1477
		#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
1478
		#$result["error"],錯誤訊息陣列.
1479
		#必填參數:
1480
		#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1481
		$conf["header.redirectionNow"]["headerLocation"]=$conf["redirectionTo"];
1482
		#可省略參數:
1483
		#$conf["header.redirectionNow"]["sessionName"],字串陣列,可以指派session變數的名稱.
1484
		$conf["header.redirectionNow"]["sessionName"]=$conf["sessionName"];
1485
		#$conf["header.redirectionNow"]["sessionValue"]字串陣列,可以指派session變數的內容.
1486
		$conf["header.redirectionNow"]["sessionValue"]=$formToSessionVarValue;
1487
		#參靠資料來源:
1488
		#http://php.net/manual/en/reserved.variables.server.php
1489
		$redirectionResult=header::redirectionNow($conf["header.redirectionNow"]);
1490
		unset($conf["header.redirectionNow"]);
226 liveuser 1491
 
3 liveuser 1492
		#如果轉址失敗
1493
		if($redirectionResult["status"]=="false"){
226 liveuser 1494
 
3 liveuser 1495
			#設置錯誤
1496
			$result["status"]="false";
226 liveuser 1497
 
3 liveuser 1498
			#設置錯誤訊息
1499
			$result["error"]=$redirectionResult;
226 liveuser 1500
 
3 liveuser 1501
			#回傳結果
1502
			return $result;
226 liveuser 1503
 
3 liveuser 1504
			}#if end
226 liveuser 1505
 
3 liveuser 1506
		#執行到這邊代表執行不正常
1507
		$result["status"]="false";
226 liveuser 1508
 
3 liveuser 1509
		#設置錯誤訊息
1510
		$result["error"][]="不可預期的錯誤";
226 liveuser 1511
 
3 liveuser 1512
		#回傳結果
1513
		return $result;
226 liveuser 1514
 
3 liveuser 1515
		}#function formVarToSessionThenRedirection end
226 liveuser 1516
 
3 liveuser 1517
	/*
1518
	#函式說明:
1519
	#取得apache接收到的header
1520
	#回傳結果:
1521
	#$result["status"],執行成功與否,"true"代表成功,"false"代表失敗.
1522
	#$result["content"],取得的header陣列.
1523
	#$result["function"],當前執行的函數名稱.
1524
	#必填參數:
1525
	#無
1526
	#可省略參數:
226 liveuser 1527
	#無
3 liveuser 1528
	#參考資料:
1529
	#無.
1530
	#備註:
1531
	#無.
1532
	*/
1533
	public static function getReceivedHeaders(){
226 liveuser 1534
 
3 liveuser 1535
		#設置要回傳的結果
1536
		$result=array();
226 liveuser 1537
 
3 liveuser 1538
		#設置當前執行的函數
1539
		$result["function"]=__FUNCTION__;
226 liveuser 1540
 
3 liveuser 1541
		#存放 header 的變數
1542
		$result["content"]=array();
226 liveuser 1543
 
3 liveuser 1544
		#fix centos8 stream with php56
1545
		#如果沒有 apache_request_headers 函式
1546
		if(!function_exists("apache_request_headers"))
1547
		{
1548
			#針對每個 $_SERVER 變數
1549
			foreach($_SERVER as $name => $val)
1550
			{
1551
				#設置關鍵字
1552
				$keyWord="HTTP";
226 liveuser 1553
 
3 liveuser 1554
				#如果 key 是 HTTP 開頭
1555
				if(strpos($name,$keyWord)===0)
226 liveuser 1556
				{
3 liveuser 1557
					#將 HTTP 開頭字串剔除
1558
					#函式說明:
1559
					#將字串特定關鍵字與其前面的內容剔除
1560
					#回傳結果:
1561
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1562
					#$result["error"],錯誤訊息陣列.
1563
					#$result["warning"],警告訊息鎮列.
1564
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1565
					#$result["function"],當前執行的函數名稱.
1566
					#$result["oriStr"],要處理的原始字串內容.
226 liveuser 1567
					#$result["content"],處理好的的字串內容.
3 liveuser 1568
					#必填參數:
1569
					#$conf["stringIn"],字串,要處理的字串.
1570
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$name;
1571
					#$conf["keyWord"],字串,特定字串.
1572
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$keyWord;
1573
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
1574
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
226 liveuser 1575
 
3 liveuser 1576
					#如果處理失敗
1577
					if($delStrBeforeKeyWord["status"]==="false")
1578
					{
226 liveuser 1579
 
3 liveuser 1580
						#執行到這邊代表執行不正常
1581
						$result["status"]="false";
226 liveuser 1582
 
3 liveuser 1583
						#設置錯誤訊息
1584
						$result["error"]=$delStrBeforeKeyWord;
226 liveuser 1585
 
3 liveuser 1586
						#回傳結果
1587
						return $result;
226 liveuser 1588
 
3 liveuser 1589
					}#if end
226 liveuser 1590
 
3 liveuser 1591
					#取得 header
1592
					$result["content"][$delStrBeforeKeyWord["content"]]=$val;
226 liveuser 1593
 
3 liveuser 1594
				}#if end
226 liveuser 1595
 
3 liveuser 1596
			}#foreach end
226 liveuser 1597
 
3 liveuser 1598
		}#if end
226 liveuser 1599
 
3 liveuser 1600
		else
1601
		{
226 liveuser 1602
 
3 liveuser 1603
			#取得 header
1604
			$result["content"]=@apache_request_headers();
226 liveuser 1605
 
3 liveuser 1606
		}#else end
226 liveuser 1607
 
3 liveuser 1608
		#如果取得 header 失敗
1609
		if($result["content"]===FALSE){
226 liveuser 1610
 
3 liveuser 1611
			#執行到這邊代表執行不正常
1612
			$result["status"]="false";
226 liveuser 1613
 
3 liveuser 1614
			#設置錯誤訊息
1615
			$result["error"][]="不可預期的錯誤";
226 liveuser 1616
 
3 liveuser 1617
			#回傳結果
1618
			return $result;
226 liveuser 1619
 
3 liveuser 1620
			}#if end
226 liveuser 1621
 
3 liveuser 1622
		#執行到這邊代表執行正常
1623
		$result["status"]="true";
226 liveuser 1624
 
3 liveuser 1625
		#回傳結果
1626
		return $result;
226 liveuser 1627
 
3 liveuser 1628
		}#function getReceivedHeaders end
226 liveuser 1629
 
3 liveuser 1630
	/*
1631
	#函式說明:
1632
	#依根接收到的表單變數內容,轉址到特定地方.
1633
	#回傳結果:
1634
	#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
1635
	#$result["function"],當前執行的函數名稱.
1636
	#$result["error"],錯誤訊息陣列.
1637
	#必填參數:
1638
	#$conf["varName"],字串,要接收到的變數名稱為何.
1639
	$conf["varName"]="";
1640
	#$conf["condition"],字串陣列,接收到的變數內容為什麼,則轉址到headerLocation對應的元素.
1641
	$conf["condition"]=array();
1642
	#$conf["headerLocation"],字串陣列,為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1643
	$conf["headerLocation"]=array("");
1644
	#可省略參數:
1645
	#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.
1646
	#$conf["limitPrePage"]=array("");
1647
	#參考資料:
1648
	#無.
1649
	#備註:
1650
	#無.
1651
	*/
1652
	public static function transferByFormVar(&$conf=array()){
226 liveuser 1653
 
3 liveuser 1654
		#初始化要回傳的結果
1655
		$result=array();
1656
 
1657
		#取得當前執行的函數名稱
1658
		$result["function"]=__FUNCTION__;
1659
 
1660
		#如果沒有參數
1661
		if(func_num_args()==0){
226 liveuser 1662
 
3 liveuser 1663
			#設置執行失敗
1664
			$result["status"]="false";
226 liveuser 1665
 
3 liveuser 1666
			#設置執行錯誤訊息
1667
			$result["error"]="函數".$result["function"]."需要參數";
226 liveuser 1668
 
3 liveuser 1669
			#回傳結果
1670
			return $result;
226 liveuser 1671
 
3 liveuser 1672
			}#if end
1673
 
1674
		#取得參數
1675
		$result["argu"]=$conf;
1676
 
1677
		#如果 $conf 不為陣列
1678
		if(gettype($conf)!=="array"){
226 liveuser 1679
 
3 liveuser 1680
			#設置執行失敗
1681
			$result["status"]="false";
226 liveuser 1682
 
3 liveuser 1683
			#設置執行錯誤訊息
1684
			$result["error"][]="\$conf變數須為陣列形態";
226 liveuser 1685
 
3 liveuser 1686
			#如果傳入的參數為 null
1687
			if($conf===null){
226 liveuser 1688
 
3 liveuser 1689
				#設置執行錯誤訊息
1690
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1691
 
3 liveuser 1692
				}#if end
1693
 
1694
			#回傳結果
1695
			return $result;
226 liveuser 1696
 
3 liveuser 1697
			}#if end
226 liveuser 1698
 
3 liveuser 1699
		#檢查參數
1700
		#函式說明:
1701
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1702
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1703
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1704
		#$result["function"],當前執行的函式名稱.
1705
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1706
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1707
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1708
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1709
		#必填寫的參數:
1710
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1711
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1712
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1713
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("varName","condition","headerLocation");
226 liveuser 1714
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
3 liveuser 1715
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","array");
1716
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1717
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1718
		#可以省略的參數:
1719
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1720
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
1721
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1722
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("limitPrePage");
226 liveuser 1723
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 1724
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
1725
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1726
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
1727
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1728
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
1729
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1730
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1731
 
3 liveuser 1732
		#如果檢查失敗
1733
		if($checkResult["status"]=="false"){
226 liveuser 1734
 
3 liveuser 1735
			#設置執行不正常
1736
			$result["status"]="false";
226 liveuser 1737
 
3 liveuser 1738
			#設置錯誤訊息
1739
			$result["error"]=$checkResult;
226 liveuser 1740
 
3 liveuser 1741
			#回傳結果
1742
			return $result;
226 liveuser 1743
 
3 liveuser 1744
			}#if end
226 liveuser 1745
 
3 liveuser 1746
		#如果檢查不通過
1747
		if($checkResult["passed"]=="false"){
226 liveuser 1748
 
3 liveuser 1749
			#設置執行不正常
1750
			$result["status"]="false";
226 liveuser 1751
 
3 liveuser 1752
			#設置錯誤訊息
1753
			$result["error"]=$checkResult;
226 liveuser 1754
 
3 liveuser 1755
			#回傳結果
1756
			return $result;
226 liveuser 1757
 
3 liveuser 1758
			}#if end
226 liveuser 1759
 
3 liveuser 1760
		#函式說明:
1761
		#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數,沒有接收到的變數可以指定從session變數中取得.
1762
		#回傳的結果:
1763
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1764
		#$result["error"],錯誤訊息陣列.
1765
		#$resutl["function"],當前執行的涵式名稱.
1766
		#$result["warning"],警告訊息陣列.
1767
		#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。
1768
		#$result["lostVarName"],沒有皆收到的變數名稱陣列
1769
		#$result["inputDataContent"],所接收的參數陣列.
1770
		#$result["inputDataContent"]["變數名稱"],所接收變數的內容.
1771
		#$result["inputDataCount"],從表單總共接收到幾個元素.
1772
		#$result["HTTP_REFERER"],前一頁的網址,null代表不存在.
1773
		#必填參數:
1774
		#$conf["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?
1775
		$conf["form::responseMultiInputDataSecurityEnhance"]["method"]="post";
1776
		#可省略的參數:
1777
		#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.
1778
		#$conf["allowGet"]="true";
226 liveuser 1779
 
3 liveuser 1780
		#如果有設置 limitPrePage
1781
		if(isset($conf["limitPrePage"])){
226 liveuser 1782
 
3 liveuser 1783
			#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.
1784
			$conf["form::responseMultiInputDataSecurityEnhance"]["limitPrePage"]=$conf["limitPrePage"];
226 liveuser 1785
 
3 liveuser 1786
			}#if end
226 liveuser 1787
 
3 liveuser 1788
		#$conf["transferLocation"],字串,遇到get傳值,或前一個頁面不符合要求時要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"
1789
		#$conf["transferLocation"]="";
1790
		#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.
1791
		#$conf["ignore"]=array();
1792
		#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.
1793
		#$conf["correctCharacter"]="false";
1794
		#$conf["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.
226 liveuser 1795
		$conf["form::responseMultiInputDataSecurityEnhance"]["checkedVarName"]=array($conf["varName"]);
1796
		#$conf["canBeEmptyString"],字串,用$conf["checkedVarName"]指定接收的變數名稱陣列,若接收到的內容為空字串是否算有接收到內容,預設為"false","true"代表接收到的內容可以為空字串,"false"代表接收到的內容不可以為空字串.
3 liveuser 1797
		#$conf["canBeEmptyString"]="false";
1798
		#$conf["sessionNameArray"],陣列,若存在則代表若沒有從表單取得變數,則從session變數中取得內容,每個元素代表每個表單變數對應的session名稱,若不是要改用session方式取得變數內容的變數,請輸入null,數量請跟$conf["checkedVarName"]參數一致.
1799
		#$conf["sessionNameArray"]=array();
1800
		#$conf["unsetSessionArray"],陣列,與$conf["sessionNameArray"]對應的元素,是否要接收到變數後就卸除,"true"代表要卸除,"false"代表不要卸除.
1801
		#$conf["unsetSessionArray"]=array();
1802
		#參考資料來源:
1803
		#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php
1804
		#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php
1805
		#備註:
1806
		#表單變數的名稱若含有「.」,則會變成「-」。
1807
		$responseMultiInputDataSecurityEnhance=form::responseMultiInputDataSecurityEnhance($conf["form::responseMultiInputDataSecurityEnhance"]);
1808
		unset($conf["form::responseMultiInputDataSecurityEnhance"]);
226 liveuser 1809
 
3 liveuser 1810
		#如果接收表單變數失敗
1811
		if($responseMultiInputDataSecurityEnhance["status"]==="false"){
226 liveuser 1812
 
3 liveuser 1813
			#執行到這邊代表執行不正常
1814
			$result["status"]="false";
226 liveuser 1815
 
3 liveuser 1816
			#設置錯誤訊息
1817
			$result["error"]=$responseMultiInputDataSecurityEnhance;
226 liveuser 1818
 
3 liveuser 1819
			#回傳結果
1820
			return $result;
226 liveuser 1821
 
3 liveuser 1822
			}#if end
226 liveuser 1823
 
3 liveuser 1824
		#如果接收表單變數不通過
1825
		if($responseMultiInputDataSecurityEnhance["passed"]==="false"){
226 liveuser 1826
 
3 liveuser 1827
			#執行到這邊代表執行不正常
1828
			$result["status"]="false";
226 liveuser 1829
 
3 liveuser 1830
			#設置錯誤訊息
1831
			$result["error"]=$responseMultiInputDataSecurityEnhance;
226 liveuser 1832
 
3 liveuser 1833
			#回傳結果
1834
			return $result;
226 liveuser 1835
 
3 liveuser 1836
			}#if end
226 liveuser 1837
 
3 liveuser 1838
		#依照每個 condition
1839
		for($i=0;$i<count($conf["condition"]);$i++){
226 liveuser 1840
 
3 liveuser 1841
			#如果接收到的表單變數對應到 condition 元素
1842
			if($responseMultiInputDataSecurityEnhance["inputDataContent"][$conf["varName"]]===$conf["condition"][$i]){
226 liveuser 1843
 
3 liveuser 1844
				#轉址到對應的地方
1845
				#函式說明:
1846
				#設定session變數後,立即轉址.
1847
				#回傳的結果:
1848
				#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
1849
				#$result["function"],當前執行的函數名稱.
1850
				#$result["error"],錯誤訊息陣列.
1851
				#必填參數:
1852
				#$conf["headerLocation"],為要轉址到的地方,若爲 $_SERVER["PHP_SELF"],則爲回到目前頁面,全民資安素養網爲 https://isafe.moe.edu.tw/.
1853
				$conf["header::redirectionNow"]["headerLocation"]=$conf["headerLocation"][$i];
1854
				#可省略參數:
1855
				#$conf["sessionName"],字串陣列,可以指派session變數的名稱.
1856
				#$conf["sessionName"]=array("");
1857
				#$conf["sessionValue"]字串陣列,可以指派session變數的內容.
1858
				#$conf["sessionValue"]=array("");
1859
				#參靠資料來源:
1860
				#http://php.net/manual/en/reserved.variables.server.php
1861
				$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);
1862
				unset($conf["header::redirectionNow"]);
226 liveuser 1863
 
3 liveuser 1864
				#如果轉址失敗
1865
				if($redirectionNow["status"]==="false"){
226 liveuser 1866
 
3 liveuser 1867
					#執行到這邊代表執行不正常
1868
					$result["status"]="false";
226 liveuser 1869
 
3 liveuser 1870
					#設置錯誤訊息
1871
					$result["error"]=$redirectionNow;
226 liveuser 1872
 
3 liveuser 1873
					#回傳結果
1874
					return $result;
226 liveuser 1875
 
3 liveuser 1876
					}#if end
226 liveuser 1877
 
3 liveuser 1878
				#設置執行正常
1879
				$result["status"]="true";
226 liveuser 1880
 
3 liveuser 1881
				#回傳結果
1882
				return $result;
226 liveuser 1883
 
3 liveuser 1884
				}#if end
226 liveuser 1885
 
3 liveuser 1886
			}#for end
226 liveuser 1887
 
3 liveuser 1888
		#停止執行
226 liveuser 1889
		exit;
1890
 
3 liveuser 1891
		}#function transferByFormVar end
226 liveuser 1892
 
3 liveuser 1893
	/*
1894
	#函式說明:
1895
	#設置header的函式
1896
	#回傳結果:
1897
	#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
1898
	#$result["function"],當前執行的函數名稱.
1899
	#$result["error"],錯誤訊息陣列.
1900
	#$result["content"],回傳結果.
1901
	#$result["content"]["http_response_code"],整數,http response code.
1902
	#$result["content"]["header"],陣列,要送出的header清單.
1903
	#必填參數:
1904
	#$conf["header"],陣列變數,key代表要設置的header的名稱,value代表header的數值.
1905
	$conf["header"]=array();
1906
	#可省略參數:
1907
	#$conf["clearFirst"],字串變數,"true"代表要清空header再處理,"false"代表直接增加header,預設為"false".
1908
	#$conf["clearFirst"]="true";
1909
	#$conf["statusCode"],整數,若有則代表要指定header status code,反之不用.常用的有200(ok),404(頁面找不到),500(內部錯誤)
1910
	#$conf["statusCode"]=200;
1911
	#參考資料:
1912
	#https://www.php.net/manual/en/function.header-remove.php
1913
	#https://www.php.net/manual/en/function.http-response-code.php
1914
	#備註:
1915
	#無.
1916
	*/
1917
	public static function set(&$conf){
1918
 
1919
		#初始化要回傳的結果
1920
		$result=array();
1921
 
1922
		#取得當前執行的函數名稱
1923
		$result["function"]=__FUNCTION__;
1924
 
1925
		#如果沒有參數
1926
		if(func_num_args()==0){
226 liveuser 1927
 
3 liveuser 1928
			#設置執行失敗
1929
			$result["status"]="false";
226 liveuser 1930
 
3 liveuser 1931
			#設置執行錯誤訊息
1932
			$result["error"]="函數".$result["function"]."需要參數";
226 liveuser 1933
 
3 liveuser 1934
			#回傳結果
1935
			return $result;
226 liveuser 1936
 
3 liveuser 1937
			}#if end
1938
 
1939
		#取得參數
1940
		$result["argu"]=$conf;
1941
 
1942
		#如果 $conf 不為陣列
1943
		if(gettype($conf)!=="array"){
226 liveuser 1944
 
3 liveuser 1945
			#設置執行失敗
1946
			$result["status"]="false";
226 liveuser 1947
 
3 liveuser 1948
			#設置執行錯誤訊息
1949
			$result["error"][]="\$conf變數須為陣列形態";
226 liveuser 1950
 
3 liveuser 1951
			#如果傳入的參數為 null
1952
			if($conf===null){
226 liveuser 1953
 
3 liveuser 1954
				#設置執行錯誤訊息
1955
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1956
 
3 liveuser 1957
				}#if end
1958
 
1959
			#回傳結果
1960
			return $result;
226 liveuser 1961
 
3 liveuser 1962
			}#if end
226 liveuser 1963
 
3 liveuser 1964
		#檢查參數
1965
		#函式說明:
1966
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1967
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1968
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1969
		#$result["function"],當前執行的函式名稱.
1970
		#$result["argu"],設置給予的參數.
1971
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1972
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1973
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1974
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1975
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1976
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1977
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1978
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1979
		#必填寫的參數:
1980
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1981
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1982
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1983
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1984
		#可以省略的參數:
1985
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1986
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("header");
1987
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1988
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
1989
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1990
		#$conf["canBeEmptyString"]="false";
1991
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1992
		#$conf["canNotBeEmpty"]=array();
1993
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1994
		#$conf["canBeEmpty"]=array();
1995
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1996
		#$conf["skipableVariableCanNotBeEmpty"]=array();
1997
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1998
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("clearFirst","statusCode");
1999
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2000
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","integer");
2001
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2002
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",200);
2003
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
2004
		#$conf["disallowAllSkipableVarIsEmpty"]="";
2005
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
2006
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
2007
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2008
		#$conf["arrayCountEqualCheck"][]=array();
2009
		#參考資料來源:
2010
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2011
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2012
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 2013
 
3 liveuser 2014
		#如果檢查失敗
2015
		if($checkArguments["status"]=="false"){
226 liveuser 2016
 
3 liveuser 2017
			#設置執行不正常
2018
			$result["status"]="false";
226 liveuser 2019
 
3 liveuser 2020
			#設置錯誤訊息
2021
			$result["error"]=$checkArguments;
226 liveuser 2022
 
3 liveuser 2023
			#回傳結果
2024
			return $result;
226 liveuser 2025
 
3 liveuser 2026
			}#if end
226 liveuser 2027
 
3 liveuser 2028
		#如果檢查不通過
2029
		if($checkArguments["passed"]=="false"){
226 liveuser 2030
 
3 liveuser 2031
			#設置執行不正常
2032
			$result["status"]="false";
226 liveuser 2033
 
3 liveuser 2034
			#設置錯誤訊息
2035
			$result["error"]=$checkArguments;
226 liveuser 2036
 
3 liveuser 2037
			#回傳結果
2038
			return $result;
226 liveuser 2039
 
3 liveuser 2040
			}#if end
226 liveuser 2041
 
3 liveuser 2042
		#如果要先清除掉 header
2043
		if($conf["clearFirst"]==="true"){
226 liveuser 2044
 
3 liveuser 2045
			#移除所有 header
2046
			header_remove();
226 liveuser 2047
 
3 liveuser 2048
			}#if end
226 liveuser 2049
 
3 liveuser 2050
		#針對每個要設置的 header
2051
		foreach($conf["header"] as $name => $value){
226 liveuser 2052
 
3 liveuser 2053
			#將 $name 中的空格變更為 "-"
2054
			#函式說明:
2055
			#處理字串避免網頁出錯
2056
			#回傳的結果:
2057
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2058
			#$result["function"],當前執行的函數.
2059
			#$result["content"],爲處理好的字串.
2060
			#$result["error"],錯誤訊息陣列.
226 liveuser 2061
			#$result["argu"],使用的參數.
3 liveuser 2062
			#必填參數:
2063
			$conf["stringProcess::correctCharacter"]["stringIn"]=$name;#爲要處理的字串
2064
			#可省略參數:
2065
			#$conf["selectedCharacter"]=array("");#爲被選擇要處理的字串/字元,須爲陣列值。
2066
				#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
2067
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2068
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
2069
			#備註:
2070
			#無.
2071
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
2072
			unset($conf["stringProcess::correctCharacter"]);
226 liveuser 2073
 
3 liveuser 2074
			#如果檢查失敗
2075
			if($correctCharacter["status"]=="false"){
226 liveuser 2076
 
3 liveuser 2077
				#設置執行不正常
2078
				$result["status"]="false";
226 liveuser 2079
 
3 liveuser 2080
				#設置錯誤訊息
2081
				$result["error"]=$correctCharacter;
226 liveuser 2082
 
3 liveuser 2083
				#回傳結果
2084
				return $result;
226 liveuser 2085
 
3 liveuser 2086
				}#if end
226 liveuser 2087
 
3 liveuser 2088
			#取得處理好的name
2089
			$name=$correctCharacter["content"];
226 liveuser 2090
 
3 liveuser 2091
			#設置header
2092
			header($name.": ".$value);
226 liveuser 2093
 
3 liveuser 2094
			}#foreach end
226 liveuser 2095
 
3 liveuser 2096
		#設置 staus code
2097
		http_response_code($conf["statusCode"]);
226 liveuser 2098
 
3 liveuser 2099
		#設置執行正常
2100
		$result["status"]="true";
226 liveuser 2101
 
3 liveuser 2102
		#初始化執行回應
2103
		$result["content"]=array();
226 liveuser 2104
 
3 liveuser 2105
		#取得設置好的header清單
2106
		$result["content"]["header"]=headers_list();
226 liveuser 2107
 
3 liveuser 2108
		#設置回應的http response code humber
2109
		$result["content"]["http_response_code"]=http_response_code();
226 liveuser 2110
 
3 liveuser 2111
		#回傳結果
2112
		return $result;
226 liveuser 2113
 
3 liveuser 2114
		}#function set end
226 liveuser 2115
 
3 liveuser 2116
	/*
2117
	#函式說明:
30 liveuser 2118
	#依照OPTIONS的要求,判斷條件,給予允許呼叫的header,預設是全允許.
3 liveuser 2119
	#回傳結果:
2120
	#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
2121
	#$result["function"],當前執行的函數名稱.
2122
	#$result["error"],錯誤訊息陣列.
2123
	#$result["content"],回傳結果.
2124
	#$result["content"]["receivedHeader"],陣列,收到的header
2125
	#$result["content"]["sendedHeader"],陣列,要送出的header.
2126
	#必填參數:
2127
	#無
2128
	#可省略參數:
2129
	#$conf["allowDomain"],陣列變數,代表允許的來源domain name.
2130
	#$conf["allowDomain"]=array();
2131
	#$conf["allowMethod"],陣列變數,代表允許的要求方法.
2132
	#$conf["allowMethod"]=array();
2133
	#$conf["allowHeader"],陣列變數,代表要允許的header.
2134
	#$conf["allowHeader"]=array();
2135
	#參考資料:
2136
	#https://www.php.net/manual/en/function.header-remove.php
2137
	#https://www.php.net/manual/en/function.http-response-code.php
2138
	#備註:
2139
	#無.
2140
	*/
2141
	public static function accessControl(&$conf){
226 liveuser 2142
 
3 liveuser 2143
		#初始化要回傳的結果
2144
		$result=array();
2145
 
2146
		#取得當前執行的函數名稱
2147
		$result["function"]=__FUNCTION__;
2148
 
2149
		#取得參數
2150
		$result["argu"]=$conf;
2151
 
2152
		#如果 $conf 不為陣列
2153
		if(gettype($conf)!="array"){
2154
 
2155
			#設置執行失敗
2156
			$result["status"]="false";
2157
 
2158
			#設置執行錯誤訊息
2159
			$result["error"][]="\$conf變數須為陣列形態";
2160
 
2161
			#如果傳入的參數為 null
2162
			if(is_null($conf)){
2163
 
2164
				#設置執行錯誤訊息
2165
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2166
 
2167
				}#if end
2168
 
2169
			#回傳結果
2170
			return $result;
2171
 
2172
			}#if end
226 liveuser 2173
 
3 liveuser 2174
		#檢查參數
2175
		#函式說明:
2176
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2177
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2178
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2179
		#$result["function"],當前執行的函式名稱.
2180
		#$result["argu"],設置給予的參數.
2181
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2182
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2183
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2184
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
2185
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
2186
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2187
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2188
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2189
		#必填寫的參數:
2190
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2191
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2192
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2193
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2194
		#可以省略的參數:
2195
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2196
		#$conf["mustBeFilledVariableName"]=array();
2197
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
2198
		#$conf["mustBeFilledVariableType"]=array();
2199
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
2200
		#$conf["canBeEmptyString"]="false";
2201
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
2202
		#$conf["canNotBeEmpty"]=array();
2203
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
2204
		#$conf["canBeEmpty"]=array();
2205
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
2206
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("allowDomain","allowMethod","allowHeader");
2207
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2208
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("allowDomain","allowMethod","allowHeader");
2209
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2210
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","array");
2211
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2212
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array("*"),array("*"),array("*"));
2213
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
2214
		#$conf["disallowAllSkipableVarIsEmpty"]="";
2215
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
2216
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
2217
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2218
		#$conf["arrayCountEqualCheck"][]=array();
2219
		#參考資料來源:
2220
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2221
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2222
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 2223
 
3 liveuser 2224
		#如果檢查參數失敗
2225
		if($checkArguments["status"]==="false"){
226 liveuser 2226
 
3 liveuser 2227
			#初始化結果
2228
			$result=array();
226 liveuser 2229
 
3 liveuser 2230
			#設置執行正常
2231
			$result["status"]="false";
226 liveuser 2232
 
3 liveuser 2233
			#設置未執行的結果
2234
			$result["error"]=$checkArguments;
226 liveuser 2235
 
3 liveuser 2236
			#回傳結果
2237
			return $result;
226 liveuser 2238
 
3 liveuser 2239
			}#if end
226 liveuser 2240
 
3 liveuser 2241
		#如果檢查參數不通過
2242
		if($checkArguments["passed"]==="false"){
226 liveuser 2243
 
3 liveuser 2244
			#初始化結果
2245
			$result=array();
226 liveuser 2246
 
3 liveuser 2247
			#設置執行正常
2248
			$result["status"]="false";
226 liveuser 2249
 
3 liveuser 2250
			#設置未執行的結果
2251
			$result["error"]=$checkArguments;
226 liveuser 2252
 
3 liveuser 2253
			#回傳結果
2254
			return $result;
226 liveuser 2255
 
3 liveuser 2256
			}#if end
226 liveuser 2257
 
3 liveuser 2258
		/*
2259
		#函式說明:
2260
		#取得apache接收到的header
2261
		#回傳結果:
2262
		#$result["status"],執行成功與否,"true"代表成功,"false"代表失敗.
2263
		#$result["content"],取得的header陣列.
2264
		#$result["function"],當前執行的函數名稱.
2265
		#必填參數:
2266
		#無
2267
		#可省略參數:
226 liveuser 2268
		#無
3 liveuser 2269
		*/
2270
		$getReceivedHeaders=header::getReceivedHeaders();
2271
 
2272
		#如果取得Header失敗
2273
		if($getReceivedHeaders["status"]==="false"){
226 liveuser 2274
 
3 liveuser 2275
			#初始化結果
2276
			$result=array();
226 liveuser 2277
 
3 liveuser 2278
			#設置執行正常
2279
			$result["status"]="false";
226 liveuser 2280
 
3 liveuser 2281
			#設置未執行的結果
2282
			$result["error"]=$getReceivedHeaders;
226 liveuser 2283
 
3 liveuser 2284
			#回傳結果
2285
			return $result;
226 liveuser 2286
 
3 liveuser 2287
			}#if end
226 liveuser 2288
 
3 liveuser 2289
		#取得接收到header
2290
		$result["content"]["receivedHeader"]=$getReceivedHeaders["content"];
226 liveuser 2291
 
3 liveuser 2292
		#如果沒有必備的 Origin header
66 liveuser 2293
		if(!isset($getReceivedHeaders["content"]["Origin"])){
226 liveuser 2294
 
3 liveuser 2295
			#設置允許所有Origin
2296
			$conf["allowDomain"]=array("*");
226 liveuser 2297
 
66 liveuser 2298
			}#if end
226 liveuser 2299
 
3 liveuser 2300
		#如果不是允許所有Origin
66 liveuser 2301
		if($conf["allowDomain"]!==array("*")){
226 liveuser 2302
 
3 liveuser 2303
			#涵式說明:
2304
			#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
2305
			#回傳的結果:
2306
			#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
2307
			#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
2308
			#$result["error"],錯誤訊息
2309
			#$result["function"],當前執行的函數名稱
2310
			#$result["argv"],使用的參數
2311
			#$result["equalVarName"],相等的變數名稱或key.
2312
			#$result["equalVarValue"],相等的變數數值內容.
2313
			#必填參數:
2314
			$conf["search::getEqualVar"]["conditionElement"]=$getReceivedHeaders["content"]["Origin"];#條件元素,要等於的元素內容.
2315
			$conf["search::getEqualVar"]["compareElements"]=$conf["allowDomain"];#要比對的陣列變數內容.
2316
			$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
2317
			unset($conf["search::getEqualVar"]);
2318
 
2319
			#如果檢查失敗
66 liveuser 2320
			if($getEqualVar["status"]==="false"){
226 liveuser 2321
 
3 liveuser 2322
				#初始化結果
2323
				$result=array();
226 liveuser 2324
 
3 liveuser 2325
				#設置執行正常
2326
				$result["status"]="false";
226 liveuser 2327
 
3 liveuser 2328
				#設置未執行的結果
2329
				$result["error"]=$getEqualVar;
226 liveuser 2330
 
3 liveuser 2331
				#回傳結果
2332
				return $result;
226 liveuser 2333
 
66 liveuser 2334
				}#if end
3 liveuser 2335
 
2336
			#如果沒有符合的項目
66 liveuser 2337
			if($getEqualVar["founded"]==="false"){
226 liveuser 2338
 
3 liveuser 2339
				#初始化結果
2340
				$result=array();
226 liveuser 2341
 
3 liveuser 2342
				#設置執行正常
2343
				$result["status"]="false";
226 liveuser 2344
 
3 liveuser 2345
				#設置未執行的結果
2346
				$result["error"]=$getEqualVar;
226 liveuser 2347
 
3 liveuser 2348
				#回傳結果
2349
				return $result;
226 liveuser 2350
 
66 liveuser 2351
				}#if end
3 liveuser 2352
 
2353
			#設置要允許的Origin
2354
			$allowDomainString=$getEqualVar["equalVarValue"];
226 liveuser 2355
 
3 liveuser 2356
		}#if end
2357
 
2358
		#反之
66 liveuser 2359
		else{
3 liveuser 2360
			#設置為 "*"
2361
			$allowDomainString=$conf["allowDomain"][0];
226 liveuser 2362
 
66 liveuser 2363
			}
226 liveuser 2364
 
3 liveuser 2365
		#將陣列轉變成字串
2366
		#函式說明:
2367
		#將一維陣列轉換為用特定符號間隔的字串,ex:array("1","2","3") to "a;b;c;".
2368
		#回傳的結果:
2369
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2370
		#$result["function"],當前執行的function名稱
2371
		#$result["error"],錯誤訊息陣列.
2372
		#$result["content"],處理好的字串.
2373
		#$result["argu"],使用的參數.
2374
		#必填參數:
2375
		#$conf["inputArray"],字串陣列,要轉成字串的一維陣列.
2376
		$conf["arrays::arrayToString"]["inputArray"]=$conf["allowMethod"];
2377
		#可省略參數:
2378
		#$conf["spiltSymbol"],字串,用來區隔字串的符號,預設為;
2379
		$conf["arrays::arrayToString"]["spiltSymbol"]=", ";
2380
		#$conf["skipEnd"],字串,結尾是否不要加上符號,預設為"false",要加上符號,"true"代表不要加上符號。
2381
		$conf["arrays::arrayToString"]["skipEnd"]="true";
2382
		#備註:
2383
		#無.
2384
		$arrayToString=arrays::arrayToString($conf["arrays::arrayToString"]);
2385
		unset($conf["arrays::arrayToString"]);
2386
 
2387
		#如果取得Header失敗
2388
		if($arrayToString["status"]==="false"){
226 liveuser 2389
 
3 liveuser 2390
			#初始化結果
2391
			$result=array();
226 liveuser 2392
 
3 liveuser 2393
			#設置執行正常
2394
			$result["status"]="false";
226 liveuser 2395
 
3 liveuser 2396
			#設置未執行的結果
2397
			$result["error"]=$arrayToString;
226 liveuser 2398
 
3 liveuser 2399
			#回傳結果
2400
			return $result;
226 liveuser 2401
 
3 liveuser 2402
			}#if end
226 liveuser 2403
 
3 liveuser 2404
		#取得允許的domain name字串
2405
		$allowMethodString=$arrayToString["content"];
2406
 
2407
		#將陣列轉變成字串
2408
		#函式說明:
2409
		#將一維陣列轉換為用特定符號間隔的字串,ex:array("1","2","3") to "a;b;c;".
2410
		#回傳的結果:
2411
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2412
		#$result["function"],當前執行的function名稱
2413
		#$result["error"],錯誤訊息陣列.
2414
		#$result["content"],處理好的字串.
2415
		#$result["argu"],使用的參數.
2416
		#必填參數:
2417
		#$conf["inputArray"],字串陣列,要轉成字串的一維陣列.
2418
		$conf["arrays::arrayToString"]["inputArray"]=$conf["allowHeader"];
2419
		#可省略參數:
2420
		#$conf["spiltSymbol"],字串,用來區隔字串的符號,預設為;
2421
		$conf["arrays::arrayToString"]["spiltSymbol"]=", ";
2422
		#$conf["skipEnd"],字串,結尾是否不要加上符號,預設為"false",要加上符號,"true"代表不要加上符號。
2423
		$conf["arrays::arrayToString"]["skipEnd"]="true";
2424
		#備註:
2425
		#無.
2426
		$arrayToString=arrays::arrayToString($conf["arrays::arrayToString"]);
2427
		unset($conf["arrays::arrayToString"]);
2428
 
2429
		#如果取得Header失敗
2430
		if($arrayToString["status"]==="false"){
226 liveuser 2431
 
3 liveuser 2432
			#初始化結果
2433
			$result=array();
226 liveuser 2434
 
3 liveuser 2435
			#設置執行正常
2436
			$result["status"]="false";
226 liveuser 2437
 
3 liveuser 2438
			#設置未執行的結果
2439
			$result["error"]=$arrayToString;
226 liveuser 2440
 
3 liveuser 2441
			#回傳結果
2442
			return $result;
226 liveuser 2443
 
3 liveuser 2444
			}#if end
226 liveuser 2445
 
3 liveuser 2446
		#取得允許的domain name字串
2447
		$allowHeaderString=$arrayToString["content"];
2448
 
2449
		#設置header
2450
		#函式說明:
2451
		#設置header的函式
2452
		#回傳結果:
2453
		#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
2454
		#$result["function"],當前執行的函數名稱.
2455
		#$result["error"],錯誤訊息陣列.
2456
		#$result["content"],回傳結果.
2457
		#$result["content"]["http_response_code"],整數,http response code.
2458
		#$result["content"]["header"],陣列,要送出的header清單.
2459
		#必填參數:
2460
		#$conf["header"],陣列變數,key代表要設置的header的名稱,value代表header的數值.
2461
		$conf["header::set"]["header"]["Access-Control-Allow-Origin"]=$allowDomainString;
2462
		$conf["header::set"]["header"]["Access-Control-Allow-Methods"]=$allowMethodString;
2463
		$conf["header::set"]["header"]["Access-Control-Allow-Headers"]=$allowHeaderString;
2464
		#可省略參數:
2465
		#$conf["clearFirst"],字串變數,"true"代表要清空header再處理,"false"代表直接增加header,預設為"false".
2466
		#$conf["clearFirst"]="true";
2467
		#$conf["statusCode"],整數,若有則代表要指定header status code,反之不用.常用的有200(ok),404(頁面找不到),500(內部錯誤)
2468
		#$conf["statusCode"]=200;
2469
		#參考資料:
2470
		#https://www.php.net/manual/en/function.header-remove.php
2471
		#https://www.php.net/manual/en/function.http-response-code.php
2472
		#備註:
2473
		#無.
2474
		$set=header::set($conf["header::set"]);
2475
		unset($conf["header::set"]);
2476
 
2477
		#如果設置Header失敗
2478
		if($set["status"]==="false"){
226 liveuser 2479
 
3 liveuser 2480
			#初始化結果
2481
			$result=array();
226 liveuser 2482
 
3 liveuser 2483
			#設置執行正常
2484
			$result["status"]="false";
226 liveuser 2485
 
3 liveuser 2486
			#設置未執行的結果
2487
			$result["error"]=$set;
226 liveuser 2488
 
3 liveuser 2489
			#回傳結果
2490
			return $result;
226 liveuser 2491
 
3 liveuser 2492
			}#if end
226 liveuser 2493
 
3 liveuser 2494
		#函式說明:
2495
		#撰寫log
2496
		#回傳結果:
2497
		#$result["status"],狀態,"true"或"false".
2498
		#$result["error"],錯誤訊息陣列.
2499
		#$result["function"],當前函式的名稱.
2500
		#$result["argu"],使用的參數.
2501
		#必填參數:
2502
		#$conf["path"],log檔案的路徑與名稱.
2503
		$conf["logs::record"]["path"]="/var/www/html/log/log.txt";
2504
		#$conf["content"],字串,要寫的內容.
2505
		$conf["logs::record"]["content"]=PHP_EOL.json_encode($set).PHP_EOL;
2506
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2507
		$conf["logs::record"]["fileArgu"]=__FILE__;
2508
		#可省略參數:
2509
		#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
2510
		#$conf["rewrite"]="true";
2511
		$record=logs::record($conf["logs::record"]);
2512
		unset($conf["logs::record"]);
226 liveuser 2513
 
2514
		#取得要傳送的header
3 liveuser 2515
		$result["content"]["sendedHeader"]=$set["content"]["header"];
2516
 
2517
		#設置執行正常
2518
		$result["status"]="true";
226 liveuser 2519
 
3 liveuser 2520
		#回傳結果
2521
		return $result;
2522
 
2523
		}#function accessControl end
226 liveuser 2524
 
3 liveuser 2525
	}#clsss header end
2526
 
2527
?>