Subversion Repositories php-qbpwcf

Rev

Rev 207 | Rev 232 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 207 Rev 226
Line 1... Line 1...
1
<?php
1
<?php
2
 
2
 
3
/*
3
/*
4
 
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2015~2025 Min-Jhin,Chen
6
    Copyright (C) 2014~2025 MIN ZHI, CHEN
7
 
7
 
8
    This file is part of QBPWCF.
8
    This file is part of QBPWCF.
9
 
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
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
11
    it under the terms of the GNU General Public License as published by
Line 43... Line 43...
43
	#$arguments,陣列,為呼叫方法時所用的參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#參考資料:
44
	#參考資料:
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	*/
46
	*/
47
	public function __call($method,$arguments){
47
	public function __call($method,$arguments){
48
		
48
 
49
		#取得當前執行的函式
49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
50
		$result["function"]=__FUNCTION__;
51
		
51
 
52
		#設置執行不正常
52
		#設置執行不正常
53
		$result["status"]="false";
53
		$result["status"]="false";
54
		
54
 
55
		#設置執行錯誤
55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
57
		
57
 
58
		#設置所丟入的參數
58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
59
		$result["error"][]=$arguments;
60
		
60
 
61
		#回傳結果
61
		#回傳結果
62
		return $result;
62
		return $result;
63
		
63
 
64
		}#function __call end
64
		}#function __call end
65
		
65
 
66
	/*
66
	/*
67
	#函式說明:
67
	#函式說明:
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
69
	#回傳結果:
69
	#回傳結果:
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 75... Line 75...
75
	#$arguments,陣列,為呼叫方法時所用的參數.
75
	#$arguments,陣列,為呼叫方法時所用的參數.
76
	#參考資料:
76
	#參考資料:
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
78
	*/
78
	*/
79
	public static function __callStatic($method,$arguments){
79
	public static function __callStatic($method,$arguments){
80
		
80
 
81
		#取得當前執行的函式
81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
82
		$result["function"]=__FUNCTION__;
83
		
83
 
84
		#設置執行不正常
84
		#設置執行不正常
85
		$result["status"]="false";
85
		$result["status"]="false";
86
		
86
 
87
		#設置執行錯誤
87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
89
		
89
 
90
		#設置所丟入的參數
90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
91
		$result["error"][]=$arguments;
92
		
92
 
93
		#回傳結果
93
		#回傳結果
94
		return $result;
94
		return $result;
95
		
95
 
96
		}#function __callStatic end
96
		}#function __callStatic end
97
 
97
 
98
	/*
98
	/*
99
	#函式說明:
99
	#函式說明:
100
	#用來檢查 $_SESSION['password'] 是否存在以及其值是否正確
100
	#用來檢查 $_SESSION['password'] 是否存在以及其值是否正確
Line 109... Line 109...
109
	#無.
109
	#無.
110
	#參考資料:
110
	#參考資料:
111
	#無.
111
	#無.
112
	#備註:
112
	#備註:
113
	#無.
113
	#無.
114
	*/	
114
	*/
115
	public static function simpleAuthenticate(&$conf){
115
	public static function simpleAuthenticate(&$conf){
116
	
116
 
117
		#初始化要回傳的變數
117
		#初始化要回傳的變數
118
		$result=array();
118
		$result=array();
119
		
119
 
120
		#記錄當前執行的函數名稱
120
		#記錄當前執行的函數名稱
121
		$result["function"]=__FUNCTION__;
121
		$result["function"]=__FUNCTION__;
122
		
122
 
123
		#如果 $conf 不為陣列
123
		#如果 $conf 不為陣列
124
		if(gettype($conf)!="array"){
124
		if(gettype($conf)!="array"){
125
			
125
 
126
			#設置執行失敗
126
			#設置執行失敗
127
			$result["status"]="false";
127
			$result["status"]="false";
128
			
128
 
129
			#設置執行錯誤訊息
129
			#設置執行錯誤訊息
130
			$result["error"][]="\$conf變數須為陣列形態";
130
			$result["error"][]="\$conf變數須為陣列形態";
131
 
131
 
132
			#如果傳入的參數為 null
132
			#如果傳入的參數為 null
133
			if($conf==null){
133
			if($conf==null){
134
				
134
 
135
				#設置執行錯誤訊息
135
				#設置執行錯誤訊息
136
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
136
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
137
				
137
 
138
				}#if end
138
				}#if end
139
 
139
 
140
			#回傳結果
140
			#回傳結果
141
			return $result;
141
			return $result;
142
			
142
 
143
			}#if end
143
			}#if end
144
		
144
 
145
		#檢查參數
145
		#檢查參數
146
		#函式說明:
146
		#函式說明:
147
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
147
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
148
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
148
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
149
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
149
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 158... Line 158...
158
		#必填參數:
158
		#必填參數:
159
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
159
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
160
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
160
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
161
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
161
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
162
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("password");
162
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("password");
163
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
163
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
164
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
164
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
165
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
165
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
166
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
166
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
167
		#可以省略的參數:
167
		#可以省略的參數:
168
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
168
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
169
		#$conf["canBeEmptyString"]="false";
169
		#$conf["canBeEmptyString"]="false";
170
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
170
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
171
		#$conf["skipableVariableName"]=array();
171
		#$conf["skipableVariableName"]=array();
172
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
172
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
173
		#$conf["skipableVariableType"]=array();
173
		#$conf["skipableVariableType"]=array();
174
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
174
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
175
		#$conf["skipableVarDefaultValue"]=array("");
175
		#$conf["skipableVarDefaultValue"]=array("");
176
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
176
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
177
		#$conf["arrayCountEqualCheck"][]=array();
177
		#$conf["arrayCountEqualCheck"][]=array();
178
		#參考資料來源:
178
		#參考資料來源:
179
		#array_keys=>http://php.net/manual/en/function.array-keys.php
179
		#array_keys=>http://php.net/manual/en/function.array-keys.php
180
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
180
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
181
		unset($conf["variableCheck::checkArguments"]);
181
		unset($conf["variableCheck::checkArguments"]);
182
	
182
 
183
		#debug
183
		#debug
184
		#var_dump($checkResult);
184
		#var_dump($checkResult);
185
		#exit;
185
		#exit;
186
		
186
 
187
		#debug
187
		#debug
188
		#var_dump($result);
188
		#var_dump($result);
189
		#exit;
189
		#exit;
190
	
190
 
191
		#如果檢查失敗
191
		#如果檢查失敗
192
		if($checkResult["status"]=="false"){
192
		if($checkResult["status"]=="false"){
193
			
193
 
194
			#debug
194
			#debug
195
			#var_dump($result);
195
			#var_dump($result);
196
			#exit;
196
			#exit;
197
			
197
 
198
			#debug
198
			#debug
199
			#var_dump($checkResult);
199
			#var_dump($checkResult);
200
			#exit;
200
			#exit;
201
			
201
 
202
			#設置執行失敗
202
			#設置執行失敗
203
			$result["status"]="false";
203
			$result["status"]="false";
204
			
204
 
205
			#設置執行錯誤訊息
205
			#設置執行錯誤訊息
206
			$result["error"]=$checkResult;
206
			$result["error"]=$checkResult;
207
 
207
 
208
			#回傳結果
208
			#回傳結果
209
			return $result;
209
			return $result;
210
			
210
 
211
			}#if end
211
			}#if end
212
			
212
 
213
		#如果檢查不通過
213
		#如果檢查不通過
214
		if($checkResult["passed"]=="false"){
214
		if($checkResult["passed"]=="false"){
215
			
215
 
216
			#設置執行失敗
216
			#設置執行失敗
217
			$result["status"]="false";
217
			$result["status"]="false";
218
			
218
 
219
			#設置執行錯誤訊息
219
			#設置執行錯誤訊息
220
			$result["error"]=$checkResult;
220
			$result["error"]=$checkResult;
221
 
221
 
222
			#回傳結果
222
			#回傳結果
223
			return $result;
223
			return $result;
224
			
224
 
225
			}#if end
225
			}#if end
226
		
226
 
227
		#debug
227
		#debug
228
		#var_dump($result);
228
		#var_dump($result);
229
		#exit;
229
		#exit;
230
		
230
 
231
		#echo "entered";
231
		#echo "entered";
232
		
232
 
233
		#若沒有供驗證的變數,或其驗證內容爲""
233
		#若沒有供驗證的變數,或其驗證內容爲""
234
		if(!isset($_SESSION['password']) || $_SESSION['password']===""){
234
		if(!isset($_SESSION['password']) || $_SESSION['password']===""){
235
 
235
 
236
			#設置執行成功
236
			#設置執行成功
237
			$result["status"]="true";
237
			$result["status"]="true";
238
			
238
 
239
			#設置驗證不通過
239
			#設置驗證不通過
240
			$result["passed"]="false";
240
			$result["passed"]="false";
241
			
241
 
242
			#回傳結果
242
			#回傳結果
243
			return $result;
243
			return $result;
244
	
244
 
245
			}#if end
245
			}#if end
246
 
246
 
247
		#如果驗證碼不正確
247
		#如果驗證碼不正確
248
		if($_SESSION['password']!==$conf["password"]){
248
		if($_SESSION['password']!==$conf["password"]){
249
 
249
 
250
			#設置執行成功
250
			#設置執行成功
251
			$result["status"]="true";
251
			$result["status"]="true";
252
			
252
 
253
			#設置驗證不通過
253
			#設置驗證不通過
254
			$result["passed"]="false";
254
			$result["passed"]="false";
255
			
255
 
256
			#回傳結果
256
			#回傳結果
257
			return $result;
257
			return $result;
258
 
258
 
259
			}#if end
259
			}#if end
260
 
260
 
261
		#反之驗證成功
261
		#反之驗證成功
262
		else{
262
		else{
263
 
263
 
264
			#設置執行成功
264
			#設置執行成功
265
			$result["status"]="true";
265
			$result["status"]="true";
266
			
266
 
267
			#設置驗證通過
267
			#設置驗證通過
268
			$result["passed"]="true";
268
			$result["passed"]="true";
269
			
269
 
270
			#回傳結果
270
			#回傳結果
271
			return $result;
271
			return $result;
272
 
272
 
273
			}#else end
273
			}#else end
274
			
274
 
275
		#不應該執行到這邊
275
		#不應該執行到這邊
276
		#設置執行失敗
276
		#設置執行失敗
277
		$result["status"]="false";
277
		$result["status"]="false";
278
		
278
 
279
		#設置驗證不通過
279
		#設置驗證不通過
280
		$result["passed"]="false";
280
		$result["passed"]="false";
281
		
281
 
282
		#回傳結果
282
		#回傳結果
283
		return $result;
283
		return $result;
284
		
284
 
285
		}#函式結束
285
		}#函式結束
286
 
286
 
287
	/*
287
	/*
288
	#函式說明:
288
	#函式說明:
289
	#用來檢查 $_SESSION['password'] 是否存在以及其值是否正確,如果檢查不通過,則會轉址.
289
	#用來檢查 $_SESSION['password'] 是否存在以及其值是否正確,如果檢查不通過,則會轉址.
Line 298... Line 298...
298
	#無.
298
	#無.
299
	#參考資料:
299
	#參考資料:
300
	#無.
300
	#無.
301
	#備註:
301
	#備註:
302
	#無.
302
	#無.
303
	*/	
303
	*/
304
	public static function sessionAuthenticate(&$conf){
304
	public static function sessionAuthenticate(&$conf){
305
	
305
 
306
		#初始化要回傳的變數
306
		#初始化要回傳的變數
307
		$result=array();
307
		$result=array();
308
		
308
 
309
		#記錄當前執行的函數名稱
309
		#記錄當前執行的函數名稱
310
		$result["function"]=__FUNCTION__;
310
		$result["function"]=__FUNCTION__;
311
	
311
 
312
		#如果 $conf 不為陣列
312
		#如果 $conf 不為陣列
313
		if(gettype($conf)!="array"){
313
		if(gettype($conf)!="array"){
314
			
314
 
315
			#設置執行失敗
315
			#設置執行失敗
316
			$result["status"]="false";
316
			$result["status"]="false";
317
			
317
 
318
			#設置執行錯誤訊息
318
			#設置執行錯誤訊息
319
			$result["error"][]="\$conf變數須為陣列形態";
319
			$result["error"][]="\$conf變數須為陣列形態";
320
 
320
 
321
			#如果傳入的參數為 null
321
			#如果傳入的參數為 null
322
			if($conf==null){
322
			if($conf==null){
323
				
323
 
324
				#設置執行錯誤訊息
324
				#設置執行錯誤訊息
325
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
325
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
326
				
326
 
327
				}#if end
327
				}#if end
328
 
328
 
329
			#回傳結果
329
			#回傳結果
330
			return $result;
330
			return $result;
331
			
331
 
332
			}#if end
332
			}#if end
333
	
333
 
334
		#檢查參數
334
		#檢查參數
335
		#函式說明:
335
		#函式說明:
336
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
336
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
337
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
337
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
338
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
338
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 347... Line 347...
347
		#必填參數:
347
		#必填參數:
348
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
348
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
349
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
349
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
350
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
350
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
351
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("failLocation","password");
351
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("failLocation","password");
352
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
352
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
353
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
353
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
354
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
354
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
355
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
355
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
356
		#可以省略的參數:
356
		#可以省略的參數:
357
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
357
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
358
		#$conf["canBeEmptyString"]="false";
358
		#$conf["canBeEmptyString"]="false";
359
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
359
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
360
		#$conf["skipableVariableName"]=array();
360
		#$conf["skipableVariableName"]=array();
361
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
361
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
362
		#$conf["skipableVariableType"]=array();
362
		#$conf["skipableVariableType"]=array();
363
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
363
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
364
		#$conf["skipableVarDefaultValue"]=array("");
364
		#$conf["skipableVarDefaultValue"]=array("");
365
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
365
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
366
		#$conf["arrayCountEqualCheck"][]=array();
366
		#$conf["arrayCountEqualCheck"][]=array();
367
		#參考資料來源:
367
		#參考資料來源:
368
		#array_keys=>http://php.net/manual/en/function.array-keys.php
368
		#array_keys=>http://php.net/manual/en/function.array-keys.php
369
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
369
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
370
		unset($conf["variableCheck::checkArguments"]);
370
		unset($conf["variableCheck::checkArguments"]);
371
	
371
 
372
		#如果檢查失敗
372
		#如果檢查失敗
373
		if($checkResult["status"]=="false"){
373
		if($checkResult["status"]=="false"){
374
			
374
 
375
			#設置執行失敗
375
			#設置執行失敗
376
			$result["status"]="false";
376
			$result["status"]="false";
377
			
377
 
378
			#設置執行錯誤訊息
378
			#設置執行錯誤訊息
379
			$result["error"]=$checkResult;
379
			$result["error"]=$checkResult;
380
 
380
 
381
			#回傳結果
381
			#回傳結果
382
			return $result;
382
			return $result;
383
			
383
 
384
			}#if end
384
			}#if end
385
			
385
 
386
		#如果檢查不通過
386
		#如果檢查不通過
387
		if($checkResult["status"]=="false"){
387
		if($checkResult["status"]=="false"){
388
			
388
 
389
			#設置執行失敗
389
			#設置執行失敗
390
			$result["status"]="false";
390
			$result["status"]="false";
391
			
391
 
392
			#設置執行錯誤訊息
392
			#設置執行錯誤訊息
393
			$result["error"]=$checkResult;
393
			$result["error"]=$checkResult;
394
 
394
 
395
			#回傳結果
395
			#回傳結果
396
			return $result;
396
			return $result;
397
			
397
 
398
			}#if end
398
			}#if end
399
	
399
 
400
		#取得驗證碼驗證的回傳值
400
		#取得驗證碼驗證的回傳值
401
		#函式說明:
401
		#函式說明:
402
		#用來檢查 $_SESSION['password'] 是否存在以及其值是否正確
402
		#用來檢查 $_SESSION['password'] 是否存在以及其值是否正確
403
		#回傳結果:
403
		#回傳結果:
404
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
404
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
Line 410... Line 410...
410
		$simpleAuthenticate=authenticate::simpleAuthenticate($conf["authenticate::simpleAuthenticate"]);
410
		$simpleAuthenticate=authenticate::simpleAuthenticate($conf["authenticate::simpleAuthenticate"]);
411
		unset($conf["authenticate::simpleAuthenticate"]);
411
		unset($conf["authenticate::simpleAuthenticate"]);
412
 
412
 
413
		#如果執行驗證失敗
413
		#如果執行驗證失敗
414
		if($simpleAuthenticate["status"]=="false"){
414
		if($simpleAuthenticate["status"]=="false"){
415
			
415
 
416
			#設置執行失敗
416
			#設置執行失敗
417
			$result["status"]="false";
417
			$result["status"]="false";
418
			
418
 
419
			#設置錯誤訊息
419
			#設置錯誤訊息
420
			$result["error"]=$simpleAuthenticate;
420
			$result["error"]=$simpleAuthenticate;
421
			
421
 
422
			#回傳結果
422
			#回傳結果
423
			return $result;
423
			return $result;
424
			
424
 
425
			}#if end
425
			}#if end
426
 
426
 
427
		#如果驗證失敗
427
		#如果驗證失敗
428
		if($simpleAuthenticate["passed"]=="false"){
428
		if($simpleAuthenticate["passed"]=="false"){
429
			
429
 
430
			#進行轉址
430
			#進行轉址
431
			#函式說明:
431
			#函式說明:
432
			#設定session變數後,立即轉址.
432
			#設定session變數後,立即轉址.
433
			#回傳的結果:
433
			#回傳的結果:
434
			#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
434
			#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
Line 443... Line 443...
443
			#$conf["sessionValue"]=array("");
443
			#$conf["sessionValue"]=array("");
444
			#參靠資料來源:
444
			#參靠資料來源:
445
			#http://php.net/manual/en/reserved.variables.server.php
445
			#http://php.net/manual/en/reserved.variables.server.php
446
			$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);
446
			$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);
447
			unset($conf["header::redirectionNow"]);
447
			unset($conf["header::redirectionNow"]);
448
			
448
 
449
			#如果轉址失敗
449
			#如果轉址失敗
450
			if($redirectionNow["status"]=="false"){
450
			if($redirectionNow["status"]=="false"){
451
				
451
 
452
				#設置執行失敗
452
				#設置執行失敗
453
				$result["status"]="false";
453
				$result["status"]="false";
454
					
454
 
455
				#設置錯誤訊息
455
				#設置錯誤訊息
456
				$result["error"]=$redirectionNow;
456
				$result["error"]=$redirectionNow;
457
				
457
 
458
				#回傳結果
458
				#回傳結果
459
				return $result;
459
				return $result;
460
				
460
 
461
				}#if end
461
				}#if end
462
 
462
 
463
			}#if end
463
			}#if end
464
			
464
 
465
		#執行到這邊代表正常
465
		#執行到這邊代表正常
466
		#設置執行正常
466
		#設置執行正常
467
		$result["status"]="true";
467
		$result["status"]="true";
468
		
468
 
469
		#回傳結果
469
		#回傳結果
470
		return $result;
470
		return $result;
471
 
471
 
472
		}#函式結束
472
		}#函式結束
473
 
473
 
Line 491... Line 491...
491
	#無.
491
	#無.
492
	#備註:
492
	#備註:
493
	#無.
493
	#無.
494
	*/
494
	*/
495
	public static function validateSession(&$conf){
495
	public static function validateSession(&$conf){
496
	
496
 
497
		#初始化要回傳的變數
497
		#初始化要回傳的變數
498
		$result=array();
498
		$result=array();
499
		
499
 
500
		#記錄當前執行的函數名稱
500
		#記錄當前執行的函數名稱
501
		$result["function"]=__FUNCTION__;
501
		$result["function"]=__FUNCTION__;
502
	
502
 
503
		#如果 $conf 不為陣列
503
		#如果 $conf 不為陣列
504
		if(gettype($conf)!="array"){
504
		if(gettype($conf)!="array"){
505
			
505
 
506
			#設置執行失敗
506
			#設置執行失敗
507
			$result["status"]="false";
507
			$result["status"]="false";
508
			
508
 
509
			#設置執行錯誤訊息
509
			#設置執行錯誤訊息
510
			$result["error"][]="\$conf變數須為陣列形態";
510
			$result["error"][]="\$conf變數須為陣列形態";
511
 
511
 
512
			#如果傳入的參數為 null
512
			#如果傳入的參數為 null
513
			if($conf==null){
513
			if($conf==null){
514
				
514
 
515
				#設置執行錯誤訊息
515
				#設置執行錯誤訊息
516
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
516
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
517
				
517
 
518
				}#if end
518
				}#if end
519
 
519
 
520
			#回傳結果
520
			#回傳結果
521
			return $result;
521
			return $result;
522
			
522
 
523
			}#if end
523
			}#if end
524
	
524
 
525
		#檢查參數
525
		#檢查參數
526
		#函式說明:
526
		#函式說明:
527
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
527
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
528
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
528
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
529
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
529
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 538... Line 538...
538
		#必填參數:
538
		#必填參數:
539
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
539
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
540
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
540
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
541
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
541
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
542
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("key","content","failLocation");
542
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("key","content","failLocation");
543
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
543
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
544
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");
544
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");
545
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
545
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
546
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
546
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
547
		#可以省略的參數:
547
		#可以省略的參數:
548
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
548
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
549
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
549
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
550
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
550
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
551
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("unsetSess");
551
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("unsetSess");
552
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
552
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
553
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
553
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
554
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
554
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
555
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
555
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
556
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
556
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
557
		#$conf["arrayCountEqualCheck"][]=array();
557
		#$conf["arrayCountEqualCheck"][]=array();
558
		#參考資料來源:
558
		#參考資料來源:
559
		#array_keys=>http://php.net/manual/en/function.array-keys.php
559
		#array_keys=>http://php.net/manual/en/function.array-keys.php
560
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
560
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
561
		unset($conf["variableCheck::checkArguments"]);
561
		unset($conf["variableCheck::checkArguments"]);
562
	
562
 
563
		#如果檢查失敗
563
		#如果檢查失敗
564
		if($checkResult["status"]==="false"){
564
		if($checkResult["status"]==="false"){
565
			
565
 
566
			#設置執行失敗
566
			#設置執行失敗
567
			$result["status"]="false";
567
			$result["status"]="false";
568
			
568
 
569
			#設置執行錯誤訊息
569
			#設置執行錯誤訊息
570
			$result["error"]=$checkResult;
570
			$result["error"]=$checkResult;
571
 
571
 
572
			#回傳結果
572
			#回傳結果
573
			return $result;
573
			return $result;
574
			
574
 
575
			}#if end
575
			}#if end
576
			
576
 
577
		#如果檢查不通過
577
		#如果檢查不通過
578
		if($checkResult["passed"]==="false"){
578
		if($checkResult["passed"]==="false"){
579
			
579
 
580
			#設置執行失敗
580
			#設置執行失敗
581
			$result["status"]="false";
581
			$result["status"]="false";
582
			
582
 
583
			#設置執行錯誤訊息
583
			#設置執行錯誤訊息
584
			$result["error"]=$checkResult;
584
			$result["error"]=$checkResult;
585
 
585
 
586
			#回傳結果
586
			#回傳結果
587
			return $result;
587
			return $result;
588
			
588
 
589
			}#if end
589
			}#if end
590
			
590
 
591
		#函式說明:
591
		#函式說明:
592
		#取得指定的session數值 
592
		#取得指定的session數值
593
		#回傳結果:
593
		#回傳結果:
594
		#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
594
		#$result["status"],執行是否正常,"true"代表正常,"false"代表有誤.
595
		#$result["error"],錯誤訊息.
595
		#$result["error"],錯誤訊息.
596
		#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
596
		#$result["founded"],是否有該session變數,"true"代表有,"false"代表沒有.
597
		#$result["content"],session變數的內容
597
		#$result["content"],session變數的內容
Line 608... Line 608...
608
		#無.
608
		#無.
609
		#備註:
609
		#備註:
610
		#無.
610
		#無.
611
		$getVal=session::getVal($conf["session::getVal"]);
611
		$getVal=session::getVal($conf["session::getVal"]);
612
		unset($conf["session::getVal"]);
612
		unset($conf["session::getVal"]);
613
	
613
 
614
		#如果執行異常
614
		#如果執行異常
615
		if($getVal["status"]=="false"){
615
		if($getVal["status"]=="false"){
616
			
616
 
617
			#設置執行失敗
617
			#設置執行失敗
618
			$result["status"]="false";
618
			$result["status"]="false";
619
			
619
 
620
			#設置執行錯誤訊息
620
			#設置執行錯誤訊息
621
			$result["error"]=$getVal;
621
			$result["error"]=$getVal;
622
 
622
 
623
			#回傳結果
623
			#回傳結果
624
			return $result;
624
			return $result;
625
			
625
 
626
			}#if end
626
			}#if end
627
			
627
 
628
		#如果指定的session變數不存在 或 session 內容不一樣
628
		#如果指定的session變數不存在 或 session 內容不一樣
629
		if($getVal["founded"]==="false" || $getVal["content"]!==$conf["content"]){
629
		if($getVal["founded"]==="false" || $getVal["content"]!==$conf["content"]){
630
			
630
 
631
			#函式說明:
631
			#函式說明:
632
			#設定session變數後,立即轉址.
632
			#設定session變數後,立即轉址.
633
			#回傳的結果:
633
			#回傳的結果:
634
			#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
634
			#$result["status"],執行是否成功,"true"代表成功,"false"代表不成功.
635
			#$result["function"],當前執行的函數名稱.
635
			#$result["function"],當前執行的函數名稱.
Line 646... Line 646...
646
			#http://php.net/manual/en/reserved.variables.server.php
646
			#http://php.net/manual/en/reserved.variables.server.php
647
			#備註:
647
			#備註:
648
			#無.
648
			#無.
649
			$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);
649
			$redirectionNow=header::redirectionNow($conf["header::redirectionNow"]);
650
			unset($conf["header::redirectionNow"]);
650
			unset($conf["header::redirectionNow"]);
651
			
651
 
652
			#如果執行異常
652
			#如果執行異常
653
			if($redirectionNow["status"]=="false"){
653
			if($redirectionNow["status"]=="false"){
654
				
654
 
655
				#設置執行失敗
655
				#設置執行失敗
656
				$result["status"]="false";
656
				$result["status"]="false";
657
				
657
 
658
				#設置執行錯誤訊息
658
				#設置執行錯誤訊息
659
				$result["error"]=$redirectionNow;
659
				$result["error"]=$redirectionNow;
660
 
660
 
661
				#回傳結果
661
				#回傳結果
662
				return $result;
662
				return $result;
663
				
663
 
664
				}#if end
664
				}#if end
665
			
665
 
666
			}#if end
666
			}#if end
667
		
667
 
668
		}#function validateSession end
