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.
624 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
 
243 liveuser 26
/*
27
類別說明:
270 liveuser 28
跟 PHP session 應用相關的類別.
243 liveuser 29
備註:
30
無.
31
*/
1 liveuser 32
class session{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
209 liveuser 44
	#可省略參數:
45
	#無.
1 liveuser 46
	#參考資料:
47
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
209 liveuser 48
	#備註:
49
	#無.
1 liveuser 50
	*/
51
	public function __call($method,$arguments){
52
 
53
		#取得當前執行的函式
54
		$result["function"]=__FUNCTION__;
55
 
56
		#設置執行不正常
57
		$result["status"]="false";
58
 
59
		#設置執行錯誤
60
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
61
 
62
		#設置所丟入的參數
63
		$result["error"][]=$arguments;
64
 
65
		#回傳結果
66
		return $result;
67
 
68
		}#function __call end
69
 
70
	/*
71
	#函式說明:
72
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
73
	#回傳結果:
74
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
75
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
76
	#$result["function"],當前執行的函式名稱.
77
	#必填參數:
78
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
79
	#$arguments,陣列,為呼叫方法時所用的參數.
209 liveuser 80
	#可省略參數:
81
	#無.
1 liveuser 82
	#參考資料:
209 liveuser 83
	#__callStatic=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
84
	#備註:
85
	#無.
1 liveuser 86
	*/
87
	public static function __callStatic($method,$arguments){
88
 
89
		#取得當前執行的函式
90
		$result["function"]=__FUNCTION__;
91
 
92
		#設置執行不正常
93
		$result["status"]="false";
94
 
95
		#設置執行錯誤
96
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
97
 
98
		#設置所丟入的參數
99
		$result["error"][]=$arguments;
100
 
101
		#回傳結果
102
		return $result;
103
 
104
		}#function __callStatic end
105
 
106
	/*
57 liveuser 107
	#函式說明:
1 liveuser 108
	#取得session變數裡面的數值,然後卸除該session變數
57 liveuser 109
	#回傳結果:
1 liveuser 110
	#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
111
	#$result["error"],錯誤訊息.
112
	#$result["founded"],是否找到session變數,"true"代表找到,"false"代表沒找到.
113
	#$result["content"],取得的變數內容.
114
	#$result["function"],當前執行的函數名稱.
57 liveuser 115
	#必填參數:
1 liveuser 116
	#$conf["sessionVarName"],字串,要取得內容的session變數名稱
117
	$conf["sessionVarName"]="";
57 liveuser 118
	#可省略參數:
1 liveuser 119
	#$conf["unsetSessionVar"],字串,代表要卸除session變數,預設為"false"不卸除,"true"代表要卸除.
120
	#$conf["unsetSessionVar"]="true";
121
	#$conf["autoCreate"],字串,是否要自動建立該 session 變數,"true"代表要,預設為"false"代表不要.
122
	#$conf["autoCreate"]="true";
123
	#$conf["initVal"],字串,"autoCreate"參數為"true"時,要給予的初始內容,預設為"".
124
	#$conf["initVal"]="";
125
	#參考資料:
126
	#call-time-pass-by-reference-easy-fix-available=>http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available
127
	#可變變數=>http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8%28variables%29
128
	#卸除參考的原始變數=>http://stackoverflow.com/questions/6654538/php-function-to-unset-variables-passed-by-reference
57 liveuser 129
	#備註:
130
	#無.
1 liveuser 131
	*/
209 liveuser 132
	public static function getSessionValue(&$conf){
1 liveuser 133
 
134
		#初始化要回傳的變數
135
		$result=array();
136
 
137
		#設置當前執行的函式
138
		$result["function"]=__FUNCTION__;
139
 
140
		#如果 $conf 不為陣列
141
		if(gettype($conf)!="array"){
142
 
143
			#設置執行失敗
144
			$result["status"]="false";
145
 
146
			#設置執行錯誤訊息
147
			$result["error"][]="\$conf變數須為陣列形態";
148
 
149
			#如果傳入的參數為 null
150
			if($conf==null){
151
 
152
				#設置執行錯誤訊息
153
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
154
 
155
				}#if end
156
 
157
			#回傳結果
158
			return $result;
159
 
160
			}#if end
161
 
162
		#檢查參數
57 liveuser 163
		#函式說明:
1 liveuser 164
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
165
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
166
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
167
		#$result["function"],當前執行的函式名稱.
168
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
169
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
170
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
171
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
172
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
173
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
174
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
175
		#必填寫的參數:
176
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
177
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
178
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
179
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sessionVarName");
180
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
181
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
182
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
183
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
184
		#可以省略的參數:
185
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
186
		#$conf["canBeEmptyString"]="false";
187
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
188
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("unsetSessionVar","autoCreate","initVal");
189
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
190
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","any");
191
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
192
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","false",null);
193
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
194
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("sessionArrayName","sessionArrayValue");
195
		#參考資料來源:
196
		#array_keys=>http://php.net/manual/en/function.array-keys.php
197
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
198
		unset($conf["variableCheck::checkArguments"]);
199
 
200
		#如果檢查參數失敗
201
		if($checkArguments["status"]=="false"){
202
 
203
			#設置執行失敗
204
			$result["status"]="false";
205
 
206
			#設置執行錯誤訊息
207
			$result["error"]=$checkArguments;
208
 
209
			#回傳結果
210
			return $result;
211
 
212
			}#if end
213
 
214
		#檢查參數不通過
215
		if($checkArguments["passed"]=="false"){
216
 
217
			#設置執行失敗
218
			$result["status"]="false";
219
 
220
			#設置執行錯誤訊息
221
			$result["error"]=$checkArguments;
222
 
223
			#回傳結果
224
			return $result;
225
 
226
			}#if end	
227
 
228
		#確認該session變數是否存在
229
		if(!isset($_SESSION[$conf["sessionVarName"]])){
230
 
231
			#設置執行正常
232
			$result["status"]="true";
233
 
234
			#設置沒有找到session變數
235
			$result["founded"]="false";
236
 
237
			#如果要自動建立該 session 變數
238
			if($conf["autoCreate"]==="true"){
239
 
57 liveuser 240
				#函式說明:
1 liveuser 241
				#建立session變數,並指派其內容
57 liveuser 242
				#回傳結果:
1 liveuser 243
				#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗.
244
				#$result["error"],錯誤訊息陣列.
245
				#$result["function"],當前執行的函數名稱.
57 liveuser 246
				#必填參數:
1 liveuser 247
				#$conf["sessionName"],字串,要建立的session變數名稱,建議可採用name1.name2.name3的格式.
248
				$conf["session::create"]["sessionName"]=$conf["sessionVarName"];
57 liveuser 249
				#可省略參數: 
1 liveuser 250
 
251
				#如果有設置 $conf["initVal"]
252
				if(isset($conf["initVal"])){
253
 
254
					#$conf["sessionValue"],字串,session變數的內容,預設為"".
255
					$conf["session::create"]["sessionValue"]=$conf["initVal"];
256
 
257
					}#if end
258
 
259
				$create=session::create($conf["session::create"]);
260
				unset($conf["session::create"]);
261
 
262
				#遞迴執行
263
				return session::getSessionValue($conf);
264
 
265
				}#if end
266
 
267
			#回傳結果
268
			return $result;
269
 
270
			}#if end
271
 
272
		#取得session變數的內容
273
		$result["content"]=$_SESSION[$conf["sessionVarName"]];
274
 
275
		#設置有找到session變數
276
		$result["founded"]="true";
277
 
278
		#如果 $conf["unsetSessionVar"] 為 "true"
279
		if($conf["unsetSessionVar"]=="true"){
280
 
281
			#移除session變數的內容
282
			unset($_SESSION[$conf["sessionVarName"]]);
283
 
284
			}#if end
285
 
286
		#設置執行正常
287
		$result["status"]="true";
288
 
289
		#回傳結果
290
		return $result;	
291
 
292
		}#function getSessionValue end
293
 
294
	/*
57 liveuser 295
	#函式說明:
1 liveuser 296
	#取得多個指定的session變數,卸除之.
297
	#回傳結果:
298
	#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗。
299
	#$result["error"],錯誤訊息陣列
300
	#$result["function"],當前執行的函式名稱.
301
	#$result["foundedAll"],是否找到所有的session變數,"true"代表找到,"false"代表沒找到.
302
	#$result["founded"],每個session變數是否取得,"true"代表找到,"false"代表沒找到.
303
	#$result["content"],取得的session變數內容陣列
57 liveuser 304
	#必填參數:
1 liveuser 305
	#$conf["sessionVarNameArray"],字串陣列,要取得內容的多個session變數名稱
306
	$conf["sessionVarNameArray"]=array();
57 liveuser 307
	#可省略參數:
1 liveuser 308
	#$conf["keyArrayOfGotSessionValue"],字串陣列,取得的session變數是否要將其key從「0,1,2...」改成自定的「名稱1,名稱2,名稱3...」.
309
	#$conf["keyArrayOfGotSessionValue"]=array();
310
	#$conf["unsetSessionVars"],字串,"true"代表要卸除取值完的session變數,反之"false"爲保留session變數,預設爲"true".
311
	#$conf["unsetSessionVars"]="true";
209 liveuser 312
	#參考資料:
313
	#無.
57 liveuser 314
	#備註:
315
	#無.
1 liveuser 316
	*/
209 liveuser 317
	public static function getMultiSessionValues(&$conf){
1 liveuser 318
 
319
		#初始化要回傳的變數
320
		$result=array();
321
 
322
		#設置當前執行的函式
323
		$result["function"]=__FUNCTION__;
324
 
325
		#如果 $conf 不為陣列
326
		if(gettype($conf)!="array"){
327
 
328
			#設置執行失敗
329
			$result["status"]="false";
330
 
331
			#設置執行錯誤訊息
332
			$result["error"][]="\$conf變數須為陣列形態";
333
 
334
			#如果傳入的參數為 null
335
			if($conf==null){
336
 
337
				#設置執行錯誤訊息
338
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
339
 
340
				}#if end
341
 
342
			#回傳結果
343
			return $result;
344
 
345
			}#if end
346
 
347
		#初始化要回傳的變數內容
348
		$result["content"]=array();
349
 
350
		#檢查參數
57 liveuser 351
		#函式說明:
1 liveuser 352
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
353
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
354
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
355
		#$result["function"],當前執行的函式名稱.
356
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
357
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
358
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
359
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
360
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
361
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
362
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
363
		#必填寫的參數:
364
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
365
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
366
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
367
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sessionVarNameArray");
368
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
369
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
370
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
371
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
372
		#可以省略的參數:
373
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
374
		#$conf["canBeEmptyString"]="false";
375
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
376
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("keyArrayOfGotSessionValue","unsetSessionVars");
377
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
378
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");
379
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
380
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"true");
381
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
382
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("sessionArrayName","sessionArrayValue");
383
		#參考資料來源:
384
		#array_keys=>http://php.net/manual/en/function.array-keys.php
385
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
386
		unset($conf["variableCheck::checkArguments"]);
387
 
388
		#如果檢查參數失敗
389
		if($checkArguments["status"]=="false"){
390
 
391
			#設置執行失敗
392
			$result["status"]="false";
393
 
394
			#設置執行錯誤訊息
395
			$result["error"]=$checkArguments;
396
 
397
			#回傳結果
398
			return $result;
399
 
400
			}#if end
401
 
402
		#檢查參數不通過
403
		if($checkArguments["passed"]=="false"){
404
 
405
			#設置執行失敗
406
			$result["status"]="false";
407
 
408
			#設置執行錯誤訊息
409
			$result["error"]=$checkArguments;
410
 
411
			#回傳結果
412
			return $result;
413
 
414
			}#if end
415
 
416
		#有幾個session變數要接收就執行幾次
417
		for($i=0;$i<count($conf["sessionVarNameArray"]);$i++){
418
 
57 liveuser 419
			#函式說明:
1 liveuser 420
			#取得session變數裡面的數值,然後卸除該session變數
57 liveuser 421
			#回傳結果:
1 liveuser 422
			#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
423
			#$result["error"],錯誤訊息
424
			#$result["founded"],是否找到session變數,"true"代表找到,"false"代表沒找到.
425
			#$result["content"],取得的變數內容
57 liveuser 426
			#必填參數:
1 liveuser 427
			$conf["session.getSessionValue"]["sessionVarName"]=$conf["sessionVarNameArray"][$i];#要取得內容的session變數名稱
57 liveuser 428
			#可省略參數:
1 liveuser 429
			$conf["session.getSessionValue"]["unsetSessionVar"]=$conf["unsetSessionVars"];#"true"代表要卸除session變數,預設不卸除
430
			#參考資料:
431
			#http://stackoverflow.com/questions/8971261/php-5-4-call-time-pass-by-reference-easy-fix-available
432
			#可變變數->http://emn178.pixnet.net/blog/post/80119035-php%E6%95%99%E5%AD%B8---%E8%AE%8A%E6%95%B8%28variables%29
433
			#卸除參考的原始變數->http://stackoverflow.com/questions/6654538/php-function-to-unset-variables-passed-by-reference
434
			$getSessionValueResult=session::getSessionValue($conf["session.getSessionValue"]);
435
			unset($conf["session.getSessionValue"]);
436
 
437
			#debug
438
			#var_dump($getSessionValueResult);
439
 
440
			#如果取得session變數失敗
441
			if($getSessionValueResult["status"]=="false"){
442
 
443
				#設置執行不正常
444
				$result["status"]="false";
445
 
446
				#設置執行錯誤的訊息
447
				$result["error"]=$checkResult;
448
 
449
				#回傳結果
450
				return $result;
451
 
452
				}#if end
453
 
454
			#如果該session變數不存在
455
			if($getSessionValueResult["founded"]=="false"){
456
 
457
				#設置該session變數不存在
458
				$result["founded"][$i]="false";
459
 
460
				}#if end
461
 
462
			#反之session變數存在
463
			else{
464
 
465
				#設置該session變數存在
466
				$result["founded"][$i]="true";
467
 
468
				#取得session變數的內容
469
				$result["content"][$i]=$getSessionValueResult["content"];
470
 
471
				}#else end
472
 
473
			}#for end
474
 
475
		#如果 $conf["keyArrayOfGotSessionValue"] 有設置
476
		if(isset($conf["keyArrayOfGotSessionValue"])){
477
 
478
			#如果 $conf["keyArrayOfGotSessionValue"] 與 $conf["sessionVarNameArray"] 的元素數量相等
479
			if(count($conf["keyArrayOfGotSessionValue"])==count($conf["sessionVarNameArray"])){
480
 
481
				#$conf["keyArrayOfGotSessionValue"]有幾個元素就執行幾次
482
				for($i=0;$i<count($conf["keyArrayOfGotSessionValue"]);$i++){
483
 
484
					#給與新key
485
					$result["founded"][$conf["keyArrayOfGotSessionValue"][$i]]=$result["founded"][$i];
486
 
487
					#如果存在session變數
488
					if(isset($result["content"][$i])){
489
 
490
						#給與新key
491
						$result["content"][$conf["keyArrayOfGotSessionValue"][$i]]=$result["content"][$i];
492
 
493
						#移除舊key的變數
494
						unset($result["content"][$i]);
495
 
496
						}#if end
497
 
498
					#移除舊key的變數
499
					unset($result["founded"][$i]);
500
 
501
					}#for end 
502
 
503
				}#if end
504
 
505
			#反之 $conf["keyArrayOfGotSessionValue"] 與 $conf["sessionVarNameArray"] 的元素數量不相等
506
			else{
507
 
508
				#設置執行不正常
509
				$result["status"]="false";
510
 
511
				#設置執行錯誤的訊息
512
				$result["error"][]="\$conf[\"keyArrayOfGotSessionValue\"] 與 \$conf[\"sessionVarNameArray\"] 的元素數量不相等";
513
 
514
				#回傳結果
515
				return $result;
516
 
517
				}#else end
518
 
519
			}#if end
520
 
521
		#如果有一個session變數沒找到
522
		foreach($result["founded"] as $value){
523
 
524
			#如果等於 "false"
525
			if($value=="false"){
526
 
527
				#設置沒有每個session變數都抓到
528
				$result["foundedAll"]="false";
529
 
530
				#跳出foreach
531
				break;
532
 
533
				}#if end
534
 
535
			}#foreach end
536
 
537
		#如果 $result["foundedAll"] 沒有設置
538
		if(!isset($result["foundedAll"])){
539
 
540
			#設爲 "true"
541
			$result["foundedAll"]="true";
542
 
543
			}#if end
544
 
545
		#設置執行結果爲正常
546
		$result["status"]="true";
547
 
548
		#回傳結果
549
		return $result;
550
 
551
		}#funtion getMultiSessionValues end
