Subversion Repositories qbpwcf-lib(archive)

Rev

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

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