668
		}#function validateSession end
669
 
669
 
670
	/*
670
	/*
671
	#函式說明:
671
	#函式說明:
672
	#檢查session裏面的使用者$_SESSION["account"]是否在會員清單裏面,與該會員所屬的羣組是否具有權限瀏覽該子功能頁面.
672
	#檢查session裏面的使用者$_SESSION["account"]是否在會員清單裏面,與該會員所屬的羣組是否具有權限瀏覽該子功能頁面.
Line 693... Line 693...
693
	*/
693
	*/
694
	public static function checkUserGroupAuthorities($conf){
694
	public static function checkUserGroupAuthorities($conf){
695
 
695
 
696
		#初始化要回傳的結果
696
		#初始化要回傳的結果
697
		$result=array();
697
		$result=array();
698
		
698
 
699
		#初始化儲存要回傳的警告訊息
699
		#初始化儲存要回傳的警告訊息
700
		$result["warning"]=array();
700
		$result["warning"]=array();
701
		
701
 
702
		#記錄當前執行的涵式名稱
702
		#記錄當前執行的涵式名稱
703
		$result["function"]=__FUNCTION__;
703
		$result["function"]=__FUNCTION__;
704
		
704
 
705
		#如果 $conf 不為陣列
705
		#如果 $conf 不為陣列
706
		if(gettype($conf)!="array"){
706
		if(gettype($conf)!="array"){
707
			
707
 
708
			#設置執行失敗
708
			#設置執行失敗
709
			$result["status"]="false";
709
			$result["status"]="false";
710
			
710
 
711
			#設置執行錯誤訊息
711
			#設置執行錯誤訊息
712
			$result["error"][]="\$conf變數須為陣列形態";
712
			$result["error"][]="\$conf變數須為陣列形態";
713
 
713
 
714
			#如果傳入的參數為 null
714
			#如果傳入的參數為 null
715
			if($conf==null){
715
			if($conf==null){
716
				
716
 
717
				#設置執行錯誤訊息
717
				#設置執行錯誤訊息
718
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
718
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
719
				
719
 
720
				}#if end
720
				}#if end
721
 
721
 
722
			#回傳結果
722
			#回傳結果
723
			return $result;
723
			return $result;
724
			
724
 
725
			}#if end
725
			}#if end
726
		
726
 
727
		#檢查參數
727
		#檢查參數
728
		#函式說明:
728
		#函式說明:
729
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
729
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
730
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
730
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
731
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
731
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 740... Line 740...
740
		#必填參數:
740
		#必填參數:
741
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
741
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
742
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
742
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
743
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
743
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
744
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("thisSubSystemName","dbName","dbPassword");
744
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("thisSubSystemName","dbName","dbPassword");
745
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
745
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
746
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
746
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
747
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
747
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
748
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
748
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
749
		#可以省略的參數:
749
		#可以省略的參數:
750
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
750
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
751
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
751
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
752
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
752
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
753
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbAddress","dbAccount","dtName.member","dtName.userGroup");
753
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dbAddress","dbAccount","dtName.member","dtName.userGroup");
754
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
754
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
755
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string");
755
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string");
756
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
756
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
757
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("localhost","root","member","userGroupAuthorities");
757
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("localhost","root","member","userGroupAuthorities");
758
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
758
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
759
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
759
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
760
		#參考資料來源:
760
		#參考資料來源:
761
		#array_keys=>http://php.net/manual/en/function.array-keys.php
761
		#array_keys=>http://php.net/manual/en/function.array-keys.php
762
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
762
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
763
		unset($conf["variableCheck::checkArguments"]);
763
		unset($conf["variableCheck::checkArguments"]);
764
		
764
 
765
		#如果 $checkResult["status"]=="false"
765
		#如果 $checkResult["status"]=="false"
766
		if($checkResult["status"]=="false"){
766
		if($checkResult["status"]=="false"){
767
			
767
 
768
			#設置執行不正常的適別
768
			#設置執行不正常的適別
769
			$result["status"]="false";
769
			$result["status"]="false";
770
			
770
 
771
			#設置執行錯誤的訊息
771
			#設置執行錯誤的訊息
772
			$result["error"]=$checkResult;
772
			$result["error"]=$checkResult;
773
			
773
 
774
			#回傳結果
774
			#回傳結果
775
			return $result;
775
			return $result;
776
			
776
 
777
			}#if end
777
			}#if end
778
 
778
 
779
		#如果 $checkResult["passed"] 等於 "false"
779
		#如果 $checkResult["passed"] 等於 "false"
780
		if($checkResult["passed"]=="false"){
780
		if($checkResult["passed"]=="false"){
781
			
781
 
782
			#設置執行不正常的適別
782
			#設置執行不正常的適別
783
			$result["status"]="false";
783
			$result["status"]="false";
784
			
784
 
785
			#設置執行錯誤的訊息
785
			#設置執行錯誤的訊息
786
			$result["error"]=$checkResult;
786
			$result["error"]=$checkResult;
787
			
787
 
788
			#回傳結果
788
			#回傳結果
789
			return $result;
789
			return $result;
790
			
790
 
791
			}#if end
791
			}#if end
792
		
792
 
793
		#檢查是否有session["username"],如果不存在
793
		#檢查是否有session["username"],如果不存在
794
		if(!isset($_SESSION["username"])){
794
		if(!isset($_SESSION["username"])){
795
 
795
 
796
			#設置執行正常的適別
796
			#設置執行正常的適別
797
			$result["status"]="true";
797
			$result["status"]="true";
798
			
798
 
799
			#設置檢查不通過
799
			#設置檢查不通過
800
			$result["passed"]="false";
800
			$result["passed"]="false";
801
			
801
 
802
			#設置警告訊息
802
			#設置警告訊息
803
			$result["warning"][]="使用者名稱變數不存在";
803
			$result["warning"][]="使用者名稱變數不存在";
804
			
804
 
805
			#回傳結果
805
			#回傳結果
806
			return $result;
806
			return $result;
807
 
807
 
808
			}#if end
808
			}#if end
809
 
809
 
810
		#檢查$_SESSION["username"]所屬的羣組爲何
810
		#檢查$_SESSION["username"]所屬的羣組爲何
811
		
811
 
812
		#函式說明:
812
		#函式說明:
813
		#一次取得資料庫、表的資料
813
		#一次取得資料庫、表的資料
814
		#回傳的結果
814
		#回傳的結果
815
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
815
		#$result["status"],執行結果"true"為成功;"false"為執行失敗。
816
		#$result["error"],錯誤訊息陣列。
816
		#$result["error"],錯誤訊息陣列。
Line 841... Line 841...
841
		$memberData=db::fastGetDbData($conf["db"]["fastGetDbData"]);
841
		$memberData=db::fastGetDbData($conf["db"]["fastGetDbData"]);
842
		unset($conf["db"]["fastGetDbData"]);
842
		unset($conf["db"]["fastGetDbData"]);
843
 
843
 
844
		#如果 $memberData["status"] 等於 "false"
844
		#如果 $memberData["status"] 等於 "false"
845
		if($memberData["status"]=="false"){
845
		if($memberData["status"]=="false"){
846
			
846
 
847
			#設置執行不正常的適別
847
			#設置執行不正常的適別
848
			$result["status"]="false";
848
			$result["status"]="false";
849
			
849
 
850
			#設置執行錯誤的訊息
850
			#設置執行錯誤的訊息
851
			$result["error"]=$memberData;
851
			$result["error"]=$memberData;
852
			
852
 
853
			#回傳結果
853
			#回傳結果
854
			return $result;
854
			return $result;
855
			
855
 
856
			}#if end
856
			}#if end
857
 
857
 
858
		#如果 $memberData["dataCount"] 等於 0
858
		#如果 $memberData["dataCount"] 等於 0
859
		if($memberData["dataCount"]==0){
859
		if($memberData["dataCount"]==0){
860
			
860
 
861
			#代表沒有符合的帳戶
861
			#代表沒有符合的帳戶
862
			$result["status"]="true";
862
			$result["status"]="true";
863
			
863
 
864
			#設置警告訊息
864
			#設置警告訊息
865
			$result["warning"][]="使用者沒有歸屬於任何群組";
865
			$result["warning"][]="使用者沒有歸屬於任何群組";
866
			
866
 
867
			#紀錄查詢用的sql
867
			#紀錄查詢用的sql
868
			$result["sql"]=$memberData["sql"];
868
			$result["sql"]=$memberData["sql"];
869
			
869
 
870
			#設置檢查不通過
870
			#設置檢查不通過
871
			$result["passed"]="false";
871
			$result["passed"]="false";
872
			
872
 
873
			#回傳結果
873
			#回傳結果
874
			return $result;
874
			return $result;
875
									
875
 
876
			}#if end
876
			}#if end
877
 
877
 
878
		#取得目前該使用者所屬的羣組
878
		#取得目前該使用者所屬的羣組
879
		$userGroup=$memberData["dataContent"]["groupName"][0];#符合資料的會員群組名稱。
879
		$userGroup=$memberData["dataContent"]["groupName"][0];#符合資料的會員群組名稱。
880
 
880
 
881
		#檢查該群組能否瀏覽目標子系統
881
		#檢查該群組能否瀏覽目標子系統
882
		#函式說明:
882
		#函式說明:
883
		#檢查資料庫裏的資料表有無指定條件的資料
883
		#檢查資料庫裏的資料表有無指定條件的資料
884
		#回傳的結果:
884
		#回傳的結果:
885
		#$result["status"],執行是否成功,成功為"true",失敗為"false"。
885
		#$result["status"],執行是否成功,成功為"true",失敗為"false"。
886
		#$result["error"],錯誤訊息	
886
		#$result["error"],錯誤訊息
887
		#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.		
887
		#$result["founded"],是否找到資料,"true"代表有符合的資料;"false"代表沒有符合的資料.
888
		#必填參數:
888
		#必填參數:
889
		$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
889
		$conf["db"]["checkDataExists"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
890
		$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
890
		$conf["db"]["checkDataExists"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
891
		$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱
891
		$conf["db"]["checkDataExists"]["selectedDataBaseName"]=$conf["dbName"];#爲指定的資料庫名稱,欲選擇的資料庫名稱
892
		$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["dtName.userGroup"];#欲選擇的資料表名稱
892
		$conf["db"]["checkDataExists"]["selectedDataTableName"]=$conf["dtName.userGroup"];#欲選擇的資料表名稱
Line 894... Line 894...
894
		$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
894
		$conf["db"]["checkDataExists"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
895
		$conf["db"]["checkDataExists"]["conditionTargetName"]=array("groupName","visitableSubSystem");#用來判斷的資料表數值名稱,需爲陣列,可省略
895
		$conf["db"]["checkDataExists"]["conditionTargetName"]=array("groupName","visitableSubSystem");#用來判斷的資料表數值名稱,需爲陣列,可省略
896
		$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($userGroup,$conf["thisSubSystemName"]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略
896
		$conf["db"]["checkDataExists"]["conditionTargetValue"]=array($userGroup,$conf["thisSubSystemName"]);#用來判斷的資料表數值名稱若等於該數值,表示條件成立,需爲陣列,可省略
897
		$checkDataExistResult=db::checkDataExists($conf["db"]["checkDataExists"]);
897
		$checkDataExistResult=db::checkDataExists($conf["db"]["checkDataExists"]);
898
		unset($conf["db"]["checkDataExists"]);
898
		unset($conf["db"]["checkDataExists"]);
899
		
899
 
900
		#var_dump($checkDataExistResult);
900
		#var_dump($checkDataExistResult);
901
		
901
 
902
		#如果 $checkDataExistResult["status"] 等於 "false"
902
		#如果 $checkDataExistResult["status"] 等於 "false"
903
		if($checkDataExistResult["status"]=="false"){
903
		if($checkDataExistResult["status"]=="false"){
904
			
904
 
905
			#代表操作失敗
905
			#代表操作失敗
906
			$result["status"]="false";
906
			$result["status"]="false";
907
			
907
 
908
			#設置警告訊息
908
			#設置警告訊息
909
			$result["error"]=$checkDataExistResult;
909
			$result["error"]=$checkDataExistResult;
910
			
910
 
911
			#回傳結果
911
			#回傳結果
912
			return $result;
912
			return $result;
913
			
913
 
914
			}#if end
914
			}#if end
915
		
915
 
916
		#反之代表執行成功
916
		#反之代表執行成功
917
		else{
917
		else{
918
		
918
 
919
			#如果 $checkDataExistResult["founded"] 等於 "true"
919
			#如果 $checkDataExistResult["founded"] 等於 "true"
920
			if($checkDataExistResult["founded"]=="true"){
920
			if($checkDataExistResult["founded"]=="true"){
921
				
921
 
922
				#代表有相符合的資料
922
				#代表有相符合的資料
923
					
923
 
924
				#設置符合權限
924
				#設置符合權限
925
				$result["passed"]="true";
925
				$result["passed"]="true";
926
				
926
 
927
				#設置執行正常
927
				#設置執行正常
928
				$result["status"]="true";
928
				$result["status"]="true";
929
				
929
 
930
				#回傳結果
930
				#回傳結果
931
				return $result;
931
				return $result;
932
				
932
 
933
				}#if end
933
				}#if end
934
			
934
 
935
			#反之代表沒有找到相符的資料,不符合權限.	
935
			#反之代表沒有找到相符的資料,不符合權限.
936
			else{
936
			else{
937
				
937
 
938
				#設置符合權限
938
				#設置符合權限
939
				$result["passed"]="false";
939
				$result["passed"]="false";
940
						
940
 
941
				#設置執行正常
941
				#設置執行正常
942
				$result["status"]="true";	
942
				$result["status"]="true";
943
				
943
 
944
				#設置警告訊息
944
				#設置警告訊息
945
				$result["warning"][]="使用者所屬的群組沒有權限使用該子系統";	
945
				$result["warning"][]="使用者所屬的群組沒有權限使用該子系統";
946
									
946
 
947
				#回傳結果
947
				#回傳結果
948
				return $result;					
948
				return $result;
949
									
949
 
950
				}#else end
950
				}#else end
951
				
951
 
952
			}#else end
952
			}#else end
953
			
953
 
954
		#執行到這邊代表執行不正常
954
		#執行到這邊代表執行不正常
955
		$result["status"]="false";
955
		$result["status"]="false";
956
			
956
 
957
		#設置錯誤訊息
957
		#設置錯誤訊息
958
		$result["error"][]="不應該執行到的位置";	
958
		$result["error"][]="不應該執行到的位置";
959
			
959
 
960
		#回傳結果
960
		#回傳結果
961
		return $result;
961
		return $result;
962
			
962
 
963
		}#函式結束
963
		}#函式結束
964
		
964
 
965
	/*
965
	/*
966
	#函式說明:
966
	#函式說明:
967
	#建立以圖片(PNG格式)呈現的驗證碼.
967
	#建立以圖片(PNG格式)呈現的驗證碼.
968
	#回傳的解果:
968
	#回傳的解果:
969
	#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
969
	#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
Line 995... Line 995...
995
	*/
995
	*/
996
	public static function validationCode(&$conf){
996
	public static function validationCode(&$conf){
997
 
997
 
998
		#初始化要回傳的結果
998
		#初始化要回傳的結果
999
		$result=array();
999
		$result=array();
1000
		
1000
 
1001
		#取得當前執行的函數
1001
		#取得當前執行的函數
1002
		$result["function"]=__FUNCTION__;
1002
		$result["function"]=__FUNCTION__;
1003
 
1003
 
1004
		#如果 $conf 不為陣列
1004
		#如果 $conf 不為陣列
1005
		if(gettype($conf)!="array"){
1005
		if(gettype($conf)!="array"){
1006
			
1006
 
1007
			#設置執行失敗
1007
			#設置執行失敗
1008
			$result["status"]="false";
1008
			$result["status"]="false";
1009
			
1009
 
1010
			#設置執行錯誤訊息
1010
			#設置執行錯誤訊息
1011
			$result["error"][]="\$conf變數須為陣列形態";
1011
			$result["error"][]="\$conf變數須為陣列形態";
1012
 
1012
 
1013
			#如果傳入的參數為 null
1013
			#如果傳入的參數為 null
1014
			if($conf==null){
1014
			if($conf==null){
1015
				
1015
 
1016
				#設置執行錯誤訊息
1016
				#設置執行錯誤訊息
1017
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1017
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1018
				
1018
 
1019
				}#if end
1019
				}#if end
1020
 
1020
 
1021
			#回傳結果
1021
			#回傳結果
1022
			return $result;
1022
			return $result;
1023
			
1023
 
1024
			}#if end
1024
			}#if end
1025
 
1025
 
1026
		#檢查參數
1026
		#檢查參數
1027
		#函式說明:
1027
		#函式說明:
1028
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1028
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
Line 1036... Line 1036...
1036
		#必填參數:
1036
		#必填參數:
1037
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1037
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1038
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1038
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1039
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1039
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1040
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("imgAddressAndName","fileArgu");
1040
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("imgAddressAndName","fileArgu");
1041
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1041
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
1042
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
1042
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
1043
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1043
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1044
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1044
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1045
		#可以省略的參數:
1045
		#可以省略的參數:
1046
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1046
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1047
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1047
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1048
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1048
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1049
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileArgu","num","disableImg","imgToData","class","content");
1049
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileArgu","num","disableImg","imgToData","class","content");
1050
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1050
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1051
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","array");
1051
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","array");
1052
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1052
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1053
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"8","false","true",null,array("1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","V","U","W","X","Y","Z"));
1053
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"8","false","true",null,array("1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","V","U","W","X","Y","Z"));
1054
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1054
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1055
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
1055
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
1056
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1056
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1057
		unset($conf["variableCheck::checkArguments"]);
1057
		unset($conf["variableCheck::checkArguments"]);
1058
 
1058
 
1059
		#如果檢查失敗
1059
		#如果檢查失敗
1060
		if($checkResult["status"]=="false"){
1060
		if($checkResult["status"]=="false"){
1061
			
1061
 
1062
			#設置錯誤狀態
1062
			#設置錯誤狀態
1063
			$result["status"]="false";
1063
			$result["status"]="false";
1064
			
1064
 
1065
			#設置錯誤提示
1065
			#設置錯誤提示
1066
			$result["error"]=$checkResult;
1066
			$result["error"]=$checkResult;
1067
			
1067
 
1068
			return $result;
1068
			return $result;
1069
			
1069
 
1070
			}#if end
1070
			}#if end
1071
 
1071
 
1072
		#如果檢查不通過
1072
		#如果檢查不通過
1073
		if($checkResult["passed"]=="false"){
1073
		if($checkResult["passed"]=="false"){
1074
			
1074
 
1075
			#設置錯誤狀態
1075
			#設置錯誤狀態
1076
			$result["status"]="false";
1076
			$result["status"]="false";
1077
			
1077
 
1078
			#設置錯誤提示
1078
			#設置錯誤提示
1079
			$result["error"]=$checkResult;
1079
			$result["error"]=$checkResult;
1080
			
1080
 
1081
			return $result;
1081
			return $result;
1082
			
1082
 
1083
			}#if end
1083
			}#if end
1084
 
1084
 
1085
		#可以出現的亂數字碼
1085
		#可以出現的亂數字碼
1086
		$target=$conf["content"];
1086
		$target=$conf["content"];
1087
 
1087
 
Line 1091... Line 1091...
1091
		#跑$num次
1091
		#跑$num次
1092
		for($i=0;$i<=($conf["num"]-1);$i++){
1092
		for($i=0;$i<=($conf["num"]-1);$i++){
1093
 
1093
 
1094
			#則將該代數值轉換成對應的target陣列值。
1094
			#則將該代數值轉換成對應的target陣列值。
1095
			$number[$i]=$target[rand(0,count($target)-1)];
1095
			$number[$i]=$target[rand(0,count($target)-1)];
1096
										
1096
 
1097
			#將轉換完的驗證碼合併
1097
			#將轉換完的驗證碼合併
1098
			$randNumberWordUn=$randNumberWordUn.$number[$i];
1098
			$randNumberWordUn=$randNumberWordUn.$number[$i];
1099
			
1099
 
1100
			}#for end
1100
			}#for end
1101
		
1101
 
1102
		#將合併好的驗證碼到randNumberWord 
1102
		#將合併好的驗證碼到randNumberWord
1103
		$randNumberWord = $randNumberWordUn;
1103
		$randNumberWord = $randNumberWordUn;
1104
 
1104
 
1105
		#如果有設定產出圖片
1105
		#如果有設定產出圖片
1106
		if($conf["disableImg"]=="false"){
1106
		if($conf["disableImg"]=="false"){
1107
			
1107
 
1108
			#如果驗證碼數量爲$num則放置驗證碼的圖片寬度就等於
1108
			#如果驗證碼數量爲$num則放置驗證碼的圖片寬度就等於
1109
			$backgroundImgWidth=$conf["num"]*10;
1109
			$backgroundImgWidth=$conf["num"]*10;
1110
 
1110
 
1111
			#函式說明:
1111
			#函式說明:
1112
			#建立含有文字的png圖檔
1112
			#建立含有文字的png圖檔
Line 1146... Line 1146...
1146
			#imageline=>http://php.net/manual/en/function.imageline.php
1146
			#imageline=>http://php.net/manual/en/function.imageline.php
1147
			#imagepng=>http://php.net/manual/en/function.imagepng.php
1147
			#imagepng=>http://php.net/manual/en/function.imagepng.php
1148
			#imagedestroy=>http://php.net/manual/en/function.imagedestroy.php
1148
			#imagedestroy=>http://php.net/manual/en/function.imagedestroy.php
1149
			$imgAddress=img::create($conf["img::create"]);
1149
			$imgAddress=img::create($conf["img::create"]);
1150
			unset($conf["img::create"]);
1150
			unset($conf["img::create"]);
1151
			
1151
 
1152
			#如果建立圖片失敗
1152
			#如果建立圖片失敗
1153
			if($imgAddress["status"]=="false"){
1153
			if($imgAddress["status"]=="false"){
1154
				
1154
 
1155
				#設置錯誤狀態
1155
				#設置錯誤狀態
1156
				$result["status"]="false";
1156
				$result["status"]="false";
1157
				
1157
 
1158
				#設置錯誤提示
1158
				#設置錯誤提示
1159
				$result["error"]=$imgAddress;
1159
				$result["error"]=$imgAddress;
1160
				
1160
 
1161
				return $result;
1161
				return $result;
1162
				
1162
 
1163
				}#if end
1163
				}#if end
1164
						
1164
 
1165
			#設置圖片的位置與名稱
1165
			#設置圖片的位置與名稱
1166
			$result["imgAddress"]=$imgAddress["content"];
1166
			$result["imgAddress"]=$imgAddress["content"];
1167
			
1167
 
1168
			#如果要把圖片轉存成base64
1168
			#如果要把圖片轉存成base64
1169
			if($conf["imgToData"]=="true"){
1169
			if($conf["imgToData"]=="true"){
1170
				
1170
 
1171
				#函數說明:
1171
				#函數說明:
1172
				#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
1172
				#用data:mimeType;base64,imgVar的形式來提供圖片的連結,亦即圖片儲存在變數裡面,本函式包含顯示圖片的語法.
1173
				#回傳結果:
1173
				#回傳結果:
1174
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1174
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1175
				#$result["error"],錯誤訊息
1175
				#$result["error"],錯誤訊息
1176
				#$result["content"]["imgWithoutImgTag"],img的src數值內容.
1176
				#$result["content"]["imgWithoutImgTag"],img的src數值內容.
1177
				#$result["content"]["img"],圖片的連結資訊
1177
				#$result["content"]["img"],圖片的連結資訊
1178
				#$result["function"],當前執行的函數名稱 
1178
				#$result["function"],當前執行的函數名稱
1179
				#必填參數:
1179
				#必填參數:
1180
				#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
1180
				#$conf["imgPosition"],要轉存成2元碼的圖片檔案位置與名稱
1181
				$conf["img::data"]["imgPosition"]=$result["imgAddress"];
1181
				$conf["img::data"]["imgPosition"]=$result["imgAddress"];
1182
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1182
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1183
				$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
1183
				$conf["img::data"]["fileArgu"]=$conf["fileArgu"];
1184
				#可省略參數:
1184
				#可省略參數:
1185
				#$conf["alt"],若沒有圖片要用什麼文字顯示。
1185
				#$conf["alt"],若沒有圖片要用什麼文字顯示。
1186
				#$conf["alt"]="";
1186
				#$conf["alt"]="";
1187
				#$conf["class"],圖片要套用的css樣式名稱.
1187
				#$conf["class"],圖片要套用的css樣式名稱.
1188
				
1188
 
1189
				#如果有設定 class
1189
				#如果有設定 class
1190
				if(isset($conf["class"])){
1190
				if(isset($conf["class"])){
1191
					
1191
 
1192
					#設置圖片的 class
1192
					#設置圖片的 class
1193
					$conf["img::data"]["class"]=$conf["class"];
1193
					$conf["img::data"]["class"]=$conf["class"];
1194
					
1194
 
1195
					}#if end
1195
					}#if end
1196
				
1196
 
1197
				#$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
1197
				#$conf["mimeType"],2元碼的內容是什麼,預設為"image/*".
1198
				#$conf["mimeType"]="image/*";
1198
				#$conf["mimeType"]="image/*";
1199
				#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
1199
				#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
1200
				#$conf["compressType"]="base64";
1200
				#$conf["compressType"]="base64";
1201
				#$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
1201
				#$conf["delImg"],讀取完圖片檔案後,要移除圖片嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
Line 1203... Line 1203...
1203
				#參考資料:
1203
				#參考資料:
1204
				#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
1204
				#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
1205
				#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
1205
				#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
1206
				$data=img::data($conf["img::data"]);
1206
				$data=img::data($conf["img::data"]);
1207
				unset($conf["img::data"]);
1207
				unset($conf["img::data"]);
1208
				
1208
 
1209
				#如果轉存成base64失敗
1209
				#如果轉存成base64失敗
1210
				if($data["status"]=="false"){
1210
				if($data["status"]=="false"){
1211
					
1211
 
1212
					#設置錯誤狀態
1212
					#設置錯誤狀態
1213
					$result["status"]="false";
1213
					$result["status"]="false";
1214
					
1214
 
1215
					#設置錯誤提示
1215
					#設置錯誤提示
1216
					$result["error"]=$data;
1216
					$result["error"]=$data;
1217
					
1217
 
1218
					return $result;
1218
					return $result;
1219
					
1219
 
1220
					}#if end
1220
					}#if end
1221
				
1221
 
1222
				#設置圖片src的數值	
1222
				#設置圖片src的數值
1223
				$result["imgSrcVal"]=$data["content"]["imgWithoutImgTag"];
1223
				$result["imgSrcVal"]=$data["content"]["imgWithoutImgTag"];
1224
 
1224
 
1225
				#更新圖片位置為base64
1225
				#更新圖片位置為base64
1226
				$result["imgAddress"]=$data["content"]["img"];
1226
				$result["imgAddress"]=$data["content"]["img"];
1227
				
1227
 
1228
				}#if end
1228
				}#if end
1229
			
1229
 
1230
			}#if end
1230
			}#if end
1231
		
1231
 
1232
		#設置執行成功狀態
1232
		#設置執行成功狀態
1233
		$result["status"]="true";
1233
		$result["status"]="true";
1234
		
1234
 
1235
		#設置亂數文字結果
1235
		#設置亂數文字結果
1236
		$result["randNumberWord"]=$randNumberWord;
1236
		$result["randNumberWord"]=$randNumberWord;
1237
		
1237
 
1238
		#回傳內容
1238
		#回傳內容
1239
		return $result;
1239
		return $result;
1240
 
1240
 
1241
		}#函式結束
1241
		}#函式結束
1242
		
1242
 
1243
	/*
1243
	/*
1244
	#函式說明:
1244
	#函式說明:
1245
	#產生亂數驗證碼或驗證亂數驗證碼與表單資料
1245
	#產生亂數驗證碼或驗證亂數驗證碼與表單資料
1246
	#回傳結果:
1246
	#回傳結果:
1247
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1247
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 1252... Line 1252...
1252
	#必填參數:
1252
	#必填參數:
1253
	#$conf["fileArgu"]
1253
	#$conf["fileArgu"]
1254
	$conf["fileArgu"]=__FILE__;
1254
	$conf["fileArgu"]=__FILE__;
1255
	#可省略參數:
1255
	#可省略參數:
1256
	#$conf["sendedName"],字串,傳送的post變數名稱,預設爲"formData".
1256
	#$conf["sendedName"],字串,傳送的post變數名稱,預設爲"formData".
1257
	#$conf["sendedName"]="";	
1257
	#$conf["sendedName"]="";
1258
	#$conf["codeFormName"],字串,驗證碼表單的名稱,預設為"randomCode",對應的 session 變數名稱為 authenticate.verifyCodeAndFormData.$conf["codeFormName"]
1258
	#$conf["codeFormName"],字串,驗證碼表單的名稱,預設為"randomCode",對應的 session 變數名稱為 authenticate.verifyCodeAndFormData.$conf["codeFormName"]
1259
	#$conf["codeFormName"]="randomCode";
1259
	#$conf["codeFormName"]="randomCode";
1260
	#$conf["names"],字串陣列,需要處理的表單必填變數.
1260
	#$conf["names"],字串陣列,需要處理的表單必填變數.
1261
	#$conf["names"]=array();
1261
	#$conf["names"]=array();
1262
	#$conf["skipNames"],字串陣列,需要處理的表單可爲空變數.
1262
	#$conf["skipNames"],字串陣列,需要處理的表單可爲空變數.
1263
	#$conf["skipNames"]=array(); 
1263
	#$conf["skipNames"]=array();
1264
	#參考資料:
1264
	#參考資料:
1265
	#無.
1265
	#無.
1266
	#備註:
1266
	#備註:
1267
	#請跟javaScript類別的randomCode函式搭配.應用情境在會員登入、驗證與寄送Email表單.
1267
	#請跟javaScript類別的randomCode函式搭配.應用情境在會員登入、驗證與寄送Email表單.
1268
	*/
1268
	*/
Line 1310... Line 1310...
1310
 
1310
 
1311
			#回傳結果
1311
			#回傳結果
1312
			return $result;
1312
			return $result;
1313
 
1313
 
1314
			}#if end
1314
			}#if end