552
 
553
	/*
57 liveuser 554
	#函式說明:
1 liveuser 555
	#建立session變數,並指派其內容
57 liveuser 556
	#回傳結果:
1 liveuser 557
	#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗.
558
	#$result["error"],錯誤訊息陣列.
559
	#$result["argu"],使用的參數.
560
	#$result["function"],當前執行的函數名稱.
57 liveuser 561
	#必填參數:
1 liveuser 562
	#$conf["sessionName"],字串,要建立的session變數名稱,建議可採用name1.name2.name3的格式.
563
	$conf["sessionName"]="";
57 liveuser 564
	#可省略參數: 
1 liveuser 565
	#$conf["sessionValue"],字串,session變數的內容,預設為"".
566
	#$conf["sessionValue"]="";
209 liveuser 567
	#參考資料:
568
	#無.
57 liveuser 569
	#備註:
570
	#無.
1 liveuser 571
	*/
572
	public static function create(&$conf){
573
 
574
		#初始化要回傳的變數
575
		$result=array();
576
 
577
		#儲存使用的參數
578
		$result["argu"]=$conf;
579
 
580
		#記錄當前執行的函數名稱
581
		$result["function"]=__FUNCTION__;
582
 
583
		#如果 $conf 不為陣列
584
		if(gettype($conf)!="array"){
585
 
586
			#設置執行失敗
587
			$result["status"]="false";
588
 
589
			#設置執行錯誤訊息
590
			$result["error"][]="\$conf變數須為陣列形態";
591
 
592
			#如果傳入的參數為 null
593
			if($conf==null){
594
 
595
				#設置執行錯誤訊息
596
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
597
 
598
				}#if end
599
 
600
			#回傳結果
601
			return $result;
602
 
603
			}#if end
604
 
605
		#檢查參數
57 liveuser 606
		#函式說明:
1 liveuser 607
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
608
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
609
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
610
		#$result["function"],當前執行的函式名稱.
611
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
612
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
613
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
614
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
615
		#必填寫的參數:
616
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
617
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
618
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
619
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sessionName");
620
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
621
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
622
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
623
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
624
		#可以省略的參數:
625
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
626
		#$conf["canBeEmptyString"]="false";
627
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
628
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sessionValue");
629
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
630
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array();
631
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
632
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("");
633
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
634
		#$conf["arrayCountEqualCheck"][]=array();
635
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
636
		unset($conf["variableCheck::checkArguments"]);
637
 
638
		#如果檢查失敗
639
		if($checkResult["status"]=="false"){
640
 
641
			#設置執行錯誤的識別
642
			$result["status"]="false";
643
 
644
			#設置執行失敗的錯誤訊息
645
			$result["error"]=$checkResult;
646
 
647
			#回傳結果
648
			return $result;
649
 
650
			}#if end
651
 
652
		#如果檢查不通過
653
		if($checkResult["passed"]=="false"){
654
 
655
			#設置執行錯誤的識別
656
			$result["status"]="false";
657
 
658
			#設置執行失敗的錯誤訊息
659
			$result["error"]=$checkResult;
660
 
661
			#回傳結果
662
			return $result;
663
 
664
			}#if end
665
 
666
		#建立session變數,並指派其直
667
		$_SESSION[$conf["sessionName"]]=$conf["sessionValue"];
668
 
669
		#設置執行成功的辨識訊息
670
		$result["status"]="true";
671
 
672
		#回傳結果
673
		return $result;
674
 
675
		}#function create end
