Subversion Repositories php-qbpwcf

Rev

Rev 66 | Rev 226 | Go to most recent revision | 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.
6
    Copyright (C) 2015~2024 Min-Jhin,Chen
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){
48
 
49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
51
 
52
		#設置執行不正常
53
		$result["status"]="false";
54
 
55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
57
 
58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
60
 
61
		#回傳結果
62
		return $result;
63
 
64
		}#function __call end
65
 
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){
80
 
81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
83
 
84
		#設置執行不正常
85
		$result["status"]="false";
86
 
87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
89
 
90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
92
 
93
		#回傳結果
94
		return $result;
95
 
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"]."'");
115
 
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"){
243
 
244
			#設置執行失敗
245
			$result["status"]="false";
246
 
247
			#設置錯誤訊息
248
			$result["error"]=$checkArguments;
249
 
250
			#回傳結果
251
			return $result;
252
 
253
			}#if end
254
 
255
		#如果檢查參數失敗
256
		if($checkArguments["passed"]==="false"){
257
 
258
			#設置執行失敗
259
			$result["status"]="false";
260
 
261
			#設置錯誤訊息
262
			$result["error"]=$checkArguments;
263
 
264
			#回傳結果
265
			return $result;
266
 
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;
277
 
175 liveuser 278
			}#if end
3 liveuser 279
 
280
		#設置執行失敗
281
		$result["status"]="true";
282
 
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
	#無.
307
	*/	
308
	public static function redirectionNow(&$conf){
309
 
310
		#初始化要回傳的內容
311
		$result=array();
312
 
313
		#設置當前執行的函數
314
		$result["function"]=__FUNCTION__;
315
 
316
		#如果 $conf 不為陣列
317
		if(gettype($conf)!="array"){
318
 
319
			#設置執行失敗
320
			$result["status"]="false";
321
 
322
			#設置執行錯誤訊息
323
			$result["error"][]="\$conf變數須為陣列形態";
324
 
325
			#如果傳入的參數為 null
326
			if($conf==null){
327
 
328
				#設置執行錯誤訊息
329
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
330
 
331
				}#if end
332
 
333
			#回傳結果
334
			return $result;
335
 
336
			}#if end
337
 
338
		#初始化ifrmae語法內容
339
		$result["content"]="";
340
 
341
		#如果 $conf 不為陣列
342
		if(gettype($conf)!="array"){
343
 
344
			#設置執行失敗
345
			$result["status"]="false";
346
 
347
			#設置執行錯誤訊息
348
			$result["error"][]="\$conf變數須為陣列形態";
349
 
350
			#回傳結果
351
			return $result;
352
 
353
			}#if end
354
 
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");
370
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
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");
379
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"]);
387
 
388
		#如果檢查失敗
389
		if($checkResult["status"]=="false"){
390
 
391
			#設置執行不正常
392
			$result["status"]="false";
393
 
394
			#設置錯誤訊息
395
			$result["error"]=$checkResult;
396
 
397
			#回傳結果
398
			return $result;
399
 
400
			}#if end
401
 
402
		#如果檢查不通過
403
		if($checkResult["passed"]=="false"){
404
 
405
			#設置執行不正常
406
			$result["status"]="false";
407
 
408
			#設置錯誤訊息
409
			$result["error"]=$checkResult;
410
 
411
			#回傳結果
412
			return $result;
413
 
414
			}#if end
415
 
416
		#如果 $conf["sessionName"] 與 $conf["sessionValue"] 皆為 true 代表皆有設置.
417
		if( isset($conf["sessionName"])==true && isset($conf["sessionValue"])==true ){
418
 
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的格式。
430
				#可省略的參數: 
431
				$conf["session"]["create"]["sessionValue"]=$conf["sessionValue"][$i];#session變數的內容要存放什麼呢? 
432
				$sessionCreatedResult=session::create($conf["session"]["create"]);
433
				unset($conf["session"]["create"]);
434
 
435
				#如果建立session變數失敗
436
				if($sessionCreatedResult["status"]=="false"){
437
 
438
					#設置執行不正常
439
					$result["status"]="false";
440
 
441
					#設置錯誤訊息
442
					$result["error"]=$sessionCreatedResult;
443
 
444
					#回傳結果
445
					return $result;
446
 
447
					}#if end
448
 
449
				}#for end
450
 
451
			}#if end
452
 
453
		#立即轉址到特定網址.
454
		#header("Refresh: 0; url=".$conf["headerLocation"]);
455
		header("location:".$conf["headerLocation"]);
456
 
457
		#停止執行後面的程式,因爲要馬上進行轉址.
458
		exit;