1315
	
1315
 
1316
		#函式說明:
1316
		#函式說明:
1317
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1317
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1318
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1318
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1319
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1319
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1320
		#$result["function"],當前執行的函式名稱.
1320
		#$result["function"],當前執行的函式名稱.
Line 1359... Line 1359...
1359
		#$conf["arrayCountEqualCheck"][]=array();
1359
		#$conf["arrayCountEqualCheck"][]=array();
1360
		#參考資料來源:
1360
		#參考資料來源:
1361
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1361
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1362
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1362
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1363
		unset($conf["variableCheck::checkArguments"]);
1363
		unset($conf["variableCheck::checkArguments"]);
1364
		
1364
 
1365
		#如果出錯
1365
		#如果出錯
1366
		if($checkArguments["status"]==="false"){
1366
		if($checkArguments["status"]==="false"){
1367
 
1367
 
1368
			#設置執行失敗
1368
			#設置執行失敗
1369
			$result["status"]="false";
1369
			$result["status"]="false";
Line 1386... Line 1386...
1386
			$result["error"]=$checkArguments;
1386
			$result["error"]=$checkArguments;
1387
 
1387
 
1388
			#回傳結果
1388
			#回傳結果
1389
			return $result;
1389
			return $result;
1390
 
1390
 
1391
			}#if end			
1391
			}#if end
1392
 
1392
 
1393
		#如果沒有設置 $conf["names"]		
1393
		#如果沒有設置 $conf["names"]
1394
		if(!isset($conf["names"])){
1394
		if(!isset($conf["names"])){
1395
	
1395
 
1396
			#初始化
1396
			#初始化
1397
			$conf["names"]=array($conf["codeFormName"]);
1397
			$conf["names"]=array($conf["codeFormName"]);
1398
	
1398
 
1399
			}#if end
1399
			}#if end
1400
			
1400
 
1401
		#反之
1401
		#反之
1402
		else{
1402
		else{
1403
		
1403
 
1404
			#加上驗證碼表單
1404
			#加上驗證碼表單
1405
			$conf["names"][]=$conf["codeFormName"];
1405
			$conf["names"][]=$conf["codeFormName"];
1406
		
1406
 
1407
			}#else end
1407
			}#else end
1408
 
1408
 
1409
		#如果沒有設置 $conf["skipNames"]		
1409
		#如果沒有設置 $conf["skipNames"]
1410
		if(!isset($conf["skipNames"])){
1410
		if(!isset($conf["skipNames"])){
1411
	
1411
 
1412
			#初始化
1412
			#初始化
1413
			$conf["skipNames"]=array();
1413
			$conf["skipNames"]=array();
1414
	
1414
 
1415
			}#if end
1415
			}#if end
1416
			
1416
 
1417
		#函式說明:
1417
		#函式說明:
1418
		#建立一個陣列,可以指派陣列的內容,然後回傳
1418
		#建立一個陣列,可以指派陣列的內容,然後回傳
1419
		#回傳的結果:
1419
		#回傳的結果:
1420
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1420
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1421
		#$result["function"],當前執行的函數名稱.
1421
		#$result["function"],當前執行的函數名稱.
Line 1427... Line 1427...
1427
		#可省略參數:
1427
		#可省略參數:
1428
		$conf["arrays::create"]["arrayCounts"]=count($conf["names"])+count($conf["skipNames"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
1428
		$conf["arrays::create"]["arrayCounts"]=count($conf["names"])+count($conf["skipNames"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
1429
		$conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
1429
		$conf["arrays::create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
1430
		$create=arrays::create($conf["arrays::create"]);
1430
		$create=arrays::create($conf["arrays::create"]);
1431
		unset($conf["arrays::create"]);
1431
		unset($conf["arrays::create"]);
1432
	
1432
 
1433
		#如果失敗
1433
		#如果失敗
1434
		if($create["status"]==="false"){
1434
		if($create["status"]==="false"){
1435
		
1435
 
1436
			#設置執行失敗
1436
			#設置執行失敗
1437
			$result["status"]="false";
1437
			$result["status"]="false";
1438
 
1438
 
1439
			#設置執行失敗
1439
			#設置執行失敗
1440
			$result["error"]=$create;
1440
			$result["error"]=$create;
1441
 
1441
 
1442
			#回傳結果
1442
			#回傳結果
1443
			return $result;
1443
			return $result;
1444
		
1444
 
1445
			}#if end
1445
			}#if end
1446
			
1446
 
1447
		#函式說明:
1447
		#函式說明:
1448
		#將多個一維陣列串聯起來,key從0開始排序.
1448
		#將多個一維陣列串聯起來,key從0開始排序.
1449
		#回傳的結果:
1449
		#回傳的結果:
1450
		#$result["status"],"true"表執行正常,"false"代表執行不正常.
1450
		#$result["status"],"true"表執行正常,"false"代表執行不正常.
1451
		#$result["error"],錯誤訊息陣列.
1451
		#$result["error"],錯誤訊息陣列.
Line 1457... Line 1457...
1457
		#可省略的參數:
1457
		#可省略的參數:
1458
		#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
1458
		#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
1459
		#$conf["allowRepeat"]="true";
1459
		#$conf["allowRepeat"]="true";
1460
		$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
1460
		$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
1461
		unset($conf["arrays::mergeArray"]);
1461
		unset($conf["arrays::mergeArray"]);
1462
	
1462
 
1463
		#如果失敗
1463
		#如果失敗
1464
		if($mergeArray["status"]==="false"){
1464
		if($mergeArray["status"]==="false"){
1465
		
1465
 
1466
			#設置執行失敗
1466
			#設置執行失敗
1467
			$result["status"]="false";
1467
			$result["status"]="false";
1468
 
1468
 
1469
			#設置執行失敗
1469
			#設置執行失敗
1470
			$result["error"]=$mergeArray;
1470
			$result["error"]=$mergeArray;
1471
 
1471
 
1472
			#回傳結果
1472
			#回傳結果
1473
			return $result;
1473
			return $result;
1474
		
1474
 
1475
			}#if end
1475
			}#if end
1476
	
1476
 
1477
		#如表單變數存在
1477
		#如表單變數存在
1478
		if(isset($_POST[$conf["sendedName"]])){
1478
		if(isset($_POST[$conf["sendedName"]])){
1479
 
1479
 
1480
			#解碼
1480
			#解碼
1481
			$urlEncodeStr=base64_decode($_POST[$conf["sendedName"]]);
1481
			$urlEncodeStr=base64_decode($_POST[$conf["sendedName"]]);
1482
			
1482
 
1483
			#解碼
1483
			#解碼
1484
			$jsonEncodeStr=urldecode($urlEncodeStr);				
1484
			$jsonEncodeStr=urldecode($urlEncodeStr);
1485
 
1485
 
1486
			#解碼
1486
			#解碼
1487
			$obj=json_decode($jsonEncodeStr);
1487
			$obj=json_decode($jsonEncodeStr);
1488
 
1488
 
1489
			#debug
1489
			#debug
Line 1520... Line 1520...
1520
				#$conf["class"]="";
1520
				#$conf["class"]="";
1521
				$validationCode=authenticate::validationCode($conf["authenticate::validationCode"]);
1521
				$validationCode=authenticate::validationCode($conf["authenticate::validationCode"]);
1522
				unset($conf["authenticate::validationCode"]);
1522
				unset($conf["authenticate::validationCode"]);
1523
 
1523
 
1524
				#如果建立亂碼圖片失敗
1524
				#如果建立亂碼圖片失敗
1525
				if($validationCode["status"]==="false"){			
1525
				if($validationCode["status"]==="false"){
1526
 
1526
 
1527
					#設置執行失敗
1527
					#設置執行失敗
1528
					$result["status"]="false";
1528
					$result["status"]="false";
1529
 
1529
 
1530
					#設置執行失敗
1530
					#設置執行失敗
Line 1535... Line 1535...
1535
 
1535
 
1536
					}#if end
1536
					}#if end
1537
 
1537
 
1538
				#設置驗證碼到session變數
1538
				#設置驗證碼到session變數
1539
				$_SESSION["authenticate.verifyCodeAndFormData.".$conf["codeFormName"]]=$validationCode["randNumberWord"];
1539
				$_SESSION["authenticate.verifyCodeAndFormData.".$conf["codeFormName"]]=$validationCode["randNumberWord"];
1540
		
1540
 
1541
				#取得驗證碼長度
1541
				#取得驗證碼長度
1542
				$json["content"]["randomCodeLength"]=strlen($_SESSION["authenticate.verifyCodeAndFormData.".$conf["codeFormName"]]);
1542
				$json["content"]["randomCodeLength"]=strlen($_SESSION["authenticate.verifyCodeAndFormData.".$conf["codeFormName"]]);
1543
 
1543
 
1544
				#設置圖片data
1544
				#設置圖片data
1545
				$json["content"]["randomCodeSrc"]=$validationCode["imgSrcVal"];
1545
				$json["content"]["randomCodeSrc"]=$validationCode["imgSrcVal"];
Line 1556... Line 1556...
1556
				#運行正常
1556
				#運行正常
1557
				$result["status"]="true";
1557
				$result["status"]="true";
1558
 
1558
 
1559
				#回傳結果
1559
				#回傳結果
1560
				return $result;
1560
				return $result;
1561
	
1561
 
1562
				}#if end 
1562
				}#if end
1563
 
1563
 
1564
			#反之有內容
1564
			#反之有內容
1565
			else{
1565
			else{
1566
	
1566
 
1567
				#清空post變數
1567
				#清空post變數
1568
				$_POST=array();			
1568
				$_POST=array();
1569
	
1569
 
1570
				#debug
1570
				#debug
1571
				#echo $urlEncodeStr."<p>";
1571
				#echo $urlEncodeStr."<p>";
1572
				#echo $jsonEncodeStr."<p>";
1572
				#echo $jsonEncodeStr."<p>";
1573
				#var_dump($obj);
1573
				#var_dump($obj);
1574
 
1574
 
1575
				#依據每個物件
1575
				#依據每個物件
1576
				foreach($obj as $key=>$val){
1576
				foreach($obj as $key=>$val){
1577
 
1577
 
1578
					#設置對應的 post 數值
1578
					#設置對應的 post 數值
1579
					$_POST[$key]=$val;				
1579
					$_POST[$key]=$val;
1580
		
1580
 
1581
					}#foreach end
1581
					}#foreach end
1582
 
1582
 
1583
				#debug
1583
				#debug
1584
				#echo json_encode($_POST);
1584
				#echo json_encode($_POST);
1585
 
1585
 
Line 1590... Line 1590...
1590
					$json["status"]="true";
1590
					$json["status"]="true";
1591
 
1591
 
1592
					#設置通過驗證
1592
					#設置通過驗證
1593
					$json["passed"]="true";
1593
					$json["passed"]="true";
1594
 
1594
 
1595
					#設置訊息 
1595
					#設置訊息
1596
					$json["msg"]="通過驗證";
1596
					$json["msg"]="通過驗證";
1597
				
1597
 
1598
					#取得要檢查的變數名稱
1598
					#取得要檢查的變數名稱
1599
					$mustBeFilledVariableName=$mergeArray["content"];
1599
					$mustBeFilledVariableName=$mergeArray["content"];
1600
					
1600
 
1601
					#取得要檢查的變數形態
1601
					#取得要檢查的變數形態
1602
					$mustBeFilledVariableType=$create["content"];							
1602
					$mustBeFilledVariableType=$create["content"];
1603
	
1603
 
1604
					#檢查POST參數
1604
					#檢查POST參數
1605
					#函式說明:
1605
					#函式說明:
1606
					#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1606
					#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1607
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1607
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1608
					#$reuslt["error"],執行不正常結束的錯訊息陣列.
1608
					#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 1651... Line 1651...
1651
					$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1651
					$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1652
					unset($conf["variableCheck::checkArguments"]);
1652
					unset($conf["variableCheck::checkArguments"]);
1653
 
1653
 
1654
					#如果檢查失敗
1654
					#如果檢查失敗
1655
					if($checkArguments["status"]==="false"){
1655
					if($checkArguments["status"]==="false"){
1656
					
1656
 
1657
						#設置執行不正常
1657
						#設置執行不正常
1658
						$jsons["status"]="false";
1658
						$jsons["status"]="false";
1659
						
1659
 
1660
						#設置檢查不通過
1660
						#設置檢查不通過
1661
						$json["passed"]="false";
1661
						$json["passed"]="false";
1662
 
1662
 
1663
						#設置執行失敗
1663
						#設置執行失敗
1664
						$json["error"]=$checkArguments;
1664
						$json["error"]=$checkArguments;
1665
 
1665
 
1666
						#設置 json
1666
						#設置 json
1667
						$result["content"]=json_encode($json);
1667
						$result["content"]=json_encode($json);
1668
					
1668
 
1669
						#運行正常
1669
						#運行正常
1670
						$result["status"]="true";
1670
						$result["status"]="true";
1671
 
1671
 
1672
						#回傳結果
1672
						#回傳結果
1673
						return $result;
1673
						return $result;
1674
					
1674
 
1675
						}#if end
1675
						}#if end
1676
						
1676
 
1677
					#如果檢查不通過
1677
					#如果檢查不通過
1678
					if($checkArguments["passed"]==="false"){
1678
					if($checkArguments["passed"]==="false"){
1679
					
1679
 
1680
						#設置執行正常
1680
						#設置執行正常
1681
						$json["status"]="true";
1681
						$json["status"]="true";
1682
						
1682
 
1683
						#設置檢查不通過
1683
						#設置檢查不通過
1684
						$json["passed"]="false";
1684
						$json["passed"]="false";
1685
 
1685
 
1686
						#設置執行失敗
1686
						#設置執行失敗
1687
						$json["error"]=$checkArguments;
1687
						$json["error"]=$checkArguments;
1688
 
1688
 
1689
						#設置 json
1689
						#設置 json
1690
						$result["content"]=json_encode($json);
1690
						$result["content"]=json_encode($json);
1691
					
1691
 
1692
						#運行正常 
1692
						#運行正常
1693
						$result["status"]="true";
1693
						$result["status"]="true";
1694
 
1694
 
1695
						#回傳結果
1695
						#回傳結果
1696
						return $result;
1696
						return $result;
1697
	
1697
 
1698
						}#if end
1698
						}#if end
1699
 
1699
 
1700
					#設置執行正常
1700
					#設置執行正常
1701
					$json["status"]="true";
1701
					$json["status"]="true";
1702
 
1702
 
1703
					#設置通過驗證
1703
					#設置通過驗證
1704
					$json["passed"]="true";	
1704
					$json["passed"]="true";
1705
	
1705
 
1706
					#設置抓到的 post 內容
1706
					#設置抓到的 post 內容
1707
					$json["post"]=$_POST;
1707
					$json["post"]=$_POST;
1708
 
1708
 
1709
					#設置 json
1709
					#設置 json
1710
					$result["content"]=json_encode($json);
1710
					$result["content"]=json_encode($json);
1711
			
1711
 
1712
					#運行正常 
1712
					#運行正常
1713
					$result["status"]="true";
1713
					$result["status"]="true";
1714
 
1714
 
1715
					#回傳結果
1715
					#回傳結果
1716
					return $result;
1716
					return $result;
1717
					
1717
 
1718
					}#if end
1718
					}#if end
1719
 
1719
 
1720
				#反之
1720
				#反之
1721
				else{
1721
				else{
1722
 
1722
 
Line 1724... Line 1724...
1724
					$json["status"]="true";
1724
					$json["status"]="true";
1725
 
1725
 
1726
					#設置未通過驗證
1726
					#設置未通過驗證
1727
					$json["passed"]="false";
1727
					$json["passed"]="false";
1728
 
1728
 
1729
					#設置錯誤訊息 
1729
					#設置錯誤訊息
1730
					$json["error"]="驗證碼錯誤";
1730
					$json["error"]="驗證碼錯誤";
1731
	
1731
 
1732
					#設置 json
1732
					#設置 json
1733
					$result["content"]=json_encode($json);
1733
					$result["content"]=json_encode($json);
1734
					
1734
 
1735
					#運行正常 
1735
					#運行正常
1736
					$result["status"]="true";
1736
					$result["status"]="true";
1737
 
1737
 
1738
					#回傳結果 
1738
					#回傳結果
1739
					return $result; 
1739
					return $result;
1740
 
1740
 
1741
					}#else end
1741
					}#else end
1742
 
1742
 
1743
				}#else end
1743
				}#else end
1744
	
1744
 
1745
			#設置執行正常
1745
			#設置執行正常
1746
			$json["status"]="false";
1746
			$json["status"]="false";
1747
 
1747
 
1748
			#設置通過驗證
1748
			#設置通過驗證
1749
			$json["passed"]="false";
1749
			$json["passed"]="false";
1750
 
1750
 
1751
			#設置錯誤訊息 
1751
			#設置錯誤訊息
1752
			$json["error"]="缺少POST變數";	
1752
			$json["error"]="缺少POST變數";
1753
	
1753
 
1754
			#設置抓到的 post 內容
1754
			#設置抓到的 post 內容
1755
			$json["post"]=$_POST;
1755
			$json["post"]=$_POST;
1756
 
1756
 
1757
			#設置 json
1757
			#設置 json
1758
			$result["content"]=json_encode($json);
1758
			$result["content"]=json_encode($json);
1759
			
1759
 
1760
			#運行不正常 
1760
			#運行不正常
1761
			$result["status"]="false";
1761
			$result["status"]="false";
1762
 
1762
 
1763
			#設置錯誤訊息 
1763
			#設置錯誤訊息
1764
			$result["error"][]="缺少POST變數";
1764
			$result["error"][]="缺少POST變數";
1765
 
1765
 
1766
			#回傳結果
1766
			#回傳結果
1767
			return $result;
1767
			return $result;
1768
			
1768
 
1769
			}#if end
1769
			}#if end
1770
 
1770
 
1771
		}#function verifyCodeAndFormData end