676
 
677
	/*
678
	#函式說明:
679
	#記錄當前訪問的頁面,並且保存上一個訪問的頁面.
57 liveuser 680
	#回傳結果:
1 liveuser 681
	#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
682
	#$result["error"],錯誤訊息.
683
	#$result["function"],當前執行的函數名稱.
684
	#$result["nowPosition"],現在瀏覽的路徑.
685
	#$result["prePosition"],上一個瀏覽的路徑.
686
	#$result["phpNowViewed"],當前瀏覽的檔案名稱.
687
	#$resutl["phpPreViewed"],上一個瀏覽的檔案名稱.
57 liveuser 688
	#必填參數:
689
	#無.
690
	#可省略參數:
691
	#無.
209 liveuser 692
	#參考資料:
693
	#無.
1 liveuser 694
	#備註:
695
	#當一個頁面有多個頁框時,會導致當前瀏覽的頁面與上一個瀏覽的頁面被複寫.
696
	*/
209 liveuser 697
	public static function getPreAndNowPosition(){
1 liveuser 698
 
699
		#初始化要回傳的變數
700
		$result=array();
701
 
702
		#設置當前執行的函式
703
		$result["function"]=__FUNCTION__;
704
 
705
		#如果 $conf 不為陣列
706
		if(gettype($conf)!="array"){
707
 
708
			#設置執行失敗
709
			$result["status"]="false";
710
 
711
			#設置執行錯誤訊息
712
			$result["error"][]="\$conf變數須為陣列形態";
713
 
714
			#如果傳入的參數為 null
715
			if($conf==null){
716
 
717
				#設置執行錯誤訊息
718
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
719
 
720
				}#if end
721
 
722
			#回傳結果
723
			return $result;
724
 
725
			}#if end
726
 
727
		#設置當前執行的函式
728
		$result["function"]=__FUNCTION__;
729
 
730
		#如果 $_SESSION["session"]["getPreAndNowPosition"]["prePlace"] 不存在
731
		if(!isset($_SESSION["session"]["getPreAndNowPosition"]["prePlace"])){
732
 
733
			#將之設為 ""
734
			$_SESSION["session"]["getPreAndNowPosition"]["prePlace"]="";
735
 
736
			}#if end
737
 
738
		#如果 $_SESSION["session"]["getPreAndNowPosition"]["nowPlace"] 存在
739
		if(isset($_SESSION["session"]["getPreAndNowPosition"]["nowPlace"])){
740
 
741
			#設置 $_SESSION["session"]["getPreAndNowPosition"]["prePlace"] 為 $_SESSION["session"]["getPreAndNowPosition"]["nowPlace"]
742
			$_SESSION["session"]["getPreAndNowPosition"]["prePlace"]=$_SESSION["session"]["getPreAndNowPosition"]["nowPlace"];
743
 
744
			#設置 $_SESSION["session"]["getPreAndNowPosition"]["nowPlace"] 為 $_SERVER["PHP_SELF"]
745
			$_SESSION["session"]["getPreAndNowPosition"]["nowPlace"]=$_SERVER["PHP_SELF"];
746
 
747
			}#if end
748
 
749
		#反之 $_SESSION["session"]["getPreAndNowPosition"]["nowPlace"] 沒有設置
750
		else{
751
 
752
			#將 $_SESSION["session"]["getPreAndNowPosition"]["nowPlace"] 設為 $_SERVER["PHP_SELF"]
753
			$_SESSION["session"]["getPreAndNowPosition"]["nowPlace"]=$_SERVER["PHP_SELF"];
754
 
755
			}#else end
756
 
757
		#記錄要回傳的內容
758
 
759
		#記錄當前瀏覽的目錄
57 liveuser 760
		#函式說明:
1 liveuser 761
		#將固定格式的字串分開,並回傳分開的結果。
762
		#回傳的參數:
763
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
764
		#$result["error"],錯誤訊息陣列
765
		#$result["function"],當前執行的函數名稱.
766
		#$result["oriStr"],要分割的原始字串內容
767
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
768
		#$result["dataCounts"],爲總共分成幾段
57 liveuser 769
		#必填參數:
1 liveuser 770
		$conf["stringIn"]=$_SESSION["session"]["getPreAndNowPosition"]["nowPlace"];#要處理的字串。
771
		$conf["spiltSymbol"]="/";#爲以哪個符號作爲分割
772
		$processedStr=stringProcess::spiltString($conf);
773
		unset($conf);
774
 
775
		#如果處理字串失敗
776
		if($processedStr["status"]=="false"){
777
 
778
			#設置錯誤識別
779
			$result["status"]="false";
780
 
781
			#設置錯誤訊息
782
			$result["error"]=$processedStr;
783
 
784
			#回傳結果
785
			return $result;
786
 
787
			}#if end
788
 
789
		#初始化 $result["phpNowViewed"] 為 ""
790
		$result["nowPosition"]="";
791
 
792
		#針對 $processedStr["dataCounts"] 的數字來合併目錄
793
		for($i=0;$i<$processedStr["dataCounts"]-1;$i++){
794
 
795
			#合併目錄
796
			$result["nowPosition"]=$result["nowPosition"].$processedStr["dataArray"][$i]."/";
797
 
798
			}#for end
799
 
800
		#記錄上一個瀏覽的目錄
57 liveuser 801
		#函式說明:
1 liveuser 802
		#將固定格式的字串分開,並回傳分開的結果。
803
		#回傳的參數:
804
		#$result["oriStr"],要分割的原始字串內容
805
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
806
		#$result["dataCounts"],爲總共分成幾段
57 liveuser 807
		#必填參數:
1 liveuser 808
		$conf["stringIn"]=$_SESSION["session"]["getPreAndNowPosition"]["prePlace"];#要處理的字串。
809
		$conf["spiltSymbol"]="/";#爲以哪個符號作爲分割
810
		$processedStr=stringProcess::spiltString($conf);
811
		unset($conf);
812
 
813
		#如果處理字串失敗
814
		if($processedStr["status"]=="false"){
815
 
816
			#設置錯誤識別
817
			$result["status"]="false";
818
 
819
			#設置錯誤訊息
820
			$result["error"]=$processedStr;
821
 
822
			#回傳結果
823
			return $result;
824
 
825
			}#if end
826
 
827
		#初始化 $result["prePosition"] 為 ""
828
		$result["prePosition"]="";
829
 
830
		#針對 $processedStr["dataCounts"] 的數字來合併目錄
831
		for($i=0;$i<$processedStr["dataCounts"]-1;$i++){
832
 
833
			#合併目錄
834
			$result["prePosition"]=$result["prePosition"].$processedStr["dataArray"][$i]."/";
835
 
836
			}#for end
837
 
838
		#記錄當前瀏覽的檔案名稱
839
		$result["phpNowViewed"]=basename($_SESSION["session"]["getPreAndNowPosition"]["nowPlace"]);
840
 
841
		#記錄上一筆瀏覽的檔案名稱
842
		$result["phpPreViewed"]=basename($_SESSION["session"]["getPreAndNowPosition"]["prePlace"]);
843
 
844
		#設置執行正常
845
		$result["status"]="true";
846
 
847
		#回傳結果
848
		return $result;
849
 
850
		}#function getPreAndNowPosition end