459
 
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」.
470
	#$result["function"],當前執行的函數名稱 
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){
488
 
489
		#與fileAccess類別的data函數一樣
490
		return fileAccess::data($conf);
491
 
492
		}#function data end
493
 
494
	/*
495
	#函式說明:
496
	#透過轉址的方式來下載檔案.
497
	#回傳結果:
498
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
499
	#$result["error"],錯誤訊息
500
	#$result["function"],當前執行的函數名稱 
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輸出的頁面使用
515
	*/	
516
	public static function downloadFile($conf){
517
 
518
		#初始化要回傳的變數
519
		$result=array();
520
 
521
		#記錄當前執行的函數名稱
522
		$result["function"]=__FUNCTION__;
523
 
524
		#如果 $conf 不為陣列
525
		if(gettype($conf)!="array"){
526
 
527
			#設置執行失敗
528
			$result["status"]="false";
529
 
530
			#設置執行錯誤訊息
531
			$result["error"][]="\$conf變數須為陣列形態";
532
 
533
			#如果傳入的參數為 null
534
			if($conf==null){
535
 
536
				#設置執行錯誤訊息
537
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
538
 
539
				}#if end
540
 
541
			#回傳結果
542
			return $result;
543
 
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");
564
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
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");
573
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"){
590
 
591
			#設置錯誤狀態
592
			$result["status"]="false";
593
 
594
			#設置錯誤提示
595
			$result["error"]=$checkResult;
596
 
597
			#回傳結果
598
			return $result;
599
 
600
			}#if end
601
 
602
		#如果檢查不通過
603
		if($checkResult["passed"]=="false"){
604
 
605
			#設置錯誤狀態
606
			$result["status"]="false";
607
 
608
			#設置錯誤提示
609
			$result["error"]=$checkResult;
610
 
611
			#回傳結果
612
			return $result;
613
 
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"])){
624
 
625
			#加上副檔名
626
			$conf["fileName"]=$conf["fileName"].$conf["fileTypeName"];
627
 
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){
666
 
667
		#初始化要回傳的變數
668
		$result=array();
669
 
670
		#初始化當前執行的函數名稱
671
		$result["funciton"]=__FUNCTION__;
672
 
673
		#如果 $conf 不為陣列
674
		if(gettype($conf)!="array"){
675
 
676
			#設置執行失敗
677
			$result["status"]="false";
678
 
679
			#設置執行錯誤訊息
680
			$result["error"][]="\$conf變數須為陣列形態";
681
 
682
			#如果傳入的參數為 null
683
			if($conf==null){
684
 
685
				#設置執行錯誤訊息
686
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
687
 
688
				}#if end
689
 
690
			#回傳結果
691
			return $result;
692
 
693
			}#if end
694
 
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");
713
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
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");
722
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"]);
732
 
733
		#如果檢查失敗
734
		if($checkResult["status"]=="false"){
735
 
736
			#設置執行不正常
737
			$result["status"]="false";
738
 
739
			#設置錯誤訊息
740
			$result["error"]=$checkResult;
741
 
742
			#回傳結果
743
			return $result;
744
 
745
			}#if end			
746
 
747
		#如果檢查不通過
748
		if($checkResult["passed"]=="false"){
749
 
750
			#設置執行不正常
751
			$result["status"]="false";
752
 
753
			#設置錯誤訊息
754
			$result["error"]=$checkResult;
755
 
756
			#回傳結果
757
			return $result;
758
 
759
			}#if end
760
 
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
			#可省略的參數:
773
			$conf["time"]["getFullDateAndTime"]["showSecond"]="true";#若爲"true"則會顯示秒數	
774
			$systemTime=time::getFullDateAndTime($conf["time"]["getFullDateAndTime"]);
775
			unset($conf["time"]["getFullDateAndTime"]);
776
 
777
			#如果取得系統時間失敗
778
			if($systemTime["status"]=="false"){
779
 
780
				#設置執行不正常
781
				$result["status"]="false";
782
 
783
				#設置錯誤訊息
784
				$result["error"]=$systemTime;
785
 
786
				#回傳結果
787
				return $result;
788
 
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"]);
804
			unset($conf["stringPross"]["spiltString"]);	
805
 
806
			#如果分割字串失敗
807
			if($fileNameString["status"]=="false"){
808
 
809
				#設置錯誤識別
810
				$result["status"]="false";
811
 
812
				#設置錯誤訊息
813
				$result["error"]=$fileNameString;
814
 
815
				#回傳結果
816
				return $result;
817
 
818
				}#if end
819
 
820
			#檔案名稱為 / 後面的內容
821
			$conf["fileDisplayName"]="(".$fileNameString["dataArray"][0]." date:".$systemTime["content"].")";
822
 
823
			#若原始檔案名稱有副檔名
824
			for($i=1;$i<$fileNameString["dataCounts"];$i++){
825
 
826
				#組合副檔名
827
				$conf["fileDisplayName"]=$conf["fileDisplayName"].".".$fileNameString["dataArray"][$i];
828
 
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"]);#讀取檔案
847
 
848
			#設置執行正常
849
			$result["status"]="true";
850
 
851
			#回傳結果
852
			return $result;
853
 
854
			}#if end
855
 
856
		#如果檔案不存在則回傳錯誤訊息
857
		else{
858
 
859
			#設置錯誤識別
860
			$result["status"]="false";
861
 
862
			#設置錯誤訊息
863
			$result["error"][]="要下載的檔案不存在";
864
 
865
			#回傳結果
866
			return $result;
867
 
868
			}#else end
869
 
870
		#照理說不應該執行到這邊	
871
 
872
		#設置錯誤識別
873
		$result["status"]="false";
874
 
875
		#設置錯誤訊息
876
		$result["error"][]="下載檔案失敗";
877
 
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();
906
 
907
		#初始化當前執行的函數名稱
908
		$result["funciton"]=__FUNCTION__;
909
 
910
		#如果 $conf 不為陣列
911
		if(gettype($conf)!="array"){
912
 
913
			#設置執行失敗
914
			$result["status"]="false";
915
 
916
			#設置執行錯誤訊息
917
			$result["error"][]="\$conf變數須為陣列形態";
918
 
919
			#如果傳入的參數為 null
920
			if($conf==null){
921
 
922
				#設置執行錯誤訊息
923
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
924
 
925
				}#if end
926
 
927
			#回傳結果
928
			return $result;
929
 
930
			}#if end
931
 
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");
950
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
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");
959
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"]);
969
 
970
		#如果檢查失敗
971
		if($checkResult["status"]=="false"){
972
 
973
			#設置執行不正常
974
			$result["status"]="false";
975
 
976
			#設置錯誤訊息
977
			$result["error"]=$checkResult;
978
 
979
			#回傳結果
980
			return $result;
981
 
982
			}#if end			
983
 
984
		#如果檢查不通過
985
		if($checkResult["passed"]=="false"){
986
 
987
			#設置執行不正常
988
			$result["status"]="false";
989
 
990
			#設置錯誤訊息
991
			$result["error"]=$checkResult;
992
 
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>";
1003
 
1004
		#設定資訊字串
1005
		$result["content"]="<head>".$title.$meta."</head>";
1006
 
1007
		#設置執行正常
1008
		$result["status"]="true";
1009
 
1010
		#回傳設定資訊
1011
		return $result;
1012
 
1013
		}#function setPageInfo end
1014
 
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
	#無.
1036
	*/	
1037
	public static function redirectionAfterAlertWindows(&$conf){
1038
 
1039
		#初始話要回傳的變數
1040
		$result=array();
1041
 
1042
		#記錄當前執行的函數
1043
		$result["function"]=__FUNCTION__;
1044
 
1045
		#如果 $conf 不為陣列
1046
		if(gettype($conf)!="array"){
1047
 
1048
			#設置執行失敗
1049
			$result["status"]="false";
1050
 
1051
			#設置執行錯誤訊息
1052
			$result["error"][]="\$conf變數須為陣列形態";
1053
 
1054
			#如果傳入的參數為 null
1055
			if($conf==null){
1056
 
1057
				#設置執行錯誤訊息
1058
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1059
 
1060
				}#if end
1061
 
1062
			#回傳結果
1063
			return $result;
1064
 
1065
			}#if end
1066
 
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");
1085
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
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");
1094
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"]);
1104
 
1105
		#如果 檢查出錯
1106
		if($checkResult["status"]=="false"){
1107
 
1108
			#設置執行失敗
1109
			$result["status"]="false";
1110
 
1111
			#設置錯誤訊息
1112
			$result["error"]=$checkResult;
1113
 
1114
			#回傳結果
1115
			return $result;
1116
 
1117
			}#if end
1118
 
1119
		#如果 檢查 不通過
1120
		if($checkResult["passed"]=="false"){
1121
 
1122
			#設置執行失敗
1123
			$result["status"]="false";
1124
 
1125
			#設置錯誤訊息
1126
			$result["error"]=$checkResult;
1127
 
1128
			#回傳結果
1129
			return $result;
1130
 
1131
			}#if end
1132
 
1133
		#初始化要顯示的彈出式視窗內容
1134
		$msg="";
1135
 
1136
		#將 $conf["alertMessage"] 中 每個元素視為 $lineContent
1137
		foreach($conf["alertMessage"] as $lineContent){
1138
 
1139
			#結尾加換行符號
1140
			$msg=$msg.$lineContent."\\n";
1141
 
1142
			}#foreach end 
1143
 
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"]);
1154
 
1155
		#如果 $javaScript["status"] 等於 "false"
1156
		if($javaScript["status"]=="false"){
1157
 
1158
			#設置執行失敗
1159
			$result["status"]="false";
1160
 
1161
			#設置錯誤訊息
1162
			$result["error"]=$javaScript;
1163
 
1164
			#回傳結果
1165
			return $result;
1166
 
1167
			}#if end
1168
 
1169
		#印出javaScript
1170
		echo $javaScript["content"];
1171
 
1172
		#如果 $conf["sessionName"] 參數存在 
1173
		if(isset($conf["sessionName"])){
1174
 
1175
			#$conf["sessionName"]有幾個元素就執行幾次
1176
			for($i=0;$i<count($conf["sessionName"]);$i++){
1177
 
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的格式。
1186
				#可省略的參數: 
1187
				$conf["session"]["create"]["sessionValue"]=$conf["sessionValue"][$i];#session變數的內容要存放什麼呢? 
1188
				$createSessionResult=session::create($conf["session"]["create"]);
1189
				unset($conf["session"]);
1190
 
1191
				#如果 $createSessionResult["status"] 等於 "false"
1192
				if($createSessionResult["status"]=="false"){
1193
 
1194
					#設置執行失敗
1195
					$result["status"]="false";
1196
 
1197
					#設置錯誤訊息
1198
					$result["error"]=$createSessionResult;
1199
 
1200
					#回傳結果
1201
					return $result;
1202
 
1203
					}#if end
1204
 
1205
				}#for end
1206
 
1207
			}#if end
1208
 
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"]);
1217
 
1218
		#執行到這邊代表不正常
1219
 
1220
		#設置執行失敗
1221
		$result["status"]="false";
1222
 
1223
		#設置錯誤訊息
1224
		$result["error"][]="非預期的錯誤";
1225
 
1226
		#回傳結果
1227
		return $result;			
1228
 
1229
		}#function redirectionAfterAlertWindows end 
1230
 
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變數名稱.
1251
	#$conf["additionSessionName"]=array(""); 
1252
	#$conf["additionSessionValue"]字串陣列,可額外指派的session變數的內容.
1253
	#$conf["additionSessionValue"]=array("");
1254
	#參考資料:
1255
	#無.
1256
	#備註:
1257
	#無.
1258
	*/
1259
	public static function formVarToSessionThenRedirection(&$conf){
1260
 
1261
		#設置要回傳的結果
1262
		$result=array();
1263
 
1264
		#設置當前執行的函數
1265
		$result["function"]=__FUNCTION__;
1266
 
1267
		#如果 $conf 不為陣列
1268
		if(gettype($conf)!="array"){
1269
 
1270
			#設置執行失敗
1271
			$result["status"]="false";
1272
 
1273
			#設置執行錯誤訊息
1274
			$result["error"][]="\$conf變數須為陣列形態";
1275
 
1276
			#如果傳入的參數為 null
1277
			if($conf==null){
1278
 
1279
				#設置執行錯誤訊息
1280
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1281
 
1282
				}#if end
1283
 
1284
			#回傳結果
1285
			return $result;
1286
 
1287
			}#if end
1288
 
1289
		#設置要回傳的語法
1290
		$result["content"]="";
1291
 
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");
1310
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
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");
1319
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"]);
1330
 
1331
		#如果 檢查出錯
1332
		if($checkResult["status"]=="false"){
1333
 
1334
			#設置執行失敗
1335
			$result["status"]="false";
1336
 
1337
			#設置錯誤訊息
1338
			$result["error"]=$checkResult;
1339
 
1340
			#回傳結果
1341
			return $result;
1342
 
1343
			}#if end
1344
 
1345
		#如果 檢查 不通過
1346
		if($checkResult["passed"]=="false"){
1347
 
1348
			#設置執行失敗
1349
			$result["status"]="false";
1350
 
1351
			#設置錯誤訊息
1352
			$result["error"]=$checkResult;
1353
 
1354
			#回傳結果
1355
			return $result;
1356
 
1357
			}#if end
1358
 
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"]);
1393
 
1394
		#如果接收變數失敗
1395
		if($receiveVar["status"]=="false"){
1396
 
1397
			#設置錯誤
1398
			$result["status"]="false";
1399
 
1400
			#設置錯誤訊息
1401
			$result["error"]=$receiveVar;
1402
 
1403
			#回傳結果
1404
			return $result;
1405
 
1406
			}#if end
1407
 
1408
		#如果變數有缺
1409
		if($receiveVar["passed"]=="false"){
1410
 
1411
			#設置錯誤
1412
			$result["status"]="false";
1413
 
1414
			#設置錯誤訊息
1415
			$result["error"]=$receiveVar;
1416
 
1417
			#回傳結果
1418
			return $result;
1419
 
1420
			}#if end
1421
 
1422
		#$conf["additionSessionName"]字串陣列,額外指派的session變數名稱.
1423
		#$conf["additionsessionName"]=array(""); 
1424
		#$conf["additionSessionValue"]字串陣列,可額外指派的session變數的內容.
1425
		#$conf["additionSessionValue"]=array("");	
1426
 
1427
		#如果有設置要另外設置的seesion變數
1428
		if(isset($conf["additionSessionName"]) && isset($conf["additionSessionValue"])){
1429
 
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"]);
1445
 
1446
			#如果建立session變數失敗
1447
			if($additionSessionCreateResult["status"]=="false"){
1448
 
1449
				#設置錯誤
1450
				$result["status"]="false";
1451
 
1452
				#設置錯誤訊息
1453
				$result["error"]=$additionSessionCreateResult;
1454
 
1455
				#回傳結果
1456
				return $result;
1457
 
1458
				}#if end
1459
 
1460
			}#if end	
1461
 
1462
		#初始化要轉存成session的表單變數內容
1463
		$formToSessionVarValue=array();
1464
 
1465
		#針對每個要接收的變數
1466
		for($i=0;$i<count($conf["receivedVarName"]);$i++){
1467
 
1468
			#取得要轉存成session變數的數值
1469
			$formToSessionVarValue[]=$receiveVar["inputDataContent"][$conf["receivedVarName"][$i]];
1470
 
1471
			}#for end
1472
 
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"]);
1491
 
1492
		#如果轉址失敗
1493
		if($redirectionResult["status"]=="false"){
1494
 
1495
			#設置錯誤
1496
			$result["status"]="false";
1497
 
1498
			#設置錯誤訊息
1499
			$result["error"]=$redirectionResult;
1500
 
1501
			#回傳結果
1502
			return $result;
1503
 
1504
			}#if end
1505
 
1506
		#執行到這邊代表執行不正常
1507
		$result["status"]="false";
1508
 
1509
		#設置錯誤訊息
1510
		$result["error"][]="不可預期的錯誤";
1511
 
1512
		#回傳結果
1513
		return $result;
1514
 
1515
		}#function formVarToSessionThenRedirection end
1516
 
1517
	/*
1518
	#函式說明:
1519
	#取得apache接收到的header
1520
	#回傳結果:
1521
	#$result["status"],執行成功與否,"true"代表成功,"false"代表失敗.
1522
	#$result["content"],取得的header陣列.
1523
	#$result["function"],當前執行的函數名稱.
1524
	#必填參數:
1525
	#無
1526
	#可省略參數:
1527
	#無 
1528
	#參考資料:
1529
	#無.
1530
	#備註:
1531
	#無.
1532
	*/
1533
	public static function getReceivedHeaders(){
1534
 
1535
		#設置要回傳的結果
1536
		$result=array();
1537
 
1538
		#設置當前執行的函數
1539
		$result["function"]=__FUNCTION__;
1540
 
1541
		#存放 header 的變數
1542
		$result["content"]=array();
1543
 
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";
1553
 
1554
				#如果 key 是 HTTP 開頭
1555
				if(strpos($name,$keyWord)===0)
1556
				{				
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"],要處理的原始字串內容.
1567
					#$result["content"],處理好的的字串內容.	
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"]);
1575
 
1576
					#如果處理失敗
1577
					if($delStrBeforeKeyWord["status"]==="false")
1578
					{
1579
 
1580
						#執行到這邊代表執行不正常
1581
						$result["status"]="false";
1582
 
1583
						#設置錯誤訊息
1584
						$result["error"]=$delStrBeforeKeyWord;
1585
 
1586
						#回傳結果
1587
						return $result;
1588
 
1589
					}#if end
1590
 
1591
					#取得 header
1592
					$result["content"][$delStrBeforeKeyWord["content"]]=$val;
1593
 
1594
				}#if end
1595
 
1596
			}#foreach end
1597
 
1598
		}#if end
1599
 
1600
		else
1601
		{
1602
 
1603
			#取得 header
1604
			$result["content"]=@apache_request_headers();
1605
 
1606
		}#else end
1607
 
1608
		#如果取得 header 失敗
1609
		if($result["content"]===FALSE){
1610
 
1611
			#執行到這邊代表執行不正常
1612
			$result["status"]="false";
1613
 
1614
			#設置錯誤訊息
1615
			$result["error"][]="不可預期的錯誤";
1616
 
1617
			#回傳結果
1618
			return $result;
1619
 
1620
			}#if end
1621
 
1622
		#執行到這邊代表執行正常
1623
		$result["status"]="true";
1624
 
1625
		#回傳結果
1626
		return $result;
1627
 
1628
		}#function getReceivedHeaders end
1629
 
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()){
1653
 
1654
		#初始化要回傳的結果
1655
		$result=array();
1656
 
1657
		#取得當前執行的函數名稱
1658
		$result["function"]=__FUNCTION__;
1659
 
1660
		#如果沒有參數
1661
		if(func_num_args()==0){
1662
 
1663
			#設置執行失敗
1664
			$result["status"]="false";
1665
 
1666
			#設置執行錯誤訊息
1667
			$result["error"]="函數".$result["function"]."需要參數";
1668
 
1669
			#回傳結果
1670
			return $result;
1671
 
1672
			}#if end
1673
 
1674
		#取得參數
1675
		$result["argu"]=$conf;
1676
 
1677
		#如果 $conf 不為陣列
1678
		if(gettype($conf)!=="array"){
1679
 
1680
			#設置執行失敗
1681
			$result["status"]="false";
1682
 
1683
			#設置執行錯誤訊息
1684
			$result["error"][]="\$conf變數須為陣列形態";
1685
 
1686
			#如果傳入的參數為 null
1687
			if($conf===null){
1688
 
1689
				#設置執行錯誤訊息
1690
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1691
 
1692
				}#if end
1693
 
1694
			#回傳結果
1695
			return $result;
1696
 
1697
			}#if end
1698
 
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");
1714
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
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");
1723
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
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"]);
1731
 
1732
		#如果檢查失敗
1733
		if($checkResult["status"]=="false"){
1734
 
1735
			#設置執行不正常
1736
			$result["status"]="false";
1737
 
1738
			#設置錯誤訊息
1739
			$result["error"]=$checkResult;
1740
 
1741
			#回傳結果
1742
			return $result;
1743
 
1744
			}#if end
1745
 
1746
		#如果檢查不通過
1747
		if($checkResult["passed"]=="false"){
1748
 
1749
			#設置執行不正常
1750
			$result["status"]="false";
1751
 
1752
			#設置錯誤訊息
1753
			$result["error"]=$checkResult;
1754
 
1755
			#回傳結果
1756
			return $result;
1757
 
1758
			}#if end
1759
 
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";
1779
 
1780
		#如果有設置 limitPrePage
1781
		if(isset($conf["limitPrePage"])){
1782
 
1783
			#$conf["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.
1784
			$conf["form::responseMultiInputDataSecurityEnhance"]["limitPrePage"]=$conf["limitPrePage"];
1785
 
1786
			}#if end
1787
 
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"],字串陣列,為檢查是否有接收到哪些變數.
1795
		$conf["form::responseMultiInputDataSecurityEnhance"]["checkedVarName"]=array($conf["varName"]); 
1796
		#$conf["canBeEmptyString"],字串,用$conf["checkedVarName"]指定接收的變數名稱陣列,若接收到的內容為空字串是否算有接收到內容,預設為"false","true"代表接收到的內容可以為空字串,"false"代表接收到的內容不可以為空字串.	
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"]);
1809
 
1810
		#如果接收表單變數失敗
1811
		if($responseMultiInputDataSecurityEnhance["status"]==="false"){
1812
 
1813
			#執行到這邊代表執行不正常
1814
			$result["status"]="false";
1815
 
1816
			#設置錯誤訊息
1817
			$result["error"]=$responseMultiInputDataSecurityEnhance;
1818
 
1819
			#回傳結果
1820
			return $result;
1821
 
1822
			}#if end
1823
 
1824
		#如果接收表單變數不通過
1825
		if($responseMultiInputDataSecurityEnhance["passed"]==="false"){
1826
 
1827
			#執行到這邊代表執行不正常
1828
			$result["status"]="false";
1829
 
1830
			#設置錯誤訊息
1831
			$result["error"]=$responseMultiInputDataSecurityEnhance;
1832
 
1833
			#回傳結果
1834
			return $result;
1835
 
1836
			}#if end
1837
 
1838
		#依照每個 condition
1839
		for($i=0;$i<count($conf["condition"]);$i++){
1840
 
1841
			#如果接收到的表單變數對應到 condition 元素
1842
			if($responseMultiInputDataSecurityEnhance["inputDataContent"][$conf["varName"]]===$conf["condition"][$i]){
1843
 
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"]);
1863
 
1864
				#如果轉址失敗
1865
				if($redirectionNow["status"]==="false"){
1866
 
1867
					#執行到這邊代表執行不正常
1868
					$result["status"]="false";
1869
 
1870
					#設置錯誤訊息
1871
					$result["error"]=$redirectionNow;
1872
 
1873
					#回傳結果
1874
					return $result;
1875
 
1876
					}#if end
1877
 
1878
				#設置執行正常
1879
				$result["status"]="true";
1880
 
1881
				#回傳結果
1882
				return $result;
1883
 
1884
				}#if end
1885
 
1886
			}#for end
1887
 
1888
		#停止執行
1889
		exit;		
1890
 
1891
		}#function transferByFormVar end