1771
		}#function verifyCodeAndFormData end
1772
		
1772
 
1773
	/*
1773
	/*
1774
	#函式說明:
1774
	#函式說明:
1775
	#加密或編碼字串,可以用的方法有sha1,md5,password_sha,qbpwcf,bin2hex,hex2bin,gpg,sha1可以回傳20或40的數值字串,md5可以回傳32個數值字串,password_hash可以回傳60~255個字元.
1775
	#加密或編碼字串,可以用的方法有sha1,md5,password_sha,qbpwcf,bin2hex,hex2bin,gpg,sha1可以回傳20或40的數值字串,md5可以回傳32個數值字串,password_hash可以回傳60~255個字元.
1776
	#回傳結果:
1776
	#回傳結果:
1777
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常. 
1777
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1778
	#$result["function"],當前執行的函數名稱.
1778
	#$result["function"],當前執行的函數名稱.
1779
	#$result["content"],加密後的結果.
1779
	#$result["content"],加密後的結果.
1780
	#$result["error"],錯誤訊息陣列.
1780
	#$result["error"],錯誤訊息陣列.
1781
	#$result["argu"],使用的參數.
1781
	#$result["argu"],使用的參數.
1782
	#必填參數:
1782
	#必填參數:
Line 1807... Line 1807...
1807
	#json_decode=>https://www.php.net/manual/en/function.json-decode.php
1807
	#json_decode=>https://www.php.net/manual/en/function.json-decode.php
1808
	#備註:
1808
	#備註:
1809
	#無.
1809
	#無.
1810
	*/
1810
	*/
1811
	public static function enCodeStr(&$conf){
1811
	public static function enCodeStr(&$conf){
1812
		
1812
 
1813
		#初始化要回傳的結果
1813
		#初始化要回傳的結果
1814
		$result=array();
1814
		$result=array();
1815
		
1815
 
1816
		#記錄當前執行的函數
1816
		#記錄當前執行的函數
1817
		$result["function"]=__FUNCTION__;
1817
		$result["function"]=__FUNCTION__;
1818
		
1818
 
1819
		#如果 $conf 不為陣列
1819
		#如果 $conf 不為陣列
1820
		if(gettype($conf)!="array"){
1820
		if(gettype($conf)!="array"){
1821
			
1821
 
1822
			#設置執行失敗
1822
			#設置執行失敗
1823
			$result["status"]="false";
1823
			$result["status"]="false";
1824
			
1824
 
1825
			#設置執行錯誤訊息
1825
			#設置執行錯誤訊息
1826
			$result["error"][]="\$conf變數須為陣列形態";
1826
			$result["error"][]="\$conf變數須為陣列形態";
1827
 
1827
 
1828
			#如果傳入的參數為 null
1828
			#如果傳入的參數為 null
1829
			if($conf==null){
1829
			if($conf==null){
1830
				
1830
 
1831
				#設置執行錯誤訊息
1831
				#設置執行錯誤訊息
1832
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1832
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1833
				
1833
 
1834
				}#if end
1834
				}#if end
1835
 
1835
 
1836
			#回傳結果
1836
			#回傳結果
1837
			return $result;
1837
			return $result;
1838
			
1838
 
1839
			}#if end
1839
			}#if end
1840
		
1840
 
1841
		#計數使用的參數
1841
		#計數使用的參數
1842
		$result["argu"]=$conf;
1842
		$result["argu"]=$conf;
1843
		
1843
 
1844
		#檢查參數
1844
		#檢查參數
1845
		#函式說明:
1845
		#函式說明:
1846
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1846
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1847
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1847
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1848
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1848
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 1854... Line 1854...
1854
		#必填參數:
1854
		#必填參數:
1855
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1855
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1856
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1856
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1857
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1857
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1858
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("enCodeStr","enCodeType");
1858
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("enCodeStr","enCodeType");
1859
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1859
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
1860
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array(null,"string");
1860
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array(null,"string");
1861
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1861
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1862
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1862
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1863
		#可以省略的參數:
1863
		#可以省略的參數:
1864
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1864
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1865
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1865
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1866
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1866
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1867
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sha1Raw","p_hash","keyForAes256","aes256Encode","qbpwcfDecode","gpgDecrypt","gpgId");
1867
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sha1Raw","p_hash","keyForAes256","aes256Encode","qbpwcfDecode","gpgDecrypt","gpgId");
1868
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1868
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1869
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string");
1869
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string");
1870
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1870
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1871
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,null,null,"false","false",gnupgId);
1871
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,null,null,"false","false",gnupgId);
1872
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1872
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1873
		#$conf["arrayCountEqualCheck"][]=array();
1873
		#$conf["arrayCountEqualCheck"][]=array();
1874
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1874
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1875
		unset($conf["variableCheck::checkArguments"]);
1875
		unset($conf["variableCheck::checkArguments"]);
1876
		
1876
 
1877
		#如果檢查參數失敗
1877
		#如果檢查參數失敗
1878
		if($checkResult["status"]==="false"){
1878
		if($checkResult["status"]==="false"){
1879
			
1879
 
1880
			#設置執行失敗
1880
			#設置執行失敗
1881
			$result["status"]="false";
1881
			$result["status"]="false";
1882
			
1882
 
1883
			#設置執行錯誤
1883
			#設置執行錯誤
1884
			$result["error"]=$checkResult;
1884
			$result["error"]=$checkResult;
1885
			
1885
 
1886
			#回傳結果
1886
			#回傳結果
1887
			return $result;
1887
			return $result;
1888
			
1888
 
1889
			}#if end
1889
			}#if end
1890
			
1890
 
1891
		#如果檢查參數不通過
1891
		#如果檢查參數不通過
1892
		if($checkResult["passed"]==="false"){
1892
		if($checkResult["passed"]==="false"){
1893
			
1893
 
1894
			#設置執行失敗
1894
			#設置執行失敗
1895
			$result["status"]="false";
1895
			$result["status"]="false";
1896
			
1896
 
1897
			#設置執行錯誤
1897
			#設置執行錯誤
1898
			$result["error"]=$checkResult;
1898
			$result["error"]=$checkResult;
1899
			
1899
 
1900
			#回傳結果
1900
			#回傳結果
1901
			return $result;
1901
			return $result;
1902
			
1902
 
1903
			}#if end
1903
			}#if end
1904
			
1904
 
1905
		#判斷是哪一種加密方法
1905
		#判斷是哪一種加密方法
1906
		switch($conf["enCodeType"]){
1906
		switch($conf["enCodeType"]){
1907
			
1907
 
1908
			#如果是 "sha1"
1908
			#如果是 "sha1"
1909
			case "sha1":
1909
			case "sha1":
1910
			
1910
 
1911
				#如果輸入不是字串
1911
				#如果輸入不是字串
1912
				if(gettype($conf["enCodeStr"])!=="string"){
1912
				if(gettype($conf["enCodeStr"])!=="string"){
1913
				
1913
 
1914
					#設置執行失敗
1914
					#設置執行失敗
1915
					$result["status"]="false";
1915
					$result["status"]="false";
1916
					
1916
 
1917
					#設置執行錯誤
1917
					#設置執行錯誤
1918
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
1918
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
1919
					
1919
 
1920
					#回傳結果
1920
					#回傳結果
1921
					return $result;
1921
					return $result;
1922
				
1922
 
1923
					}#if end
1923
					}#if end
1924
			
1924
 
1925
				#如果要用2元碼輸出
1925
				#如果要用2元碼輸出
1926
				if($conf["sha1Raw"]=="true"){
1926
				if($conf["sha1Raw"]=="true"){
1927
					
1927
 
1928
					#sha1加密
1928
					#sha1加密
1929
					$encodeStr=sha1($conf["enCodeStr"],TRUE);
1929
					$encodeStr=sha1($conf["enCodeStr"],TRUE);
1930
					
1930
 
1931
					#如果加密失敗
1931
					#如果加密失敗
1932
					if($encodeStr==false){
1932
					if($encodeStr==false){
1933
						
1933
 
1934
						#設置執行失敗
1934
						#設置執行失敗
1935
						$result["status"]="false";
1935
						$result["status"]="false";
1936
						
1936
 
1937
						#設置執行錯誤
1937
						#設置執行錯誤
1938
						$result["error"][]="加密失敗";
1938
						$result["error"][]="加密失敗";
1939
						
1939
 
1940
						#回傳結果
1940
						#回傳結果
1941
						return $result;
1941
						return $result;
1942
						
1942
 
1943
						}#if end
1943
						}#if end
1944
						
1944
 
1945
					#反之加密成功
1945
					#反之加密成功
1946
					else{
1946
					else{
1947
						
1947
 
1948
						#取得加密後的字串
1948
						#取得加密後的字串
1949
						$result["content"]=$encodeStr;
1949
						$result["content"]=$encodeStr;
1950
						
1950
 
1951
						}#else end
1951
						}#else end
1952
					
1952
 
1953
					}#if end
1953
					}#if end
1954
			
1954
 
1955
				#反之用16進位數值輸出
1955
				#反之用16進位數值輸出
1956
				else{
1956
				else{
1957
			
1957
 
1958
					#sha1加密
1958
					#sha1加密
1959
					$encodeStr=sha1($conf["enCodeStr"],FALSE);
1959
					$encodeStr=sha1($conf["enCodeStr"],FALSE);
1960
					
1960
 
1961
					#如果加密失敗
1961
					#如果加密失敗
1962
					if($encodeStr==false){
1962
					if($encodeStr==false){
1963
						
1963
 
1964
						#設置執行失敗
1964
						#設置執行失敗
1965
						$result["status"]="false";
1965
						$result["status"]="false";
1966
						
1966
 
1967
						#設置執行錯誤
1967
						#設置執行錯誤
1968
						$result["error"][]="加密失敗";
1968
						$result["error"][]="加密失敗";
1969
						
1969
 
1970
						#回傳結果
1970
						#回傳結果
1971
						return $result;
1971
						return $result;
1972
						
1972
 
1973
						}#if end
1973
						}#if end
1974
						
1974
 
1975
					#反之加密成功
1975
					#反之加密成功
1976
					else{
1976
					else{
1977
						
1977
 
1978
						#取得加密後的字串
1978
						#取得加密後的字串
1979
						$result["content"]=$encodeStr;
1979
						$result["content"]=$encodeStr;
1980
						
1980
 
1981
						}#else end
1981
						}#else end
1982
 
1982
 
1983
					}#else end
1983
					}#else end
1984
			
1984
 
1985
				#跳出
1985
				#跳出
1986
				break;
1986
				break;
1987
				
1987
 
1988
			#如果是 "md5"
1988
			#如果是 "md5"
1989
			case "md5";
1989
			case "md5";
1990
			
1990
 
1991
				#如果輸入不是字串
1991
				#如果輸入不是字串
1992
				if(gettype($conf["enCodeStr"])!=="string"){
1992
				if(gettype($conf["enCodeStr"])!=="string"){
1993
				
1993
 
1994
					#設置執行失敗
1994
					#設置執行失敗
1995
					$result["status"]="false";
1995
					$result["status"]="false";
1996
					
1996
 
1997
					#設置執行錯誤
1997
					#設置執行錯誤
1998
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
1998
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
1999
					
1999
 
2000
					#回傳結果
2000
					#回傳結果
2001
					return $result;
2001
					return $result;
2002
				
2002
 
2003
					}#if end
2003
					}#if end
2004
			
2004
 
2005
				#md5加密
2005
				#md5加密
2006
				$encodeStr=md5($conf["enCodeStr"]);
2006
				$encodeStr=md5($conf["enCodeStr"]);
2007
			
2007
 
2008
				#如果加密失敗
2008
				#如果加密失敗
2009
				if($encodeStr==false){
2009
				if($encodeStr==false){
2010
					
2010
 
2011
					#設置執行失敗
2011
					#設置執行失敗
2012
					$result["status"]="false";
2012
					$result["status"]="false";
2013
					
2013
 
2014
					#設置執行錯誤
2014
					#設置執行錯誤
2015
					$result["error"][]="加密失敗";
2015
					$result["error"][]="加密失敗";
2016
					
2016
 
2017
					#回傳結果
2017
					#回傳結果
2018
					return $result;
2018
					return $result;
2019
					
2019
 
2020
					}#if end
2020
					}#if end
2021
					
2021
 
2022
				#反之加密成功
2022
				#反之加密成功
2023
				else{
2023
				else{
2024
					
2024
 
2025
					#取得加密後的字串
2025
					#取得加密後的字串
2026
					$result["content"]=$encodeStr;
2026
					$result["content"]=$encodeStr;
2027
					
2027
 
2028
					}#else end
2028
					}#else end
2029
			
2029
 
2030
				#跳出
2030
				#跳出
2031
				break;
2031
				break;
2032
			
2032
 
2033
			#如果是"p_hash"
2033
			#如果是"p_hash"
2034
			case "p_hash":
2034
			case "p_hash":
2035
			
2035
 
2036
				#如果輸入不是字串
2036
				#如果輸入不是字串
2037
				if(gettype($conf["enCodeStr"])!=="string"){
2037
				if(gettype($conf["enCodeStr"])!=="string"){
2038
				
2038
 
2039
					#設置執行失敗
2039
					#設置執行失敗
2040
					$result["status"]="false";
2040
					$result["status"]="false";
2041
					
2041
 
2042
					#設置執行錯誤
2042
					#設置執行錯誤
2043
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
2043
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
2044
					
2044
 
2045
					#回傳結果
2045
					#回傳結果
2046
					return $result;
2046
					return $result;
2047
				
2047
 
2048
					}#if end
2048
					}#if end
2049
			
2049
 
2050
				#如果 $conf["p_hash"] 存在
2050
				#如果 $conf["p_hash"] 存在
2051
				if(isset($conf["p_hash"])){
2051
				if(isset($conf["p_hash"])){
2052
					
2052
 
2053
					#檢驗 $conf["enCodeStr"] 是否與 $conf["p_hash"] 相符
2053
					#檢驗 $conf["enCodeStr"] 是否與 $conf["p_hash"] 相符
2054
					if(password_verify($conf["enCodeStr"],$conf["p_hash"])){
2054
					if(password_verify($conf["enCodeStr"],$conf["p_hash"])){
2055
						
2055
 
2056
						#設置執行正常
2056
						#設置執行正常
2057
						$result["status"]="true";
2057
						$result["status"]="true";
2058
						
2058
 
2059
						#回傳結果
2059
						#回傳結果
2060
						return $result;
2060
						return $result;
2061
						
2061
 
2062
						}#if end
2062
						}#if end
2063
					
2063
 
2064
					#反之
2064
					#反之
2065
					else{
2065
					else{
2066
						
2066
 
2067
						#設置執行失敗
2067
						#設置執行失敗
2068
						$result["status"]="false";
2068
						$result["status"]="false";
2069
						
2069
 
2070
						#設置執行錯誤
2070
						#設置執行錯誤
2071
						$result["error"][]="密碼不正確";
2071
						$result["error"][]="密碼不正確";
2072
						
2072
 
2073
						#回傳結果
2073
						#回傳結果
2074
						return $result;
2074
						return $result;
2075
						
2075
 
2076
						}#else end
2076
						}#else end
2077
					
2077
 
2078
					}#if end
2078
					}#if end
2079
			
2079
 
2080
				#加密密碼
2080
				#加密密碼
2081
				$encodeStr=password_hash($conf["enCodeStr"],PASSWORD_DEFAULT);
2081
				$encodeStr=password_hash($conf["enCodeStr"],PASSWORD_DEFAULT);
2082
			
2082
 
2083
				#如果加密失敗
2083
				#如果加密失敗
2084
				if($encodeStr==false){
2084
				if($encodeStr==false){
2085
					
2085
 
2086
					#設置執行失敗
2086
					#設置執行失敗
2087
					$result["status"]="false";
2087
					$result["status"]="false";
2088
					
2088
 
2089
					#設置執行錯誤
2089
					#設置執行錯誤
2090
					$result["error"][]="加密失敗";
2090
					$result["error"][]="加密失敗";
2091
					
2091
 
2092
					#回傳結果
2092
					#回傳結果
2093
					return $result;
2093
					return $result;
2094
					
2094
 
2095
					}#if end
2095
					}#if end
2096
					
2096
 
2097
				#反之加密成功
2097
				#反之加密成功
2098
				else{
2098
				else{
2099
					
2099
 
2100
					#取得加密後的字串
2100
					#取得加密後的字串
2101
					$result["content"]=$encodeStr;
2101
					$result["content"]=$encodeStr;
2102
					
2102
 
2103
					}#else end
2103
					}#else end
2104
			
2104
 
2105
				break;
2105
				break;
2106
				
2106
 
2107
			#如果是 AES 256 bit 加密
2107
			#如果是 AES 256 bit 加密
2108
			#參考資料:
2108
			#參考資料:
2109
			#https://www.ucamc.com/e-learning/php/388-php%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8aes-openssl%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%A2%BC%E3%80%81encrypt%E3%80%81decrypt
2109
			#https://www.ucamc.com/e-learning/php/388-php%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8aes-openssl%E5%8A%A0%E5%AF%86%E4%BB%A3%E7%A2%BC%E3%80%81encrypt%E3%80%81decrypt
2110
			case "aes256":
2110
			case "aes256":
2111
			
2111
 
2112
				#如果輸入不是字串
2112
				#如果輸入不是字串
2113
				if(gettype($conf["enCodeStr"])!=="string"){
2113
				if(gettype($conf["enCodeStr"])!=="string"){
2114
				
2114
 
2115
					#設置執行失敗
2115
					#設置執行失敗
2116
					$result["status"]="false";
2116
					$result["status"]="false";
2117
					
2117
 
2118
					#設置執行錯誤
2118
					#設置執行錯誤
2119
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
2119
					$result["error"][]="enCodeStr shoud be string when enCodeType is ".$conf["enCodeType"];
2120
					
2120
 
2121
					#回傳結果
2121
					#回傳結果
2122
					return $result;
2122
					return $result;
2123
				
2123
 
2124
					}#if end
2124
					}#if end
2125
			
2125
 
2126
				#如果參數有缺
2126
				#如果參數有缺
2127
				if( !isset($conf["keyForAes256"]) || !isset($conf["aes256Encode"]) ){
2127
				if( !isset($conf["keyForAes256"]) || !isset($conf["aes256Encode"]) ){
2128
				
2128
 
2129
					#設置執行失敗
2129
					#設置執行失敗
2130
					$result["status"]="false";
2130
					$result["status"]="false";
2131
					
2131
 
2132
					#設置執行錯誤
2132
					#設置執行錯誤
2133
					$result["error"][]="aes256 演算法需要 keyForAes256 與 aes256Encode 參數";
2133
					$result["error"][]="aes256 演算法需要 keyForAes256 與 aes256Encode 參數";
2134
					
2134
 
2135
					#回傳結果
2135
					#回傳結果
2136
					return $result;
2136
					return $result;
2137
				
2137
 
2138
					}#if end
2138
					}#if end
2139
			
2139
 
2140
				#如果是要加密
2140
				#如果是要加密
2141
				if($conf["aes256Encode"]==="true"){
2141
				if($conf["aes256Encode"]==="true"){
2142
				
2142
 
2143
					#取得iv
2143
					#取得iv
2144
					$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
2144
					$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
2145
					
2145
 
2146
					#加密內容
2146
					#加密內容
2147
					$encrypted = openssl_encrypt($conf["enCodeStr"], 'aes-256-cbc', $conf["keyForAes256"], 0, $iv);
2147
					$encrypted = openssl_encrypt($conf["enCodeStr"], 'aes-256-cbc', $conf["keyForAes256"], 0, $iv);
2148
					
2148
 
2149
					#使用base64加密的內容
2149
					#使用base64加密的內容
2150
					$result["content"]=base64_encode($encrypted . '::' . $iv);
2150
					$result["content"]=base64_encode($encrypted . '::' . $iv);
2151
				
2151
 
2152
					#數值執行正常
2152
					#數值執行正常
2153
					$result["status"]="true";
2153
					$result["status"]="true";
2154
					
2154
 
2155
					#回傳結果
2155
					#回傳結果
2156
					return $result;
2156
					return $result;
2157
					
2157
 
2158
					}#if end
2158
					}#if end
2159
			
2159
 
2160
				#反之是要解密
2160
				#反之是要解密
2161
				else{
2161
				else{
2162
				
2162
 
2163
					#取得 base64_decoed 的本文與 iv
2163
					#取得 base64_decoed 的本文與 iv
2164
					list($conf["enCodeStr"], $iv) = explode('::', base64_decode($conf["enCodeStr"]), 2);
2164
					list($conf["enCodeStr"], $iv) = explode('::', base64_decode($conf["enCodeStr"]), 2);
2165
					
2165
 
2166
					#取得 解密好的內容
2166
					#取得 解密好的內容
2167
					$result["content"]=openssl_decrypt($conf["enCodeStr"], 'aes-256-cbc', $conf["keyForAes256"], 0, $iv);
2167
					$result["content"]=openssl_decrypt($conf["enCodeStr"], 'aes-256-cbc', $conf["keyForAes256"], 0, $iv);
2168
					
2168
 
2169
					#數值執行正常
2169
					#數值執行正常
2170
					$result["status"]="true";
2170
					$result["status"]="true";
2171
					
2171
 
2172
					#回傳結果
2172
					#回傳結果
2173
					return $result;
2173
					return $result;
2174
					
2174
 
2175
					}#else end
2175
					}#else end
2176
				
2176
 
2177
				#跳出迴圈
2177
				#跳出迴圈
2178
				break;	
2178
				break;
2179
			
2179
 
2180
			#如果是 "qbpwcf"
2180
			#如果是 "qbpwcf"
2181
			case "qbpwcf":
2181
			case "qbpwcf":
2182
			
2182
 
2183
				#如果是要加密
2183
				#如果是要加密
2184
				if($conf["qbpwcfDecode"]==="false"){
2184
				if($conf["qbpwcfDecode"]==="false"){
2185
			
2185
 
2186
					#to json string
2186
					#to json string
2187
					$jsonData=json_encode($conf["enCodeStr"]);
2187
					$jsonData=json_encode($conf["enCodeStr"]);
2188
				
2188
 
2189
					#如果出錯
2189
					#如果出錯
2190
					if($jsonData===false){
2190
					if($jsonData===false){
2191
					
2191
 
2192
						#設置執行失敗
2192
						#設置執行失敗
2193
						$result["status"]="false";
2193
						$result["status"]="false";
2194
						
2194
 
2195
						#設置執行錯誤
2195
						#設置執行錯誤
2196
						$result["error"][]="encode 「".$conf["enCodeStr"]."」 失敗";
2196
						$result["error"][]="encode 「".$conf["enCodeStr"]."」 失敗";
2197
						
2197
 
2198
						#回傳結果
2198
						#回傳結果
2199
						return $result;
2199
						return $result;
2200
					
2200
 
2201
						}#if end
2201
						}#if end
2202
						
2202
 
2203
					#設置加密好的內容	
2203
					#設置加密好的內容
2204
					$result["content"]=base64_encode(urlencode($jsonData));
2204
					$result["content"]=base64_encode(urlencode($jsonData));
2205
					
2205
 
2206
					}#if end
2206
					}#if end
2207
					
2207
 
2208
				#反之是要解密
2208
				#反之是要解密
2209
				else{
2209
				else{
2210
				
2210
 
2211
					#base64_decode then urldecode data
2211
					#base64_decode then urldecode data
2212
					$urlDecodeData=urldecode(base64_decode($conf["enCodeStr"]));
2212
					$urlDecodeData=urldecode(base64_decode($conf["enCodeStr"]));
2213
				
2213
 
2214
					#json_decode data
2214
					#json_decode data
2215
					$json_decode_data=json_decode($urlDecodeData);
2215
					$json_decode_data=json_decode($urlDecodeData);
2216
				
2216
 
2217
					#如果異常
2217
					#如果異常
2218
					if($urlDecodeData!==null && $json_decode_data===null){
2218
					if($urlDecodeData!==null && $json_decode_data===null){
2219
					
2219
 
2220
						#設置執行失敗
2220
						#設置執行失敗
2221
						$result["status"]="false";
2221
						$result["status"]="false";
2222
						
2222
 
2223
						#設置執行錯誤
2223
						#設置執行錯誤
2224
						$result["error"][]="decode 「".$conf["enCodeStr"]."」 失敗";
2224
						$result["error"][]="decode 「".$conf["enCodeStr"]."」 失敗";
2225
						
2225
 
2226
						#回傳結果
2226
						#回傳結果
2227
						return $result;
2227
						return $result;
2228
					
2228
 
2229
						}#if end
2229
						}#if end
2230
				
2230
 
2231
					#設置解密好的內容
2231
					#設置解密好的內容
2232
					$result["content"]=$json_decode_data;
2232
					$result["content"]=$json_decode_data;
2233
				
2233
 
2234
					}#else end
2234
					}#else end
2235
			
2235
 
2236
				#跳出 switch
2236
				#跳出 switch
2237
				break;	
2237
				break;
2238
			
2238
 
2239
			#若是bin2hex
2239
			#若是bin2hex
2240
			case "bin2hex":
2240
			case "bin2hex":
2241
			
2241
 
2242
				#用16進位的兩個字母來表示每個byte
2242
				#用16進位的兩個字母來表示每個byte
2243
				$unpack=unpack("H*",$conf["enCodeStr"]);
2243
				$unpack=unpack("H*",$conf["enCodeStr"]);
2244
			
2244
 
2245
				#如果沒有結果
2245
				#如果沒有結果
2246
				if(!isset($unpack[1])){
2246
				if(!isset($unpack[1])){
2247
				
2247
 
2248
					#設置執行失敗
2248
					#設置執行失敗
2249
					$result["status"]="false";
2249
					$result["status"]="false";
2250
					
2250
 
2251
					#設置執行錯誤
2251
					#設置執行錯誤
2252
					$result["error"][]="bin2hex failed";
2252
					$result["error"][]="bin2hex failed";
2253
					
2253
 
2254
					#設置執行錯誤
2254
					#設置執行錯誤
2255
					$result["error"][]=$unpack;
2255
					$result["error"][]=$unpack;
2256
					
2256
 
2257
					#回傳結果
2257
					#回傳結果
2258
					return $result;
2258
					return $result;
2259
				
2259
 
2260
					}#if end
2260
					}#if end
2261
					
2261
 
2262
				#取得結果
2262
				#取得結果
2263
				$result["content"]=$unpack[1];
2263
				$result["content"]=$unpack[1];
2264
			
2264
 
2265
				#相當於
2265
				#相當於
2266
				#$result["content"]=bin2hex($conf["enCodeStr"]);
2266
				#$result["content"]=bin2hex($conf["enCodeStr"]);
2267
				
2267
 
2268
				#跳出 switch
2268
				#跳出 switch
2269
				break;
2269
				break;
2270
				
2270
 
2271
			#若是hex2bin
2271
			#若是hex2bin
2272
			case "hex2bin":
2272
			case "hex2bin":
2273
			
2273
 
2274
				#將每個byte用兩個16進位字母來表示的字串變成 binary string
2274
				#將每個byte用兩個16進位字母來表示的字串變成 binary string
2275
 				$pack=pack("H*",$conf["enCodeStr"]);
2275
 				$pack=pack("H*",$conf["enCodeStr"]);
2276
				
2276
 
2277
				$result["content"]=$pack;
2277
				$result["content"]=$pack;
2278
			
2278
 
2279
				#跳出 switch
2279
				#跳出 switch
2280
				break;
2280
				break;
2281
			
2281
 
2282
			#如果是"gpg加解密"
2282
			#如果是"gpg加解密"
2283
			case "gpg":
2283
			case "gpg":
2284
			
2284
 
2285
				#如果沒有 gpgId
2285
				#如果沒有 gpgId
2286
				if(!isset($conf["gpgId"])){
2286
				if(!isset($conf["gpgId"])){
2287
				
2287
 
2288
					#設置執行失敗
2288
					#設置執行失敗
2289
					$result["status"]="false";
2289
					$result["status"]="false";
2290
					
2290
 
2291
					#設置執行錯誤
2291
					#設置執行錯誤
2292
					$result["error"]="param gpgId if required when enCodeType is ".$conf["enCodeType"];
2292
					$result["error"]="param gpgId if required when enCodeType is ".$conf["enCodeType"];
2293
					
2293
 
2294
					#回傳結果
2294
					#回傳結果
2295
					return $result;
2295
					return $result;
2296
				
2296
 
2297
					}#if end
2297
					}#if end
2298
			
2298
 
2299
				#如果是用加密
2299
				#如果是用加密
2300
				if($conf["gpgDecrypt"]==="false"){
2300
				if($conf["gpgDecrypt"]==="false"){
2301
				
2301
 
2302
					#用GnuPG加密
2302
					#用GnuPG加密
2303
					#函式說明:
2303
					#函式說明:
2304
					#呼叫shell執行系統命令,並取得回傳的內容.
2304
					#呼叫shell執行系統命令,並取得回傳的內容.
2305
					#回傳結果:
2305
					#回傳結果:
2306
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2306
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2364... Line 2364...
2364
					#如果執行失敗
2364
					#如果執行失敗
2365
					if($callShell["status"]==="false"){
2365
					if($callShell["status"]==="false"){
2366
 
2366
 
2367
						#設置執行失敗
2367
						#設置執行失敗
2368
						$result["status"]="false";
2368
						$result["status"]="false";
2369
						
2369
 
2370
						#設置執行錯誤
2370
						#設置執行錯誤
2371
						$result["error"]=$callShell;
2371
						$result["error"]=$callShell;
2372
						
2372
 
2373
						#回傳結果
2373
						#回傳結果
2374
						return $result;
2374
						return $result;
2375
					
2375
 
2376
						}#if end
2376
						}#if end
2377
 
2377
 
2378
					#取得加密後的內容
2378
					#取得加密後的內容
2379
					$result["content"]=$callShell["content"];
2379
					$result["content"]=$callShell["content"];
2380
				
2380
 
2381
					}#if end
2381
					}#if end
2382
					
2382
 
2383
				#反之如果是解密
2383
				#反之如果是解密
2384
				else if($conf["gpgDecrypt"]==="true"){
2384
				else if($conf["gpgDecrypt"]==="true"){
2385
					
2385
 
2386
					#用GnuPG解密
2386
					#用GnuPG解密
2387
					#函式說明:
2387
					#函式說明:
2388
					#呼叫shell執行系統命令,並取得回傳的內容.
2388
					#呼叫shell執行系統命令,並取得回傳的內容.
2389
					#回傳結果:
2389
					#回傳結果:
2390
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2390
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2448... Line 2448...
2448
					#如果執行失敗
2448
					#如果執行失敗
2449
					if($callShell["status"]==="false"){
2449
					if($callShell["status"]==="false"){
2450
 
2450
 
2451
						#設置執行失敗
2451
						#設置執行失敗
2452
						$result["status"]="false";
2452
						$result["status"]="false";
2453
						
2453
 
2454
						#設置執行錯誤
2454
						#設置執行錯誤
2455
						$result["error"]=$callShell;
2455
						$result["error"]=$callShell;
2456
						
2456
 
2457
						#回傳結果
2457
						#回傳結果
2458
						return $result;
2458
						return $result;
2459
 
2459
 
2460
						}#if end
2460
						}#if end
2461
						
2461
 
2462
					#取得加密後的內容
2462
					#取得加密後的內容
2463
					$result["content"]=$callShell["content"];
2463
					$result["content"]=$callShell["content"];
2464
					
2464
 
2465
					}#else end
2465
					}#else end
2466
			
2466
 
2467
				#跳出 switch
2467
				#跳出 switch
2468
				break;
2468
				break;
2469
				
2469
 
2470
			#如果是其他內容
2470
			#如果是其他內容
2471
			default:
2471
			default:
2472
			
2472
 
2473
				#設置執行失敗
2473
				#設置執行失敗
2474
				$result["status"]="false";
2474
				$result["status"]="false";
2475
				
2475
 
2476
				#設置執行錯誤
2476
				#設置執行錯誤
2477
				$result["error"][]="不支援的加密方法「".$conf["enCodeType"]."」";
2477
				$result["error"][]="不支援的加密方法「".$conf["enCodeType"]."」";
2478
				
2478
 
2479
				#回傳結果
2479
				#回傳結果
2480
				return $result;
2480
				return $result;
2481
			
2481
 
2482
			}#switch end
2482
			}#switch end