851
 
852
	/*
57 liveuser 853
	#函式說明:
1 liveuser 854
	#建立多個session變數
855
	#回傳結果:
856
	#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗.
857
	#$reuslt["function"],當前執行的函數.
858
	#$result["error"],錯誤訊息陣列.
859
	#必填參數:
860
	#$conf["sessionArrayName"],字串陣列,要建立的session陣列變數名稱,建議可採用name1.name2.name3的格式。
861
	$conf["sessionArrayName"]=array("");
862
	#$conf["sessionArrayValue"],字串陣列,session變數的內容要存放什麼呢?
863
	$conf["sessionArrayValue"]=array("");
864
	#可省略參數:
209 liveuser 865
	#無.
866
	#參考資料:
867
	#無.
57 liveuser 868
	#備註:
869
	#無.
1 liveuser 870
	*/
871
	public static function createMulti(&$conf){
872
 
873
		#初始化要回傳的變數
874
		$result=array();
875
 
876
		#設置當前執行的函式
877
		$result["function"]=__FUNCTION__;
878
 
879
		#如果 $conf 不為陣列
880
		if(gettype($conf)!="array"){
881
 
882
			#設置執行失敗
883
			$result["status"]="false";
884
 
885
			#設置執行錯誤訊息
886
			$result["error"][]="\$conf變數須為陣列形態";
887
 
888
			#如果傳入的參數為 null
889
			if($conf==null){
890
 
891
				#設置執行錯誤訊息
892
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
893
 
894
				}#if end
895
 
896
			#回傳結果
897
			return $result;
898
 
899
			}#if end
900
 
901
		#檢查參數
57 liveuser 902
		#函式說明:
1 liveuser 903
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
904
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
905
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
906
		#$result["function"],當前執行的函式名稱.
907
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
908
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
909
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
910
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
911
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
912
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
913
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
914
		#必填寫的參數:
915
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
916
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
917
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
918
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sessionArrayName","sessionArrayValue");
919
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
920
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
921
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
922
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
923
		#可以省略的參數:
924
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
925
		#$conf["canBeEmptyString"]="false";
926
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
927
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array();
928
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
929
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array();
930
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
931
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("");
932
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
933
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("sessionArrayName","sessionArrayValue");
934
		#參考資料來源:
935
		#array_keys=>http://php.net/manual/en/function.array-keys.php
936
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
937
		unset($conf["variableCheck::checkArguments"]);
938
 
939
		#如果檢查參數失敗
940
		if($checkArguments["status"]=="false"){
941
 
942
			#設置執行失敗
943
			$result["status"]="false";
944
 
945
			#設置執行錯誤訊息
946
			$result["error"]=$checkArguments;
947
 
948
			#回傳結果
949
			return $result;
950
 
951
			}#if end
952
 
953
		#檢查參數不通過
954
		if($checkArguments["passed"]=="false"){
955
 
956
			#設置執行失敗
957
			$result["status"]="false";
958
 
959
			#設置執行錯誤訊息
960
			$result["error"]=$checkArguments;
961
 
962
			#回傳結果
963
			return $result;
964
 
965
			}#if end
966
 
967
		#執行迴圈 count($conf["sessionArrayName"]) 次
968
		for($i=0;$i<count($conf["sessionArrayName"]);$i++){
969
 
57 liveuser 970
			#函式說明:
1 liveuser 971
			#建立session變數,並指派其內容
57 liveuser 972
			#回傳結果:
1 liveuser 973
			#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗。
974
			#$result["error"],錯誤訊息陣列
57 liveuser 975
			#必填參數:
1 liveuser 976
			$conf["session.create"]["sessionName"]=$conf["sessionArrayName"][$i];#要建立的session變數名稱,建議可採用name1.name2.name3的格式。
57 liveuser 977
			#可省略參數: 
1 liveuser 978
			$conf["session.create"]["sessionValue"]=$conf["sessionArrayValue"][$i];#session變數的內容要存放什麼呢? 
979
			$sessionCreateResult=session::create($conf["session.create"]);
980
			unset($conf["session.create"]);
981
 
982
			#如果 建立 session 變數失敗
983
			if($sessionCreateResult["status"]=="false"){
984
 
985
				#設置執行錯誤的識別
986
				$result["status"]="false";
987
 
988
				#設置執行失敗的錯誤訊息
989
				$result["error"]=$sessionCreateResult;
990
 
991
				#回傳結果
992
				return $result;
993
 
994
				}#if end
995
 
996
			}#for end
997
 
998
		#執行到這邊代表執行成功
999
		$result["status"]="true";
1000
 
1001
		#設置執行正常的識別
1002
		$result["status"]="true";
1003
 
1004
		#回傳結果
1005
		return $result;
1006
 
1007
		}#function createMulti end