1892
 
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){
1927
 
1928
			#設置執行失敗
1929
			$result["status"]="false";
1930
 
1931
			#設置執行錯誤訊息
1932
			$result["error"]="函數".$result["function"]."需要參數";
1933
 
1934
			#回傳結果
1935
			return $result;
1936
 
1937
			}#if end
1938
 
1939
		#取得參數
1940
		$result["argu"]=$conf;
1941
 
1942
		#如果 $conf 不為陣列
1943
		if(gettype($conf)!=="array"){
1944
 
1945
			#設置執行失敗
1946
			$result["status"]="false";
1947
 
1948
			#設置執行錯誤訊息
1949
			$result["error"][]="\$conf變數須為陣列形態";
1950
 
1951
			#如果傳入的參數為 null
1952
			if($conf===null){
1953
 
1954
				#設置執行錯誤訊息
1955
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1956
 
1957
				}#if end
1958
 
1959
			#回傳結果
1960
			return $result;
1961
 
1962
			}#if end
1963
 
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"]);
2013
 
2014
		#如果檢查失敗
2015
		if($checkArguments["status"]=="false"){
2016
 
2017
			#設置執行不正常
2018
			$result["status"]="false";
2019
 
2020
			#設置錯誤訊息
2021
			$result["error"]=$checkArguments;
2022
 
2023
			#回傳結果
2024
			return $result;
2025
 
2026
			}#if end