2483
			
2483
 
2484
		#執行到這邊代表執行正常
2484
		#執行到這邊代表執行正常
2485
		$result["status"]="true";
2485
		$result["status"]="true";
2486
		
2486
 
2487
		#回傳結果
2487
		#回傳結果
2488
		return $result;
2488
		return $result;
2489
		
2489
 
2490
		}#function enCodeStr end
2490
		}#function enCodeStr end
2491
	
2491
 
2492
	/*
2492
	/*
2493
	#函式說明:
2493
	#函式說明:
2494
	#將字串變成2元碼或2元碼變成字串.
2494
	#將字串變成2元碼或2元碼變成字串.
2495
	#回傳結果:
2495
	#回傳結果:
2496
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常. 
2496
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2497
	#$result["function"],當前執行的函數名稱.
2497
	#$result["function"],當前執行的函數名稱.
2498
	#$result["content"],加密後的結果.
2498
	#$result["content"],加密後的結果.
2499
	#$result["error"],錯誤訊息陣列.
2499
	#$result["error"],錯誤訊息陣列.
2500
	#必填參數:
2500
	#必填參數:
2501
	#$conf["input"],"字串",要hex或unhex的字串
2501
	#$conf["input"],"字串",要hex或unhex的字串
2502
	$conf["input"]="";
2502
	$conf["input"]="";
2503
	#$conf["action"],"字串",要toBin或toStr.
2503
	#$conf["action"],"字串",要toBin或toStr.
2504
	$conf["action"]="";	
2504
	$conf["action"]="";
2505
	#可省略參數:
2505
	#可省略參數:
2506
	#無.
2506
	#無.
2507
	#參考資料:
2507
	#參考資料:
2508
	#hex2bin=>http://php.net/manual/en/function.hex2bin.php #bin2hex=>http://php.net/manual/en/function.binhex.php #pack=>http://php.net/manual/en/function.pack.php 轉換的方法似乎有問題. bin2hex可以將10進位數字字串轉換成2進位字串.
2508
	#hex2bin=>http://php.net/manual/en/function.hex2bin.php #bin2hex=>http://php.net/manual/en/function.binhex.php #pack=>http://php.net/manual/en/function.pack.php 轉換的方法似乎有問題. bin2hex可以將10進位數字字串轉換成2進位字串.
2509
	#備註:
2509
	#備註:
2510
	#無.
2510
	#無.
2511
	*/
2511
	*/
2512
	public static function str2bin(&$conf){
2512
	public static function str2bin(&$conf){
2513
		
2513
 
2514
		#初始化要回傳的結果
2514
		#初始化要回傳的結果
2515
		$result=array();
2515
		$result=array();
2516
		
2516
 
2517
		#記錄當前執行的函數
2517
		#記錄當前執行的函數
2518
		$result["function"]=__FUNCTION__;
2518
		$result["function"]=__FUNCTION__;
2519
		
2519
 
2520
		#如果沒有參數
2520
		#如果沒有參數
2521
		if(func_num_args()==0){
2521
		if(func_num_args()==0){
2522
			
2522
 
2523
			#設置執行失敗
2523
			#設置執行失敗
2524
			$result["status"]="false";
2524
			$result["status"]="false";
2525
			
2525
 
2526
			#設置執行錯誤訊息
2526
			#設置執行錯誤訊息
2527
			$result["error"]="函數".$result["function"]."需要參數";
2527
			$result["error"]="函數".$result["function"]."需要參數";
2528
			
2528
 
2529
			#回傳結果
2529
			#回傳結果
2530
			return $result;
2530
			return $result;
2531
			
2531
 
2532
			}#if end
2532
			}#if end
2533
		
2533
 
2534
		#如果 $conf 不為陣列
2534
		#如果 $conf 不為陣列
2535
		if(gettype($conf)!="array"){
2535
		if(gettype($conf)!="array"){
2536
			
2536
 
2537
			#設置執行失敗
2537
			#設置執行失敗
2538
			$result["status"]="false";
2538
			$result["status"]="false";
2539
			
2539
 
2540
			#設置執行錯誤訊息
2540
			#設置執行錯誤訊息
2541
			$result["error"][]="\$conf變數須為陣列形態";
2541
			$result["error"][]="\$conf變數須為陣列形態";
2542
 
2542
 
2543
			#如果傳入的參數為 null
2543
			#如果傳入的參數為 null
2544
			if($conf==null){
2544
			if($conf==null){
2545
				
2545
 
2546
				#設置執行錯誤訊息
2546
				#設置執行錯誤訊息
2547
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2547
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2548
				
2548
 
2549
				}#if end
2549
				}#if end
2550
 
2550
 
2551
			#回傳結果
2551
			#回傳結果
2552
			return $result;
2552
			return $result;
2553
			
2553
 
2554
			}#if end
2554
			}#if end
2555
		
2555
 
2556
		#檢查參數
2556
		#檢查參數
2557
		#函式說明:
2557
		#函式說明:
2558
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2558
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2559
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2559
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2560
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2560
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 2566... Line 2566...
2566
		#必填參數:
2566
		#必填參數:
2567
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2567
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2568
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2568
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2569
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2569
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2570
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","action");
2570
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","action");
2571
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2571
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");
2572
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2572
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2573
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2573
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2574
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2574
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2575
		#可以省略的參數:
2575
		#可以省略的參數:
2576
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2576
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2577
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2577
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2578
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2578
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2579
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sha1Raw","p_hash");
2579
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sha1Raw","p_hash");
2580
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2580
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2581
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
2581
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
2582
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2582
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2583
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null);
2583
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null);
2584
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2584
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2585
		#$conf["arrayCountEqualCheck"][]=array();
2585
		#$conf["arrayCountEqualCheck"][]=array();
2586
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2586
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2587
		unset($conf["variableCheck::checkArguments"]);
2587
		unset($conf["variableCheck::checkArguments"]);
2588
		
2588
 
2589
		#如果檢查參數失敗
2589
		#如果檢查參數失敗
2590
		if($checkResult["status"]=="false"){
2590
		if($checkResult["status"]=="false"){
2591
			
2591
 
2592
			#設置執行失敗
2592
			#設置執行失敗
2593
			$result["status"]="false";
2593
			$result["status"]="false";
2594
			
2594
 
2595
			#設置執行錯誤
2595
			#設置執行錯誤
2596
			$result["error"]=$checkResult;
2596
			$result["error"]=$checkResult;
2597
			
2597
 
2598
			#回傳結果
2598
			#回傳結果
2599
			return $result;
2599
			return $result;
2600
			
2600
 
2601
			}#if end
2601
			}#if end
2602
			
2602
 
2603
		#如果要hex
2603
		#如果要hex
2604
		if($conf["action"]=="toBin"){
2604
		if($conf["action"]=="toBin"){
2605
			
2605
 
2606
			#將字串轉換成2進位
2606
			#將字串轉換成2進位
2607
			$result["content"]=pack('H*', base_convert($conf["input"], 2, 16));
2607
			$result["content"]=pack('H*', base_convert($conf["input"], 2, 16));
2608
			
2608
 
2609
			}#if end	
2609
			}#if end
2610
			
2610
 
2611
		#反之如果要unhex
2611
		#反之如果要unhex
2612
		else if($conf["action"]=="toStr"){
2612
		else if($conf["action"]=="toStr"){
2613
			
2613
 
2614
			#將2進位轉為字串
2614
			#將2進位轉為字串
2615
			$result["content"]=unpack('H*',$conf["input"]);
2615
			$result["content"]=unpack('H*',$conf["input"]);
2616
 
2616
 
2617
			#針對每個字
2617
			#針對每個字
2618
			foreach($result["content"] as $key=>$bin){
2618
			foreach($result["content"] as $key=>$bin){
2619
 
2619
 
2620
				#轉換成字串
2620
				#轉換成字串
2621
				$result["content"][$key]=base_convert($result["content"][1], 16, 2);
2621
				$result["content"][$key]=base_convert($result["content"][1], 16, 2);
2622
 
2622
 
2623
				}#foreach end
2623
				}#foreach end
2624
			
2624
 
2625
			}#if end
2625
			}#if end
2626
			
2626
 
2627
		#設置執行正常
2627
		#設置執行正常
2628
		$result["status"]="true";
2628
		$result["status"]="true";
2629
		
2629
 
2630
		#回傳結果
2630
		#回傳結果
2631
		return $result;
2631
		return $result;
2632
		
2632
 
2633
		}#function str2bin end	
2633
		}#function str2bin end
2634
 
2634
 
2635
	/*
2635
	/*
2636
	#函式說明:
2636
	#函式說明:
2637
	#驗證Linux使用者的密碼或ssh private key是否正確.
2637
	#驗證Linux使用者的密碼或ssh private key是否正確.
2638
	#回傳結果:
2638
	#回傳結果:
2639
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常. 
2639
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2640
	#$result["function"],當前執行的函數名稱.
2640
	#$result["function"],當前執行的函數名稱.
2641
	#$result["error"],錯誤訊息陣列.
2641
	#$result["error"],錯誤訊息陣列.
2642
	#$result["warninig"],警告訊息陣列.
2642
	#$result["warninig"],警告訊息陣列.
2643
	#$result["valid"],是否為存在的使用者且密碼正確.
2643
	#$result["valid"],是否為存在的使用者且密碼正確.
2644
	#必填參數:
2644
	#必填參數:
Line 2656... Line 2656...
2656
	#備註:
2656
	#備註:
2657
	#僅能在命令列環境下運.
2657
	#僅能在命令列環境下運.
2658
	#目前僅支援驗證執行php端的使用者.
2658
	#目前僅支援驗證執行php端的使用者.
2659
	*/
2659
	*/