1008
 
1009
	/*
1010
	#函式說明:
1011
	#接收post表單變數後另存成session變數 
1012
	#回傳結果:
1013
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1014
	#$result["errot"],錯誤訊息陣列.
1015
	#$result["function"],當前的函數名稱.
1016
	#必填參數:
1017
	#$conf["checkedVarName"],字串陣列,要接收的表單變數名稱陣列,如果有缺就代表不通過.
1018
	$conf["checkedVarName"]=array();
57 liveuser 1019
	#可省略參數:
1 liveuser 1020
	#$conf["limitPrePage"],字串陣列,為前一頁的名稱須為陣列元素之一,不滿足則代表不合法,因此要轉址。
1021
	#$conf["limitPrePage"]=array();
1022
	#$conf["transferLocation"],變數來的途徑不合法時要轉址到的地方,預設爲資安素養網"https://isafe.moe.edu.tw/
1023
	#$conf["transferLocation"]="";
1024
	#$conf["sessionArrayName"],字串陣列,各個表單變數要轉存成session變數時的key為何.
1025
	#$conf["sessionArrayName"]=array();
209 liveuser 1026
	#參考資料:
1027
	#無.
57 liveuser 1028
	#備註:
1029
	#無.
1 liveuser 1030
	*/
1031
	public static function formVarToSession(&$conf){
1032
 
1033
		#初始化要回傳的變數
1034
		$result=array();
1035
 
1036
		#設置當前執行的函式
1037
		$result["function"]=__FUNCTION__;
1038
 
1039
		#如果 $conf 不為陣列
1040
		if(gettype($conf)!="array"){
1041
 
1042
			#設置執行失敗
1043
			$result["status"]="false";
1044
 
1045
			#設置執行錯誤訊息
1046
			$result["error"][]="\$conf變數須為陣列形態";
1047
 
1048
			#如果傳入的參數為 null
1049
			if($conf==null){
1050
 
1051
				#設置執行錯誤訊息
1052
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1053
 
1054
				}#if end
1055
 
1056
			#回傳結果
1057
			return $result;
1058
 
1059
			}#if end
1060
 
1061
		#檢查參數
57 liveuser 1062
		#函式說明:
1 liveuser 1063
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1064
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1065
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1066
		#$result["function"],當前執行的函式名稱.
1067
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1068
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1069
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1070
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1071
		#必填寫的參數:
1072
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1073
		$conf["variableCheck.checkArguments"]["varInput"]=&$conf;
1074
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1075
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableName"]=array("checkedVarName");
1076
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1077
		$conf["variableCheck.checkArguments"]["mustBeFilledVariableType"]=array("array");
1078
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1079
		$conf["variableCheck.checkArguments"]["referenceVarKey"]="variableCheck.checkArguments";
1080
		#可以省略的參數:
1081
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"false"。
1082
		$conf["variableCheck.checkArguments"]["canBeEmptyString"]="false";
1083
		#$conf["variableCheck.checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1084
		$conf["variableCheck.checkArguments"]["skipableVariableName"]=array("limitPrePage","transferLocation","sessionArrayName");
1085
		#$conf["variableCheck.checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1086
		$conf["variableCheck.checkArguments"]["skipableVariableType"]=array("array","string","array");
1087
		#$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定.
1088
		$conf["variableCheck.checkArguments"]["skipableVarDefaultValue"]=array(null,null,"\$conf[\"checkedVarName\"]");
1089
		$checkResult=variableCheck::checkArguments($conf["variableCheck.checkArguments"]);
1090
		unset($conf["variableCheck.checkArguments"]);
1091
 
1092
		#如果檢查失敗
1093
		if($checkResult["status"]=="false"){
1094
 
1095
			#設置執行不正常
1096
			$result["status"]="false";
1097
 
1098
			#設置錯誤訊息
1099
			$result["error"]=$checkResult;
1100
 
1101
			#回傳結果
1102
			return $result;
1103
 
1104
			}#if end
1105
 
57 liveuser 1106
		#函式說明:
1 liveuser 1107
		#可以處理多個透過GET、POST而來的資訊,儲存成變數,同時限定傳送的方法、來源,來增加安全性,檢查有沒有皆收到必須要接收到的變數
57 liveuser 1108
		#回傳結果:
1 liveuser 1109
		#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗.
1110
		#$result["error"],錯誤訊息.
1111
		#$result["passed"],是否有皆收到全部該接收到的變數,若有設定$conf["checkedVarName"]的話,執行正常後會回傳該結果。
1112
		#$result["lostVarName"],沒有皆收到的變數名稱陣列
1113
		#$result["inputDataContent"],所接收的參數陣列.
1114
		#$result["inputDataContent"]["變數名稱"],所接收變數的內容.
1115
		#$result["inputDataCount"],總共接收到幾個元素.
57 liveuser 1116
		#必填參數:
1 liveuser 1117
		#$conf["method"],字串,傳送過來的資料是用"post/POST"還是"get/GET"?
1118
		$conf["form.responseMultiInputDataSecurityEnhance"]["method"]="post";
57 liveuser 1119
		#可省略參數:
1 liveuser 1120
		#$conf["allowGet"],字串,是否要允許 get 傳值,"true",代表允許;"false" ,代表不允許,預設爲不允許.
1121
		#$conf["allowGet"]="true";
1122
 
1123
		#如果有設定 $conf["limitPrePage"]
1124
		if(isset($conf["limitPrePage"])){
1125
 
1126
			#$conf["form.responseMultiInputDataSecurityEnhance"]["limitPrePage"],字串陣列,是否要限定前一頁的網址為哪些,才能接收內容,不符合則轉址.
1127
			$conf["form.responseMultiInputDataSecurityEnhance"]["limitPrePage"]=$conf["limitPrePage"];
1128
 
1129
			}#if end
1130
 
1131
		#如果 $conf["transferLocation"] 有設定
1132
		if(isset($conf["transferLocation"])){
1133
 
1134
			#$conf["form.responseMultiInputDataSecurityEnhance"]["transferLocation"],字串,遇到get傳值的時候要轉址到的頁面,預設爲資安素養網"https://isafe.moe.edu.tw/"
1135
			$conf["form.responseMultiInputDataSecurityEnhance"]["transferLocation"]=$conf["transferLocation"];
1136
 
1137
			}#if end
1138
 
1139
		#$conf["ignore"]=字串陣列,如果要接收的變數名稱與該陣列其一元素一樣,則不放進要回傳的變數裏面.
1140
		#$conf["ignore"]=array();
1141
		#$conf["correctCharacter"]=,字串,如果爲"false",則不處理可能導致網頁出問題的字串,預設爲要進行處理.
1142
		#$conf["correctCharacter"]="false";
1143
 
1144
		#如果 $conf["checkedVarName"] 有設定
1145
		if(isset($conf["checkedVarName"])){
1146
 
1147
			#$conf["form.responseMultiInputDataSecurityEnhance"]["checkedVarName"],字串陣列,為檢查是否有接收到哪些變數.
1148
			$conf["form.responseMultiInputDataSecurityEnhance"]["checkedVarName"]=$conf["checkedVarName"];
1149
 
1150
			}#if end
1151
 
1152
		#參考資料來源:
1153
		#foreach 的用法 -> http://php.net/manual/en/control-structures.foreach.php
1154
		#伺服器端的變數 -> http://php.net/manual/en/reserved.variables.server.php
1155
		#備註:
1156
		#表單變數的名稱若含有「.」,則會變成「-」。
1157
		$receivedVar=form::responseMultiInputDataSecurityEnhance($conf["form.responseMultiInputDataSecurityEnhance"]);
1158
		unset($conf["form.responseMultiInputDataSecurityEnhance"]);
1159
 
1160
		#如果接受變數失敗
1161
		if($receivedVar["status"]=="false"){
1162
 
1163
			#設置執行不正常
1164
			$result["status"]="false";
1165
 
1166
			#設置錯誤訊息
1167
			$result["error"]=$receivedVar;
1168
 
1169
			#回傳結果
1170
			return $result;
1171
 
1172
			}#if end
1173
 
1174
		#初始化轉好的session變數數值陣列
1175
		$sessionValueArray=array();	
1176
 
1177
		#建立要轉換成session變數的form變數數值陣列
1178
		foreach($conf["checkedVarName"] as $value){
1179
 
1180
			#取得要轉換成session變數的form變數數值內容
1181
			$sessionValueArray[]=$receivedVar["inputDataContent"][$value];
1182
 
1183
			}#foreach end	
1184
 
57 liveuser 1185
		#函式說明:
1 liveuser 1186
		#建立多個session變數
1187
		#回傳結果:
1188
		#$result["status"],執行狀態,"true"代表執行成功;"false"代表執行失敗.
1189
		#$reuslt["function"],當前執行的函數.
1190
		#$result["error"],錯誤訊息陣列.
1191
		#必填參數:
1192
		#$conf["session.createMulti"]["sessionArrayName"],字串陣列,要建立的session陣列變數名稱,建議可採用name1.name2.name3的格式。
1193
		$conf["session.createMulti"]["sessionArrayName"]=$conf["sessionArrayName"];
1194
		#$conf["session.createMulti"]["sessionArrayValue"],字串陣列,session變數的內容要存放什麼呢?
1195
		$conf["session.createMulti"]["sessionArrayValue"]=$sessionValueArray;
1196
		#可省略參數:
1197
		#無
1198
		$createSessionVarStatus=session::createMulti($conf["session.createMulti"]);
1199
		unset($conf["session.createMulti"]);			
1200
 
1201
		#如果建立session變數失敗
1202
		if($createSessionVarStatus["status"]=="false"){
1203
 
1204
			#設置執行不正常
1205
			$result["status"]="false";
1206
 
1207
			#設置錯誤訊息
1208
			$reuslt["error"]=$createSessionVarStatus;
1209
 
1210
			#回傳結果
1211
			return $result;
1212
 
1213
			}#if end
1214
 
1215
		#執行到這邊代表執行正常
1216
		$result["status"]="true";
1217
 
1218
		#回傳結果
1219
		return $result;
1220
 
1221
		}#function formVarToSession end