2027
 
2028
		#如果檢查不通過
2029
		if($checkArguments["passed"]=="false"){
2030
 
2031
			#設置執行不正常
2032
			$result["status"]="false";
2033
 
2034
			#設置錯誤訊息
2035
			$result["error"]=$checkArguments;
2036
 
2037
			#回傳結果
2038
			return $result;
2039
 
2040
			}#if end
2041
 
2042
		#如果要先清除掉 header
2043
		if($conf["clearFirst"]==="true"){
2044
 
2045
			#移除所有 header
2046
			header_remove();
2047
 
2048
			}#if end
2049
 
2050
		#針對每個要設置的 header
2051
		foreach($conf["header"] as $name => $value){
2052
 
2053
			#將 $name 中的空格變更為 "-"
2054
			#函式說明:
2055
			#處理字串避免網頁出錯
2056
			#回傳的結果:
2057
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2058
			#$result["function"],當前執行的函數.
2059
			#$result["content"],爲處理好的字串.
2060
			#$result["error"],錯誤訊息陣列.
2061
			#$result["argu"],使用的參數. 
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"]);
2073
 
2074
			#如果檢查失敗
2075
			if($correctCharacter["status"]=="false"){
2076
 
2077
				#設置執行不正常
2078
				$result["status"]="false";
2079
 
2080
				#設置錯誤訊息
2081
				$result["error"]=$correctCharacter;
2082
 
2083
				#回傳結果
2084
				return $result;
2085
 
2086
				}#if end
2087
 
2088
			#取得處理好的name
2089
			$name=$correctCharacter["content"];
2090
 
2091
			#設置header
2092
			header($name.": ".$value);
2093
 
2094
			}#foreach end