2660
	public static function validUser(&$conf){
2660
	public static function validUser(&$conf){
2661
		
2661
 
2662
		#初始化要回傳的結果
2662
		#初始化要回傳的結果
2663
		$result=array();
2663
		$result=array();
2664
 
2664
 
2665
		#取得當前執行的函數名稱
2665
		#取得當前執行的函數名稱
2666
		$result["function"]=__FUNCTION__;
2666
		$result["function"]=__FUNCTION__;
Line 2671... Line 2671...
2671
		#函式說明:
2671
		#函式說明:
2672
		#判斷當前環境為web還是cmd
2672
		#判斷當前環境為web還是cmd
2673
		#回傳結果:
2673
		#回傳結果:
2674
		#$result,"web"或"cmd"
2674
		#$result,"web"或"cmd"
2675
		if(csInformation::getEnv()=="web"){
2675
		if(csInformation::getEnv()=="web"){
2676
			
2676
 
2677
			#設置執行失敗
2677
			#設置執行失敗
2678
			$result["status"]="false";
2678
			$result["status"]="false";
2679
			
2679
 
2680
			#設置執行錯誤訊息
2680
			#設置執行錯誤訊息
2681
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
2681
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
2682
			
2682
 
2683
			#回傳結果
2683
			#回傳結果
2684
			return $result;
2684
			return $result;
2685
			
2685
 
2686
			}#if end
2686
			}#if end
2687
 
2687
 
2688
		#如果沒有參數
2688
		#如果沒有參數
2689
		if(func_num_args()==0){
2689
		if(func_num_args()==0){
2690
			
2690
 
2691
			#設置執行失敗
2691
			#設置執行失敗
2692
			$result["status"]="false";
2692
			$result["status"]="false";
2693
			
2693
 
2694
			#設置執行錯誤訊息
2694
			#設置執行錯誤訊息
2695
			$result["error"]="函數".$result["function"]."需要參數";
2695
			$result["error"]="函數".$result["function"]."需要參數";
2696
			
2696
 
2697
			#回傳結果
2697
			#回傳結果
2698
			return $result;
2698
			return $result;
2699
			
2699
 
2700
			}#if end
2700
			}#if end
2701
 
2701
 
2702
		#取得參數
2702
		#取得參數
2703
		$result["argu"]=$conf;
2703
		$result["argu"]=$conf;
2704
 
2704
 
2705
		#如果 $conf 不為陣列
2705
		#如果 $conf 不為陣列
2706
		if(gettype($conf)!="array"){
2706
		if(gettype($conf)!="array"){
2707
			
2707
 
2708
			#設置執行失敗
2708
			#設置執行失敗
2709
			$result["status"]="false";
2709
			$result["status"]="false";
2710
			
2710
 
2711
			#設置執行錯誤訊息
2711
			#設置執行錯誤訊息
2712
			$result["error"][]="\$conf變數須為陣列形態";
2712
			$result["error"][]="\$conf變數須為陣列形態";
2713
			
2713
 
2714
			#如果傳入的參數為 null
2714
			#如果傳入的參數為 null
2715
			if($conf==null){
2715
			if($conf==null){
2716
				
2716
 
2717
				#設置執行錯誤訊息
2717
				#設置執行錯誤訊息
2718
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2718
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2719
				
2719
 
2720
				}#if end
2720
				}#if end
2721
 
2721
 
2722
			#回傳結果
2722
			#回傳結果
2723
			return $result;
2723
			return $result;
2724
			
2724
 
2725
			}#if end
2725
			}#if end
2726
	
2726
 
2727
		#檢查參數
2727
		#檢查參數
2728
		#函式說明:
2728
		#函式說明:
2729
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2729
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2730
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2730
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2731
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2731
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 2756... Line 2756...
2756
		$conf["variableCheck::checkArguments"]["canBeEmpty"]=array("password");
2756
		$conf["variableCheck::checkArguments"]["canBeEmpty"]=array("password");
2757
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
2757
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
2758
		#$conf["skipableVariableCanNotBeEmpty"]=array();
2758
		#$conf["skipableVariableCanNotBeEmpty"]=array();
2759
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2759
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2760
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sshPrivateKey");
2760
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sshPrivateKey");
2761
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2761
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2762
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
2762
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
2763
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2763
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2764
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
2764
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
2765
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2765
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2766
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("conName","conVal");
2766
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("conName","conVal");
2767
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("target","styleAttr","styleVal");
2767
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("target","styleAttr","styleVal");
2768
		#參考資料來源:
2768
		#參考資料來源:
2769
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2769
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2770
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2770
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2771
		unset($conf["variableCheck::checkArguments"]);	
2771
		unset($conf["variableCheck::checkArguments"]);
2772
			
2772
 
2773
		#如果檢查參數失敗
2773
		#如果檢查參數失敗
2774
		if($checkArguments["status"]=="false"){
2774
		if($checkArguments["status"]=="false"){
2775
			
2775
 
2776
			#設置執行不正常
2776
			#設置執行不正常
2777
			$result["status"]="false";
2777
			$result["status"]="false";
2778
			
2778
 
2779
			#設置執行錯誤
2779
			#設置執行錯誤
2780
			$result["error"]=$checkArguments;
2780
			$result["error"]=$checkArguments;
2781
			
2781
 
2782
			#回傳結果
2782
			#回傳結果
2783
			return $result;
2783
			return $result;
2784
			
2784
 
2785
			}#if end
2785
			}#if end
2786
			
2786
 
2787
		#如果檢查參數不通過
2787
		#如果檢查參數不通過
2788
		if($checkArguments["passed"]=="false"){
2788
		if($checkArguments["passed"]=="false"){
2789
			
2789
 
2790
			#設置執行不正常
2790
			#設置執行不正常
2791
			$result["status"]="false";
2791
			$result["status"]="false";
2792
			
2792
 
2793
			#設置執行錯誤
2793
			#設置執行錯誤
2794
			$result["error"]=$checkArguments;
2794
			$result["error"]=$checkArguments;
2795
			
2795
 
2796
			#回傳結果
2796
			#回傳結果
2797
			return $result;
2797
			return $result;
2798
			
2798
 
2799
			}#if end
2799
			}#if end
2800
			
2800
 
2801
		#檢查使用者是否存在
2801
		#檢查使用者是否存在
2802
		#函式說明:
2802
		#函式說明:
2803
		#呼叫shell執行系統命令,並取得回傳的內容.
2803
		#呼叫shell執行系統命令,並取得回傳的內容.
2804
		#回傳的結果:
2804
		#回傳的結果:
2805
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2805
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 2836... Line 2836...
2836
		#exec=>http://php.net/manual/en/function.exec.php
2836
		#exec=>http://php.net/manual/en/function.exec.php
2837
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
2837
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
2838
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
2838
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
2839
		$callShell=external::callShell($conf["external::callShell"]);
2839
		$callShell=external::callShell($conf["external::callShell"]);
2840
		unset($conf["external::callShell"]);
2840
		unset($conf["external::callShell"]);
2841
		
2841
 
2842
		#如果執行shell失敗
2842
		#如果執行shell失敗
2843
		if($callShell["status"]==="false"){
2843
		if($callShell["status"]==="false"){
2844
			
2844
 
2845
			#設置執行不正常
2845
			#設置執行不正常
2846
			$result["status"]="false";
2846
			$result["status"]="false";
2847
			
2847
 
2848
			#設置執行錯誤
2848
			#設置執行錯誤
2849
			$result["error"]=$callShell;
2849
			$result["error"]=$callShell;
2850
			
2850
 
2851
			#回傳結果
2851
			#回傳結果
2852
			return $result;
2852
			return $result;
2853
			
2853
 
2854
			}#if end
2854
			}#if end
2855
			
2855
 
2856
		#如果使用者 $conf["username"] 不存在
2856
		#如果使用者 $conf["username"] 不存在
2857
		if($callShell["output"][0]==="id: ".$conf["username"].": no such user"){
2857
		if($callShell["output"][0]==="id: ".$conf["username"].": no such user"){
2858
			
2858
 
2859
			#設置執行不正常
2859
			#設置執行不正常
2860
			$result["status"]="true";
2860
			$result["status"]="true";
2861
			
2861
 
2862
			#設置使用者驗證失敗
2862
			#設置使用者驗證失敗
2863
			$result["valid"]="false";
2863
			$result["valid"]="false";
2864
			
2864
 
2865
			#設置使用者不存在的警告
2865
			#設置使用者不存在的警告
2866
			$result["warninig"][]="使用者 \"".$conf["username"]."\" 不存在!";
2866
			$result["warninig"][]="使用者 \"".$conf["username"]."\" 不存在!";
2867
			
2867
 
2868
			#回傳結果
2868
			#回傳結果
2869
			return $result;
2869
			return $result;
2870
			
2870
 
2871
			}#if end
2871
			}#if end
2872
		
2872
 
2873
		#如果要用ssh private key進行認證
2873
		#如果要用ssh private key進行認證
2874
		if($conf["sshPrivateKey"]==="true"){
2874
		if($conf["sshPrivateKey"]==="true"){
2875
		
2875
 
2876
			#可以用 echo "env | grep SSH_CONNECTION=" | ssh username@127.0.0.1 來驗證使用者的ssh連線是否成功
2876
			#可以用 echo "env | grep SSH_CONNECTION=" | ssh username@127.0.0.1 來驗證使用者的ssh連線是否成功
2877
		
2877
 
2878
			#預設用來測試ssh private key 與 username 是否可成功登入的賬戶
2878
			#預設用來測試ssh private key 與 username 是否可成功登入的賬戶
2879
			$sshAgentAcct="qbpwcf";
2879
			$sshAgentAcct="qbpwcf";
2880
		
2880
 
2881
			#確認用來測試登入ssh的使用者qbpwcf存在
2881
			#確認用來測試登入ssh的使用者qbpwcf存在
2882
			#檢查使用者是否存在
2882
			#檢查使用者是否存在
2883
			#函式說明:
2883
			#函式說明:
2884
			#呼叫shell執行系統命令,並取得回傳的內容.
2884
			#呼叫shell執行系統命令,並取得回傳的內容.
2885
			#回傳的結果:
2885
			#回傳的結果:
Line 2917... Line 2917...
2917
			#exec=>http://php.net/manual/en/function.exec.php
2917
			#exec=>http://php.net/manual/en/function.exec.php
2918
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
2918
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
2919
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
2919
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
2920
			$callShell=external::callShell($conf["external::callShell"]);
2920
			$callShell=external::callShell($conf["external::callShell"]);
2921
			unset($conf["external::callShell"]);
2921
			unset($conf["external::callShell"]);
2922
			
2922
 
2923
			#如果執行shell失敗
2923
			#如果執行shell失敗
2924
			if($callShell["status"]==="false"){
2924
			if($callShell["status"]==="false"){
2925
				
2925
 
2926
				#設置執行不正常
2926
				#設置執行不正常
2927
				$result["status"]="false";
2927
				$result["status"]="false";
2928
				
2928
 
2929
				#設置執行錯誤
2929
				#設置執行錯誤
2930
				$result["error"]=$callShell;
2930
				$result["error"]=$callShell;
2931
				
2931
 
2932
				#回傳結果
2932
				#回傳結果
2933
				return $result;
2933
				return $result;
2934
				
2934
 
2935
				}#if end
2935
				}#if end
2936
			
2936
 
2937
			#另外儲存存放ssh使用者設定的目錄
2937
			#另外儲存存放ssh使用者設定的目錄
2938
			$dotsshFolderOfsshAgent="/home/".$sshAgentAcct."/.ssh";
2938
			$dotsshFolderOfsshAgent="/home/".$sshAgentAcct."/.ssh";
2939
			
2939
 
2940
			#如果使用者 $sshAgentAcct 不存在
2940
			#如果使用者 $sshAgentAcct 不存在
2941
			if($callShell["output"][0]==="id: ".$sshAgentAcct.": no such user"){
2941
			if($callShell["output"][0]==="id: ".$sshAgentAcct.": no such user"){
2942
				
2942
 
2943
				#透過 qbpwcf-usock.service 服務建立對應的使用者
2943
				#透過 qbpwcf-usock.service 服務建立對應的使用者
2944
				#函式說明:
2944
				#函式說明:
2945
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
2945
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
2946
				#回傳結果:
2946
				#回傳結果:
2947
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
2947
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 2967... Line 2967...
2967
				#無.
2967
				#無.
2968
				#備註:
2968
				#備註:
2969
				#無.
2969
				#無.
2970
				$execAnyCmdByQBPWCFunixSocket=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
2970
				$execAnyCmdByQBPWCFunixSocket=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
2971
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
2971
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
2972
				
2972
 
2973
				#如果執行shell失敗
2973
				#如果執行shell失敗
2974
				if($execAnyCmdByQBPWCFunixSocket["status"]==="false"){
2974
				if($execAnyCmdByQBPWCFunixSocket["status"]==="false"){
2975
					
2975
 
2976
					#設置執行不正常
2976
					#設置執行不正常
2977
					$result["status"]="false";
2977
					$result["status"]="false";
2978
					
2978
 
2979
					#設置執行錯誤
2979
					#設置執行錯誤
2980
					$result["error"]=$execAnyCmdByQBPWCFunixSocket;
2980
					$result["error"]=$execAnyCmdByQBPWCFunixSocket;
2981
					
2981
 
2982
					#回傳結果
2982
					#回傳結果
2983
					return $result;
2983
					return $result;
2984
					
2984
 
2985
					}#if end
2985
					}#if end
2986
					
2986
 
2987
				#透過 qbpwcf-usock.service 服務建立設置對應使用者的 .ssh 目錄 
2987
				#透過 qbpwcf-usock.service 服務建立設置對應使用者的 .ssh 目錄
2988
				#函式說明:
2988
				#函式說明:
2989
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
2989
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
2990
				#回傳結果:
2990
				#回傳結果:
2991
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
2991
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
2992
				#$result["error"],錯誤訊息陣列.
2992
				#$result["error"],錯誤訊息陣列.
Line 3011... Line 3011...
3011
				#無.
3011
				#無.
3012
				#備註:
3012
				#備註:
3013
				#無.
3013
				#無.
3014
				$execAnyCmdByQBPWCFunixSocket=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3014
				$execAnyCmdByQBPWCFunixSocket=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3015
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3015
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3016
				
3016
 
3017
				#如果執行shell失敗
3017
				#如果執行shell失敗
3018
				if($execAnyCmdByQBPWCFunixSocket["status"]==="false"){
3018
				if($execAnyCmdByQBPWCFunixSocket["status"]==="false"){
3019
					
3019
 
3020
					#設置執行不正常
3020
					#設置執行不正常
3021
					$result["status"]="false";
3021
					$result["status"]="false";
3022
					
3022
 
3023
					#設置執行錯誤
3023
					#設置執行錯誤
3024
					$result["error"]=$execAnyCmdByQBPWCFunixSocket;
3024
					$result["error"]=$execAnyCmdByQBPWCFunixSocket;
3025
					
3025
 
3026
					#回傳結果
3026
					#回傳結果
3027
					return $result;
3027
					return $result;
3028
					
3028
 
3029
					}#if end
3029
					}#if end
3030
				
3030
 
3031
				}#if end
3031
				}#if end
3032
			
3032
 
3033
			#確認 ssh 使用者設定的目錄 $dotsshFolderOfsshAgent 是否存在
3033
			#確認 ssh 使用者設定的目錄 $dotsshFolderOfsshAgent 是否存在
3034
			#函式說明:
3034
			#函式說明:
3035
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3035
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3036
			#回傳結果:
3036
			#回傳結果:
3037
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3037
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3057... Line 3057...
3057
			#無.
3057
			#無.
3058
			#備註:
3058
			#備註:
3059
			#無.
3059
			#無.
3060
			$execAnyCmdByQBPWCFunixSocket=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3060
			$execAnyCmdByQBPWCFunixSocket=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3061
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3061
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3062
			
3062
 
3063
			#如果執行shell失敗
3063
			#如果執行shell失敗
3064
			if($execAnyCmdByQBPWCFunixSocket["status"]==="false"){
3064
			if($execAnyCmdByQBPWCFunixSocket["status"]==="false"){
3065
				
3065
 
3066
				#設置執行不正常
3066
				#設置執行不正常
3067
				$result["status"]="false";
3067
				$result["status"]="false";
3068
				
3068
 
3069
				#設置執行錯誤
3069
				#設置執行錯誤
3070
				$result["error"]=$execAnyCmdByQBPWCFunixSocket;
3070
				$result["error"]=$execAnyCmdByQBPWCFunixSocket;
3071
				
3071
 
3072
				#回傳結果
3072
				#回傳結果
3073
				return $result;
3073
				return $result;
3074
				
3074
 
3075
				}#if end
3075
				}#if end
3076
			
3076
 
3077
			#如果得到的結果不為 json
3077
			#如果得到的結果不為 json
3078
			if(!json_validate($execAnyCmdByQBPWCFunixSocket["content"])){
3078
			if(!json_validate($execAnyCmdByQBPWCFunixSocket["content"])){
3079
			
3079
 
3080
				#設置執行不正常
3080
				#設置執行不正常
3081
				$result["status"]="false";
3081
				$result["status"]="false";
3082
				
3082
 
3083
				#設置執行錯誤
3083
				#設置執行錯誤
3084
				$result["error"]=$execAnyCmdByQBPWCFunixSocket;
3084
				$result["error"]=$execAnyCmdByQBPWCFunixSocket;
3085
				
3085
 
3086
				#回傳結果
3086
				#回傳結果
3087
				return $result;
3087
				return $result;
3088
			
3088
 
3089
				}#if end
3089
				}#if end
3090
			
3090
 
3091
			#解析 json 並轉換成 array
3091
			#解析 json 並轉換成 array
3092
			$execAnyCmdByQBPWCFunixSocket["content"]=(array)(json_decode($execAnyCmdByQBPWCFunixSocket["content"]));
3092
			$execAnyCmdByQBPWCFunixSocket["content"]=(array)(json_decode($execAnyCmdByQBPWCFunixSocket["content"]));
3093
			
3093
 
3094
			#如果沒有找到要存在的 $dotsshFolderOfsshAgent 目錄
3094
			#如果沒有找到要存在的 $dotsshFolderOfsshAgent 目錄
3095
			if(count($execAnyCmdByQBPWCFunixSocket["content"])===0){
3095
			if(count($execAnyCmdByQBPWCFunixSocket["content"])===0){
3096
			
3096
 
3097
				#建立之
3097
				#建立之
3098
				#函式說明:
3098
				#函式說明:
3099
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3099
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3100
				#回傳結果:
3100
				#回傳結果:
3101
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3101
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3121... Line 3121...
3121
				#無.
3121
				#無.
3122
				#備註:
3122
				#備註:
3123
				#無.
3123
				#無.
3124
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3124
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3125
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3125
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3126
				
3126
 
3127
				#如果執行shell失敗
3127
				#如果執行shell失敗
3128
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3128
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3129
					
3129
 
3130
					#設置執行不正常
3130
					#設置執行不正常
3131
					$result["status"]="false";
3131
					$result["status"]="false";
3132
					
3132
 
3133
					#設置執行錯誤
3133
					#設置執行錯誤
3134
					$result["error"]=$createDotsshFolderOfsshAgent;
3134
					$result["error"]=$createDotsshFolderOfsshAgent;
3135
					
3135
 
3136
					#回傳結果
3136
					#回傳結果
3137
					return $result;
3137
					return $result;
3138
					
3138
 
3139
					}#if end
3139
					}#if end
3140
			
3140
 
3141
				}#if end
3141
				}#if end
3142
			
3142
 
3143
			#如果沒有找到要存在的 $dotsshFolderOfsshAgent 目錄
3143
			#如果沒有找到要存在的 $dotsshFolderOfsshAgent 目錄
3144
			else if($execAnyCmdByQBPWCFunixSocket[0]!==$dotsshFolderOfsshAgent){
3144
			else if($execAnyCmdByQBPWCFunixSocket[0]!==$dotsshFolderOfsshAgent){
3145
			
3145
 
3146
				#建立之
3146
				#建立之
3147
				#函式說明:
3147
				#函式說明:
3148
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3148
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3149
				#回傳結果:
3149
				#回傳結果:
3150
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3150
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3170... Line 3170...
3170
				#無.
3170
				#無.
3171
				#備註:
3171
				#備註:
3172
				#無.
3172
				#無.
3173
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3173
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3174
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3174
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3175
				
3175
 
3176
				#如果執行shell失敗
3176
				#如果執行shell失敗
3177
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3177
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3178
					
3178
 
3179
					#設置執行不正常
3179
					#設置執行不正常
3180
					$result["status"]="false";
3180
					$result["status"]="false";
3181
					
3181
 
3182
					#設置執行錯誤
3182
					#設置執行錯誤
3183
					$result["error"]=$createDotsshFolderOfsshAgent;
3183
					$result["error"]=$createDotsshFolderOfsshAgent;
3184
					
3184
 
3185
					#回傳結果
3185
					#回傳結果
3186
					return $result;
3186
					return $result;
3187
					
3187
 
3188
					}#if end
3188
					}#if end
3189
			
3189
 
3190
				}#if end
3190
				}#if end
3191
			
3191
 
3192
			#取得 $dotsshFolderOfsshAgent 的權限與擁有着
3192
			#取得 $dotsshFolderOfsshAgent 的權限與擁有着
3193
			#函式說明:
3193
			#函式說明:
3194
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3194
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3195
			#回傳結果:
3195
			#回傳結果:
3196
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3196
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3216... Line 3216...
3216
			#無.
3216
			#無.
3217
			#備註:
3217
			#備註:
3218
			#無.
3218
			#無.
3219
			$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3219
			$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3220
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3220
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3221
			
3221
 
3222
			#如果執行shell失敗
3222
			#如果執行shell失敗
3223
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3223
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3224
				
3224
 
3225
				#設置執行不正常
3225
				#設置執行不正常
3226
				$result["status"]="false";
3226
				$result["status"]="false";
3227
				
3227
 
3228
				#設置執行錯誤
3228
				#設置執行錯誤
3229
				$result["error"]=$createDotsshFolderOfsshAgent;
3229
				$result["error"]=$createDotsshFolderOfsshAgent;
3230
				
3230
 
3231
				#回傳結果
3231
				#回傳結果
3232
				return $result;
3232
				return $result;
3233
				
3233
 
3234
				}#if end
3234
				}#if end
3235
			
3235
 
3236
			#如果執行異常
3236
			#如果執行異常
3237
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3237
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3238
			
3238
 
3239
				#設置執行不正常
3239
				#設置執行不正常
3240
				$result["status"]="false";
3240
				$result["status"]="false";
3241
				
3241
 
3242
				#設置執行錯誤
3242
				#設置執行錯誤
3243
				$result["error"]=$createDotsshFolderOfsshAgent;
3243
				$result["error"]=$createDotsshFolderOfsshAgent;
3244
				
3244
 
3245
				#回傳結果
3245
				#回傳結果
3246
				return $result;
3246
				return $result;
3247
			
3247
 
3248
				}#if end
3248
				}#if end
3249
				
3249
 
3250
			#如果沒有得到輸出
3250
			#如果沒有得到輸出
3251
			if(!isset($createDotsshFolderOfsshAgent["content"][0])){
3251
			if(!isset($createDotsshFolderOfsshAgent["content"][0])){
3252
			
3252
 
3253
				#設置執行不正常
3253
				#設置執行不正常
3254
				$result["status"]="false";
3254
				$result["status"]="false";
3255
				
3255
 
3256
				#設置執行錯誤
3256
				#設置執行錯誤
3257
				$result["error"]=$createDotsshFolderOfsshAgent;
3257
				$result["error"]=$createDotsshFolderOfsshAgent;
3258
				
3258
 
3259
				#回傳結果
3259
				#回傳結果
3260
				return $result;
3260
				return $result;
3261
			
3261
 
3262
				}#if end
3262
				}#if end
3263
				
3263
 
3264
			#如果輸出結果不是json
3264
			#如果輸出結果不是json
3265
			if(!json_validate($createDotsshFolderOfsshAgent["content"][0])){
3265
			if(!json_validate($createDotsshFolderOfsshAgent["content"][0])){
3266
			
3266
 
3267
				#設置執行不正常
3267
				#設置執行不正常
3268
				$result["status"]="false";
3268
				$result["status"]="false";
3269
				
3269
 
3270
				#設置執行錯誤
3270
				#設置執行錯誤
3271
				$result["error"]=$createDotsshFolderOfsshAgent;
3271
				$result["error"]=$createDotsshFolderOfsshAgent;
3272
				
3272
 
3273
				#回傳結果
3273
				#回傳結果
3274
				return $result;
3274
				return $result;
3275
			
3275
 
3276
				}#if end
3276
				}#if end
3277
			
3277
 
3278
			#解析json
3278
			#解析json
3279
			$node_info=json_decode($createDotsshFolderOfsshAgent["content"][0]);
3279
			$node_info=json_decode($createDotsshFolderOfsshAgent["content"][0]);
3280
			
3280
 
3281
			#若 $dotsshFolderOfsshAgent 的權限,不為 "rwx------"
3281
			#若 $dotsshFolderOfsshAgent 的權限,不為 "rwx------"
3282
			if($node_info->ownerPerm!=="rwx" || $node_info->groupPerm!=="---" || $node_info->otherPerm!=="---"){
3282
			if($node_info->ownerPerm!=="rwx" || $node_info->groupPerm!=="---" || $node_info->otherPerm!=="---"){
3283
			
3283
 
3284
				#更新其權限設置
3284
				#更新其權限設置
3285
				#函式說明:
3285
				#函式說明:
3286
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3286
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3287
				#回傳結果:
3287
				#回傳結果:
3288
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3288
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3308... Line 3308...
3308
				#無.
3308
				#無.
3309
				#備註:
3309
				#備註:
3310
				#無.
3310
				#無.
3311
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3311
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3312
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3312
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3313
				
3313
 
3314
				#如果執行shell失敗
3314
				#如果執行shell失敗
3315
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3315
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3316
					
3316
 
3317
					#設置執行不正常
3317
					#設置執行不正常
3318
					$result["status"]="false";
3318
					$result["status"]="false";
3319
					
3319
 
3320
					#設置執行錯誤
3320
					#設置執行錯誤
3321
					$result["error"]=$createDotsshFolderOfsshAgent;
3321
					$result["error"]=$createDotsshFolderOfsshAgent;
3322
					
3322
 
3323
					#回傳結果
3323
					#回傳結果
3324
					return $result;
3324
					return $result;
3325
					
3325
 
3326
					}#if end
3326
					}#if end
3327
				
3327
 
3328
				}#if end
3328
				}#if end
3329
			
3329
 
3330
			#若 $dotsshFolderOfsshAgent 的擁有着不為 $sshAgentAcct:$sshAgentAcct
3330
			#若 $dotsshFolderOfsshAgent 的擁有着不為 $sshAgentAcct:$sshAgentAcct
3331
			if($node_info->ownerName!==$sshAgentAcct || $node_info->groupName!==$sshAgentAcct){
3331
			if($node_info->ownerName!==$sshAgentAcct || $node_info->groupName!==$sshAgentAcct){
3332
			
3332
 
3333
				#更新其擁有着設置
3333
				#更新其擁有着設置
3334
				#函式說明:
3334
				#函式說明:
3335
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3335
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3336
				#回傳結果:
3336
				#回傳結果:
3337
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3337
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3357... Line 3357...
3357
				#無.
3357
				#無.
3358
				#備註:
3358
				#備註:
3359
				#無.
3359
				#無.
3360
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3360
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3361
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3361
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3362
				
3362
 
3363
				#如果執行shell失敗
3363
				#如果執行shell失敗
3364
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3364
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3365
					
3365
 
3366
					#設置執行不正常
3366
					#設置執行不正常
3367
					$result["status"]="false";
3367
					$result["status"]="false";
3368
					
3368
 
3369
					#設置執行錯誤
3369
					#設置執行錯誤
3370
					$result["error"]=$createDotsshFolderOfsshAgent;
3370
					$result["error"]=$createDotsshFolderOfsshAgent;
3371
					
3371
 
3372
					#回傳結果
3372
					#回傳結果
3373
					return $result;
3373
					return $result;
3374
					
3374
 
3375
					}#if end
3375
					}#if end
3376
			
3376
 
3377
				}#if end
3377
				}#if end
3378
			
3378
 
3379
			#設置要使用的ssh private key
3379
			#設置要使用的ssh private key
3380
			#函式說明:
3380
			#函式說明:
3381
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3381
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3382
			#回傳結果:
3382
			#回傳結果:
3383
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3383
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3403... Line 3403...
3403
			#無.
3403
			#無.
3404
			#備註:
3404
			#備註:
3405
			#無.
3405
			#無.
3406
			$createSshPrivateKey=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3406
			$createSshPrivateKey=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3407
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3407
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3408
			
3408
 
3409
			#如果執行shell失敗
3409
			#如果執行shell失敗
3410
			if($createSshPrivateKey["status"]==="false"){
3410
			if($createSshPrivateKey["status"]==="false"){
3411
				
3411
 
3412
				#設置執行不正常
3412
				#設置執行不正常
3413
				$result["status"]="false";
3413
				$result["status"]="false";
3414
				
3414
 
3415
				#設置執行錯誤
3415
				#設置執行錯誤
3416
				$result["error"]=$createSshPrivateKey;
3416
				$result["error"]=$createSshPrivateKey;
3417
				
3417
 
3418
				#回傳結果
3418
				#回傳結果
3419
				return $result;
3419
				return $result;
3420
				
3420
 
3421
				}#if end
3421
				}#if end
3422
			
3422
 
3423
			#取得 ssh privacy key 檔案的權限與擁有着
3423
			#取得 ssh privacy key 檔案的權限與擁有着
3424
			#函式說明:
3424
			#函式說明:
3425
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3425
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3426
			#回傳結果:
3426
			#回傳結果:
3427
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3427
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3447... Line 3447...
3447
			#無.
3447
			#無.
3448
			#備註:
3448
			#備註:
3449
			#無.
3449
			#無.
3450
			$getSshPrivateKeyFileInfo=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3450
			$getSshPrivateKeyFileInfo=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3451
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3451
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3452
			
3452
 
3453
			#如果執行shell失敗
3453
			#如果執行shell失敗