1222
 
1223
	/*
1224
	#函式說明:
1225
	#取得指定的session數值 
1226
	#回傳結果:
1227
	#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
1228
	#$result["error"],錯誤訊息.
1229
	#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
1230
	#$result["content"],session變數的內容
1231
	#$result["address"],session變數的位址,請用 $yourVar=&$result["address"] 來取得位址.
1232
	#$result["function"],當前執行的函數名稱.
1233
	#$result["argu"],使用的參數.
1234
	#必填參數:
1235
	#$conf["key"],字串陣列,session的key名稱與層級.
1236
	$conf["key"]=array();
57 liveuser 1237
	#可省略參數:
1238
	#無.
209 liveuser 1239
	#參考資料:
1240
	#無.
57 liveuser 1241
	#備註:
1242
	#無.
1 liveuser 1243
	*/
209 liveuser 1244
	public static function getVal(&$conf){
1 liveuser 1245
 
1246
		#初始化要回傳的結果
1247
		$result=array();
1248
 
1249
		#取得當前執行的函數名稱
1250
		$result["function"]=__FUNCTION__;
1251
 
1252
		#如果沒有參數
1253
		if(func_num_args()==0){
1254
 
1255
			#設置執行失敗
1256
			$result["status"]="false";
1257
 
1258
			#設置執行錯誤訊息
1259
			$result["error"]="函數".$result["function"]."需要參數";
1260
 
1261
			#回傳結果
1262
			return $result;
1263
 
1264
			}#if end
1265
 
1266
		#取得參數
1267
		$result["argu"]=$conf;
1268
 
1269
		#如果 $conf 不為陣列
1270
		if(gettype($conf)!=="array"){
1271
 
1272
			#設置執行失敗
1273
			$result["status"]="false";
1274
 
1275
			#設置執行錯誤訊息
1276
			$result["error"][]="\$conf變數須為陣列形態";
1277
 
1278
			#如果傳入的參數為 null
1279
			if($conf===null){
1280
 
1281
				#設置執行錯誤訊息
1282
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1283
 
1284
				}#if end
1285
 
1286
			#回傳結果
1287
			return $result;
1288
 
1289
			}#if end
1290
 
1291
		#檢查參數
57 liveuser 1292
		#函式說明:
1 liveuser 1293
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1294
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1295
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1296
		#$result["function"],當前執行的函式名稱.
1297
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1298
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1299
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1300
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1301
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1302
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1303
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1304
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1305
		#必填寫的參數:
1306
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1307
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1308
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1309
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("key");
1310
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1311
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
1312
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1313
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1314
		#可以省略的參數:
1315
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1316
		#$conf["canBeEmptyString"]="false";
1317
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1318
		#$conf["canNotBeEmpty"]=array();
1319
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1320
		#$conf["canBeEmpty"]=array();
1321
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1322
		#$conf["skipableVariableCanNotBeEmpty"]=array();
1323
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1324
		#$conf["skipableVariableName"]=array();
1325
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1326
		#$conf["skipableVariableType"]=array();
1327
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1328
		#$conf["skipableVarDefaultValue"]=array("");
1329
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1330
		#$conf["arrayCountEqualCheck"][]=array();
1331
		#參考資料來源:
1332
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1333
		#建議:
1334
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
1335
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1336
		unset($conf["variableCheck::checkArguments"]);
1337
 
1338
		#若檢查參數失敗
1339
		if($checkArguments["status"]==="false"){
1340
 
1341
			#設置執行失敗
1342
			$result["status"]="false";
1343
 
1344
			#設置執行錯誤訊息
1345
			$result["error"]=$checkArguments;
1346
 
1347
			#回傳結果
1348
			return $result;
1349
 
1350
			}#if end
1351
 
1352
		#若檢查參數不通過
1353
		if($checkArguments["passed"]==="false"){
1354
 
1355
			#設置執行失敗
1356
			$result["status"]="false";
1357
 
1358
			#設置執行錯誤訊息
1359
			$result["error"]=$checkArguments;
1360
 
1361
			#回傳結果
1362
			return $result;
1363
 
1364
			}#if end
1365
 
1366
		#取得session的副本
1367
		$session=$_SESSION;
1368
 
1369
		#儲存session的位址
1370
		$sessionAddress=&$_SESSION;
1371
 
1372
		#針對每個key
1373
		foreach($conf["key"] as $keyVal){
1374
 
1375
			#如果 key 為 $keyVal 的 session 變數不存在
1376
			if(!isset($session[$keyVal])){
1377
 
1378
				#設置執行正常 
1379
				$result["status"]="true";
1380
 
1381
				#設置未找到session變數
1382
				$result["founded"]="false";
1383
 
1384
				#取得 session 的位址
1385
				$result["address"]=&$sessionAddress;
1386
 
1387
				#回傳結果
1388
				return $result;
1389
 
1390
				}#if end
1391
 
1392
			#反之
1393
			else{
1394
 
1395
				#取得 session 該層的內容
1396
				$session=$session[$keyVal];
1397
 
1398
				#取得 session 的位址
1399
				$sessionAddress=&$sessionAddress[$keyVal];
1400
 
1401
				}#else end
1402
 
1403
			}#foreach end
1404
 
1405
		#設置執行正常
1406
		$result["status"]="true";
1407
 
1408
		#設置有找到 session 變數
1409
		$result["founded"]="true";
1410
 
1411
		#設置取得的session內容
1412
		$result["content"]=$session;
1413
 
1414
		#取得 session 的位址
1415
		$result["address"]=&$sessionAddress;
1416
 
1417
		#回傳結果
1418
		return $result;
1419
 
1420
		}#function getVal end