2095
 
2096
		#設置 staus code
2097
		http_response_code($conf["statusCode"]);
2098
 
2099
		#設置執行正常
2100
		$result["status"]="true";
2101
 
2102
		#初始化執行回應
2103
		$result["content"]=array();
2104
 
2105
		#取得設置好的header清單
2106
		$result["content"]["header"]=headers_list();
2107
 
2108
		#設置回應的http response code humber
2109
		$result["content"]["http_response_code"]=http_response_code();
2110
 
2111
		#回傳結果
2112
		return $result;
2113
 
2114
		}#function set end
2115
 
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){
2142
 
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
2173
 
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"]);
2223
 
2224
		#如果檢查參數失敗
2225
		if($checkArguments["status"]==="false"){
2226
 
2227
			#初始化結果
2228
			$result=array();
2229
 
2230
			#設置執行正常
2231
			$result["status"]="false";
2232
 
2233
			#設置未執行的結果
2234
			$result["error"]=$checkArguments;
2235
 
2236
			#回傳結果
2237
			return $result;
2238
 
2239
			}#if end
2240
 
2241
		#如果檢查參數不通過
2242
		if($checkArguments["passed"]==="false"){
2243
 
2244
			#初始化結果
2245
			$result=array();
2246
 
2247
			#設置執行正常
2248
			$result["status"]="false";
2249
 
2250
			#設置未執行的結果
2251
			$result["error"]=$checkArguments;
2252
 
2253
			#回傳結果
2254
			return $result;
2255
 
2256
			}#if end
2257
 
2258
		/*
2259
		#函式說明:
2260
		#取得apache接收到的header
2261
		#回傳結果:
2262
		#$result["status"],執行成功與否,"true"代表成功,"false"代表失敗.
2263
		#$result["content"],取得的header陣列.
2264
		#$result["function"],當前執行的函數名稱.
2265
		#必填參數:
2266
		#無
2267
		#可省略參數:
2268
		#無 
2269
		*/
2270
		$getReceivedHeaders=header::getReceivedHeaders();
2271
 
2272
		#如果取得Header失敗
2273
		if($getReceivedHeaders["status"]==="false"){
2274
 
2275
			#初始化結果
2276
			$result=array();
2277
 
2278
			#設置執行正常
2279
			$result["status"]="false";
2280
 
2281
			#設置未執行的結果
2282
			$result["error"]=$getReceivedHeaders;
2283
 
2284
			#回傳結果
2285
			return $result;
2286
 
2287
			}#if end
2288
 
2289
		#取得接收到header
2290
		$result["content"]["receivedHeader"]=$getReceivedHeaders["content"];
2291
 
2292
		#如果沒有必備的 Origin header
66 liveuser 2293
		if(!isset($getReceivedHeaders["content"]["Origin"])){
2294
 
3 liveuser 2295
			#設置允許所有Origin
2296
			$conf["allowDomain"]=array("*");
2297
 
66 liveuser 2298
			}#if end
3 liveuser 2299
 
2300
		#如果不是允許所有Origin
66 liveuser 2301
		if($conf["allowDomain"]!==array("*")){
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"){
2321
 
3 liveuser 2322
				#初始化結果
2323
				$result=array();
2324
 
2325
				#設置執行正常
2326
				$result["status"]="false";
2327
 
2328
				#設置未執行的結果
2329
				$result["error"]=$getEqualVar;
2330
 
2331
				#回傳結果
2332
				return $result;
2333
 
66 liveuser 2334
				}#if end
3 liveuser 2335
 
2336
			#如果沒有符合的項目
66 liveuser 2337
			if($getEqualVar["founded"]==="false"){
2338
 
3 liveuser 2339
				#初始化結果
2340
				$result=array();
2341
 
2342
				#設置執行正常
2343
				$result["status"]="false";
2344
 
2345
				#設置未執行的結果
2346
				$result["error"]=$getEqualVar;
2347
 
2348
				#回傳結果
2349
				return $result;
2350
 
66 liveuser 2351
				}#if end
3 liveuser 2352
 
2353
			#設置要允許的Origin
2354
			$allowDomainString=$getEqualVar["equalVarValue"];
2355
 
2356
		}#if end