3454
			if($getSshPrivateKeyFileInfo["status"]==="false"){
3454
			if($getSshPrivateKeyFileInfo["status"]==="false"){
3455
				
3455
 
3456
				#設置執行不正常
3456
				#設置執行不正常
3457
				$result["status"]="false";
3457
				$result["status"]="false";
3458
				
3458
 
3459
				#設置執行錯誤
3459
				#設置執行錯誤
3460
				$result["error"]=$getSshPrivateKeyFileInfo;
3460
				$result["error"]=$getSshPrivateKeyFileInfo;
3461
				
3461
 
3462
				#回傳結果
3462
				#回傳結果
3463
				return $result;
3463
				return $result;
3464
				
3464
 
3465
				}#if end
3465
				}#if end
3466
			
3466
 
3467
			#如果執行異常
3467
			#如果執行異常
3468
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3468
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3469
			
3469
 
3470
				#設置執行不正常
3470
				#設置執行不正常
3471
				$result["status"]="false";
3471
				$result["status"]="false";
3472
				
3472
 
3473
				#設置執行錯誤
3473
				#設置執行錯誤
3474
				$result["error"]=$getSshPrivateKeyFileInfo;
3474
				$result["error"]=$getSshPrivateKeyFileInfo;
3475
				
3475
 
3476
				#回傳結果
3476
				#回傳結果
3477
				return $result;
3477
				return $result;
3478
			
3478
 
3479
				}#if end
3479
				}#if end
3480
				
3480
 
3481
			#如果沒有得到輸出
3481
			#如果沒有得到輸出
3482
			if(!isset($createDotsshFolderOfsshAgent["content"][0])){
3482
			if(!isset($createDotsshFolderOfsshAgent["content"][0])){
3483
			
3483
 
3484
				#設置執行不正常
3484
				#設置執行不正常
3485
				$result["status"]="false";
3485
				$result["status"]="false";
3486
				
3486
 
3487
				#設置執行錯誤
3487
				#設置執行錯誤
3488
				$result["error"]=$createDotsshFolderOfsshAgent;
3488
				$result["error"]=$createDotsshFolderOfsshAgent;
3489
				
3489
 
3490
				#回傳結果
3490
				#回傳結果
3491
				return $result;
3491
				return $result;
3492
			
3492
 
3493
				}#if end
3493
				}#if end
3494
				
3494
 
3495
			#如果輸出結果不是json
3495
			#如果輸出結果不是json
3496
			if(!json_validate($createDotsshFolderOfsshAgent["content"][0])){
3496
			if(!json_validate($createDotsshFolderOfsshAgent["content"][0])){
3497
			
3497
 
3498
				#設置執行不正常
3498
				#設置執行不正常
3499
				$result["status"]="false";
3499
				$result["status"]="false";
3500
				
3500
 
3501
				#設置執行錯誤
3501
				#設置執行錯誤
3502
				$result["error"]=$createDotsshFolderOfsshAgent;
3502
				$result["error"]=$createDotsshFolderOfsshAgent;
3503
				
3503
 
3504
				#回傳結果
3504
				#回傳結果
3505
				return $result;
3505
				return $result;
3506
			
3506
 
3507
				}#if end
3507
				}#if end
3508
			
3508
 
3509
			#解析json
3509
			#解析json
3510
			$node_info=json_decode($createDotsshFolderOfsshAgent["content"][0]);
3510
			$node_info=json_decode($createDotsshFolderOfsshAgent["content"][0]);
3511
			
3511
 
3512
			#若 ssh privacy key 檔案的擁有着不為 $sshAgentAcct:$sshAgentAcct
3512
			#若 ssh privacy key 檔案的擁有着不為 $sshAgentAcct:$sshAgentAcct
3513
			if($node_info->ownerName!==$sshAgentAcct || $node_info->groupName!==$sshAgentAcct){
3513
			if($node_info->ownerName!==$sshAgentAcct || $node_info->groupName!==$sshAgentAcct){
3514
			
3514
 
3515
				#更新 ssh privacy key 的檔案擁有者
3515
				#更新 ssh privacy key 的檔案擁有者
3516
				#函式說明:
3516
				#函式說明:
3517
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3517
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3518
				#回傳結果:
3518
				#回傳結果:
3519
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3519
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3539... Line 3539...
3539
				#無.
3539
				#無.
3540
				#備註:
3540
				#備註:
3541
				#無.
3541
				#無.
3542
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3542
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3543
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3543
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3544
				
3544
 
3545
				#如果執行shell失敗
3545
				#如果執行shell失敗
3546
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3546
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3547
					
3547
 
3548
					#設置執行不正常
3548
					#設置執行不正常
3549
					$result["status"]="false";
3549
					$result["status"]="false";
3550
					
3550
 
3551
					#設置執行錯誤
3551
					#設置執行錯誤
3552
					$result["error"]=$createDotsshFolderOfsshAgent;
3552
					$result["error"]=$createDotsshFolderOfsshAgent;
3553
					
3553
 
3554
					#回傳結果
3554
					#回傳結果
3555
					return $result;
3555
					return $result;
3556
					
3556
 
3557
					}#if end
3557
					}#if end
3558
			
3558
 
3559
				}#if end
3559
				}#if end
3560
			
3560
 
3561
			#若 ssh privacy key 檔案的權限不為 "rw-------"
3561
			#若 ssh privacy key 檔案的權限不為 "rw-------"
3562
			if($node_info->ownerPerm!=="rw-" || $node_info->groupPerm!=="---" || $node_info->otherPerm!=="---"){
3562
			if($node_info->ownerPerm!=="rw-" || $node_info->groupPerm!=="---" || $node_info->otherPerm!=="---"){
3563
				
3563
 
3564
				#更新 ssh privacy key 的檔案擁有者
3564
				#更新 ssh privacy key 的檔案擁有者
3565
				#函式說明:
3565
				#函式說明:
3566
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3566
				#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3567
				#回傳結果:
3567
				#回傳結果:
3568
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3568
				#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3588... Line 3588...
3588
				#無.
3588
				#無.
3589
				#備註:
3589
				#備註:
3590
				#無.
3590
				#無.
3591
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3591
				$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3592
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3592
				unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3593
				
3593
 
3594
				#如果執行shell失敗
3594
				#如果執行shell失敗
3595
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3595
				if($createDotsshFolderOfsshAgent["status"]==="false"){
3596
					
3596
 
3597
					#設置執行不正常
3597
					#設置執行不正常
3598
					$result["status"]="false";
3598
					$result["status"]="false";
3599
					
3599
 
3600
					#設置執行錯誤
3600
					#設置執行錯誤
3601
					$result["error"]=$createDotsshFolderOfsshAgent;
3601
					$result["error"]=$createDotsshFolderOfsshAgent;
3602
					
3602
 
3603
					#回傳結果
3603
					#回傳結果
3604
					return $result;
3604
					return $result;
3605
					
3605
 
3606
					}#if end
3606
					}#if end
3607
			
3607
 
3608
				}#if end
3608
				}#if end
3609
			
3609
 
3610
			#嘗試進行連線,並確認是否成功
3610
			#嘗試進行連線,並確認是否成功
3611
			#函式說明:
3611
			#函式說明:
3612
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3612
			#連線到 usr/bin/qbpwcf-usock.php 產生的  unix domain socket,運行指定的指令.
3613
			#回傳結果:
3613
			#回傳結果:
3614
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
3614
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
Line 3634... Line 3634...
3634
			#無.
3634
			#無.
3635
			#備註:
3635
			#備註:
3636
			#無.
3636
			#無.
3637
			$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3637
			$createDotsshFolderOfsshAgent=sock::execAnyCmdByQBPWCFunixSocket($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3638
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3638
			unset($conf["sock::execAnyCmdByQBPWCFunixSocket"]);
3639
			
3639
 
3640
			#如果執行shell失敗
3640
			#如果執行shell失敗
3641
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3641
			if($createDotsshFolderOfsshAgent["status"]==="false"){
3642
				
3642
 
3643
				#設置執行不正常
3643
				#設置執行不正常
3644
				$result["status"]="false";
3644
				$result["status"]="false";
3645
				
3645
 
3646
				#設置執行錯誤
3646
				#設置執行錯誤
3647
				$result["error"]=$createDotsshFolderOfsshAgent;
3647
				$result["error"]=$createDotsshFolderOfsshAgent;
3648
				
3648
 
3649
				#回傳結果
3649
				#回傳結果
3650
				return $result;
3650
				return $result;
3651
				
3651
 
3652
				}#if end
3652
				}#if end
3653
		
3653
 
3654
			#若得到的輸出未含有ssh登入的資訊(SSH_CLIENT=127.0.0.1 ...)
3654
			#若得到的輸出未含有ssh登入的資訊(SSH_CLIENT=127.0.0.1 ...)
3655
			if($createDotsshFolderOfsshAgent["content"]!=="1"){
3655
			if($createDotsshFolderOfsshAgent["content"]!=="1"){
3656
			
3656
 
3657
				#設置執行正常
3657
				#設置執行正常
3658
				$result["status"]="true";
3658
				$result["status"]="true";
3659
				
3659
 
3660
				#設置使用者驗證失敗
3660
				#設置使用者驗證失敗
3661
				$result["valid"]="false";
3661
				$result["valid"]="false";
3662
				
3662
 
3663
				#設置使用者不存在的警告
3663
				#設置使用者不存在的警告
3664
				$result["warning"][]="使用者 \"".$conf["username"]."\"可能不存在或無法被ssh登入!";
3664
				$result["warning"][]="使用者 \"".$conf["username"]."\"可能不存在或無法被ssh登入!";
3665
				
3665
 
3666
				#回傳結果
3666
				#回傳結果
3667
				return $result;
3667
				return $result;
3668
			
3668
 
3669
				}#if end
3669
				}#if end
3670
			
3670
 
3671
			#設置執行正常
3671
			#設置執行正常
3672
			$result["status"]="true";
3672
			$result["status"]="true";
3673
			
3673
 
3674
			#設置使用者驗證正常
3674
			#設置使用者驗證正常
3675
			$result["valid"]="true";
3675
			$result["valid"]="true";
3676
			
3676
 
3677
			#回傳結果
3677
			#回傳結果
3678
			return $result;
3678
			return $result;
3679
		
3679
 
3680
			}#if end
3680
			}#if end
3681
			
3681
 
3682
		#反之
3682
		#反之
3683
		else{
3683
		else{
3684
			
3684
 
3685
			#可以用 echo 'password' | su username -c 'echo valid' 來檢查使用者密碼是否正確
3685
			#可以用 echo 'password' | su username -c 'echo valid' 來檢查使用者密碼是否正確
3686
			#檢查使用者是否存在
3686
			#檢查使用者是否存在
3687
			#函式說明:
3687
			#函式說明:
3688
			#呼叫shell執行系統命令,並取得回傳的內容.
3688
			#呼叫shell執行系統命令,並取得回傳的內容.
3689
			#回傳的結果:
3689
			#回傳的結果:
Line 3720... Line 3720...
3720
			#exec=>http://php.net/manual/en/function.exec.php
3720
			#exec=>http://php.net/manual/en/function.exec.php
3721
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
3721
			#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
3722
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
3722
			#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
3723
			$callShell=external::callShell($conf["external::callShell"]);
3723
			$callShell=external::callShell($conf["external::callShell"]);
3724
			unset($conf["external::callShell"]);
3724
			unset($conf["external::callShell"]);
3725
			
3725
 
3726
			#如果執行shell失敗
3726
			#如果執行shell失敗
3727
			if($callShell["status"]==="false"){
3727
			if($callShell["status"]==="false"){
3728
				
3728
 
3729
				#設置執行不正常
3729
				#設置執行不正常
3730
				$result["status"]="false";
3730
				$result["status"]="false";
3731
				
3731
 
3732
				#設置執行錯誤
3732
				#設置執行錯誤
3733
				$result["error"]=$callShell;
3733
				$result["error"]=$callShell;
3734
				
3734
 
3735
				#回傳結果
3735
				#回傳結果
3736
				return $result;
3736
				return $result;
3737
				
3737
 
3738
				}#if end
3738
				}#if end
3739
				
3739
 
3740
			#範例輸出:
3740
			#範例輸出:
3741
			#Script started on Sat 05 Nov 2016 06:08:31 PM CST
3741
			#Script started on Sat 05 Nov 2016 06:08:31 PM CST
3742
			#Password: valid
3742
			#Password: valid
3743
			
3743
 
3744
			#如果輸出 "valid"
3744
			#如果輸出 "valid"
3745
			if($callShell["output"][1]=="Password: valid"){
3745
			if($callShell["output"][1]=="Password: valid"){
3746
				
3746
 
3747
				#代表使用者密碼正確
3747
				#代表使用者密碼正確
3748
				
3748
 
3749
				#設置執行正常
3749
				#設置執行正常
3750
				$result["status"]="true";
3750
				$result["status"]="true";
3751
				
3751
 
3752
				#設置使用者驗證失敗
3752
				#設置使用者驗證失敗
3753
				$result["valid"]="true";
3753
				$result["valid"]="true";
3754
				
3754
 
3755
				#回傳結果
3755
				#回傳結果
3756
				return $result;
3756
				return $result;
3757
				
3757
 
3758
				}#if end
3758
				}#if end
3759
			
3759
 
3760
			#反之如果是
3760
			#反之如果是
3761
			else if($callShell["output"][1]==="Password: su: Authentication failure"){
3761
			else if($callShell["output"][1]==="Password: su: Authentication failure"){
3762
				
3762
 
3763
				#代表使用者密碼不正確
3763
				#代表使用者密碼不正確
3764
				$result["status"]="true";
3764
				$result["status"]="true";
3765
				
3765
 
3766
				#設置使用者驗證失敗
3766
				#設置使用者驗證失敗
3767
				$result["valid"]="false";
3767
				$result["valid"]="false";
3768
				
3768
 
3769
				#設置使用者不存在的警告
3769
				#設置使用者不存在的警告
3770
				$result["warning"][]="使用者 \"".$conf["username"]."\" 的密碼不為 \"".$conf["password"]."\" !";
3770
				$result["warning"][]="使用者 \"".$conf["username"]."\" 的密碼不為 \"".$conf["password"]."\" !";
3771
				
3771
 
3772
				#回傳結果
3772
				#回傳結果
3773
				return $result;
3773
				return $result;
3774
				
3774
 
3775
				}#if end
3775
				}#if end
3776
				
3776
 
3777
			#反之
3777
			#反之
3778
			else{
3778
			else{
3779
				
3779
 
3780
				#設置執行不正常
3780
				#設置執行不正常
3781
				$result["status"]="false";
3781
				$result["status"]="false";
3782
				
3782
 
3783
				#設置錯誤訊息
3783
				#設置錯誤訊息
3784
				$result["error"][]="非預期的輸出結果!";
3784
				$result["error"][]="非預期的輸出結果!";
3785
				
3785
 
3786
				#設置錯誤訊息
3786
				#設置錯誤訊息
3787
				$result["error"][]=$callShell;
3787
				$result["error"][]=$callShell;
3788
				
3788
 
3789
				#回傳結果
3789
				#回傳結果
3790
				return $result;
3790
				return $result;
3791
				
3791
 
3792
				}#else end
3792
				}#else end
3793
		
3793
 
3794
			}#else end
3794
			}#else end
3795
			
3795
 
3796
		#設置執行不正常
3796
		#設置執行不正常
3797
		$result["status"]="false";
3797
		$result["status"]="false";
3798
		
3798
 
3799
		#設置錯誤訊息
3799
		#設置錯誤訊息
3800
		$result["error"][]="非預期的結果!";
3800
		$result["error"][]="非預期的結果!";
3801
		
3801
 
3802
		#回傳結果
3802
		#回傳結果
3803
		return $result;
3803
		return $result;
3804
		
3804
 
3805
		}#function validUser end
3805
		}#function validUser end
3806
		
3806
 
3807
	/*
3807
	/*
3808
	#函式說明:
3808
	#函式說明:
3809
	#用php的password_hash方法來單向加密密碼.  
3809
	#用php的password_hash方法來單向加密密碼.
3810
	#回傳結果:
3810
	#回傳結果:
3811
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3811
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3812
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
3812
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
3813
	#$result["function"],當前執行的函式名稱.
3813
	#$result["function"],當前執行的函式名稱.
3814
	#$result["content"],呼叫完WebService所得回傳結果.
3814
	#$result["content"],呼叫完WebService所得回傳結果.
Line 3821... Line 3821...
3821
	#無.
3821
	#無.
3822
	#備註:
3822
	#備註:
3823
	#無.
3823
	#無.
3824
	*/
3824
	*/
3825
	public static function encodePassword(&$conf=array()){
3825
	public static function encodePassword(&$conf=array()){
3826
		
3826
 
3827
		#初始化要回傳的結果
3827
		#初始化要回傳的結果
3828
		$result=array();
3828
		$result=array();
3829
 
3829
 
3830
		#取得當前執行的函數名稱
3830
		#取得當前執行的函數名稱
3831
		$result["function"]=__FUNCTION__;
3831
		$result["function"]=__FUNCTION__;
3832
 
3832
 
3833
		#如果沒有參數
3833
		#如果沒有參數
3834
		if(func_num_args()==0){
3834
		if(func_num_args()==0){
3835
			
3835
 
3836
			#設置執行失敗
3836
			#設置執行失敗
3837
			$result["status"]="false";
3837
			$result["status"]="false";
3838
			
3838
 
3839
			#設置執行錯誤訊息
3839
			#設置執行錯誤訊息
3840
			$result["error"]="函數".$result["function"]."需要參數";
3840
			$result["error"]="函數".$result["function"]."需要參數";
3841
			
3841
 
3842
			#回傳結果
3842
			#回傳結果
3843
			return $result;
3843
			return $result;
3844
			
3844
 
3845
			}#if end
3845
			}#if end
3846
		
3846
 
3847
		#取得參數
3847
		#取得參數
3848
		$result["argu"]=$conf;
3848
		$result["argu"]=$conf;
3849
 
3849
 
3850
		#如果 $conf 不為陣列
3850
		#如果 $conf 不為陣列
3851
		if(gettype($conf)!=="array"){
3851
		if(gettype($conf)!=="array"){
3852
			
3852
 
3853
			#設置執行失敗
3853
			#設置執行失敗
3854
			$result["status"]="false";
3854
			$result["status"]="false";
3855
			
3855
 
3856
			#設置執行錯誤訊息
3856
			#設置執行錯誤訊息
3857
			$result["error"][]="\$conf變數須為陣列形態";
3857
			$result["error"][]="\$conf變數須為陣列形態";
3858
			
3858
 
3859
			#如果傳入的參數為 null
3859
			#如果傳入的參數為 null
3860
			if($conf===null){
3860
			if($conf===null){
3861
				
3861
 
3862
				#設置執行錯誤訊息
3862
				#設置執行錯誤訊息
3863
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3863
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3864
				
3864
 
3865
				}#if end
3865
				}#if end
3866
 
3866
 
3867
			#回傳結果
3867
			#回傳結果
3868
			return $result;
3868
			return $result;
3869
			
3869
 
3870
			}#if end
3870
			}#if end
3871
		
3871
 
3872
		#檢查參數
3872
		#檢查參數
3873
		#函式說明:
3873
		#函式說明:
3874
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3874
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3875
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3875
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3876
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3876
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 3883... Line 3883...
3883
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3883
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3884
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3884
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3885
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3885
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3886
		#必填寫的參數:
3886
		#必填寫的參數:
3887
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3887
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3888
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
3888
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3889
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3889
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3890
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3890
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3891
		#可以省略的參數:
3891
		#可以省略的參數:
3892
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3892
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3893
		#$conf["mustBeFilledVariableName"]=array();
3893
		#$conf["mustBeFilledVariableName"]=array();
Line 3901... Line 3901...
3901
		#$conf["canBeEmpty"]=array();
3901
		#$conf["canBeEmpty"]=array();
3902
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3902
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3903
		#$conf["skipableVariableCanNotBeEmpty"]=array();
3903
		#$conf["skipableVariableCanNotBeEmpty"]=array();
3904
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3904
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3905
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("password");
3905
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("password");
3906
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3906
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3907
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
3907
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
3908
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3908
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3909
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("qbpwcf");
3909
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("qbpwcf");
3910
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3910
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3911
		#$conf["disallowAllSkipableVarIsEmpty"]="";
3911
		#$conf["disallowAllSkipableVarIsEmpty"]="";
Line 3915... Line 3915...
3915
		#$conf["arrayCountEqualCheck"][]=array();
3915
		#$conf["arrayCountEqualCheck"][]=array();
3916
		#參考資料來源:
3916
		#參考資料來源:
3917
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3917
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3918
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3918
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3919
		unset($conf["variableCheck::checkArguments"]);
3919
		unset($conf["variableCheck::checkArguments"]);
3920
		
3920
 
3921
		#如果驗證失敗
3921
		#如果驗證失敗
3922
		if($checkArguments["status"]==="false"){
3922
		if($checkArguments["status"]==="false"){
3923
			
3923
 
3924
			#設置執行失敗
3924
			#設置執行失敗
3925
			$result["status"]="false";
3925
			$result["status"]="false";
3926
			
3926
 
3927
			#設置錯誤訊息
3927
			#設置錯誤訊息
3928
			$result["error"]=$checkArguments;
3928
			$result["error"]=$checkArguments;
3929
			
3929
 
3930
			#回傳結果
3930
			#回傳結果
3931
			return $result;
3931
			return $result;
3932
			
3932
 
3933
			}#if end
3933
			}#if end
3934
			
3934
 
3935
		#如果驗證不成功
3935
		#如果驗證不成功
3936
		if($checkArguments["passed"]==="false"){
3936
		if($checkArguments["passed"]==="false"){
3937
			
3937
 
3938
			#設置執行失敗
3938
			#設置執行失敗
3939
			$result["status"]="false";
3939
			$result["status"]="false";
3940
			
3940
 
3941
			#設置錯誤訊息
3941
			#設置錯誤訊息
3942
			$result["error"]=$checkArguments;
3942
			$result["error"]=$checkArguments;
3943
			
3943
 
3944
			#回傳結果
3944
			#回傳結果
3945
			return $result;
3945
			return $result;
3946
			
3946
 
3947
			}#if end
3947
			}#if end
3948
		
3948
 
3949
		#取得加密好的密碼
3949
		#取得加密好的密碼
3950
		$result["content"]=password_hash($conf["password"],PASSWORD_DEFAULT);
3950
		$result["content"]=password_hash($conf["password"],PASSWORD_DEFAULT);
3951
		
3951
 
3952
		#設置執行正常
3952
		#設置執行正常
3953
		$result["status"]="true";
3953
		$result["status"]="true";
3954
		
3954
 
3955
		#回傳結果
3955
		#回傳結果
3956
		return $result;
3956
		return $result;
3957
		
3957
 
3958
		}#function encodePassword end
3958
		}#function encodePassword end
3959
		
3959
 
3960
	/*
3960
	/*
3961
	#函式說明:
3961
	#函式說明:
3962
	#用php的password_verify方法來驗證密碼是否正確.  
3962
	#用php的password_verify方法來驗證密碼是否正確.
3963
	#回傳結果:
3963
	#回傳結果:
3964
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3964
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3965
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
3965
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
3966
	#$result["function"],當前執行的函式名稱.
3966
	#$result["function"],當前執行的函式名稱.
3967
	#$result["content"],呼叫完WebService所得回傳結果.
3967
	#$result["content"],呼叫完WebService所得回傳結果.
Line 3976... Line 3976...
3976
	#無.
3976
	#無.
3977
	#備註:
3977
	#備註:
3978
	#無.
3978
	#無.
3979
	*/
3979
	*/
