Subversion Repositories qbpwcf-lib(archive)

Rev

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

Rev Author Line No. Line
1 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
844 liveuser 6
    Copyright (C) 2015~2025 Min-Jhin,Chen
1 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
248 liveuser 26
/*
27
類別說明:
28
可以取得用戶端/伺服端資訊的類別.
29
備註:
30
無.
31
*/
1 liveuser 32
class csInformation{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#參考資料:
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	*/
47
	public function __call($method,$arguments){
48
 
49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
51
 
52
		#設置執行不正常
53
		$result["status"]="false";
54
 
55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
57
 
58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
60
 
61
		#回傳結果
62
		return $result;
63
 
64
		}#function __call end
65
 
66
	/*
67
	#函式說明:
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
69
	#回傳結果:
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
71
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
72
	#$result["function"],當前執行的函式名稱.
73
	#必填參數:
74
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
75
	#$arguments,陣列,為呼叫方法時所用的參數.
76
	#參考資料:
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
78
	*/
79
	public static function __callStatic($method,$arguments){
80
 
81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
83
 
84
		#設置執行不正常
85
		$result["status"]="false";
86
 
87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
89
 
90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
92
 
93
		#回傳結果
94
		return $result;
95
 
96
		}#function __callStatic end
97
 
98
	/*
99
	#函式說明:
100
	#取得執行該php的帳戶名稱.
101
	#回傳結果:
733 liveuser 102
	#$result,字串,運行該php的使用者帳戶.若為空字串則代表非使用者直接觸發.
1 liveuser 103
	#必填參數:
104
	#無.
105
	#可省略參數:
106
	#無.
180 liveuser 107
	#參考資料:
108
	#無.
1 liveuser 109
	#備註:
110
	#無.
111
	*/
112
	public static function runner(){
113
 
733 liveuser 114
		#函式說明:
115
		#取得用戶端的資訊,並依據需要寫入到資料表裡面
116
		#回傳的結果:
117
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
118
		#$result["error"],錯誤訊息.
119
		#$result["function"],檔前執行的函數名稱.
120
		#$result["mode"],當前的模式是"cmd"還是"web".
121
		#$result["userBrowserType"],爲使用者的瀏覽器資訊
122
		#$result["userIp"],爲使用者的IP
123
		#$result["serverIp"],為伺服器的IP
124
		#$result["server_name"],伺服器的 domain name
125
		#$result["scheme"],通訊協定
126
		#$result["serverPort"],伺服器給對外下載網頁的port
127
		#$result["requestUri"],爲使用者要求的網址/php檔案.
128
		#$result["requestUriFull"],為使用者要求的完整網址/php檔案路徑.
129
		#$result["clientRequestIP"],用戶端要求的ip與port
130
		#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
131
		#$result["phpUser"],運行該php的使用者帳戶.若為空字串則代表非使用者直接觸發.
132
		#$result["phpUserType"],運行該php的使用者帳戶類型,可能有"regular(no wheel member)","wheel(can use sudo)","intrinsic(root)","system(qemu,apache,...)".
133
		#$result["header"],接收到的 header 陣列.
134
		#$result["body"],接收到的 body 字串.
135
		#必填參數:
136
		#$conf["getAccount"],字串,是否要取得帳號,"true"代表要;"false"代表不要.
137
		$conf["csInformation::getConnectionInfo"]["getAccount"]="true";
138
		#可省略參數:
139
		#$conf["accountVar"],字串,帳號儲存在哪個變數裏面,預設爲$_SESSION["username"].
140
		#$conf["accountVar"]=$_SESSION["username"];
141
		#$conf["saveToDb"],字串,是否要除儲存到資料庫,"true"為要儲存",預設為"false"不儲存.
142
		#$conf["saveToDb"]="true";
143
		#$conf["dbAddress"],字串,爲mysql/mariadb server的位置,若saveToDb設為"true",則該參數為必填.
144
		#$conf["dbAddress"]=$dbAddress;
145
		#$conf["dbAccount"],字串,爲用於連入mysql/mariadb server時要使用的帳號,若saveToDb設為"true",則該參數為必填.
146
		#$conf["dbAccount"]=$dbAccount;
147
		#$conf["dbName"],字串,要選取的資料庫名稱,若saveToDb設為"true",則該參數為必填.
148
		#$conf["dbName"]=$dbName;
149
		#$conf["tableName"],字串,爲要插入資料的資料表名稱,若saveToDb設為"true",則該參數為必填.
150
		#$conf["tableName"]="visitorInfo";
151
		#$conf["columnName"],字串陣列,爲資料表的項目名稱,例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間.若saveToDb設為"true",則該參數為必填.
152
		#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");
153
		#$conf["dbPassword"],字串,爲連線到mysql/mariadb server時要使用的密碼,可省略,若省略則代表不使用密碼.
154
		#$conf["dbPassword"]=$dbPassword;
155
		#參考資料:
156
		#$_SERVER=>http://php.net/manual/zh/reserved.variables.server.php
157
		#取得伺服器名稱與IP=>http://php.net/manual/en/function.gethostname.php
158
		#備註:
159
		#無.
160
		$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
161
		unset($conf["csInformation::getConnectionInfo"]);
1 liveuser 162
 
733 liveuser 163
		#如果檢查失敗
164
		if($getConnectionInfo["status"]=="false"){
1 liveuser 165
 
733 liveuser 166
			#設置執行失敗的識別
167
			$result["status"]="false";
168
 
169
			#設置執行失敗的訊息
170
			$result["error"]=$getConnectionInfo;
171
 
172
			#回傳結果
173
			return $result;
174
 
1 liveuser 175
			}#if end
176
 
177
		#回傳運行該php程式的帳戶名稱
733 liveuser 178
		return $getConnectionInfo["phpUser"];
1 liveuser 179
 
180
		}#function runner end
181
 
182
	/*
183
	#函式說明:
184
	#判斷當前環境為web還是cmd
185
	#回傳結果:
186
	#$result,"web"或"cmd".
187
	#必填參數:
188
	#無.
189
	#可省略參數:
190
	#無.
180 liveuser 191
	#參考資料:
192
	#無.
1 liveuser 193
	#備註:
194
	##考慮改用php-sapi-name()來判斷.
195
	*/
196
	public static function getEnv(){
197
 
198
		#如果是在命令列環境
199
		if(!(isset($_SERVER['HTTP_USER_AGENT']))){
200
 
201
			#回傳是在 "cmd" 環境
202
			return "cmd";
203
 
204
			}#if end
205
 
206
		#反之回傳是在 "web" 環境
207
		else{
208
 
209
			return "web";
210
 
211
			}#else end
212
 
213
		}#function get Env end
214
 
215
	/*
216
	#函式說明:
217
	#取得用戶端的瀏覽器版本資訊,並回傳。
218
	#回傳結果:
219
	#$result,瀏覽器的資訊.
220
	#必填參數:
221
	#無.
222
	#可省略參數:
223
	#無.
180 liveuser 224
	#參考資料:
225
	#無.
1 liveuser 226
	#備註:
227
	#無.
228
	*/
229
	public static function getUserBrowserType(){
230
 
231
		#如果為命令列
232
		if(!isset($_SERVER['HTTP_USER_AGENT'])){
233
 
234
			#取得運行php的作業系統環境
235
			#參考資料:
236
			#http://php.net/manual/en/function.php-uname.php
237
			$userBrowser=php_uname();
238
 
239
			}#if end
240
 
241
		#反之為網頁
242
		else{
243
 
244
			#取得客戶端的瀏覽器資訊
245
			$userBrowser=$_SERVER['HTTP_USER_AGENT'];
246
 
247
			}#else end
248
 
249
		#回傳使用者的瀏覽器資訊
250
		return $userBrowser;
251
 
252
		}#function getUserBrowserType end
253
 
254
	/*
255
	#函式說明:
256
	#回傳用戶端的IP位置
257
	#回傳的結果:
258
	#$result,用戶端的ip,若在命令列下執行則回傳getServerIP()的結果.
259
	#必填參數:
260
	#無.
261
	#可省略參數:
262
	#無.
180 liveuser 263
	#參考資料:
264
	#無.
1 liveuser 265
	#備註:
266
	#無.
267
	*/
268
	public static function getClientIP(){
269
 
270
		#如果找不到 $_SERVER['REMOTE_ADDR']
271
		if(!isset($_SERVER['REMOTE_ADDR'])){
272
 
273
			#則代表是在cmd環境下執行
274
			#函式說明:
275
			#取得伺服器的IP,並回傳。
276
			#回傳的結果:
277
			#$result,伺服端的IP
278
			#備註:
279
			#伺服端必須被 localhost 以外的網址連結才會出現正確的IP
280
			return csInformation::getServerIP();
281
 
282
			}#if end
283
 
284
		#取得客戶端IP
285
		$clientIP = $_SERVER['REMOTE_ADDR'];
286
 
287
		#回傳使用者的IP
288
		return $clientIP;
289
 
290
		}#function getClientIP end
291
 
292
	/*
293
	#函式說明:
294
	#取得伺服器的IP,並回傳。
295
	#回傳的結果:
296
	#$result,伺服端的IP
297
	#必填參數:
298
	#無.
299
	#可省略參數:
300
	#無.
180 liveuser 301
	#參考資料:
302
	#無.
1 liveuser 303
	#備註:
304
	#伺服端必須被 localhost 以外的網址連結才會出現正確的IP
305
	*/
306
	public static function getServerIP(){
307
 
308
		#如果是命令列
309
		if(!isset($_SERVER['SERVER_ADDR'])){
310
 
311
			$serverIP = gethostbyname(gethostname());
312
 
313
			}#if end
314
 
315
		#反之是網頁
316
		else{
317
 
318
			#取得伺服端的IP
319
			$serverIP = $_SERVER['SERVER_ADDR'];
320
 
321
			}#else end
322
 
323
		#回傳伺服端IP
324
		return $serverIP;
325
 
326
		}#function getServerIP end
327
 
328
	/*
329
	#函式說明:
330
	#依據提供查詢IP服務的網站取得伺服器對外的IP.
331
	#回傳結果:
332
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
333
	#$result["function"],當前執行的函數名稱.
334
	#$result["error"],錯誤訊息陣列.
335
	#$result["content"],伺服端對外的IP.
336
	#必填參數:
337
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
338
	$conf["fileArgu"]=__FILE__;
339
	#可省略參數:
340
	#無.
180 liveuser 341
	#參考資料:
342
	#無.
1 liveuser 343
	#備註:
344
	#需要有網站支援此服務.
345
	*/
346
	public static function getServerRealIP(&$conf){
347
 
348
		#初始化要回傳的結果
349
		$result=array();
350
 
351
		#取得當前執行的函數名稱
352
		$result["function"]=__FUNCTION__;
353
 
354
		#如果沒有參數
355
		if(func_num_args()==0){
356
 
357
			#設置執行失敗
358
			$result["status"]="false";
359
 
360
			#設置執行錯誤訊息
361
			$result["error"]="函數".$result["function"]."需要參數";
362
 
363
			#回傳結果
364
			return $result;
365
 
366
			}#if end
367
 
368
		#如果 $conf 不為陣列
369
		if(gettype($conf)!="array"){
370
 
371
			#設置執行失敗
372
			$result["status"]="false";
373
 
374
			#設置執行錯誤訊息
375
			$result["error"][]="\$conf變數須為陣列形態";
376
 
377
			#如果傳入的參數為 null
378
			if($conf==null){
379
 
380
				#設置執行錯誤訊息
381
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
382
 
383
				}#if end
384
 
385
			#回傳結果
386
			return $result;
387
 
388
			}#if end
389
 
390
		#檢查參數
391
		#函式說明:
392
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
393
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
394
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
395
		#$result["function"],當前執行的函式名稱.
396
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
397
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
398
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
399
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
400
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
401
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
402
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
403
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
404
		#必填寫的參數:
405
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
406
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
407
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
408
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
409
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
410
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
411
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
412
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
413
		#可以省略的參數:
414
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
415
		#$conf["canBeEmptyString"]="false";
416
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
417
		#$conf["skipableVariableCanNotBeEmpty"]=array();
418
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
419
		#$conf["skipableVariableName"]=array();
420
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
421
		#$conf["skipableVariableType"]=array();
422
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
423
		#$conf["skipableVarDefaultValue"]=array("");
424
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
425
		#$conf["arrayCountEqualCheck"][]=array();
426
		#參考資料來源:
427
		#array_keys=>http://php.net/manual/en/function.array-keys.php
428
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
429
		unset($conf["variableCheck::checkArguments"]);
430
 
431
		#如果檢查失敗
432
		if($checkResult["status"]=="false"){
433
 
434
			#設置執行失敗的識別
435
			$result["status"]="false";
436
 
437
			#設置執行失敗的訊息
438
			$result["error"]=$checkResult;
439
 
440
			#回傳結果
441
			return $result;
442
 
443
			}#if end
444
 
445
		#如果檢查不通過
446
		if($checkResult["passed"]=="false"){
447
 
448
			#設置執行失敗的識別
449
			$result["status"]="false";
450
 
451
			#設置執行失敗的訊息
452
			$result["error"]=$checkResult;
453
 
454
			#回傳結果
455
			return $result;
456
 
457
			}#if end
458
 
94 liveuser 459
		#嘗試取得自己IP的設定檔
1 liveuser 460
		#函式說明:
94 liveuser 461
		#解析PHP檔案裡面的變數.
462
		#回傳結果:
463
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
464
		#$result["error"],錯誤訊息.
465
		#$result["function"],當前執行的函數名稱.
466
		#$result["argu"],所使用的參數.	
467
		#$result["content"],找到的變數內容陣列.
468
		#$result["content"]["value"],依找到變數順序的數值.
469
		#$result["content"]["struc"],依找到變數順序的階層結構.
470
		#$result["content"]["direct"],變數名稱對應的數值內容.
471
		#必填參數:
472
		#$conf["file"],字串,檔案的路徑與名稱.
473
		$conf["fileAccess::parseVaraiableInPHPfile"]["file"]="/usr/lib/qbpwcf/etc/config.php";
474
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
475
		$conf["fileAccess::parseVaraiableInPHPfile"]["fileArgu"]=$conf["fileArgu"];
476
		#$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".
554 liveuser 477
		$conf["fileAccess::parseVaraiableInPHPfile"]["varName"]=array("myIp","getIpUrl");
94 liveuser 478
		#可省略參數:
479
		#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".
554 liveuser 480
		$conf["fileAccess::parseVaraiableInPHPfile"]["web"]="false";
94 liveuser 481
		#參考資料:
482
		#https://www.php.net/manual/en/function.parse-str.php
483
		#備註:
484
		#無.
485
		$parseVaraiableInPHPfile=fileAccess::parseVaraiableInPHPfile($conf["fileAccess::parseVaraiableInPHPfile"]);
486
		unset($conf["fileAccess::parseVaraiableInPHPfile"]);
487
 
554 liveuser 488
		#如果執行失敗
489
		if($parseVaraiableInPHPfile["status"]=="false"){
490
 
491
			#設置執行失敗的識別
492
			$result["status"]="false";
493
 
494
			#設置執行失敗的訊息
495
			$result["error"]=$parseVaraiableInPHPfile;
496
 
497
			#回傳結果
498
			return $result;
499
 
500
			}#if end
501
 
502
		#如果myIp變數有設定
503
		if(isset($parseVaraiableInPHPfile["content"]["myIp"])){
553 liveuser 504
 
554 liveuser 505
			#如果內容不為空字串
506
			if($parseVaraiableInPHPfile["content"]["myIp"][0]!==""){
94 liveuser 507
 
554 liveuser 508
				#取得伺服器對外的IP
509
				$result["content"]=array($parseVaraiableInPHPfile["content"]["myIp"][0]);
94 liveuser 510
 
554 liveuser 511
				#設置執行正常
512
				$result["status"]="true";
94 liveuser 513
 
554 liveuser 514
				#回傳結果
515
				return $result;
94 liveuser 516
 
553 liveuser 517
				}#if end
518
 
94 liveuser 519
			}#if end
554 liveuser 520
 
521
		#預設用於取得自己對外ip的服務網址
522
		$getIpUrl="https://ip.qbpwcf.org";
523
 
524
		#如果變數getIpUrl有設定
525
		if(isset($parseVaraiableInPHPfile["content"]["getIpUrl"])){
526
 
527
			#如果內容不為空字串
528
			if($parseVaraiableInPHPfile["content"]["getIpUrl"][0]!==""){
529
 
530
				#更新 getIpUrl
531
				$getIpUrl=$parseVaraiableInPHPfile["content"]["getIpUrl"][0];
532
 
533
				}#if end
534
 
535
			}#if end
94 liveuser 536
 
537
		#函式說明:
1 liveuser 538
		#運行curl cmd
539
		#回傳結果:
540
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
541
		#$result["error"],錯誤訊息陣列.
542
		#$result["function"],當前執行的函式名稱.
543
		#$result["content"],取得的回應內容.
544
		#$result["cookie"],cookie檔案的位置與名稱.
545
		#$result["cmd"],執行的command.
546
		#$result["argu],使用的參數.
547
		#必填參數:
548
		#$conf["url"],字串,目標url.
554 liveuser 549
		$conf["catchWebContent::curlCmd"]["url"]=$getIpUrl;
1 liveuser 550
		#$conf["fileArgu"],字串,變數__FILE__的內容.
551
		$conf["catchWebContent::curlCmd"]["fileArgu"]=__FILE__;
552
		#可省略參數:
553
		#$conf["header"],字串陣列,要傳送的header.
554
		#$conf["header"]=array();
555
		#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
556
		#$conf["allowAnySSLcertificate"]="";
557
		#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
558
		#$conf["postVar"]=array();
559
		#$conf["rawPost"]="字串",要傳送的raw post內容.
560
		#$conf["rawPost"]="";
561
		#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
562
		#$conf["urlEncode"]="false";
563
		#$conf["agent"],字串,user agent的名稱.
564
		#$conf["agent"]="";
565
		#$conf["cookie"],字串,cookie位置與檔案位置.
566
		#$conf["cookie"]="";
567
		#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
568
		#$conf["forceNewCookie"]="";
569
		$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
570
		unset($conf["catchWebContent::curlCmd"]);
571
 
572
		#如果檢查不通過
573
		if($curlCmd["status"]=="false"){
574
 
575
			#設置執行失敗的識別
576
			$result["status"]="false";
577
 
578
			#設置執行失敗的訊息
579
			$result["error"]=$curlCmd;
580
 
581
			#回傳結果
582
			return $result;
583
 
584
			}#if end
585
 
586
		#取得伺服器對外的IP
587
		$result["content"]=$curlCmd["content"];
588
 
589
		#設置執行正常
590
		$result["status"]="true";
591
 
592
		#回傳結果
593
		return $result;
594
 
595
		}#function getServerIP end
596
 
597
	/*
598
	#函式說明:
599
	#取得主機可能的ip位址
600
	#回傳的結果:
601
	#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
602
	#$result["error"],錯誤訊息.
603
	#$result["function"],檔前執行的函數名稱.
604
	#$result["content"],目前瀏覽的頁面的路徑.
605
	#必填參數:
606
	#$conf["fileArgu"],字串,__FILE__的內容.
607
	$conf["fileArgu"]=__FILE__;
608
	#可省略參數:
609
	#無.
180 liveuser 610
	#參考資料:
611
	#無.
1 liveuser 612
	#備註:
613
	#僅能在命令列執行.
614
	*/
615
	public static function getServerIPs(&$conf=array()){
616
 
617
		#初始化要回傳的結果
618
		$result=array();
619
 
620
		#取得當前執行的函數名稱
621
		$result["function"]=__FUNCTION__;
622
 
623
		#如果沒有參數
624
		if(func_num_args()==0){
625
 
626
			#設置執行失敗
627
			$result["status"]="false";
628
 
629
			#設置執行錯誤訊息
630
			$result["error"]="函數".$result["function"]."需要參數";
631
 
632
			#回傳結果
633
			return $result;
634
 
635
			}#if end
636
 
637
		#函式說明:
638
		#判斷當前環境為web還是cmd
639
		#回傳結果:
640
		#$result,"web"或"cmd"
641
		if(csInformation::getEnv()==="web"){
642
 
643
			#設置執行失敗
644
			$result["status"]="false";
645
 
646
			#設置執行錯誤訊息
647
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
648
 
649
			#回傳結果
650
			return $result;
651
 
652
			}#if end
653
 
654
		#取得參數
655
		$result["argu"]=$conf;
656
 
657
		#如果 $conf 不為陣列
658
		if(gettype($conf)!=="array"){
659
 
660
			#設置執行失敗
661
			$result["status"]="false";
662
 
663
			#設置執行錯誤訊息
664
			$result["error"][]="\$conf變數須為陣列形態";
665
 
666
			#如果傳入的參數為 null
667
			if($conf===null){
668
 
669
				#設置執行錯誤訊息
670
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
671
 
672
				}#if end
673
 
674
			#回傳結果
675
			return $result;
676
 
677
			}#if end
678
 
679
		#檢查參數
680
		#函式說明:
681
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
682
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
683
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
684
		#$result["function"],當前執行的函式名稱.
685
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
686
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
687
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
688
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
689
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
690
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
691
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
692
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
693
		#必填寫的參數:
694
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
695
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
696
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
697
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
698
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
699
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
700
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
701
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
702
		#可以省略的參數:
703
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
704
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
705
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
706
		#$conf["canNotBeEmpty"]=array();
707
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
708
		#$conf["canBeEmpty"]=array();
709
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
710
		#$conf["skipableVariableCanNotBeEmpty"]=array();
711
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
712
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("cmd");
713
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
714
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
715
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
716
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("ip addr");
717
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
718
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("netType","netCard");
719
		#參考資料來源:
720
		#array_keys=>http://php.net/manual/en/function.array-keys.php
721
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
722
		unset($conf["variableCheck::checkArguments"]);
723
 
724
		#如果檢查參數失敗
725
		if($checkArguments["status"]==="false"){
726
 
727
			#設置執行失敗
728
			$result["status"]="false";
729
 
730
			#設置執行錯誤訊息
731
			$result["error"]=$checkArguments;
732
 
733
			#回傳結果
734
			return $result;
735
 
736
			}#if end
737
 
738
		#如果檢查參數不通過
739
		if($checkArguments["passed"]==="false"){
740
 
741
			#設置執行失敗
742
			$result["status"]="false";
743
 
744
			#設置執行錯誤訊息
745
			$result["error"]=$checkArguments;
746
 
747
			#回傳結果
748
			return $result;
749
 
750
			}#if end
751
 
752
		#初始化 ip 指令不存在
753
		$ipCmdExist=false;
754
 
755
		#初始化 ifconfig 指令不存在
756
		$ifconigCmdExist=false;
757
 
758
		#檢查使用的指令是否存在
759
		#函式說明:
760
		#檢查指令是否存在
761
		#回傳結果:
762
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
763
		#$result["error"],錯誤訊息.
764
		#$result["function"],當前執行的函數名稱.
765
		#$result["argu"],使用的參數.
766
		#$result["founded"],指令是否存在,"true"代表存在,"false"代表存在.
767
		#必填參數:
768
		#$conf["cmd"],"字串",要查詢的指令.
769
		$conf["cmd::checkCmdExist"]["cmd"]="ip";
770
		#可省略參數:
771
		#$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
772
		$conf["cmd::checkCmdExist"]["binPath"]="/usr/sbin";
773
		#$conf["fileArgu"],字串,變數__FILE__的內容.
774
		$conf["cmd::checkCmdExist"]["fileArgu"]=$conf["fileArgu"];
775
		$checkCmdExist=cmd::checkCmdExist($conf["cmd::checkCmdExist"]);
776
		unset($conf["cmd::checkCmdExist"]);
777
 
778
		#如果檢查指令是否存在失敗
779
		if($checkCmdExist["status"]==="false"){
780
 
781
			#設置執行失敗
782
			$result["status"]="false";
783
 
784
			#設置執行錯誤訊息
785
			$result["error"]=$checkCmdExist;
786
 
787
			#回傳結果
788
			return $result;
789
 
790
			}#if end
791
 
792
		#如果指令存在
793
		if($checkCmdExist["founded"]==="true"){
794
 
795
			#設置 ip 指令存在
796
			$ipCmdExist=true;
797
 
798
			}#if end
799
 
800
		#如果 ip 指令不存在
801
		if(!($ipCmdExist)){
802
 
803
			#檢查 ifconfig 指令是否存在
804
			#函式說明:
805
			#檢查指令是否存在
806
			#回傳結果:
807
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
808
			#$result["error"],錯誤訊息.
809
			#$result["function"],當前執行的函數名稱.
810
			#$result["argu"],使用的參數.
811
			#$result["founded"],指令是否存在,"true"代表存在,"false"代表存在.
812
			#必填參數:
813
			#$conf["cmd"],"字串",要查詢的指令.
814
			$conf["cmd::checkCmdExist"]["cmd"]="ifconfig";
815
			#可省略參數:
816
			#$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
817
			$conf["cmd::checkCmdExist"]["binPath"]="/usr/sbin";
818
			#$conf["fileArgu"],字串,變數__FILE__的內容.
819
			$conf["cmd::checkCmdExist"]["fileArgu"]=$conf["fileArgu"];
820
			$checkCmdExist=cmd::checkCmdExist($conf["cmd::checkCmdExist"]);
821
			unset($conf["cmd::checkCmdExist"]);
822
 
823
			#如果檢查指令是否存在失敗
824
			if($checkCmdExist["status"]==="false"){
825
 
826
				#設置執行失敗
827
				$result["status"]="false";
828
 
829
				#設置執行錯誤訊息
830
				$result["error"]=$checkCmdExist;
831
 
832
				#回傳結果
833
				return $result;
834
 
835
				}#if end
836
 
837
			#如果指令存在
838
			if($checkCmdExist["founded"]==="true"){
839
 
840
				#設置 ip 指令存在
841
				$ifconfigCmdExist=true;
842
 
843
				}#if end
844
 
845
			}#if end
846
 
847
		#如果存在 ip 指令
848
		if($ipCmdExist){
849
 
850
			#查看 "ip addr" 指令有無 "inet" 的輸出
851
			#函數說明:
852
			#檢查指令的輸出是否含有關鍵字
853
			#回傳結果:
854
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
855
			#$result["error"],錯誤訊息.
856
			#$result["function"],當前執行的函數名稱.
857
			#$result["argu"],使用的參數.
858
			#$result["founded"],是否找到關鍵字,"true"代表有,"false"代表沒有.
859
			#$result["content"],關鍵字所在列的輸出.
860
			#必填參數:
861
			#$conf["cmd"],字串,要執行的指令.
862
			$conf["cmd::searchOutPut"]["cmd"]="ip addr";
863
			#$conf["keyWord"],字串,要檢查是否有關鍵字.
864
			$conf["cmd::searchOutPut"]["keyWord"]="inet";
865
			#可省略參數:
866
			#$conf["fileArgu"],字串,變數__FILE__的內容.
867
			$conf["cmd::searchOutPut"]["fileArgu"]=$conf["fileArgu"];
868
			#$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
869
			$conf["cmd::searchOutPut"]["binPath"]="/usr/sbin";
870
			$searchOutPut=cmd::searchOutPut($conf["cmd::searchOutPut"]);
871
			unset($conf["cmd::searchOutPut"]);
872
 
873
			#如果取得指令輸出的關鍵字失敗
874
			if($searchOutPut["status"]==="false"){
875
 
876
				#設置執行失敗
877
				$result["status"]="false";
878
 
879
				#設置執行錯誤訊息
880
				$result["error"]=$searchOutPut;
881
 
882
				#回傳結果
883
				return $result;
884
 
885
				}#if end
886
 
887
			#如果指令輸出含有關鍵字
888
			if($searchOutPut["founded"]==="true"){
889
 
890
				#解析輸出 $searchOutPut["content"]
891
 
892
				#檢查每列輸出有無 "inet " 前置字串
893
				#函式說明:
894
				#取得多個符合特定字首與字尾的字串.
895
				#回傳的結果:
896
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
897
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
898
				#$result["function"],當前執行的函數名稱.
899
				#$result["returnString"],爲符合字首條件的字串陣列內容。
900
				#必填的參數:
901
				#$conf["checkString"],陣列字串,要檢查的字串們.
902
				$conf["search::getMeetConditionsStringMulti"]["checkString"]=$searchOutPut["content"];#要檢查的字串陣列
903
				#可省略參數:
904
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
905
				$conf["search::getMeetConditionsStringMulti"]["frontWord"]="    inet ";
906
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
907
				#$conf["search::getMeetConditionsStringMulti"]["tailWord"]="";
908
				#參考資料:
909
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
910
				$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
911
				unset($conf["search::getMeetConditionsStringMulti"]);
912
 
913
				#如果搜尋失敗
914
				if($getMeetConditionsStringMulti["status"]==="false"){
915
 
916
					#設置執行失敗
917
					$result["status"]="false";
918
 
919
					#設置執行錯誤訊息
920
					$result["error"]=$getMeetConditionsStringMulti;
921
 
922
					#回傳結果
923
					return $result;
924
 
925
					}#if end
926
 
927
				#如果有符合的輸出
928
				if($getMeetConditionsStringMulti["founded"]==="true"){
929
 
930
					#用 " " 分段
931
					#函式說明:
932
					#將多個固定格式的字串分開,並回傳分開的結果
933
					#回傳的參數:
934
					#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
935
					#$result["error"],錯誤訊息陣列.
936
					#$result["function"],當前執行的函數名稱.
937
					#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
938
					#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
939
					#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
940
					#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
941
					#必填的參數:
942
					#$conf["stringIn"],字串陣列,要處理的字串陣列.
943
					$conf["stringProcess::spiltMutiString"]["stringIn"]=$getMeetConditionsStringMulti["returnString"];
944
					#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
945
					$conf["stringProcess::spiltMutiString"]["spiltSymbol"]=" ";
946
					$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
947
					unset($conf["stringProcess::spiltMutiString"]);
948
 
949
					#如果分割字串失敗
950
					if($spiltMutiString["status"]==="false"){
951
 
952
						#設置執行失敗
953
						$result["status"]="false";
954
 
955
						#設置執行錯誤訊息
956
						$result["error"]=$spiltMutiString;
957
 
958
						#回傳結果
959
						return $result;
960
 
961
						}#if end
962
 
963
					#針對分好的每段
964
					foreach($spiltMutiString["spiltString"] as $index => $spiltedStr){
965
 
966
						#分割第一段
967
						#函式說明:
968
						#將固定格式的字串分開,並回傳分開的結果。
969
						#回傳結果:
970
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
971
						#$result["error"],錯誤訊息陣列
972
						#$result["function"],當前執行的函數名稱.
973
						#$result["oriStr"],要分割的原始字串內容
974
						#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
975
						#$result["dataCounts"],爲總共分成幾段
976
						#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
977
						#必填的參數:
978
						$conf["stringProcess::spiltString"]["stringIn"]=$spiltedStr["dataArray"][1];#要處理的字串。
979
						$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
980
						#可省略參數:
981
						#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
982
						$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
983
						$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
984
						unset($conf["stringProcess::spiltString"]);
985
 
986
						#如果分割字串失敗
987
						if($spiltString["status"]==="false"){
988
 
989
							#設置執行失敗
990
							$result["status"]="false";
991
 
992
							#設置執行錯誤訊息
993
							$result["error"]=$spiltString;
994
 
995
							#回傳結果
996
							return $result;
997
 
998
							}#if end
999
 
1000
						#如果有找到分割的關鍵字
1001
						if($spiltString["found"]==="true"){
1002
 
1003
							#取得ip
1004
							$result["content"][]=$spiltString["dataArray"][0];
1005
 
1006
							}#if end
1007
 
1008
						}#foreach end
1009
 
1010
					}#if end
1011
 
1012
				}#if end
1013
 
1014
			}#if end
1015
 
1016
		#反之如果存在 ifconfig 指令
1017
		else if($ifconfigCmdExist){
1018
 
1019
			#查看 "ifconfig" 指令有無 "inet" 的輸出
1020
			#函數說明:
1021
			#檢查指令的輸出是否含有關鍵字
1022
			#回傳結果:
1023
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1024
			#$result["error"],錯誤訊息.
1025
			#$result["function"],當前執行的函數名稱.
1026
			#$result["argu"],使用的參數.
1027
			#$result["founded"],是否找到關鍵字,"true"代表有,"false"代表沒有.
1028
			#$result["content"],關鍵字所在列的輸出.
1029
			#必填參數:
1030
			#$conf["cmd"],字串,要執行的指令.
1031
			$conf["cmd::searchOutPut"]["cmd"]="ifconfig";
1032
			#$conf["keyWord"],字串,要檢查是否有關鍵字.
1033
			$conf["cmd::searchOutPut"]["keyWord"]="inet";
1034
			#可省略參數:
1035
			#$conf["fileArgu"],字串,變數__FILE__的內容.
1036
			$conf["cmd::searchOutPut"]["fileArgu"]=$conf["fileArgu"];
1037
			#$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
1038
			$conf["cmd::searchOutPut"]["binPath"]="/usr/sbin";
1039
			$searchOutPut=cmd::searchOutPut($conf["cmd::searchOutPut"]);
1040
			unset($conf["cmd::searchOutPut"]);
1041
 
1042
			#如果取得指令輸出的關鍵字失敗
1043
			if($searchOutPut["status"]==="false"){
1044
 
1045
				#設置執行失敗
1046
				$result["status"]="false";
1047
 
1048
				#設置執行錯誤訊息
1049
				$result["error"]=$searchOutPut;
1050
 
1051
				#回傳結果
1052
				return $result;
1053
 
1054
				}#if end
1055
 
1056
			#如果指令輸出含有關鍵字
1057
			if($searchOutPut["founded"]==="true"){
1058
 
1059
				#解析輸出 $searchOutPut["content"]
1060
 
1061
				#檢查每列輸出有無 "inet " 前置字串
1062
				#函式說明:
1063
				#取得多個符合特定字首與字尾的字串.
1064
				#回傳的結果:
1065
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
1066
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
1067
				#$result["function"],當前執行的函數名稱.
1068
				#$result["returnString"],爲符合字首條件的字串陣列內容。
1069
				#必填的參數:
1070
				#$conf["checkString"],陣列字串,要檢查的字串們.
1071
				$conf["search::getMeetConditionsStringMulti"]["checkString"]=$searchOutPut["content"];#要檢查的字串陣列
1072
				#可省略參數:
1073
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
1074
				$conf["search::getMeetConditionsStringMulti"]["frontWord"]="        inet ";
1075
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
1076
				#$conf["search::getMeetConditionsStringMulti"]["tailWord"]="";
1077
				#參考資料:
1078
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
1079
				$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
1080
				unset($conf["search::getMeetConditionsStringMulti"]);
1081
 
1082
				#如果搜尋失敗
1083
				if($getMeetConditionsStringMulti["status"]==="false"){
1084
 
1085
					#設置執行失敗
1086
					$result["status"]="false";
1087
 
1088
					#設置執行錯誤訊息
1089
					$result["error"]=$getMeetConditionsStringMulti;
1090
 
1091
					#回傳結果
1092
					return $result;
1093
 
1094
					}#if end
1095
 
1096
				#如果有符合的輸出
1097
				if($getMeetConditionsStringMulti["founded"]==="true"){
1098
 
1099
					#用 " " 分段
1100
					#函式說明:
1101
					#將多個固定格式的字串分開,並回傳分開的結果
1102
					#回傳的參數:
1103
					#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
1104
					#$result["error"],錯誤訊息陣列.
1105
					#$result["function"],當前執行的函數名稱.
1106
					#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
1107
					#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
1108
					#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
1109
					#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
1110
					#必填的參數:
1111
					#$conf["stringIn"],字串陣列,要處理的字串陣列.
1112
					$conf["stringProcess::spiltMutiString"]["stringIn"]=$getMeetConditionsStringMulti["returnString"];
1113
					#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
1114
					$conf["stringProcess::spiltMutiString"]["spiltSymbol"]=" ";
1115
					$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
1116
					unset($conf["stringProcess::spiltMutiString"]);
1117
 
1118
					#如果分割字串失敗
1119
					if($spiltMutiString["status"]==="false"){
1120
 
1121
						#設置執行失敗
1122
						$result["status"]="false";
1123
 
1124
						#設置執行錯誤訊息
1125
						$result["error"]=$spiltMutiString;
1126
 
1127
						#回傳結果
1128
						return $result;
1129
 
1130
						}#if end
1131
 
1132
					#針對分好的每段
1133
					foreach($spiltMutiString["spiltString"] as $spiltedStr){
1134
 
1135
						#取得ip
1136
						$result["content"][]=$spiltedStr["dataArray"][1];
1137
 
1138
						}#foreach end
1139
 
1140
					}#if end
1141
 
1142
				}#if end
1143
 
1144
			}#if end
1145
 
1146
		#查詢對外ip
1147
		#函式說明:
1148
		#依據提供查詢IP服務的網站取得伺服器對外的IP.
1149
		#回傳的結果:
1150
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1151
		#$result["function"],當前執行的函數名稱.
1152
		#$result["error"],錯誤訊息陣列.
1153
		#$result["content"],伺服端對外的IP.
1154
		#必填參數:
1155
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1156
		$conf["self::getServerRealIP"]["fileArgu"]=$conf["fileArgu"];
1157
		$getServerRealIP=self::getServerRealIP($conf["self::getServerRealIP"]);
1158
		unset($conf["self::getServerRealIP"]);
1159
 
1160
		#如果查詢對外 ip 失敗
1161
		if($getServerRealIP["status"]==="false"){
1162
 
1163
			#設置執行失敗
1164
			$result["status"]="false";
1165
 
1166
			#設置執行錯誤訊息
1167
			$result["error"]=$getServerRealIP;
1168
 
1169
			#回傳結果
1170
			return $result;
1171
 
1172
			}#if end
1173
 
1174
		#取得對外ip
1175
		$result["content"][]=$getServerRealIP["content"];
1176
 
1177
		#剔除重複的ip
1178
		$result["content"]=array_unique($result["content"]);
1179
 
1180
		#如果是 ip addr | grep inet 則會輸出類似的內容
1181
		/*
1182
		inet 127.0.0.1/8 scope host lo
1183
		inet6 ::1/128 scope host
1184
		inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s5
1185
		inet6 fec0::d17d:1504:b561:1535/64 scope site noprefixroute dynamic
1186
		inet6 fe80::c85c:f113:e76c:4e2/64 scope link
1187
		inet 169.254.196.9/16 brd 169.254.255.255 scope link enp0s6
1188
		inet6 fe80::8e5f:c35f:952b:3fd1/64 scope link
1189
		inet 192.168.200.111/24 brd 192.168.200.255 scope global dynamic enp0s7
1190
		inet6 fe80::ad8d:d224:e78c:f89d/64 scope link
1191
		inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
1192
		*/
1193
 
1194
		#如果是 ifconfig | grep inet 則會輸出類似的內容
1195
		/*
1196
		inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
1197
		inet6 fe80::c85c:f113:e76c:4e2  prefixlen 64  scopeid 0x20<link>
1198
		inet6 fec0::d17d:1504:b561:1535  prefixlen 64  scopeid 0x40<site>
1199
		inet 169.254.196.9  netmask 255.255.0.0  broadcast 169.254.255.255
1200
		inet6 fe80::8e5f:c35f:952b:3fd1  prefixlen 64  scopeid 0x20<link>
1201
		inet 192.168.200.111  netmask 255.255.255.0  broadcast 192.168.200.255
1202
		inet6 fe80::ad8d:d224:e78c:f89d  prefixlen 64  scopeid 0x20<link>
1203
		inet 127.0.0.1  netmask 255.0.0.0
1204
		inet6 ::1  prefixlen 128  scopeid 0x10<host>
1205
		inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
1206
		*/
1207
 
1208
		#設置執行正常
1209
		$result["status"]="true";
1210
 
1211
		#回傳節果
1212
		return $result;
1213
 
1214
		}#function getServerIps end
1215
 
1216
	/*
1217
	#函式說明:
705 liveuser 1218
	#取得目前瀏覽的頁面的路徑或執行的php程式路徑.
1 liveuser 1219
	#回傳結果:
1220
	#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
1221
	#$result["error"],錯誤訊息.
1222
	#$result["function"],檔前執行的函數名稱.
705 liveuser 1223
	#$result["content"],目前瀏覽的頁面的路徑或執行的php程式路徑.
1 liveuser 1224
	#$result["serverIp"],取得伺服器ip.
706 liveuser 1225
	#$result["scheme"],取得與伺服器連線所使用的通訊協定,若不適用則為null.
1 liveuser 1226
	#必填參數:
1227
	$conf["type"]="";#想要取得的路徑類型,"full"代表完整路徑,"pathOnly"代表只要路徑,"lastLayer"代表上一層目錄的名稱
1228
	#必填參數:
1229
	#無.
1230
	#可省略參數:
1231
	#無.
180 liveuser 1232
	#參考資料:
1233
	#http://blog.longwin.com.tw/2009/01/php-get-directory-file-path-dirname-2008/
1 liveuser 1234
	#備註:
1235
	#無.
1236
	*/
1237
	public static function getPathOfThisPhpFile($conf){
1238
 
1239
		#初始化要回傳的結果
1240
		$result=array();
1241
 
1242
		#取得當前執行的函數
1243
		$result["function"]=__FUNCTION__;
1244
 
1245
		#如果 $conf 不為陣列
1246
		if(gettype($conf)!="array"){
1247
 
1248
			#設置執行失敗
1249
			$result["status"]="false";
1250
 
1251
			#設置執行錯誤訊息
1252
			$result["error"][]="\$conf變數須為陣列形態";
1253
 
1254
			#如果傳入的參數為 null
1255
			if($conf==null){
1256
 
1257
				#設置執行錯誤訊息
1258
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1259
 
1260
				}#if end
1261
 
1262
			#回傳結果
1263
			return $result;
1264
 
1265
			}#if end
1266
 
1267
		#函式說明:
1268
		#取得用戶端的資訊,並依據需要寫入到資料表裡面
1269
		#回傳的結果:
1270
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
1271
		#$result["error"],錯誤訊息.
1272
		#$result["function"],檔前執行的函數名稱.
705 liveuser 1273
		#$result["mode"],當前的模式是"cmd"還是"web".
1 liveuser 1274
		#$result["userBrowserType"],爲使用者的瀏覽器資訊
1275
		#$result["userIp"],爲使用者的IP
1276
		#$result["serverIp"],為伺服器的IP
705 liveuser 1277
		#$result["server_name"],伺服器的 domain name
1 liveuser 1278
		#$result["scheme"],通訊協定
705 liveuser 1279
		#$result["serverPort"],伺服器給對外下載網頁的port
1280
		#$result["requestUri"],爲使用者要求的網址/php檔案.
1281
		#$result["requestUriFull"],為使用者要求的完整網址/php檔案路徑.
1282
		#$result["clientRequestIP"],用戶端要求的ip與port
1 liveuser 1283
		#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
705 liveuser 1284
		#$result["phpUser"],運行該php的使用者帳戶.
1285
		#$result["header"],接收到的 header 陣列.
1286
		#$result["body"],接收到的 body 字串.
1 liveuser 1287
		#必填的參數:
717 liveuser 1288
		$conf["csInformation::getConnectionInfo"]["getAccount"]="true";#是否要取得帳號
1 liveuser 1289
		#可省略的參數:
1290
		#$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]
1291
		#$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存
1292
		#$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。
1293
		#$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。
1294
		#$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
1295
		#$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
1296
		#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,
1297
			#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
1298
			#寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間
1299
			#$conf["saveToDb"]設為"true",則該參數為必填。
1300
		#$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1301
		$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
1302
		unset($conf["csInformation::getConnectionInfo"]);
1303
 
706 liveuser 1304
		#debug
1305
		#var_dump(__LINE__,$getConnectionInfo);
1306
 
1 liveuser 1307
		#取得連線資訊失敗
706 liveuser 1308
		if($getConnectionInfo["status"]==="false"){
1 liveuser 1309
 
1310
			#設置執行失敗
1311
			$result["status"]="false";
1312
 
1313
			#設置執行錯誤訊息
1314
			$result["error"]=$getConnectionInfo;
1315
 
1316
			#回傳結果
1317
			return $result;
1318
 
1319
			}#if end
1320
 
1321
		#取得伺服器ip
1322
		$result["serverIp"]=$getConnectionInfo["serverIp"];
1323
 
1324
		#取得與伺服器連線所使用的通訊協定
1325
		$result["scheme"]=$getConnectionInfo["scheme"];
1326
 
1327
		#判斷 $conf["type"]
1328
		switch($conf["type"]){
1329
 
1330
			#如果是 "full"
1331
			case "full":
1332
 
1333
				#取得目前檔案的完整路徑
1334
				$result["content"]=$getConnectionInfo["requestUri"];
1335
 
1336
				#設置執行正常
1337
				$result["status"]="true";
1338
 
1339
				#回傳結果
1340
				return $result;
1341
 
1342
				#打斷switch
1343
				break;
1344
 
1345
			#如果是 "pathOnly"
1346
			case "pathOnly":
1347
 
705 liveuser 1348
				#如果是網頁環境
706 liveuser 1349
				if($getConnectionInfo["mode"]==="web"){
705 liveuser 1350
 
1351
					#用 當前檔案的名稱 來分割目前檔案的完整路徑
1352
					#函式說明:
1353
					#將固定格式的字串分開,並回傳分開的結果。
1354
					#回傳的參數:
1355
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1356
					#$result["error"],錯誤訊息陣列
1357
					#$result["function"],當前執行的函數名稱.
1358
					#$result["oriStr"],要分割的原始字串內容
1359
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
1360
					#$result["dataCounts"],爲總共分成幾段
1361
					#必填的參數:
1362
					$conf["stringProcess::spiltString"]["stringIn"]=$getConnectionInfo["requestUri"];#要處理的字串。
1363
					$conf["stringProcess::spiltString"]["spiltSymbol"]=basename(($getConnectionInfo["requestUri"]));#爲以哪個符號作爲分割
1364
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
1365
					unset($conf["stringProcess::spiltString"]);
1 liveuser 1366
 
705 liveuser 1367
					#如果分割失敗
1368
					if($spiltString["status"]=="false"){
1 liveuser 1369
 
705 liveuser 1370
						#設置執行失敗
1371
						$result["status"]="false";
1 liveuser 1372
 
705 liveuser 1373
						#設置執行錯誤訊息
1374
						$result["error"]=$spiltString;
1 liveuser 1375
 
705 liveuser 1376
						#回傳結果
1377
						return $result;
1 liveuser 1378
 
705 liveuser 1379
						}#if end
1 liveuser 1380
 
705 liveuser 1381
					#如果分割出來少於一段
1382
					if($spiltString["dataCounts"]<1){
1 liveuser 1383
 
705 liveuser 1384
						#設置執行失敗
1385
						$result["status"]="false";
1 liveuser 1386
 
705 liveuser 1387
						#設置執行錯誤訊息
1388
						$result["error"]=$spiltString;
1 liveuser 1389
 
705 liveuser 1390
						#回傳結果
1391
						return $result;
1392
 
1393
						}#if end
1394
 
1395
					#取得不包含檔案名稱的路徑
1396
					$result["content"]=$spiltString["dataArray"][0];
1397
 
1398
					#設置執行正常
1399
					$result["status"]="true";
1400
 
1 liveuser 1401
					#回傳結果
1402
					return $result;
705 liveuser 1403
 
1 liveuser 1404
					}#if end
1405
 
705 liveuser 1406
				#反之如果是 cmd 環境
706 liveuser 1407
				else if($getConnectionInfo["mode"]==="cmd"){
705 liveuser 1408
 
706 liveuser 1409
					#函式說明:
1410
					#將字串特定關鍵字與其後面的內容剔除
705 liveuser 1411
					#回傳結果:
706 liveuser 1412
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
705 liveuser 1413
					#$result["error"],錯誤訊息陣列.
706 liveuser 1414
					#$result["warning"],警告訊息鎮列.
1415
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1416
					#$result["function"],當前執行的函數名稱.
1417
					#$result["oriStr"],要處理的原始字串內容.
1418
					#$result["content"],處理好的的字串內容.
1419
					#$result["argu"],使用的參數.
705 liveuser 1420
					#必填參數:
706 liveuser 1421
					#$conf["stringIn"],字串,要處理的字串.
1422
					$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$getConnectionInfo["requestUriFull"];
1423
					#$conf["keyWord"],字串,特定字串.
1424
					$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$getConnectionInfo["requestUri"];
705 liveuser 1425
					#可省略參數:
706 liveuser 1426
					#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
1427
					$conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="true";
705 liveuser 1428
					#參考資料:
1429
					#無.
1430
					#備註:
1431
					#無.
706 liveuser 1432
					$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
1433
					unset($conf["stringProcess::delStrAfterKeyWord"]);
1434
 
705 liveuser 1435
					#如果執行失敗
706 liveuser 1436
					if($delStrAfterKeyWord["status"]==="false"){
705 liveuser 1437
 
1438
						#設置執行失敗
1439
						$result["status"]="false";
1 liveuser 1440
 
705 liveuser 1441
						#設置執行錯誤訊息
706 liveuser 1442
						$result["error"]=$delStrAfterKeyWord;
1 liveuser 1443
 
705 liveuser 1444
						#回傳結果
1445
						return $result;
1 liveuser 1446
 
705 liveuser 1447
						}#if end
1448
 
1449
					#如果沒有應該要有的檔案名稱
706 liveuser 1450
					if($delStrAfterKeyWord["founded"]==="false"){
705 liveuser 1451
 
1452
						#設置執行失敗
1453
						$result["status"]="false";
1454
 
1455
						#設置執行錯誤訊息
706 liveuser 1456
						$result["error"]=$delStrAfterKeyWord;
705 liveuser 1457
 
1458
						#回傳結果
1459
						return $result;
1460
 
1461
						}#if end
1462
 
1463
					#取得不包含檔案名稱的路徑
706 liveuser 1464
					$result["content"]=$delStrAfterKeyWord["content"];
705 liveuser 1465
 
1466
					#設置執行正常
1467
					$result["status"]="true";
1468
 
1469
					#回傳結果
1470
					return $result;
1471
 
1472
					}#if end
1473
 
1 liveuser 1474
				#打斷switch
1475
				break;
1476
 
1477
			#如果是 "lastLayer"
1478
			case "lastLayer":
1479
 
705 liveuser 1480
				#如果是網頁環境
1481
				if($result["mode"]==="web"){
1 liveuser 1482
 
705 liveuser 1483
					#取得上層目錄的名稱
1484
					$result["content"]=basename((dirname($getConnectionInfo["requestUri"])));
1485
 
1486
					}#if end
1487
 
1488
				#反之如果是 cmd 環境
1489
				else if($result["mode"]==="cmd"){
1490
 
1491
					#取得callback用的參數
1492
					$conf["csInformation::getPathOfThisPhpFile"]=$confForCallback;
1493
 
1494
					#改取得路徑就好
1495
					$conf["csInformation::getPathOfThisPhpFile"]["type"]="pathOnly";
1496
 
1497
					/*
1498
					#函式說明:
1499
					#取得目前瀏覽的頁面的路徑或執行的php程式路徑.
1500
					#回傳結果:
1501
					#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
1502
					#$result["error"],錯誤訊息.
1503
					#$result["function"],檔前執行的函數名稱.
1504
					#$result["content"],目前瀏覽的頁面的路徑或執行的php程式路徑.
1505
					#$result["serverIp"],取得伺服器ip.
1506
					#$result["scheme"],取得與伺服器連線所使用的通訊協定.
1507
					#必填參數:
1508
					$conf["type"]="";#想要取得的路徑類型,"full"代表完整路徑,"pathOnly"代表只要路徑,"lastLayer"代表上一層目錄的名稱
1509
					#必填參數:
1510
					#無.
1511
					#可省略參數:
1512
					#無.
1513
					#參考資料:
1514
					#http://blog.longwin.com.tw/2009/01/php-get-directory-file-path-dirname-2008/
1515
					#備註:
1516
					#無.
1517
					*/
1518
					$getPathOfThisPhpFile=csInformation::getPathOfThisPhpFile($conf["csInformation::getPathOfThisPhpFile"]);
1519
					unset($conf["csInformation::getPathOfThisPhpFile"]);
1520
 
1521
					#如果執行失敗
1522
					if($getPathOfThisPhpFile["status"]==="false"){
1523
 
1524
						#設置執行失敗
1525
						$result["status"]="false";
1526
 
1527
						#設置執行錯誤訊息
1528
						$result["error"]=$getPathOfThisPhpFile;
1529
 
1530
						#回傳結果
1531
						return $result;
1532
 
1533
						}#if end
1534
 
1535
					#取得路徑
1536
					#$getPathOfThisPhpFile["content"];
1537
 
1538
					#函式說明:
1539
					#將固定格式的字串分開,並回傳分開的結果.
1540
					#回傳結果:
1541
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1542
					#$result["error"],錯誤訊息陣列
1543
					#$result["function"],當前執行的函數名稱.
1544
					#$result["argu"],使用的參數.
1545
					#$result["oriStr"],要分割的原始字串內容
1546
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
1547
					#$result["dataCounts"],爲總共分成幾段
1548
					#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
1549
					#必填參數:
1550
					#$conf["stringIn"],字串,要處理的字串.
1551
					$conf["stringProcess::spiltString"]["stringIn"]=$getPathOfThisPhpFile["content"];
1552
					#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
1553
					$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
1554
					#可省略參數:
1555
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
1556
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
1557
					#參考資料:
1558
					#無.
1559
					#備註:
1560
					#無.
1561
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
1562
					unset($conf["stringProcess::spiltString"]);
1563
 
1564
					#如果執行失敗
1565
					if($spiltString["status"]==="false"){
1566
 
1567
						#設置執行失敗
1568
						$result["status"]="false";
1569
 
1570
						#設置執行錯誤訊息
1571
						$result["error"]=$spiltString;
1572
 
1573
						#回傳結果
1574
						return $result;
1575
 
1576
						}#if end
1577
 
1578
					#如果沒有"/"存在
1579
					if($spiltString["found"]==="false"){
1580
 
1581
						#設置執行失敗
1582
						$result["status"]="false";
1583
 
1584
						#設置執行錯誤訊息
1585
						$result["error"]=$spiltString;
1586
 
1587
						#回傳結果
1588
						return $result;
1589
 
1590
						}#if end
1591
 
1592
					#如果沒有分出結果
1593
					if($spiltString["dataCounts"]===0){
1594
 
1595
						#設置上層目錄的名稱為"/"
1596
						$result["content"]="/";
1597
 
1598
						#設置執行正常
1599
						$result["status"]="true";
1600
 
1601
						#回傳結果
1602
						return $result;
1603
 
1604
						}#if end
1605
 
1606
					#反之
1607
					else{
1608
 
1609
						#取得上層目錄的索引
1610
						$lastLayerIndex=$spiltString["dataCounts"]-1;
1611
 
1612
						#取得上層目錄
1613
						$result["content"]=$spiltString["dataArray"][$lastLayerIndex];
1614
 
1615
						#設置執行正常
1616
						$result["status"]="true";
1617
 
1618
						#回傳結果
1619
						return $result;
1620
 
1621
						}#if end
1622
 
1623
					}#if end
1624
 
1625
				#反之為異常結果
1626
				else{
1627
 
1628
					#設置執行不正常
1629
					$result["status"]="false";
1630
 
1631
					#設置錯誤訊息
1632
					$result["error"][]="無法判別環境為web還是cmd";
1633
 
1634
					#設置錯誤訊息
1635
					$result["error"][]=$getConnectionInfo;
1636
 
1637
					#回傳結果
1638
					return $result;
1639
 
1640
					}#else end
1641
 
1 liveuser 1642
				#設置執行正常
1643
				$result["status"]="true";
1644
 
1645
				#回傳結果
1646
				return $result;
1647
 
1648
				#打斷switch
1649
				break;
1650
 
1651
			#如果不是以上兩個內容
1652
			default :
1653
 
1654
				#設置執行失敗
1655
				$result["status"]="false";
1656
 
1657
				#設置執行錯誤訊息
1658
				$result["error"][]="\$conf[\"type\"]變數須為「full」或「pathOnly」或「lastLayer」";
1659
 
1660
				#回傳結果
1661
				return $result;
1662
 
1663
			}#switch end
1664
 
1665
		#不應該執行到這邊
1666
 
1667
		#設置執行失敗
1668
		$result["status"]="false";
1669
 
1670
		#設置執行錯誤訊息
1671
		$result["error"][]="不應該出現的例外狀況";
1672
 
1673
		#回傳結果
1674
		return $result;
1675
 
1676
		}#getFullPathOfThisPhpFile end
1677
 
1678
	/*
1679
	#函式說明:
1680
	#取得用戶端的資訊,並依據需要寫入到資料表裡面
1681
	#回傳的結果:
1682
	#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
1683
	#$result["error"],錯誤訊息.
1684
	#$result["function"],檔前執行的函數名稱.
1685
	#$result["mode"],當前的模式是"cmd"還是"web".
1686
	#$result["userBrowserType"],爲使用者的瀏覽器資訊
1687
	#$result["userIp"],爲使用者的IP
1688
	#$result["serverIp"],為伺服器的IP
1689
	#$result["server_name"],伺服器的 domain name
1690
	#$result["scheme"],通訊協定
1691
	#$result["serverPort"],伺服器給對外下載網頁的port
705 liveuser 1692
	#$result["requestUri"],爲使用者要求的網址/php檔案.
1693
	#$result["requestUriFull"],為使用者要求的完整網址/php檔案路徑.
1 liveuser 1694
	#$result["clientRequestIP"],用戶端要求的ip與port
1695
	#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
710 liveuser 1696
	#$result["phpUser"],運行該php的使用者帳戶.若為空字串則代表非使用者直接觸發.
711 liveuser 1697
	#$result["phpUserType"],運行該php的使用者帳戶類型,可能有"regular(no wheel member)","wheel(can use sudo)","intrinsic(root)","system(qemu,apache,...)".
398 liveuser 1698
	#$result["header"],接收到的 header 陣列.
1699
	#$result["body"],接收到的 body 字串.
1 liveuser 1700
	#必填參數:
711 liveuser 1701
	#$conf["getAccount"],字串,是否要取得帳號,"true"代表要;"false"代表不要.
1702
	$conf["getAccount"]="true";
1 liveuser 1703
	#可省略參數:
711 liveuser 1704
	#$conf["accountVar"],字串,帳號儲存在哪個變數裏面,預設爲$_SESSION["username"].
1705
	#$conf["accountVar"]=$_SESSION["username"];
1706
	#$conf["saveToDb"],字串,是否要除儲存到資料庫,"true"為要儲存",預設為"false"不儲存.
1707
	#$conf["saveToDb"]="true";
1708
	#$conf["dbAddress"],字串,爲mysql/mariadb server的位置,若saveToDb設為"true",則該參數為必填.
1709
	#$conf["dbAddress"]=$dbAddress;
1710
	#$conf["dbAccount"],字串,爲用於連入mysql/mariadb server時要使用的帳號,若saveToDb設為"true",則該參數為必填.
1711
	#$conf["dbAccount"]=$dbAccount;
1712
	#$conf["dbName"],字串,要選取的資料庫名稱,若saveToDb設為"true",則該參數為必填.
1713
	#$conf["dbName"]=$dbName;
1714
	#$conf["tableName"],字串,爲要插入資料的資料表名稱,若saveToDb設為"true",則該參數為必填.
1715
	#$conf["tableName"]="visitorInfo";
1716
	#$conf["columnName"],字串陣列,爲資料表的項目名稱,例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間.若saveToDb設為"true",則該參數為必填.
1717
	#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");
1718
	#$conf["dbPassword"],字串,爲連線到mysql/mariadb server時要使用的密碼,可省略,若省略則代表不使用密碼.
1719
	#$conf["dbPassword"]=$dbPassword;
1 liveuser 1720
	#參考資料:
1721
	#$_SERVER=>http://php.net/manual/zh/reserved.variables.server.php
1722
	#取得伺服器名稱與IP=>http://php.net/manual/en/function.gethostname.php
1723
	#備註:
1724
	#無.
1725
	*/
1726
	public static function getConnectionInfo(&$conf){
1727
 
1728
		#初始化要回傳的結果
1729
		$result=array();
1730
 
1731
		#取得當前執行的函數
1732
		$result["function"]=__FUNCTION__;
1733
 
1734
		#如果 $conf 不為陣列
1735
		if(gettype($conf)!="array"){
1736
 
1737
			#設置執行失敗
1738
			$result["status"]="false";
1739
 
1740
			#設置執行錯誤訊息
1741
			$result["error"][]="\$conf變數須為陣列形態";
1742
 
1743
			#如果傳入的參數為 null
1744
			if($conf==null){
1745
 
1746
				#設置執行錯誤訊息
1747
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1748
 
1749
				}#if end
1750
 
1751
			#回傳結果
1752
			return $result;
1753
 
1754
			}#if end
1755
 
1756
		#如果 $conf["getAccount"] 沒有設定
1757
		if(!isset($conf["getAccount"])){
1758
 
1759
			#設置執行失敗
1760
			$result["status"]="false";
1761
 
1762
			#設置執行錯誤訊息
1763
			$result["error"][]="\$conf[\"getAccount\"]參數尚未設定!";
1764
 
1765
			#回傳結果
1766
			return $result;
1767
 
1768
			}#if end
1769
 
1770
		#如果 $conf["accountVar"] 沒有設定
1771
		if(!isset($conf["accountVar"])){
1772
 
1773
			#則依照預設
1774
 
1775
			#如果預設的變數不存在
1776
			if(!isset($_SESSION["username"])){
1777
 
1778
				#給與空字串
1779
				$result["username"]="";
1780
 
1781
				}#if end
1782
 
1783
			#反之存在
1784
			else{
1785
 
1786
				#取得預設值
1787
				$result["username"]=$_SESSION["username"];
1788
 
1789
				}#else end
1790
 
1791
			}#if end
1792
 
1793
		#反之有設定
1794
		else{
1795
 
1796
			#取得帳戶
1797
			$result["username"]=$conf["accountVar"];
1798
 
1799
			}#else end
1800
 
733 liveuser 1801
		#預設使用該php程式的使用者帳號
1802
		#$result["phpUser"]="apache";
1 liveuser 1803
 
1804
		#如果 $_SERVER['HTTP_USER_AGENT'] 存在
1805
		if(isset($_SERVER['HTTP_USER_AGENT'])){
1806
 
1807
			#var_dump($_SERVER["DOCUMENT_ROOT"]);
1808
 
1809
			#設置為web模式
1810
			$result["mode"]="web";
1811
 
1812
			#函式說明:
1813
			#取得用戶端的瀏覽器版本資訊,並回傳。
1814
			#回傳結果:
1815
			#$result,瀏覽器的資訊
1816
			$result["userBrowserType"]=csInformation::getUserBrowserType();
1817
 
1818
			#函式說明:
1819
			#回傳用戶端的IP位置
1820
			#回傳的結果:
1821
			#$result,用戶端的ip
1822
			$result["userIp"]=csInformation::getClientIP();
1823
 
1824
			#函式說明:
1825
			#取得伺服器的IP,並回傳。
1826
			#回傳的結果:
1827
			#$result,伺服端的IP
1828
			#備註:
1829
			#伺服端必須被 localhost 以外的網址連結才會出現正確的IP
1830
			$result["serverIp"]=csInformation::getServerIP();
1831
 
1832
			#取得通訊協定
1833
			$result["scheme"]=$_SERVER["REQUEST_SCHEME"];
1834
 
1835
			#取得伺服器給對外下載網頁的port
1836
			$result["serverPort"]=$_SERVER["SERVER_PORT"];
1837
 
1838
			#取得目前要求執行的網址爲
1839
			$result["requestUri"]=$_SERVER["REQUEST_URI"];
1840
 
1841
			#如果沒有 $_SERVER["HTTP_HOST"] 存在
1842
			if(!isset($_SERVER["HTTP_HOST"])){
1843
 
1844
				#用server端的資訊來組用戶端要求的IP與port
1845
				$result["clientRequestIP"]=$result["serverIp"].":".$result["serverPort"];
1846
 
1847
				}#if end
1848
 
1849
			#反之
1850
			else{
1851
 
1852
				#用戶端要求的IP與port
1853
				$result["clientRequestIP"]=$_SERVER["HTTP_HOST"];
1854
 
1855
				}#else end
1856
 
1857
			#$_SERVER['CONTEXT_PREFIX'], 例如 "/~qbpwcf"
1858
			#$result["CONTEXT_PREFIX"]=$_SERVER['CONTEXT_PREFIX'];
1859
 
1860
			#取得目前的系統時間
1861
			#函式說明:
1862
			#取得系統時間目前的西元年、月、日、時、分、秒
1863
			#回傳的結果:
1864
			#$result["thisWestYear"],當前西元年
1865
			#$result["thisMonth"],當前月份
1866
			#$result["thisDay"],當前日
1867
			#$result["thisHour"],當前小時
1868
			#$result["thisMin"],當前分鐘
1869
			#$result["thisSec"],當前秒數
1870
			#必填的參數
1871
			$conf["time"]["getSystemDateAndTime"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php
1872
			$systemDateAndTime=time::getSystemDateAndTime($conf["time"]["getSystemDateAndTime"]);
1873
			unset($conf["time"]["getSystemDateAndTime"]);
1874
 
710 liveuser 1875
			#設置 systemDateAndTime
1 liveuser 1876
			$result["systemDateAndTime"]=$systemDateAndTime["thisWestYear"].":".$systemDateAndTime["thisMonth"].":".$systemDateAndTime["thisDay"]." ".$systemDateAndTime["thisHour"].":".$systemDateAndTime["thisMin"].":".$systemDateAndTime["thisSec"];
1877
 
1878
			#如果有設置 $conf["saveToDb"]
1879
			if(isset($conf["saveToDb"])){
1880
 
1881
				#如果 $conf["saveToDb"] 為 "true"
1882
				if($conf["saveToDb"]=="true"){
1883
 
1884
					#將連線的資訊記錄到資料庫
1885
					#函式說明:
1886
					#插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。
1887
					#回傳的數值:
1888
					#$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.
1889
					#$result["error"],錯誤訊息.
1890
					#$result["sql"],執行的sql語法.
1891
					#$result["function"],當前執行的涵式
1892
					#必填的參數:
1893
					$conf["db"]["insertDataToDbBest"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
1894
					$conf["db"]["insertDataToDbBest"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
1895
					$conf["db"]["insertDataToDbBest"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱
1896
					$conf["db"]["insertDataToDbBest"]["tableName"]=$conf["tableName"];#爲要插入資料的資料表名稱
1897
					$conf["db"]["insertDataToDbBest"]["columnName"]=$conf["columnName"];#爲資料表的項目名稱,
1898
						#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
1899
					$conf["db"]["insertDataToDbBest"]["insertValue"]=array($result["username"],$result["userBrowserType"],$result["userIp"],$result["requestUri"],$result["systemDateAndTime"]);#爲要插入度數值,
1900
						#例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);
1901
					#可以省略的變數:
1902
 
1903
					#如果有設置資料庫連線密碼
1904
					if(isset($conf["dbPassword"])){
1905
 
1906
						#則套用設定
1907
						$conf["db"]["insertDataToDbBest"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
1908
 
1909
						#var_dump($conf["db"]["insertDataToDbBest"]["dbPassword"]);
1910
 
1911
						}#if end
1912
 
1913
					$insertData=db::insertData($conf["db"]["insertDataToDbBest"]);
1914
					unset($conf["db"]["insertDataToDbBest"]);
1915
 
1916
					#如果寫入到資料表失敗
1917
					if($insertData["status"]=="false"){
1918
 
1919
						#設置執行失敗
1920
						$result["status"]="false";
1921
 
1922
						#設置執行錯誤訊息
1923
						$result["error"]=$insertData;
1924
 
1925
						#回傳結果
1926
						return $result;
1927
 
1928
						}#if end
1929
 
1930
					}#if end
1931
 
1932
				}#if end
1933
 
1934
			#設置伺服器的 domain name
1935
			$result["server_name"]=$_SERVER["SERVER_NAME"];
1936
 
1937
			#設置用戶端要求的完整網址
1938
			$result["requestUriFull"]=$result["scheme"]."://".$result["server_name"].$result["requestUri"];
1939
 
1940
			}#if end
1941
 
1942
		#反之代表是在command模式下
1943
		else{
1944
 
710 liveuser 1945
			#預設為空字串,代表非使用者直接觸發
1946
			$result["phpUser"]="";
1 liveuser 1947
 
710 liveuser 1948
			#如果有 LOGNAME 存在
1949
			if(isset($_SERVER["LOGNAME"])){
1950
 
1951
				#取得使用該php程式的使用者帳號
1952
				$result["phpUser"]=$_SERVER["LOGNAME"];
711 liveuser 1953
 
712 liveuser 1954
				}#if end
1955
 
1956
			#反之
1957
			else{
1958
 
1959
				/*
1960
				LOGNAME=liveuser
1961
				USERNAME=liveuser
1962
				USER=liveuser
1963
				*/
1964
 
1965
				#嘗試從系統變數取得使用者名稱
711 liveuser 1966
				#函式說明:
1967
				#呼叫shell執行系統命令,並取得回傳的內容.
1968
				#回傳結果:
1969
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1970
				#$result["error"],錯誤訊息陣列.
1971
				#$result["function"],當前執行的函數名稱.
1972
				#$result["argu"],使用的參數.
1973
				#$result["cmd"],執行的指令內容.
1974
				#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
1975
				#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
1976
				#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
1977
				#$result["running"],是否還在執行.
1978
				#$result["pid"],pid.
1979
				#$result["statusCode"],執行結束後的代碼.
1980
				#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
1981
				#必填參數:
1982
				#$conf["command"],字串,要執行的指令.
712 liveuser 1983
				$conf["external::callShell"]["command"]="env";
711 liveuser 1984
				#$conf["fileArgu"],字串,變數__FILE__的內容.
1985
				$conf["external::callShell"]["fileArgu"]=__FILE__;
1986
				#可省略參數:
1987
				#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
712 liveuser 1988
				#$conf["external::callShell"]["argu"]=array();
711 liveuser 1989
				#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
1990
				#$conf["arguIsAddr"]=array();
1991
				#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
1992
				#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
1993
				#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
1994
				#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
1995
				#$conf["enablePrintDescription"]="true";
1996
				#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
1997
				#$conf["printDescription"]="";
1998
				#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
1999
				$conf["external::callShell"]["escapeshellarg"]="true";
2000
				#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
2001
				#$conf["thereIsShellVar"]=array();
2002
				#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
2003
				#$conf["username"]="";
2004
				#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
2005
				#$conf["password"]="";
2006
				#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
2007
				#$conf["useScript"]="";
2008
				#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
2009
				#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
2010
				#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
2011
				#$conf["inBackGround"]="";
2012
				#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
2013
				#$conf["getErr"]="false";
2014
				#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
2015
				#$conf["doNotRun"]="false";
2016
				#參考資料:
2017
				#exec=>http://php.net/manual/en/function.exec.php
2018
				#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
2019
				#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
2020
				#備註:
2021
				#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
2022
				#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
2023
				$callShell=external::callShell($conf["external::callShell"]);
2024
				unset($conf["external::callShell"]);
710 liveuser 2025
 
711 liveuser 2026
				#如果執行失敗
2027
				if($callShell["status"]==="false"){
2028
 
2029
					#設置執行失敗
2030
					$result["status"]="false";
2031
 
712 liveuser 2032
					#設置執行錯誤訊息
711 liveuser 2033
					$result["error"]=$callShell;
2034
 
2035
					#回傳結果
2036
					return $result;
2037
 
2038
					}#if end
712 liveuser 2039
 
711 liveuser 2040
				#函式說明:
2041
				#檢查多個字串中的每個字串是否有多個關鍵字
2042
				#回傳結果:
2043
				#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
2044
				#$result["function"],當前執行的函數名稱.
2045
				#$result["error"],錯誤訊息.
2046
				#$result["argu"],使用的參數.
2047
				#$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
2048
				#$result["foundedKeyWords"],找到的關鍵字陣列.
2049
				#$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
2050
				#$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
2051
				#$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
728 liveuser 2052
				#$result["keyWordsIncludeStr"],陣列,儲存有找到關鍵字的來源的索引(sourceIndex)與其內容(sourceVal)跟找到的關鍵字項目陣列(KeyWords).
711 liveuser 2053
				#必填參數:
2054
				#$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
728 liveuser 2055
				$conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("LOGNAME=","USERNAME=","USER=","HOME=");
711 liveuser 2056
				#$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
2057
				$conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
2058
				#可省略參數:
2059
				#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
712 liveuser 2060
				#$conf["completeEqual"]="true";
711 liveuser 2061
				#參考資料:
2062
				#無.
2063
				#備註:
2064
				#無.
2065
				$findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
2066
				unset($conf["search::findManyKeyWordsFromManyString"]);
712 liveuser 2067
 
717 liveuser 2068
				#debug
2069
				#var_dump(__LINE__,$findManyKeyWordsFromManyString);
2070
 
712 liveuser 2071
				#如果執行不正常
711 liveuser 2072
				if($findManyKeyWordsFromManyString["status"]==="false"){
2073
 
2074
					#設置執行失敗
2075
					$result["status"]="false";
2076
 
712 liveuser 2077
					#設置執行錯誤訊息
711 liveuser 2078
					$result["error"]=$findManyKeyWordsFromManyString;
2079
 
2080
					#回傳結果
2081
					return $result;
712 liveuser 2082
 
711 liveuser 2083
					}#if end
2084
 
728 liveuser 2085
				#針對每個有找到關鍵字的來源字串
2086
				foreach($findManyKeyWordsFromManyString["keyWordsIncludeStr"] as $keyWordsIncludeStr){
711 liveuser 2087
 
728 liveuser 2088
					#如果有多個關鍵字
2089
					if(count($keyWordsIncludeStr["keyWords"])>1){
2090
 
2091
						#跳過
2092
						continue;
2093
 
2094
						}#if end
2095
 
2096
					#解析使用者名稱
711 liveuser 2097
					#函式說明:
2098
					#將字串特定關鍵字與其前面的內容剔除
2099
					#回傳結果:
2100
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2101
					#$result["error"],錯誤訊息陣列.
2102
					#$result["warning"],警告訊息鎮列.
2103
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
2104
					#$result["function"],當前執行的函數名稱.
2105
					#$result["argu"],使用的參數.
2106
					#$result["oriStr"],要處理的原始字串內容.
2107
					#$result["content"],處理好的的字串內容.	
2108
					#必填參數:
2109
					#$conf["stringIn"],字串,要處理的字串.
730 liveuser 2110
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$keyWordsIncludeStr["sourceVal"];
711 liveuser 2111
					#$conf["keyWord"],字串,特定字串.
728 liveuser 2112
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$keyWordsIncludeStr["keyWords"][0];
711 liveuser 2113
					#可省略參數:
2114
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
712 liveuser 2115
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
711 liveuser 2116
					#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
2117
					#$conf["lastResult"]=$delStrBeforeKeyWord;
2118
					#參考資料:
2119
					#無.
2120
					#備註:
2121
					#無.
2122
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
2123
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
2124
 
717 liveuser 2125
					#debug
2126
					#var_dump(__LINE__,$delStrBeforeKeyWord);
2127
 
712 liveuser 2128
					#如果執行不正常
717 liveuser 2129
					if($delStrBeforeKeyWord["status"]==="false"){
711 liveuser 2130
 
2131
						#設置執行失敗
2132
						$result["status"]="false";
2133
 
712 liveuser 2134
						#設置執行錯誤訊息
717 liveuser 2135
						$result["error"]=$delStrBeforeKeyWord;
711 liveuser 2136
 
2137
						#回傳結果
2138
						return $result;
2139
 
2140
						}#if end
2141
 
712 liveuser 2142
					#如果沒有關鍵字
717 liveuser 2143
					if($delStrBeforeKeyWord["founded"]==="false"){
711 liveuser 2144
 
2145
						#設置執行失敗
2146
						$result["status"]="false";
2147
 
712 liveuser 2148
						#設置執行錯誤訊息
717 liveuser 2149
						$result["error"]=$delStrBeforeKeyWord;
711 liveuser 2150
 
2151
						#回傳結果
2152
						return $result;
2153
 
2154
						}#if end
2155
 
712 liveuser 2156
					#如果不是空字串
2157
					if(!empty($delStrBeforeKeyWord["content"])){
711 liveuser 2158
 
712 liveuser 2159
						#取得使用者名稱
730 liveuser 2160
						$result["phpUser"]=basename($delStrBeforeKeyWord["content"]);
711 liveuser 2161
 
712 liveuser 2162
						#結束 foreach
2163
						break;
2164
 
2165
						}#if end
2166
 
2167
					}#foreach end
2168
 
733 liveuser 2169
				#debug
2170
				#var_dump(__LINE__,$result);
2171
 
712 liveuser 2172
				}#else
2173
 
2174
			#預設的使用者類型為 "regular"
2175
			$result["phpUserType"]="regular";
2176
 
2177
			#判斷使用者是否為管理者賬戶 - start
2178
 
717 liveuser 2179
			#如果有抓到使用者名稱
2180
			if(!empty($result["phpUser"])){
712 liveuser 2181
 
730 liveuser 2182
				#如果是 root 賬號
2183
				if($result["phpUser"]==="root"){
712 liveuser 2184
 
730 liveuser 2185
					#設置 phpUserType 為 intrinsic
2186
					$result["phpUserType"]="intrinsic";
733 liveuser 2187
 
717 liveuser 2188
					}#if end
2189
 
730 liveuser 2190
				#反之
2191
				else{
717 liveuser 2192
 
730 liveuser 2193
					#函式說明:
2194
					#呼叫shell執行系統命令,並取得回傳的內容.
2195
					#回傳結果:
2196
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2197
					#$result["error"],錯誤訊息陣列.
2198
					#$result["function"],當前執行的函數名稱.
2199
					#$result["argu"],使用的參數.
2200
					#$result["cmd"],執行的指令內容.
2201
					#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
2202
					#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
2203
					#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
2204
					#$result["running"],是否還在執行.
2205
					#$result["pid"],pid.
2206
					#$result["statusCode"],執行結束後的代碼.
2207
					#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
2208
					#必填參數:
2209
					#$conf["command"],字串,要執行的指令.
2210
					$conf["external::callShell"]["command"]="userdbctl";
2211
					#$conf["fileArgu"],字串,變數__FILE__的內容.
2212
					$conf["external::callShell"]["fileArgu"]=__FILE__;
2213
					#可省略參數:
2214
					#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
2215
					$conf["external::callShell"]["argu"]=array("user",$result["phpUser"]);
2216
					#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
2217
					#$conf["arguIsAddr"]=array();
2218
					#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
2219
					#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
2220
					#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
2221
					#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
2222
					#$conf["enablePrintDescription"]="true";
2223
					#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
2224
					#$conf["printDescription"]="";
2225
					#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
2226
					$conf["external::callShell"]["escapeshellarg"]="true";
2227
					#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
2228
					#$conf["thereIsShellVar"]=array();
2229
					#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
2230
					#$conf["username"]="";
2231
					#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
2232
					#$conf["password"]="";
2233
					#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
2234
					#$conf["useScript"]="";
2235
					#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
2236
					#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
2237
					#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
2238
					#$conf["inBackGround"]="";
2239
					#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
2240
					#$conf["getErr"]="false";
2241
					#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
2242
					#$conf["doNotRun"]="false";
2243
					#參考資料:
2244
					#exec=>http://php.net/manual/en/function.exec.php
2245
					#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
2246
					#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
2247
					#備註:
2248
					#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
2249
					#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
2250
					$callShell=external::callShell($conf["external::callShell"]);
2251
					unset($conf["external::callShell"]);
717 liveuser 2252
 
730 liveuser 2253
					#如果執行失敗
2254
					if($callShell["status"]==="false"){
2255
 
2256
						#設置執行失敗
2257
						$result["status"]="false";
712 liveuser 2258
 
730 liveuser 2259
						#設置錯誤訊息
2260
						$result["error"]=$callShell;
712 liveuser 2261
 
730 liveuser 2262
						#回傳結果
2263
						return $result;
712 liveuser 2264
 
730 liveuser 2265
						}#if end
2266
 
2267
					#範例輸出
2268
					#   User name: liveuser
2269
					# Disposition: regular
2270
					# Last Passw.: Fri 2023-09-22 08:00:00 CST
2271
					#    Login OK: yes
2272
					# Password OK: yes
2273
					#         UID: 1000
2274
					#         GID: 1000 (liveuser)
2275
					# Aux. Groups: wheel
2276
					#              mail
2277
					#              apache
2278
					#              svn
2279
					#   Directory: /var/home/liveuser
2280
					#     Storage: classic
2281
					#       Shell: /bin/bash
2282
					# Passwd Chg.: max 273y 9month 1w 4d 19h 30min/warn 1w
2283
					#Pas. Ch. Now: no
2284
					#   Passwords: 1
2285
					#     Service: io.systemd.NameServiceSwitch
2286
 
2287
					#DISPOSITION 為 intrinsic 者代表為系統賬戶 root
2288
					#DISPOSITION 為 system 者代表為系統賬戶
2289
					#DISPOSITION 為 regular 者代表為一般賬戶
2290
					#一般賬戶的 Aux. Groups 清單若有 wheel 存在,則代表要透過sudo來執行給予系統賬戶權限
2291
 
717 liveuser 2292
					#函式說明:
730 liveuser 2293
					#檢查多個字串中的每個字串是否有多個關鍵字
717 liveuser 2294
					#回傳結果:
730 liveuser 2295
					#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
717 liveuser 2296
					#$result["function"],當前執行的函數名稱.
730 liveuser 2297
					#$result["error"],錯誤訊息.
717 liveuser 2298
					#$result["argu"],使用的參數.
730 liveuser 2299
					#$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
2300
					#$result["foundedKeyWords"],找到的關鍵字陣列.
2301
					#$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
2302
					#$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
2303
					#$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
717 liveuser 2304
					#必填參數:
730 liveuser 2305
					#$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
2306
					$conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("Disposition: ");
2307
					#$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
2308
					$conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
717 liveuser 2309
					#可省略參數:
730 liveuser 2310
					#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
2311
					$conf["search::findManyKeyWordsFromManyString"]["completeEqual"]="false";
717 liveuser 2312
					#參考資料:
2313
					#無.
2314
					#備註:
2315
					#無.
730 liveuser 2316
					$findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
2317
					unset($conf["search::findManyKeyWordsFromManyString"]);
2318
 
717 liveuser 2319
					#如果執行失敗
730 liveuser 2320
					if($findManyKeyWordsFromManyString["status"]==="false"){
712 liveuser 2321
 
717 liveuser 2322
						#設置執行失敗
2323
						$result["status"]="false";
2324
 
2325
						#設置錯誤訊息
730 liveuser 2326
						$result["error"]=$findManyKeyWordsFromManyString;
717 liveuser 2327
 
2328
						#回傳結果
2329
						return $result;
2330
 
2331
						}#if end
712 liveuser 2332
 
730 liveuser 2333
					#如果沒有關鍵字
2334
					if($findManyKeyWordsFromManyString["foundedAll"]==="false"){
712 liveuser 2335
 
717 liveuser 2336
						#設置執行失敗
2337
						$result["status"]="false";
712 liveuser 2338
 
717 liveuser 2339
						#設置錯誤訊息
730 liveuser 2340
						$result["error"]=$findManyKeyWordsFromManyString;
712 liveuser 2341
 
717 liveuser 2342
						#回傳結果
2343
						return $result;
2344
 
2345
						}#if end
2346
 
730 liveuser 2347
					#針對每個找到的結果
2348
					foreach($findManyKeyWordsFromManyString["foundedTrueKey"] as $strWithKeyWord){
717 liveuser 2349
 
730 liveuser 2350
						#函式說明:
2351
						#將字串特定關鍵字與其前面的內容剔除
2352
						#回傳結果:
2353
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2354
						#$result["error"],錯誤訊息陣列.
2355
						#$result["warning"],警告訊息鎮列.
2356
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
2357
						#$result["function"],當前執行的函數名稱.
2358
						#$result["argu"],使用的參數.
2359
						#$result["oriStr"],要處理的原始字串內容.
2360
						#$result["content"],處理好的的字串內容.	
2361
						#必填參數:
2362
						#$conf["stringIn"],字串,要處理的字串.
2363
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$strWithKeyWord;
2364
						#$conf["keyWord"],字串,特定字串.
2365
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="Disposition: ";
2366
						#可省略參數:
2367
						#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
2368
						#$conf["recursive"]="true";
2369
						#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
2370
						#$conf["lastResult"]=$delStrBeforeKeyWord;
2371
						#參考資料:
2372
						#無.
2373
						#備註:
2374
						#無.
2375
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
2376
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
2377
 
2378
						#如果執行失敗
2379
						if($delStrBeforeKeyWord["status"]==="false"){
711 liveuser 2380
 
730 liveuser 2381
							#設置執行失敗
2382
							$result["status"]="false";
2383
 
2384
							#設置錯誤訊息
2385
							$result["error"]=$delStrBeforeKeyWord;
2386
 
2387
							#回傳結果
2388
							return $result;
2389
 
2390
							}#if end
711 liveuser 2391
 
730 liveuser 2392
						#如果應該要存在的關鍵字不存在
2393
						if($delStrBeforeKeyWord["founded"]==="false"){
711 liveuser 2394
 
730 liveuser 2395
							#設置執行失敗
2396
							$result["status"]="false";
711 liveuser 2397
 
730 liveuser 2398
							#設置錯誤訊息
2399
							$result["error"]=$delStrBeforeKeyWord;
711 liveuser 2400
 
730 liveuser 2401
							#回傳結果
2402
							return $result;
2403
 
2404
							}#if end
711 liveuser 2405
 
730 liveuser 2406
						#判斷賬戶類型
2407
						switch($delStrBeforeKeyWord["content"]){
2408
 
2409
							#若是 root
2410
							case "intrinsic":
2411
 
2412
								break;
711 liveuser 2413
 
730 liveuser 2414
							#若是系統賬戶
2415
							case "system";
711 liveuser 2416
 
730 liveuser 2417
								break;
717 liveuser 2418
 
730 liveuser 2419
							#若是一般使用者
2420
							case "regular";
711 liveuser 2421
 
717 liveuser 2422
								#函式說明:
2423
								#檢查多個字串中的每個字串是否有多個關鍵字
2424
								#回傳結果:
2425
								#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
2426
								#$result["function"],當前執行的函數名稱.
2427
								#$result["error"],錯誤訊息.
2428
								#$result["argu"],使用的參數.
2429
								#$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
2430
								#$result["foundedKeyWords"],找到的關鍵字陣列.
2431
								#$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
2432
								#$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
2433
								#$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
2434
								#必填參數:
2435
								#$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
730 liveuser 2436
								$conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("Aux. Groups: ");
717 liveuser 2437
								#$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
730 liveuser 2438
								$conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
717 liveuser 2439
								#可省略參數:
2440
								#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
2441
								$conf["search::findManyKeyWordsFromManyString"]["completeEqual"]="false";
2442
								#參考資料:
2443
								#無.
2444
								#備註:
2445
								#無.
2446
								$findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
2447
								unset($conf["search::findManyKeyWordsFromManyString"]);
2448
 
2449
								#如果執行失敗
2450
								if($findManyKeyWordsFromManyString["status"]==="false"){
2451
 
2452
									#設置執行失敗
2453
									$result["status"]="false";
2454
 
2455
									#設置錯誤訊息
2456
									$result["error"]=$findManyKeyWordsFromManyString;
2457
 
2458
									#回傳結果
2459
									return $result;
2460
 
2461
									}#if end
2462
 
730 liveuser 2463
								#初始化執行者所屬的群組
2464
								$groups=array();
717 liveuser 2465
 
859 liveuser 2466
								#如果沒有關鍵字
2467
								if($findManyKeyWordsFromManyString["foundedAll"]==="false"){
717 liveuser 2468
 
859 liveuser 2469
									#代表使用者所屬的群組只有自己
2470
									$groups[]=$result["phpUser"];
2471
 
2472
									}#if end
2473
 
2474
								#反之,代表屬於多個群組.
2475
								else{
730 liveuser 2476
 
859 liveuser 2477
									#針對每個找到的結果
2478
									foreach($findManyKeyWordsFromManyString["foundedTrueKey"] as $groupStartIndex=>$strWithKeyWord){
730 liveuser 2479
 
859 liveuser 2480
										#函式說明:
2481
										#將字串特定關鍵字與其前面的內容剔除
2482
										#回傳結果:
2483
										#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2484
										#$result["error"],錯誤訊息陣列.
2485
										#$result["warning"],警告訊息鎮列.
2486
										#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
2487
										#$result["function"],當前執行的函數名稱.
2488
										#$result["argu"],使用的參數.
2489
										#$result["oriStr"],要處理的原始字串內容.
2490
										#$result["content"],處理好的的字串內容.	
2491
										#必填參數:
2492
										#$conf["stringIn"],字串,要處理的字串.
2493
										$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$strWithKeyWord;
2494
										#$conf["keyWord"],字串,特定字串.
2495
										$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="Aux. Groups: ";
2496
										#可省略參數:
2497
										#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
2498
										#$conf["recursive"]="true";
2499
										#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
2500
										#$conf["lastResult"]=$delStrBeforeKeyWord;
2501
										#參考資料:
2502
										#無.
2503
										#備註:
2504
										#無.
2505
										$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
2506
										unset($conf["stringProcess::delStrBeforeKeyWord"]);
730 liveuser 2507
 
859 liveuser 2508
										#如果執行失敗
2509
										if($delStrBeforeKeyWord["status"]==="false"){
730 liveuser 2510
 
859 liveuser 2511
											#設置執行失敗
2512
											$result["status"]="false";
730 liveuser 2513
 
859 liveuser 2514
											#設置錯誤訊息
2515
											$result["error"]=$delStrBeforeKeyWord;
730 liveuser 2516
 
859 liveuser 2517
											#回傳結果
2518
											return $result;
730 liveuser 2519
 
859 liveuser 2520
											}#if end
2521
 
2522
										#如果應該要存在的關鍵字不存在
2523
										if($delStrBeforeKeyWord["founded"]==="false"){
2524
 
2525
											#設置執行失敗
2526
											$result["status"]="false";
730 liveuser 2527
 
859 liveuser 2528
											#設置錯誤訊息
2529
											$result["error"]=$delStrBeforeKeyWord;
730 liveuser 2530
 
859 liveuser 2531
											#回傳結果
2532
											return $result;
2533
 
2534
											}#if end
2535
 
2536
										#設置該用戶屬的群組之一
2537
										$groups[]=$delStrBeforeKeyWord["content"];
730 liveuser 2538
 
859 liveuser 2539
										#取得群組資訊之後的陣列內容
2540
										#函式說明:
2541
										#將陣列進行切割
2542
										#回傳結果:
2543
										#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2544
										#$reuslt["error"],執行不正常結束的錯訊息陣列.
2545
										#$result["function"],當前執行的函式名稱.
2546
										#$result["content"]["get"],切割出來的陣列.
2547
										#$result["content"]["leftL"],遺留下來的陣列,左邊.
2548
										#$result["content"]["leftR"],遺留下來的陣列,右邊.
2549
										#$result["content"]["ori"],原始的陣列.
2550
										#$result["argu"],使用的參數.
2551
										#必填參數:
2552
										#$conf["array"],要進行分割的陣列.
2553
										$conf["arrays::split"]["array"]=$callShell["output"];
2554
										#$conf["length"],整數,要切幾個元素.
2555
										$conf["arrays::split"]["length"]=0;
2556
										#可省略參數:
2557
										#$conf["offset"],整數,要從第幾個元素開始切,預設為0
2558
										$conf["arrays::split"]["offset"]=$groupStartIndex;
2559
										#參考資料:
2560
										#無.
2561
										#備註:
2562
										#無.
2563
										$split=arrays::split($conf["arrays::split"]);
2564
										unset($conf["arrays::split"]);
730 liveuser 2565
 
859 liveuser 2566
										#如果執行失敗
2567
										if($split["status"]==="false"){
2568
 
2569
											#設置執行失敗
2570
											$result["status"]="false";
730 liveuser 2571
 
859 liveuser 2572
											#設置錯誤訊息
2573
											$result["error"]=$split;
730 liveuser 2574
 
859 liveuser 2575
											#回傳結果
2576
											return $result;
730 liveuser 2577
 
859 liveuser 2578
											}#if end
2579
 
2580
										#可能為第1個外的群組資訊陣列
2581
										#$split["content"]["leftR"];
2582
 
2583
										#函式說明:
2584
										#檢查多個字串中的每個字串是否有多個關鍵字
2585
										#回傳結果:
2586
										#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
2587
										#$result["function"],當前執行的函數名稱.
2588
										#$result["error"],錯誤訊息.
2589
										#$result["argu"],使用的參數.
2590
										#$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
2591
										#$result["foundedKeyWords"],找到的關鍵字陣列.
2592
										#$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
2593
										#$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
2594
										#$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
2595
										#必填參數:
2596
										#$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
2597
										$conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array(":");
2598
										#$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
2599
										$conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$split["content"]["leftR"];
2600
										#可省略參數:
2601
										#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
2602
										$conf["search::findManyKeyWordsFromManyString"]["completeEqual"]="false";
2603
										#參考資料:
2604
										#無.
2605
										#備註:
2606
										#無.
2607
										$findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
2608
										unset($conf["search::findManyKeyWordsFromManyString"]);
2609
 
2610
										#如果執行失敗
2611
										if($findManyKeyWordsFromManyString["status"]==="false"){
2612
 
2613
											#設置執行失敗
2614
											$result["status"]="false";
730 liveuser 2615
 
859 liveuser 2616
											#設置錯誤訊息
2617
											$result["error"]=$findManyKeyWordsFromManyString;
730 liveuser 2618
 
859 liveuser 2619
											#回傳結果
2620
											return $result;
730 liveuser 2621
 
859 liveuser 2622
											}#if end
2623
 
2624
										#如果沒有關鍵字
2625
										if($findManyKeyWordsFromManyString["foundedAll"]==="false"){
2626
 
2627
											#設置執行失敗
2628
											$result["status"]="false";
2629
 
2630
											#設置錯誤訊息
2631
											$result["error"]=$findManyKeyWordsFromManyString;
2632
 
2633
											#回傳結果
2634
											return $result;
2635
 
2636
											}#if end
2637
 
2638
										#針對每個群組名稱
2639
										foreach($findManyKeyWordsFromManyString["foundedFalseKey"] as $group){
2640
 
2641
											#記錄group
2642
											$groups[]=trim($group);
2643
 
2644
											}#foreach end 
730 liveuser 2645
 
859 liveuser 2646
										#檢查有無 wheel 群組在裡面
2647
										#函式說明:
2648
										#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
2649
										#回傳結果:
2650
										#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
2651
										#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
2652
										#$result["error"],錯誤訊息
2653
										#$result["function"],當前執行的函數名稱
2654
										#$result["argv"],使用的參數
2655
										#$result["equalVarName"],相等的變數名稱或key.
2656
										#$result["equalVarValue"],相等的變數數值內容.
2657
										#必填參數:
2658
										#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
2659
										$conf["cmd::getEqualVar"]["conditionElement"]="wheel";
2660
										#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
2661
										$conf["cmd::getEqualVar"]["compareElements"]=$groups;
2662
										#可省略參數:
2663
										#無.
2664
										#參考資料:
2665
										#無.
2666
										#備註:
2667
										#無.
2668
										$getEqualVar=search::getEqualVar($conf["cmd::getEqualVar"]);
2669
										unset($conf["cmd::getEqualVar"]);
730 liveuser 2670
 
859 liveuser 2671
										#如果執行失敗
2672
										if($getEqualVar["status"]==="false"){
2673
 
2674
											#設置執行失敗
2675
											$result["status"]="false";
730 liveuser 2676
 
859 liveuser 2677
											#設置錯誤訊息
2678
											$result["error"]=$getEqualVar;
730 liveuser 2679
 
859 liveuser 2680
											#回傳結果
2681
											return $result;
730 liveuser 2682
 
859 liveuser 2683
											}#if end
2684
 
2685
										#如果是 可以用 sudo 的賬號
2686
										if($getEqualVar["founded"]==="true"){
2687
 
2688
											#設置為 wheel 群組的成員
2689
											$result["phpUserType"]="wheel";
2690
 
2691
											}#if end
730 liveuser 2692
 
859 liveuser 2693
										#只要找到一個,結束foreach
2694
										break;
730 liveuser 2695
 
859 liveuser 2696
										}#else end
717 liveuser 2697
 
730 liveuser 2698
								}#foreach end
2699
 
717 liveuser 2700
								break;
711 liveuser 2701
 
730 liveuser 2702
							}#switch end
711 liveuser 2703
 
730 liveuser 2704
						}#foreach end
711 liveuser 2705
 
730 liveuser 2706
					}#else end
2707
 
717 liveuser 2708
				}#if end
2709
 
1 liveuser 2710
			#取得server的ip
2711
			$result["serverIp"]=gethostbyname(gethostname());
2712
 
706 liveuser 2713
			#設置通訊協定
2714
			$result["scheme"]="file";
2715
 
1 liveuser 2716
			#設置為cmd模式
2717
			$result["mode"]="cmd";
705 liveuser 2718
 
2719
			#設置用戶端要求的完整網址
2720
			$result["requestUriFull"]=__FILE__;
1 liveuser 2721
 
705 liveuser 2722
			#函式說明:
2723
			#將字串特定關鍵字與其前面的內容剔除
2724
			#回傳結果:
2725
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2726
			#$result["error"],錯誤訊息陣列.
2727
			#$result["warning"],警告訊息鎮列.
2728
			#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
2729
			#$result["function"],當前執行的函數名稱.
2730
			#$result["argu"],使用的參數.
2731
			#$result["oriStr"],要處理的原始字串內容.
2732
			#$result["content"],處理好的的字串內容.	
2733
			#必填參數:
2734
			#$conf["stringIn"],字串,要處理的字串.
2735
			$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$result["requestUriFull"];
2736
			#$conf["keyWord"],字串,特定字串.
2737
			$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";
2738
			#可省略參數:
2739
			#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
2740
			$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
2741
			#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則回改回傳該內容.
2742
			#$conf["lastResult"]=$delStrBeforeKeyWord;
2743
			#參考資料:
2744
			#無.
2745
			#備註:
2746
			#無.
2747
			$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
2748
			unset($conf["stringProcess::delStrBeforeKeyWord"]);
2749
 
2750
			#如果執行失敗
2751
			if($delStrBeforeKeyWord["status"]==="false"){
2752
 
2753
				#設置執行失敗
2754
				$result["status"]="false";
2755
 
2756
				#設置執行錯誤訊息
2757
				$result["error"]=$insertData;
2758
 
2759
				#回傳結果
2760
				return $result;
2761
 
2762
				}#if end
2763
 
2764
			#取得目前要求執行的網址爲
2765
			$result["requestUri"]=$delStrBeforeKeyWord["content"];
2766
 
1 liveuser 2767
			}#else end
2768
 
398 liveuser 2769
		#函式說明:
2770
		#取得apache接收到的header
2771
		#回傳結果:
2772
		#$result["status"],執行成功與否,"true"代表成功,"false"代表失敗.
2773
		#$result["content"],取得的header陣列.
2774
		#$result["function"],當前執行的函數名稱.
2775
		#必填參數:
2776
		#無
2777
		#可省略參數:
2778
		#無 
2779
		#參考資料:
2780
		#無.
2781
		#備註:
2782
		#無.
428 liveuser 2783
		$getReceivedHeaders=header::getReceivedHeaders();
398 liveuser 2784
 
2785
		#如果執行失敗
2786
		if($getReceivedHeaders["status"]=="false"){
2787
 
2788
			#設置執行失敗
2789
			$result["status"]="false";
2790
 
2791
			#設置執行錯誤訊息
2792
			$result["error"]=$getReceivedHeaders;
2793
 
2794
			#回傳結果
2795
			return $result;
2796
 
2797
			}#if end
2798
 
2799
		#設置取得的 header 陣列
2800
		$result["header"]=$getReceivedHeaders["content"];
2801
 
2802
		#取得讀取到 body 字串
428 liveuser 2803
		$result["body"]=file_get_contents('php://input');
398 liveuser 2804
 
1 liveuser 2805
		#執行到這邊代表執行正常
2806
		$result["status"]="true";
2807
 
2808
		#回傳結果
2809
		return $result;
2810
 
2811
		}#function getConnectionInfo end
2812
 
2813
	/*
2814
	#函式說明:
2815
	#回傳可以連線到伺服器端網頁的port
2816
	#回傳結果:
2817
	#$result,可以連線到伺服器端網頁的port
2818
	#必填參數:
2819
	#無.
2820
	#可省略參數:
2821
	#無.
2822
	#參考資料:
2823
	#http://php.net/manual/en/reserved.variables.server.php
2824
	#備註:
2825
	#無.
2826
	*/
2827
	public static function getClientPort(){
2828
 
2829
		#取得可以連線到伺服器端網頁的port
2830
		$clientPORT = $_SERVER['SERVER_PORT'];
2831
 
2832
		#回傳使用者的IP
2833
		return $clientPORT;
2834
 
2835
		}#function getClientPORT end
2836
 
2837
	/*
2838
	#函式說明:
2839
	#取得 dns/ip 的地理位置資訊
2840
	#回傳結果:
2841
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2842
	#$result["error"],錯誤訊息陣列.
2843
	#$result["function"],當前執行的函式名稱.
2844
	#$result["content"],取得的回應內容.
2845
	#必填參數:
2846
	#$conf["fileArgu"],字串,__FILE__的內容.
2847
	#$conf["fileArgu"]=__FILE__;
2848
	#可省略參數:
2849
	#$conf["addr"],字串,dns或ip.
2850
	#$conf["addr"]="";
180 liveuser 2851
	#參考資料:
2852
	#無.
1 liveuser 2853
	#備註:
2854
	#請檢查參數.
2855
	*/
2856
	public static function getIpGeo($conf=array()){
2857
 
2858
		#初始化要回傳的結果
2859
		$result=array();
2860
 
2861
		#取得當前執行的函數名稱
2862
		$result["function"]=__FUNCTION__;
2863
 
2864
		#取得參數
2865
		$result["argu"]=$conf;
2866
 
2867
		#如果 $conf 不為陣列
2868
		if(gettype($conf)!="array"){
2869
 
2870
			#設置執行失敗
2871
			$result["status"]="false";
2872
 
2873
			#設置執行錯誤訊息
2874
			$result["error"][]="\$conf變數須為陣列形態";
2875
 
2876
			#如果傳入的參數為 null
2877
			if($conf==null){
2878
 
2879
				#設置執行錯誤訊息
2880
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2881
 
2882
				}#if end
2883
 
2884
			#回傳結果
2885
			return $result;
2886
 
2887
			}#if end
2888
 
2889
		#如果沒有變數 addr
2890
		if(!isset($conf["addr"])){
2891
 
2892
			#取得用戶端ip
2893
			#函式說明:
2894
			#回傳用戶端的IP位置
2895
			#回傳的結果:
2896
			#$result,用戶端的ip,若在命令列下執行則回傳getServerIP()的結果.
2897
			$conf["addr"]=csInformation::getClientIP();
2898
 
2899
			}#if end
2900
 
2901
		#查詢相關地理位置資訊的網址
2902
		$endPoint="https://tools.keycdn.com/geo.json?host=".$conf["addr"];
2903
 
2904
		#函式說明:
2905
		#運行curl cmd
2906
		#回傳結果:
2907
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2908
		#$result["error"],錯誤訊息陣列.
2909
		#$result["function"],當前執行的函式名稱.
2910
		#$result["content"],取得的回應內容.
2911
		#$result["cmd"],執行的command
2912
		#必填參數:
2913
		#$conf["url"],字串,目標url.
2914
		$conf["catchWebContent::curlCmd"]["url"]=$endPoint;
2915
		#$conf["fileArgu"],字串,變數__FILE__的內容.
2916
		$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];
2917
		#可省略參數:
2918
		#$conf["header"],字串陣列,要傳送的header.
2919
		$conf["catchWebContent::curlCmd"]["header"]=array("User-Agent: keycdn-tools:https://www.qbpwcf.org");
2920
		#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
2921
		#$conf["allowAnySSLcertificate"]="";
2922
		#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
2923
		#$conf["catchWebContent::curlCmd"]["postVar"]=$post;
2924
		#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
2925
		#$conf["urlEncode"]="false";
2926
		#$conf["agent"],字串,user agent的名稱.
2927
		$conf["catchWebContent::curlCmd"]["agent"]="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0";
2928
		$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
2929
		unset($conf["catchWebContent::curlCmd"]);
2930
 
2931
		#如果運行失敗
2932
		if($curlCmd["status"]==="false"){
2933
 
2934
			#設置錯誤狀態
2935
			$result["status"]="false";
2936
 
2937
			#設置錯誤訊息
2938
			$result["error"]=$curlCmd;
2939
 
2940
			#回傳結果
2941
			return $result;
2942
 
2943
			}#if end
2944
 
2945
		#設置執行正常的識別
2946
		$result["status"]="true";
2947
 
2948
		/*
2949
		範例回傳結果:
2950
		{
2951
	 		"status":"success",
2952
	   		"description":"Data successfully received.",
2953
	   		"data":{
2954
				"geo":{
2955
					"host":"www.google.com",
2956
					"ip":"74.125.29.147",
2957
					"rdns":"qg-in-f147.1e100.net",
2958
					"asn":"AS15169",
2959
					"isp":"Google Inc. ",
2960
					"country_name":"United States",
2961
					"country_code":"US",
2962
					"region":"CA",
2963
					"city":"Mountain View",
2964
			 		"postal_code":"94043",
2965
			 		"continent_code":"NA",
2966
			 		"latitude":37.419200897217,
2967
			 		"longitude":-122.05740356445,
2968
			 		"dma_code":807,
2969
			 		"area_code":650,
2970
			 		"timezone":"America\/Los_Angeles",
2971
			 		"datetime":"2015-05-22 09:10:35"
2972
			  		}
2973
		   		}
2974
			}
2975
		}
2976
 
2977
		or
2978
 
2979
		{
2980
		   "status":"error",
2981
		   "description":"Hostname did not resolve any IP."
2982
		}
2983
		*/
2984
		#解析回應
2985
		$res=json_decode($curlCmd["content"][0]);
2986
 
2987
		#如果查詢失敗
2988
		if($res->status==="error"){
2989
 
2990
			#設置錯誤狀態
2991
			$result["status"]="false";
2992
 
2993
			#設置錯誤訊息
2994
			$result["error"]=$res;
2995
 
2996
			#回傳結果
2997
			return $result;
2998
 
2999
			}#if end
3000
 
3001
		#取得回應的內容
3002
		$result["content"]=$res->data->geo;
3003
 
3004
		#回傳結果
3005
		return $result;
3006
 
3007
		}#function getIpGeo end
3008
 
3009
	/*
3010
	#函式說明:
3011
	#將ipv4轉換成ipv6
3012
	#回傳結果:
3013
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3014
	#$result["error"],錯誤訊息陣列.
3015
	#$result["function"],當前執行的函式名稱.
3016
	#$result["content"],取得的回應內容.
3017
	#$result["argu"],使用的參數.
3018
	#必填參數:
3019
	#$conf["ipv4"],字串,人可讀的ipv4字串.
3020
	$conf["ipv4"]="";
3021
	#可省略參數:
3022
	#無.
3023
	#參考資料:
3024
	#http://benjr.tw/17314
180 liveuser 3025
	#https://www.ultratools.com/tools/ipv4toipv6
1 liveuser 3026
	#備註:
3027
	#無.
3028
	*/
3029
	public static function ipv4toipv6($conf){
3030
 
3031
		#初始化要回傳的結果
3032
		$result=array();
3033
 
3034
		#取得當前執行的函數名稱
3035
		$result["function"]=__FUNCTION__;
3036
 
3037
		#取得參數
3038
		$result["argu"]=$conf;
3039
 
3040
		#如果 $conf 不為陣列
3041
		if(gettype($conf)!="array"){
3042
 
3043
			#設置執行失敗
3044
			$result["status"]="false";
3045
 
3046
			#設置執行錯誤訊息
3047
			$result["error"][]="\$conf變數須為陣列形態";
3048
 
3049
			#如果傳入的參數為 null
3050
			if($conf==null){
3051
 
3052
				#設置執行錯誤訊息
3053
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3054
 
3055
				}#if end
3056
 
3057
			#回傳結果
3058
			return $result;
3059
 
3060
			}#if end
3061
 
3062
		#函式說明:
3063
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3064
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3065
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3066
		#$result["function"],當前執行的函式名稱.
3067
		#$result["argu"],設置給予的參數.
3068
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3069
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3070
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3071
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
3072
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
3073
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3074
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3075
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3076
		#必填寫的參數:
3077
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3078
		$conf["variable::checkArguments"]["varInput"]=&$conf;
3079
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3080
		$conf["variable::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3081
		#可以省略的參數:
3082
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3083
		$conf["variable::checkArguments"]["mustBeFilledVariableName"]=array("ipv4");
3084
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
3085
		$conf["variable::checkArguments"]["mustBeFilledVariableType"]=array("string");
3086
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
3087
		$conf["variable::checkArguments"]["canBeEmptyString"]="false";
3088
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
3089
		#$conf["canNotBeEmpty"]=array();
3090
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
3091
		#$conf["canBeEmpty"]=array();
3092
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3093
		#$conf["skipableVariableCanNotBeEmpty"]=array();
3094
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3095
		#$conf["skipableVariableName"]=array();
3096
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3097
		#$conf["skipableVariableType"]=array();
3098
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3099
		#$conf["skipableVarDefaultValue"]=array("");
3100
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3101
		#$conf["disallowAllSkipableVarIsEmpty"]="";
3102
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
3103
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
3104
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3105
		#$conf["arrayCountEqualCheck"][]=array();
3106
		#參考資料來源:
3107
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3108
		$checkArguments=variableCheck::checkArguments($conf["variable::checkArguments"]);
3109
		unset($conf["variable::checkArguments"]);
3110
 
3111
		#如果檢查參數失敗
3112
		if($checkArguments["status"]==="false"){
3113
 
3114
			#設置執行不正常
3115
			$result["status"]="false";
3116
 
3117
			#設置錯誤訊息
3118
			$result["error"]=$checkArguments;
3119
 
3120
			#回傳結果
3121
			return $result;
3122
 
3123
			}#if end
3124
 
3125
		#分割每個ipv4的數字
3126
		#函式說明:
3127
		#將固定格式的字串分開,並回傳分開的結果。
3128
		#回傳結果:
3129
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3130
		#$result["error"],錯誤訊息陣列
3131
		#$result["function"],當前執行的函數名稱.
3132
		#$result["argu"],使用的參數.
3133
		#$result["oriStr"],要分割的原始字串內容
3134
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
3135
		#$result["dataCounts"],爲總共分成幾段
3136
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
3137
		#必填的參數:
3138
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["ipv4"];#要處理的字串。
3139
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
3140
		#可省略參數:
3141
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
3142
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
3143
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
3144
		unset($conf["stringProcess::spiltString"]);		
3145
 
3146
		#如果執行失敗
3147
		if($spiltString["status"]==="false"){
3148
 
3149
			#設置執行不正常
3150
			$result["status"]="false";
3151
 
3152
			#設置錯誤訊息
3153
			$result["error"]=$spiltString;
3154
 
3155
			#回傳結果
3156
			return $result;
3157
 
3158
			}#if end
3159
 
3160
		#如果沒有找到切割用的關鍵字
3161
		if($spiltString["found"]==="false"){
3162
 
3163
			#設置執行不正常
3164
			$result["status"]="false";
3165
 
3166
			#設置錯誤訊息
3167
			$result["error"]=$spiltString;
3168
 
3169
			#回傳結果
3170
			return $result;
3171
 
3172
			}#if end
3173
 
3174
		#如果沒有切割出4段
3175
		if($spiltString["dataCounts"]!==4){
3176
 
3177
			#設置執行不正常
3178
			$result["status"]="false";
3179
 
3180
			#設置錯誤訊息
3181
			$result["error"]=$spiltString;
3182
 
3183
			#回傳結果
3184
			return $result;
3185
 
3186
			}#if end
3187
 
3188
		#轉換每段ip位置為16進位
3189
		$ipv6="0:0:0:0:0:ffff:".sprintf('%2x',$spiltString["dataArray"][0]).sprintf('%02x',$spiltString["dataArray"][1]).":".sprintf('%2x',$spiltString["dataArray"][2]).sprintf('%02x',$spiltString["dataArray"][3]);
3190
 
3191
		#取得 ipv6
3192
		$result["content"]=$ipv6;
3193
 
3194
		#設置執行正常
3195
		$result["status"]="true";
3196
 
3197
		#回傳結果
3198
		return $result;
3199
 
3200
		}#function ipv4toipv6 end
3201
 
3202
	}#class csInformation end
3203
 
3204
?>