1421
 
1422
	/*
240 liveuser 1423
	#函式說明:
1 liveuser 1424
	#設置指定的session變數 
1425
	#回傳結果:
1426
	#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
1427
	#$result["error"],錯誤訊息.
1428
	#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
1429
	#$result["content"],session變數的內容
1430
	#$result["address"],session變數的位址,請用 $yourVar=&$result["address"] 來取得位址.
1431
	#$result["function"],當前執行的函數名稱.
1432
	#$result["argu"],使用的參數.
1433
	#必填參數:
1434
	#$conf["key"],字串陣列,session的key名稱與層級.
1435
	$conf["key"]=array();
1436
	#$conf["val"],任意型態,指定的session變數內容.
1437
	$conf["val"]=$var;
1438
	#可省略參數:
1439
	#$conf["storeAsNotRepeatArray"],字串,"true"代表要將變數內容存成陣列,預設為"false".
1440
	#$conf["storeAsNotRepeatArray"]="false";
1441
	#參考資料:
1442
	#http://php.net/manual/en/function.array-keys.php
1443
	#http://php.net/manual/en/function.end.php
57 liveuser 1444
	#備註:
1445
	#無.
1 liveuser 1446
	*/
209 liveuser 1447
	public static function setVal(&$conf){
1 liveuser 1448
 
1449
		#初始化要回傳的結果
1450
		$result=array();
1451
 
1452
		#取得當前執行的函數名稱
1453
		$result["function"]=__FUNCTION__;
1454
 
1455
		#如果沒有參數
1456
		if(func_num_args()==0){
1457
 
1458
			#設置執行失敗
1459
			$result["status"]="false";
1460
 
1461
			#設置執行錯誤訊息
1462
			$result["error"]="函數".$result["function"]."需要參數";
1463
 
1464
			#回傳結果
1465
			return $result;
1466
 
1467
			}#if end
1468
 
1469
		#取得參數
1470
		$result["argu"]=$conf;
1471
 
1472
		#如果 $conf 不為陣列
1473
		if(gettype($conf)!=="array"){
1474
 
1475
			#設置執行失敗
1476
			$result["status"]="false";
1477
 
1478
			#設置執行錯誤訊息
1479
			$result["error"][]="\$conf變數須為陣列形態";
1480
 
1481
			#如果傳入的參數為 null
1482
			if($conf===null){
1483
 
1484
				#設置執行錯誤訊息
1485
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1486
 
1487
				}#if end
1488
 
1489
			#回傳結果
1490
			return $result;
1491
 
1492
			}#if end
1493
 
1494
		#檢查參數
57 liveuser 1495
		#函式說明:
1 liveuser 1496
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1497
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1498
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1499
		#$result["function"],當前執行的函式名稱.
1500
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1501
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1502
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1503
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1504
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1505
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1506
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1507
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1508
		#必填寫的參數:
1509
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1510
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1511
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1512
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("key","val");
1513
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1514
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","any");
1515
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1516
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1517
		#可以省略的參數:
1518
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1519
		#$conf["canBeEmptyString"]="false";
1520
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1521
		#$conf["canNotBeEmpty"]=array();
1522
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1523
		#$conf["canBeEmpty"]=array();
1524
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1525
		#$conf["skipableVariableCanNotBeEmpty"]=array();
1526
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1527
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("storeAsNotRepeatArray");
1528
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1529
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1530
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1531
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
1532
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1533
		#$conf["arrayCountEqualCheck"][]=array();
1534
		#參考資料來源:
1535
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1536
		#建議:
1537
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
1538
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1539
		unset($conf["variableCheck::checkArguments"]);
1540
 
1541
		#若檢查參數失敗
1542
		if($checkArguments["status"]==="false"){
1543
 
1544
			#設置執行失敗
1545
			$result["status"]="false";
1546
 
1547
			#設置執行錯誤訊息
1548
			$result["error"]=$checkArguments;
1549
 
1550
			#回傳結果
1551
			return $result;
1552
 
1553
			}#if end
1554
 
1555
		#若檢查參數不通過
1556
		if($checkArguments["passed"]==="false"){
1557
 
1558
			#設置執行失敗
1559
			$result["status"]="false";
1560
 
1561
			#設置執行錯誤訊息
1562
			$result["error"]=$checkArguments;
1563
 
1564
			#回傳結果
1565
			return $result;
1566
 
1567
			}#if end
1568
 
1569
		#取得seesion變數的層級數目
1570
		$lastLayer=count($conf["key"]);
1571
 
1572
		#設置初始的層級
1573
		$layer=1;	
1574
 
1575
		#取得session變數的位址
1576
		$session=&$_SESSION;
1577
 
1578
		#數化要查詢的session key階層
1579
		$sa=array();	
1580
 
1581
		#針對session變數的每個層級
1582
		foreach($conf["key"] as $keyVal){
1583
 
1584
			#如果是最後一層
1585
			if($layer===$lastLayer){
1586
 
1587
				#如果要儲存成陣列
1588
				if($conf["storeAsNotRepeatArray"]==="true"){
1589
 
1590
					#如果目標變數有存在了
1591
					if(isset($session[$keyVal])){
1592
 
1593
						#如果不是陣列
1594
						if(gettype($session[$keyVal])!=="array"){
1595
 
1596
							#設置執行失敗
1597
							$result["status"]="false";
1598
 
1599
							#設置執行錯誤訊息
1600
							$result["error"]=$checkArguments;
1601
 
1602
							#設置錯誤訊息
1603
							$result["error"][]="變數內容不是陣列";
1604
 
1605
							#回傳結果
1606
							return $result;
1607
 
1608
							}#if end
1609
 
1610
						#如果是新的元素
1611
						if(!in_array($conf["val"],$session[$keyVal])){
1612
 
1613
							#新增元素
1614
							$session[$keyVal][]=$conf["val"];
1615
 
1616
							}#if end
1617
 
1618
						}#if end
1619
 
1620
					#反之
1621
					else{
1622
 
1623
						#新增元素
1624
						$session[$keyVal][]=$conf["val"];
1625
 
1626
						}#else end
1627
 
1628
					$keys=array_keys($session[$keyVal]);
1629
 
1630
					#get last key
1631
					$lastKey=end($keys);
1632
 
1633
					#取得當前參照的session階層位址
1634
					$session=&$session[$keyVal][$lastKey];	
1635
 
1636
					}#if end
1637
 
1638
				#反之直接儲存
1639
				else{
1640
 
1641
					#設置 session 變數的內容
1642
					$session[$keyVal]=$conf["val"];	
1643
 
1644
					#取得當前參照的session階層位址
1645
					$session=&$session[$keyVal];				
1646
 
1647
					}#else end
1648
 
1649
				#跳出迴圈
1650
				break;
1651
 
1652
				}#if end
1653
 
1654
			#設置要檢查的session key階層
1655
			$sa[]=$keyVal;
1656
 
1657
			#函式說明:
1658
			#取得指定的session數值 
1659
			#回傳結果:
1660
			#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
1661
			#$result["error"],錯誤訊息.
1662
			#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
1663
			#$result["content"],session變數的內容
1664
			#$result["address"],session變數的位址,請用 $yourVar=&$result["address"] 來取得位址.
1665
			#$result["function"],當前執行的函數名稱.
1666
			#$result["argu"],使用的參數.
1667
			#必填參數:
1668
			#$conf["key"],字串陣列,session的key名稱與層級.
1669
			$conf["session::getVal"]["key"]=$sa;
1670
			$getVal=session::getVal($conf["session::getVal"]);
1671
			unset($conf["session::getVal"]);	
1672
 
1673
			#如果取得 session key 的內容失敗
1674
			if($getVal["status"]==="false"){
1675
 
1676
				#設置執行失敗
1677
				$result["status"]="false";
1678
 
1679
				#設置執行錯誤訊息
1680
				$result["error"]=$getVal;
1681
 
1682
				#回傳結果
1683
				return $result;
1684
 
1685
				}#if end
1686
 
1687
			#如果 session 不存在
1688
			if($getVal["founded"]==="false"){
1689
 
1690
				#建立該 session 階層並設為空陣列
1691
				$getVal["address"][$keyVal]=array();
1692
 
1693
				#取得當前參照的session階層位址
1694
				$session=&$getVal["address"][$keyVal];				
1695
 
1696
				}#if end			
1697
 
1698
			#如果 session 存在	
1699
			else{
1700
 
1701
				#取得當前參照的session階層位址
1702
				$session=&$getVal["address"];
1703
 
1704
				}#else end	
1705
 
1706
			#層級加一
1707
			$layer++;
1708
 
1709
			}#foreach end
1710
 
1711
		#設置執行正常
1712
		$result["status"]="true";
1713
 
1714
		#設置session變數的位址
1715
		$result["address"]=&$session;
1716
 
1717
		#回傳節果
1718
		return $result;
1719
 
270 liveuser 1720
		}#function setVal end