3980
	public static function validPassword(&$conf=array()){
3980
	public static function validPassword(&$conf=array()){
3981
		
3981
 
3982
		#初始化要回傳的結果
3982
		#初始化要回傳的結果
3983
		$result=array();
3983
		$result=array();
3984
 
3984
 
3985
		#取得當前執行的函數名稱
3985
		#取得當前執行的函數名稱
3986
		$result["function"]=__FUNCTION__;
3986
		$result["function"]=__FUNCTION__;
3987
 
3987
 
3988
		#如果沒有參數
3988
		#如果沒有參數
3989
		if(func_num_args()==0){
3989
		if(func_num_args()==0){
3990
			
3990
 
3991
			#設置執行失敗
3991
			#設置執行失敗
3992
			$result["status"]="false";
3992
			$result["status"]="false";
3993
			
3993
 
3994
			#設置執行錯誤訊息
3994
			#設置執行錯誤訊息
3995
			$result["error"]="函數".$result["function"]."需要參數";
3995
			$result["error"]="函數".$result["function"]."需要參數";
3996
			
3996
 
3997
			#回傳結果
3997
			#回傳結果
3998
			return $result;
3998
			return $result;
3999
			
3999
 
4000
			}#if end
4000
			}#if end
4001
		
4001
 
4002
		#取得參數
4002
		#取得參數
4003
		$result["argu"]=$conf;
4003
		$result["argu"]=$conf;
4004
 
4004
 
4005
		#如果 $conf 不為陣列
4005
		#如果 $conf 不為陣列
4006
		if(gettype($conf)!=="array"){
4006
		if(gettype($conf)!=="array"){
4007
			
4007
 
4008
			#設置執行失敗
4008
			#設置執行失敗
4009
			$result["status"]="false";
4009
			$result["status"]="false";
4010
			
4010
 
4011
			#設置執行錯誤訊息
4011
			#設置執行錯誤訊息
4012
			$result["error"][]="\$conf變數須為陣列形態";
4012
			$result["error"][]="\$conf變數須為陣列形態";
4013
			
4013
 
4014
			#如果傳入的參數為 null
4014
			#如果傳入的參數為 null
4015
			if($conf===null){
4015
			if($conf===null){
4016
				
4016
 
4017
				#設置執行錯誤訊息
4017
				#設置執行錯誤訊息
4018
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4018
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4019
				
4019
 
4020
				}#if end
4020
				}#if end
4021
 
4021
 
4022
			#回傳結果
4022
			#回傳結果
4023
			return $result;
4023
			return $result;
4024
			
4024
 
4025
			}#if end
4025
			}#if end
4026
		
4026
 
4027
		#檢查參數
4027
		#檢查參數
4028
		#函式說明:
4028
		#函式說明:
4029
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4029
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4030
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4030
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4031
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4031
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 4038... Line 4038...
4038
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4038
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4039
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4039
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4040
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4040
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4041
		#必填寫的參數:
4041
		#必填寫的參數:
4042
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4042
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4043
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
4043
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4044
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4044
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4045
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4045
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4046
		#可以省略的參數:
4046
		#可以省略的參數:
4047
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4047
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4048
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","password");
4048
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","password");
Line 4056... Line 4056...
4056
		#$conf["canBeEmpty"]=array();
4056
		#$conf["canBeEmpty"]=array();
4057
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4057
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4058
		#$conf["skipableVariableCanNotBeEmpty"]=array();
4058
		#$conf["skipableVariableCanNotBeEmpty"]=array();
4059
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4059
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4060
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("password");
4060
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("password");
4061
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4061
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4062
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4062
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4063
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4063
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4064
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("qbpwcf");
4064
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("qbpwcf");
4065
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4065
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4066
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4066
		#$conf["disallowAllSkipableVarIsEmpty"]="";
Line 4070... Line 4070...
4070
		#$conf["arrayCountEqualCheck"][]=array();
4070
		#$conf["arrayCountEqualCheck"][]=array();
4071
		#參考資料來源:
4071
		#參考資料來源:
4072
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4072
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4073
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4073
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4074
		unset($conf["variableCheck::checkArguments"]);
4074
		unset($conf["variableCheck::checkArguments"]);
4075
		
4075
 
4076
		#如果驗證失敗
4076
		#如果驗證失敗
4077
		if($checkArguments["status"]==="false"){
4077
		if($checkArguments["status"]==="false"){
4078
			
4078
 
4079
			#設置執行失敗
4079
			#設置執行失敗
4080
			$result["status"]="false";
4080
			$result["status"]="false";
4081
			
4081
 
4082
			#設置錯誤訊息
4082
			#設置錯誤訊息
4083
			$result["error"]=$checkArguments;
4083
			$result["error"]=$checkArguments;
4084
			
4084
 
4085
			#回傳結果
4085
			#回傳結果
4086
			return $result;
4086
			return $result;
4087
			
4087
 
4088
			}#if end
4088
			}#if end
4089
			
4089
 
4090
		#如果驗證不成功
4090
		#如果驗證不成功
4091
		if($checkArguments["passed"]==="false"){
4091
		if($checkArguments["passed"]==="false"){
4092
			
4092
 
4093
			#設置執行失敗
4093
			#設置執行失敗
4094
			$result["status"]="false";
4094
			$result["status"]="false";
4095
			
4095
 
4096
			#設置錯誤訊息
4096
			#設置錯誤訊息
4097
			$result["error"]=$checkArguments;
4097
			$result["error"]=$checkArguments;
4098
			
4098
 
4099
			#回傳結果
4099
			#回傳結果
4100
			return $result;
4100
			return $result;
4101
			
4101
 
4102
			}#if end
4102
			}#if end
4103
		
4103
 
4104
		#儲存驗證後的結果
4104
		#儲存驗證後的結果
4105
		$pass=password_verify($conf["input"],$conf["password"]);
4105
		$pass=password_verify($conf["input"],$conf["password"]);
4106
		
4106
 
4107
		#如果驗證成功
4107
		#如果驗證成功
4108
		if($pass){
4108
		if($pass){
4109
			
4109
 
4110
			#設置驗證成功
4110
			#設置驗證成功
4111
			$result["passed"]="true";
4111
			$result["passed"]="true";
4112
			
4112
 
4113
			}#if end
4113
			}#if end
4114
			
4114
 
4115
		#反之驗證失敗
4115
		#反之驗證失敗
4116
		else{
4116
		else{
4117
			
4117
 
4118
			#設置驗證成功
4118
			#設置驗證成功
4119
			$result["passed"]="false";
4119
			$result["passed"]="false";
4120
			
4120
 
4121
			}#else end
4121
			}#else end
4122
		
4122
 
4123
		#設置執行正常
4123
		#設置執行正常
4124
		$result["status"]="true";
4124
		$result["status"]="true";
4125
		
4125
 
4126
		#回傳結果
4126
		#回傳結果
4127
		return $result;
4127
		return $result;
4128
		
4128
 
4129
		}#function validPassword end
4129
		}#function validPassword end
4130
 
4130
 
4131
	/*
4131
	/*
4132
	#函式說明:
4132
	#函式說明:
4133
	#id指令來取得目標賬號的群組資訊
4133
	#id指令來取得目標賬號的群組資訊
Line 4148... Line 4148...
4148
	#無.
4148
	#無.
4149
	#備註:
4149
	#備註:
4150
	#無.
4150
	#無.
4151
	*/
4151
	*/
4152
	public static function getUserGroup(&$conf){
4152
	public static function getUserGroup(&$conf){
4153
	
4153
 
4154
		#初始化要回傳的結果
4154
		#初始化要回傳的結果
4155
		$result=array();
4155
		$result=array();
4156
 
4156
 
4157
		#取得當前執行的函數名稱
4157
		#取得當前執行的函數名稱
4158
		$result["function"]=__FUNCTION__;
4158
		$result["function"]=__FUNCTION__;
4159
 
4159
 
4160
		#如果沒有參數
4160
		#如果沒有參數
4161
		if(func_num_args()==0){
4161
		if(func_num_args()==0){
4162
			
4162
 
4163
			#設置執行失敗
4163
			#設置執行失敗
4164
			$result["status"]="false";
4164
			$result["status"]="false";
4165
			
4165
 
4166
			#設置執行錯誤訊息
4166
			#設置執行錯誤訊息
4167
			$result["error"]="函數".$result["function"]."需要參數";
4167
			$result["error"]="函數".$result["function"]."需要參數";
4168
			
4168
 
4169
			#回傳結果
4169
			#回傳結果
4170
			return $result;
4170
			return $result;
4171
			
4171
 
4172
			}#if end
4172
			}#if end
4173
		
4173
 
4174
		#取得參數
4174
		#取得參數
4175
		$result["argu"]=$conf;
4175
		$result["argu"]=$conf;
4176
 
4176
 
4177
		#如果 $conf 不為陣列
4177
		#如果 $conf 不為陣列
4178
		if(gettype($conf)!=="array"){
4178
		if(gettype($conf)!=="array"){
4179
			
4179
 
4180
			#設置執行失敗
4180
			#設置執行失敗
4181
			$result["status"]="false";
4181
			$result["status"]="false";
4182
			
4182
 
4183
			#設置執行錯誤訊息
4183
			#設置執行錯誤訊息
4184
			$result["error"][]="\$conf變數須為陣列形態";
4184
			$result["error"][]="\$conf變數須為陣列形態";
4185
			
4185
 
4186
			#如果傳入的參數為 null
4186
			#如果傳入的參數為 null
4187
			if($conf===null){
4187
			if($conf===null){
4188
				
4188
 
4189
				#設置執行錯誤訊息
4189
				#設置執行錯誤訊息
4190
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4190
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4191
				
4191
 
4192
				}#if end
4192
				}#if end
4193
 
4193
 
4194
			#回傳結果
4194
			#回傳結果
4195
			return $result;
4195
			return $result;
4196
			
4196
 
4197
			}#if end
4197
			}#if end
4198
		
4198
 
4199
		#函式說明:
4199
		#函式說明:
4200
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
4200
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
4201
		#回傳結果:
4201
		#回傳結果:
4202
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4202
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4203
		#$result["error"],執行不正常結束的錯訊息陣列.
4203
		#$result["error"],執行不正常結束的錯訊息陣列.
Line 4248... Line 4248...
4248
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4248
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4249
		#備註:
4249
		#備註:
4250
		#無.
4250
		#無.
4251
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4251
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4252
		unset($conf["variableCheck::checkArguments"]);
4252
		unset($conf["variableCheck::checkArguments"]);
4253
		
4253
 
4254
		#如果驗證失敗
4254
		#如果驗證失敗
4255
		if($checkArguments["status"]==="false"){
4255
		if($checkArguments["status"]==="false"){
4256
			
4256
 
4257
			#設置執行失敗
4257
			#設置執行失敗
4258
			$result["status"]="false";
4258
			$result["status"]="false";
4259
			
4259
 
4260
			#設置錯誤訊息
4260
			#設置錯誤訊息
4261
			$result["error"]=$checkArguments;
4261
			$result["error"]=$checkArguments;
4262
			
4262
 
4263
			#回傳結果
4263
			#回傳結果
4264
			return $result;
4264
			return $result;
4265
			
4265
 
4266
			}#if end
4266
			}#if end
4267
			
4267
 
4268
		#如果驗證不成功
4268
		#如果驗證不成功
4269
		if($checkArguments["passed"]==="false"){
4269
		if($checkArguments["passed"]==="false"){
4270
			
4270
 
4271
			#設置執行失敗
4271
			#設置執行失敗
4272
			$result["status"]="false";
4272
			$result["status"]="false";
4273
			
4273
 
4274
			#設置錯誤訊息
4274
			#設置錯誤訊息
4275
			$result["error"]=$checkArguments;
4275
			$result["error"]=$checkArguments;
4276
			
4276
 
4277
			#回傳結果
4277
			#回傳結果
4278
			return $result;
4278
			return $result;
4279
			
4279
 
4280
			}#if end
4280
			}#if end
4281
	
4281
 
4282
		#函式說明:
4282
		#函式說明:
4283
		#呼叫shell執行系統命令,並取得回傳的內容.
4283
		#呼叫shell執行系統命令,並取得回傳的內容.
4284
		#回傳結果:
4284
		#回傳結果:
4285
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4285
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4286
		#$result["error"],錯誤訊息陣列.
4286
		#$result["error"],錯誤訊息陣列.
Line 4338... Line 4338...
4338
		#備註:
4338
		#備註:
4339
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
4339
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
4340
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
4340
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
4341
		$callShell=external::callShell($conf["external::callShell"]);
4341
		$callShell=external::callShell($conf["external::callShell"]);
4342
		unset($conf["external::callShell"]);
4342
		unset($conf["external::callShell"]);
4343
	
4343
 
4344
		#如果執行異常
4344
		#如果執行異常
4345
		if($callShell["status"]==="false"){
4345
		if($callShell["status"]==="false"){
4346
		
4346
 
4347
			#設置執行失敗
4347
			#設置執行失敗
4348
			$result["status"]="false";
4348
			$result["status"]="false";
4349
			
4349
 
4350
			#設置錯誤訊息
4350
			#設置錯誤訊息
4351
			$result["error"]=$callShell;
4351
			$result["error"]=$callShell;
4352
			
4352
 
4353
			#回傳結果
4353
			#回傳結果
4354
			return $result;
4354
			return $result;
4355
		
4355
 
4356
			}#if end
4356
			}#if end
4357
			
4357
 
4358
		#若輸出不對
4358
		#若輸出不對
4359
		if(count($callShell["content"])===0){
4359
		if(count($callShell["content"])===0){
4360
		
4360
 
4361
			#設置執行失敗
4361
			#設置執行失敗
4362
			$result["status"]="false";
4362
			$result["status"]="false";
4363
			
4363
 
4364
			#設置錯誤訊息
4364
			#設置錯誤訊息
4365
			$result["error"]=$callShell;
4365
			$result["error"]=$callShell;
4366
			
4366
 
4367
			#回傳結果
4367
			#回傳結果
4368
			return $result;
4368
			return $result;
4369
		
4369
 
4370
			}#if end
4370
			}#if end
4371
			
4371
 
4372
		#解析輸出資訊
4372
		#解析輸出資訊
4373
		#範例輸出:
4373
		#範例輸出:
4374
		#uid=1000(liveuser) gid=1000(liveuser) groups=1000(liveuser),10(wheel),1002(web)
4374
		#uid=1000(liveuser) gid=1000(liveuser) groups=1000(liveuser),10(wheel),1002(web)
4375
		
4375
 
4376
		#函式說明:
4376
		#函式說明:
4377
		#尋找字串中是否含有符合格式的內容,且回傳解析好的變數數值.
4377
		#尋找字串中是否含有符合格式的內容,且回傳解析好的變數數值.
4378
		#回傳結果:
4378
		#回傳結果:
4379
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4379
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4380
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4380
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 4397... Line 4397...
4397
		#無.
4397
		#無.
4398
		#備註:
4398
		#備註:
4399
		#無.
4399
		#無.
4400
		$findSpecifyStrFormat=search::findSpecifyStrFormat($conf["search::findSpecifyStrFormat"]);
4400
		$findSpecifyStrFormat=search::findSpecifyStrFormat($conf["search::findSpecifyStrFormat"]);
4401
		unset($conf["search::findSpecifyStrFormat"]);
4401
		unset($conf["search::findSpecifyStrFormat"]);
4402
	
4402
 
4403
		#如果執行異常
4403
		#如果執行異常
4404
		if($findSpecifyStrFormat["status"]==="false"){
4404
		if($findSpecifyStrFormat["status"]==="false"){
4405
		
4405
 
4406
			#設置執行失敗
4406
			#設置執行失敗
4407
			$result["status"]="false";
4407
			$result["status"]="false";
4408
			
4408
 
4409
			#設置錯誤訊息
4409
			#設置錯誤訊息
4410
			$result["error"]=$findSpecifyStrFormat;
4410
			$result["error"]=$findSpecifyStrFormat;
4411
			
4411
 
4412
			#回傳結果
4412
			#回傳結果
4413
			return $result;
4413
			return $result;
4414
		
4414
 
4415
			}#if end
4415
			}#if end
4416
			
4416
 
4417
		#如果沒有符合格式的內容
4417
		#如果沒有符合格式的內容
4418
		if($findSpecifyStrFormat["found"]==="false"){
4418
		if($findSpecifyStrFormat["found"]==="false"){
4419
		
4419
 
4420
			#設置執行失敗
4420
			#設置執行失敗
4421
			$result["status"]="false";
4421
			$result["status"]="false";
4422
			
4422
 
4423
			#設置錯誤訊息
4423
			#設置錯誤訊息
4424
			$result["error"]=$findSpecifyStrFormat;
4424
			$result["error"]=$findSpecifyStrFormat;
4425
			
4425
 
4426
			#回傳結果
4426
			#回傳結果
4427
			return $result;
4427
			return $result;
4428
		
4428
 
4429
			}#if end
4429
			}#if end
4430
			
4430
 
4431
		#另存使用者id
4431
		#另存使用者id
4432
		$userId=$findSpecifyStrFormat["parsedVar"]["userId"][0];
4432
		$userId=$findSpecifyStrFormat["parsedVar"]["userId"][0];
4433
		
4433
 
4434
		#另存群組的id
4434
		#另存群組的id
4435
		$groupId=$findSpecifyStrFormat["parsedVar"]["groupId"][0];
4435
		$groupId=$findSpecifyStrFormat["parsedVar"]["groupId"][0];
4436
		
4436
 
4437
		#另存隸屬其他群組的資訊
4437
		#另存隸屬其他群組的資訊
4438
		$othergGroupStr=$findSpecifyStrFormat["parsedVar"]["othergGroupStr"][0];
4438
		$othergGroupStr=$findSpecifyStrFormat["parsedVar"]["othergGroupStr"][0];
4439
		
4439
 
4440
		#如果有其他群組資訊
4440
		#如果有其他群組資訊
4441
		if(!empty($othergGroupStr)){
4441
		if(!empty($othergGroupStr)){
4442
		
4442
 
4443
			#用逗號切割結果出來
4443
			#用逗號切割結果出來
4444
			#函式說明:
4444
			#函式說明:
4445
			#將固定格式的字串分開,並回傳分開的結果.
4445
			#將固定格式的字串分開,並回傳分開的結果.
4446
			#回傳結果:
4446
			#回傳結果:
4447
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4447
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 4464... Line 4464...
4464
			#無.
4464
			#無.
4465
			#備註:
4465
			#備註:
4466
			#無.
4466
			#無.
4467
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4467
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4468
			unset($conf["stringProcess::spiltString"]);
4468
			unset($conf["stringProcess::spiltString"]);
4469
		
4469
 
4470
			#如果執行異常
4470
			#如果執行異常
4471
			if($spiltString["status"]==="false"){
4471
			if($spiltString["status"]==="false"){
4472
			
4472
 
4473
				#設置執行失敗
4473
				#設置執行失敗
4474
				$result["status"]="false";
4474
				$result["status"]="false";
4475
				
4475
 
4476
				#設置錯誤訊息
4476
				#設置錯誤訊息
4477
				$result["error"]=$spiltString;
4477
				$result["error"]=$spiltString;
4478
				
4478
 
4479
				#回傳結果
4479
				#回傳結果
4480
				return $result;
4480
				return $result;
4481
			
4481
 
4482
				}#if end
4482
				}#if end
4483
				
4483
 
4484
			#如果沒有符合格式的內容
4484
			#如果沒有符合格式的內容
4485
			if($spiltString["found"]==="false"){
4485
			if($spiltString["found"]==="false"){
4486
			
4486
 
4487
				#設置執行失敗
4487
				#設置執行失敗
4488
				$result["status"]="false";
4488
				$result["status"]="false";
4489
				
4489
 
4490
				#設置錯誤訊息
4490
				#設置錯誤訊息
4491
				$result["error"]=$spiltString;
4491
				$result["error"]=$spiltString;
4492
				
4492
 
4493
				#回傳結果
4493
				#回傳結果
4494
				return $result;
4494
				return $result;
4495
			
4495
 
4496
				}#if end
4496
				}#if end
4497
				
4497
 
4498
			#依照分隔成的段數
4498
			#依照分隔成的段數
4499
			foreach($spiltString["dataArray"] as $oginfo){
4499
			foreach($spiltString["dataArray"] as $oginfo){
4500
			
4500
 
4501
				#解析groudId跟groupName
4501
				#解析groudId跟groupName
4502
				
4502
 
4503
				#範例輸出:
4503
				#範例輸出:
4504
				#10(wheel)
4504
				#10(wheel)
4505
				
4505
 
4506
				#函式說明:
4506
				#函式說明:
4507
				#尋找字串中是否含有符合格式的內容,且回傳解析好的變數數值.
4507
				#尋找字串中是否含有符合格式的內容,且回傳解析好的變數數值.
4508
				#回傳結果:
4508
				#回傳結果:
4509
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4509
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4510
				#$reuslt["error"],執行不正常結束的錯訊息陣列.
4510
				#$reuslt["error"],執行不正常結束的錯訊息陣列.
Line 4527... Line 4527...
4527
				#無.
4527
				#無.
4528
				#備註:
4528
				#備註:
4529
				#無.
4529
				#無.
4530
				$findSpecifyStrFormat=search::findSpecifyStrFormat($conf["search::findSpecifyStrFormat"]);
4530
				$findSpecifyStrFormat=search::findSpecifyStrFormat($conf["search::findSpecifyStrFormat"]);
4531
				unset($conf["search::findSpecifyStrFormat"]);
4531
				unset($conf["search::findSpecifyStrFormat"]);
4532
			
4532
 
4533
				#如果執行異常
4533
				#如果執行異常
4534
				if($findSpecifyStrFormat["status"]==="false"){
4534
				if($findSpecifyStrFormat["status"]==="false"){
4535
				
4535
 
4536
					#設置執行失敗
4536
					#設置執行失敗
4537
					$result["status"]="false";
4537
					$result["status"]="false";
4538
					
4538
 
4539
					#設置錯誤訊息
4539
					#設置錯誤訊息
4540
					$result["error"]=$findSpecifyStrFormat;
4540
					$result["error"]=$findSpecifyStrFormat;
4541
					
4541
 
4542
					#回傳結果
4542
					#回傳結果
4543
					return $result;
4543
					return $result;
4544
				
4544
 
4545
					}#if end
4545
					}#if end
4546
					
4546
 
4547
				#如果格式異常
4547
				#如果格式異常
4548
				if($findSpecifyStrFormat["found"]==="false"){
4548
				if($findSpecifyStrFormat["found"]==="false"){
4549
				
4549
 
4550
					#設置執行失敗
4550
					#設置執行失敗
4551
					$result["status"]="false";
4551
					$result["status"]="false";
4552
					
4552
 
4553
					#設置錯誤訊息
4553
					#設置錯誤訊息
4554
					$result["error"]=$findSpecifyStrFormat;
4554
					$result["error"]=$findSpecifyStrFormat;
4555
					
4555
 
4556
					#回傳結果
4556
					#回傳結果
4557
					return $result;
4557
					return $result;
4558
				
4558
 
4559
					}#if end
4559
					}#if end
4560
					
4560
 
4561
				#如果是 user 自己的群組
4561
				#如果是 user 自己的群組
4562
				if($findSpecifyStrFormat["parsedVar"]["groupName"][0]===$user){
4562
				if($findSpecifyStrFormat["parsedVar"]["groupName"][0]===$user){
4563
				
4563
 
4564
					#跳過該群組資訊
4564
					#跳過該群組資訊
4565
					continue;
4565
					continue;
4566
				
4566
 
4567
					}#if end	
4567
					}#if end
4568
					
4568
 
4569
				#儲存其他 group id
4569
				#儲存其他 group id
4570
				$otherGroupId[]=$findSpecifyStrFormat["parsedVar"]["groupId"][0];
4570
				$otherGroupId[]=$findSpecifyStrFormat["parsedVar"]["groupId"][0];
4571
			
4571
 
4572
				#儲存其他 group name
4572
				#儲存其他 group name
4573
				$otherGroupName[]=$findSpecifyStrFormat["parsedVar"]["groupName"][0];
4573
				$otherGroupName[]=$findSpecifyStrFormat["parsedVar"]["groupName"][0];
4574
			
4574
 
4575
				}#foreach end
4575
				}#foreach end
4576
		
4576
 
4577
			}#if end
4577
			}#if end
4578
			
4578
 
4579
		#設置 group id 結果
4579
		#設置 group id 結果
4580
		$result["content"]["groupId"]=$groupId;
4580
		$result["content"]["groupId"]=$groupId;
4581
		
4581
 
4582
		#設置隸屬的 group 名稱
4582
		#設置隸屬的 group 名稱
4583
		$result["content"]["belongGroupName"]=$otherGroupName;
4583
		$result["content"]["belongGroupName"]=$otherGroupName;
4584
	
4584
 
4585
		#設置隸屬的 group id
4585
		#設置隸屬的 group id
4586
		$result["content"]["belongGroupId"]=$otherGroupId;
4586
		$result["content"]["belongGroupId"]=$otherGroupId;
4587
		
4587
 
4588
		#設置執行正常
4588
		#設置執行正常
4589
		$result["status"]="true";
4589
		$result["status"]="true";
4590
		
4590
 
4591
		#回傳結果 
4591
		#回傳結果
4592
		return $result;
4592
		return $result;
4593
	
4593
 
4594
		}#function getUserGroup end 
4594
		}#function getUserGroup end
4595
 
4595
 
4596
	}#class authenticate end
4596
	}#class authenticate end
4597
	
4597
 
4598
?>
4598
?>