2357
 
2358
		#反之
66 liveuser 2359
		else{
3 liveuser 2360
			#設置為 "*"
2361
			$allowDomainString=$conf["allowDomain"][0];
2362
 
66 liveuser 2363
			}
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"){
2389
 
2390
			#初始化結果
2391
			$result=array();
2392
 
2393
			#設置執行正常
2394
			$result["status"]="false";
2395
 
2396
			#設置未執行的結果
2397
			$result["error"]=$arrayToString;
2398
 
2399
			#回傳結果
2400
			return $result;
2401
 
2402
			}#if end
2403
 
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"){
2431
 
2432
			#初始化結果
2433
			$result=array();
2434
 
2435
			#設置執行正常
2436
			$result["status"]="false";
2437
 
2438
			#設置未執行的結果
2439
			$result["error"]=$arrayToString;
2440
 
2441
			#回傳結果
2442
			return $result;
2443
 
2444
			}#if end
2445
 
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"){
2479
 
2480
			#初始化結果
2481
			$result=array();
2482
 
2483
			#設置執行正常
2484
			$result["status"]="false";
2485
 
2486
			#設置未執行的結果
2487
			$result["error"]=$set;
2488
 
2489
			#回傳結果
2490
			return $result;
2491
 
2492
			}#if end
2493
 
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"]);
2513
 
2514
		#取得要傳送的header	
2515
		$result["content"]["sendedHeader"]=$set["content"]["header"];
2516
 
2517
		#設置執行正常
2518
		$result["status"]="true";
2519
 
2520
		#回傳結果
2521
		return $result;
2522
 
2523
		}#function accessControl end
2524
 
2525
	}#clsss header end
2526
 
2527
?>