1 liveuser 1721
 
1722
	/*
1723
	#函式說明:
1724
	#設置多個session變數的內容 
1725
	#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
1726
	#$result["error"],錯誤訊息.
1727
	#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
1728
	#$result["content"],每個設置好的session變數資訊
1729
	#$result["function"],當前執行的函數名稱.
1730
	#$result["argu"],使用的參數.
1731
	#必填參數:
1732
	#$conf["key"],二維陣列,每個session的key名稱與層級.
1733
	$conf["key"]=array(array());
1734
	#$conf["val"],陣列,每個指定的session變數內容.
1735
	$conf["val"]=array($var);
1736
	#可省略參數:
1737
	#$conf["storeAsNotRepeatArray"],字串,"true"代表要將變數內容存成陣列,預設為"false".
1738
	#$conf["storeAsNotRepeatArray"]="false";
209 liveuser 1739
	#參考資料:
1740
	#無.
57 liveuser 1741
	#備註:
1742
	#無.
1 liveuser 1743
	*/
209 liveuser 1744
	public static function setMultiVal(&$conf){
1 liveuser 1745
 
1746
		#初始化要回傳的結果
1747
		$result=array();
1748
 
1749
		#取得當前執行的函數名稱
1750
		$result["function"]=__FUNCTION__;
1751
 
1752
		#如果沒有參數
1753
		if(func_num_args()==0){
1754
 
1755
			#設置執行失敗
1756
			$result["status"]="false";
1757
 
1758
			#設置執行錯誤訊息
1759
			$result["error"]="函數".$result["function"]."需要參數";
1760
 
1761
			#回傳結果
1762
			return $result;
1763
 
1764
			}#if end
1765
 
1766
		#取得參數
1767
		$result["argu"]=$conf;
1768
 
1769
		#如果 $conf 不為陣列
1770
		if(gettype($conf)!=="array"){
1771
 
1772
			#設置執行失敗
1773
			$result["status"]="false";
1774
 
1775
			#設置執行錯誤訊息
1776
			$result["error"][]="\$conf變數須為陣列形態";
1777
 
1778
			#如果傳入的參數為 null
1779
			if($conf===null){
1780
 
1781
				#設置執行錯誤訊息
1782
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1783
 
1784
				}#if end
1785
 
1786
			#回傳結果
1787
			return $result;
1788
 
1789
			}#if end
1790
 
1791
		#檢查參數
57 liveuser 1792
		#函式說明:
1 liveuser 1793
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1794
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1795
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1796
		#$result["function"],當前執行的函式名稱.
1797
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1798
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1799
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1800
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1801
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1802
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1803
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1804
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1805
		#必填寫的參數:
1806
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1807
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1808
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1809
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("key","val");
1810
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1811
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array");
1812
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1813
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1814
		#可以省略的參數:
1815
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1816
		#$conf["canBeEmptyString"]="false";
1817
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1818
		#$conf["canNotBeEmpty"]=array();
1819
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1820
		#$conf["canBeEmpty"]=array();
1821
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1822
		#$conf["skipableVariableCanNotBeEmpty"]=array();
1823
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1824
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("storeAsNotRepeatArray");
1825
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1826
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1827
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1828
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
1829
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1830
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("key","val");
1831
		#參考資料來源:
1832
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1833
		#建議:
1834
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
1835
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1836
		unset($conf["variableCheck::checkArguments"]);
1837
 
1838
		#若檢查參數失敗
1839
		if($checkArguments["status"]==="false"){
1840
 
1841
			#設置執行失敗
1842
			$result["status"]="false";
1843
 
1844
			#設置執行錯誤訊息
1845
			$result["error"]=$checkArguments;
1846
 
1847
			#回傳結果
1848
			return $result;
1849
 
1850
			}#if end
1851
 
1852
		#若檢查參數不通過
1853
		if($checkArguments["passed"]==="false"){
1854
 
1855
			#設置執行失敗
1856
			$result["status"]="false";
1857
 
1858
			#設置執行錯誤訊息
1859
			$result["error"]=$checkArguments;
1860
 
1861
			#回傳結果
1862
			return $result;
1863
 
1864
			}#if end
1865
 
1866
		#針對每個 $conf["key"]
1867
		foreach($conf["key"] as $index=>$keyVal){
1868
 
1869
			#設置指定的session變數 
1870
			#回傳結果:
1871
			#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
1872
			#$result["error"],錯誤訊息.
1873
			#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
1874
			#$result["content"],session變數的內容
1875
			#$result["address"],session變數的位址,請用 $yourVar=&$result["address"] 來取得位址.
1876
			#$result["function"],當前執行的函數名稱.
1877
			#$result["argu"],使用的參數.
1878
			#必填參數:
1879
			#$conf["key"],字串陣列,session的key名稱與層級.
1880
			$conf["session::setVal"]["key"]=$keyVal;
1881
			#$conf["val"],任意型態,指定的session變數內容.
1882
			$conf["session::setVal"]["val"]=$conf["val"][$index];
1883
			#可省略參數:
1884
			#$conf["storeAsNotRepeatArray"],字串,"true"代表要將變數內容存成陣列,預設為"false".
1885
			$conf["session::setVal"]["storeAsNotRepeatArray"]=$conf["storeAsNotRepeatArray"];			
1886
			$setVal=session::setVal($conf["session::setVal"]);
1887
			unset($conf["session::setVal"]);
1888
 
1889
			#如果設置 session 變數失敗 
1890
			if($setVal["status"]==="false"){
1891
 
1892
				#設置執行失敗
1893
				$result["status"]="false";
1894
 
1895
				#設置執行錯誤訊息
1896
				$result["error"]=$setVal;
1897
 
1898
				#回傳結果
1899
				return $result;
1900
 
1901
				}#if end
1902
 
1903
			#取得設置好的結果
1904
			$result["content"][]=$setVal;
1905
 
1906
			}#foreach end
1907
 
1908
		#設置執行正常
1909
		$result["status"]="true";
1910
 
1911
		#回傳結果
1912
		return $result;
1913
 
270 liveuser 1914
		}#function setMutiVal end
1 liveuser 1915
 
1916
	}#session class end
1917
 
1918
?>