Subversion Repositories php-qbpwcf

Rev

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

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
239 liveuser 6
    Copyright (C) 2014~2026 MIN ZHI, CHEN
3 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
跟解析內容相關的類別
29
備註:
30
無.
31
*/
32
class parser{
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
226 liveuser 97
 
3 liveuser 98
	/*
99
	#函式說明:
100
	#解析 ss 指令的輸出
101
	#回傳結果:
102
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
103
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
104
	#$result["function"],當前執行的函式名稱.
105
	#$result["argu"],使用的參數.
106
	#$result["columns"],解析好的欄位名稱陣列.
107
	#$result["content"],解析好的內容陣列.
108
	#必填參數:
109
	#$conf["input"],字串陣列,要解析的內容,包含header.
110
	$conf["input"]=array();
111
	#可省略參數:
112
	#無.
113
	#參考資料:
114
	#無.
115
	#備註:
116
	#無.
117
	*/
118
	public static function ss(&$conf){
226 liveuser 119
 
3 liveuser 120
		#初始化要回傳的結果
121
		$result=array();
226 liveuser 122
 
3 liveuser 123
		#取得當前執行的函數名稱
124
		$result["function"]=__FUNCTION__;
226 liveuser 125
 
3 liveuser 126
		#如果 $conf 不為陣列
127
		if(gettype($conf)!="array"){
226 liveuser 128
 
3 liveuser 129
			#設置執行失敗
130
			$result["status"]="false";
226 liveuser 131
 
3 liveuser 132
			#設置執行錯誤訊息
133
			$result["error"][]="\$conf變數須為陣列形態";
134
 
135
			#如果傳入的參數為 null
136
			if($conf==null){
226 liveuser 137
 
3 liveuser 138
				#設置執行錯誤訊息
139
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 140
 
3 liveuser 141
				}#if end
142
 
143
			#回傳結果
144
			return $result;
226 liveuser 145
 
3 liveuser 146
			}#if end
226 liveuser 147
 
3 liveuser 148
		#取得參數
149
		$result["argu"]=$conf;
226 liveuser 150
 
3 liveuser 151
		#函式說明:
152
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
153
		#回傳結果:
154
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
155
		#$result["error"],執行不正常結束的錯訊息陣列.
156
		#$result["simpleError"],簡單表示的錯誤訊息.
157
		#$result["function"],當前執行的函式名稱.
158
		#$result["argu"],設置給予的參數.
159
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
160
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
161
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
162
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
163
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
164
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
165
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
166
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
167
		#必填參數:
168
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
169
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
170
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
171
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
172
		#可省略參數:
173
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
174
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input");
175
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
176
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
177
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
178
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
179
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
180
		#$conf["canNotBeEmpty"]=array();
181
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
182
		#$conf["canBeEmpty"]=array();
183
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
184
		#$conf["skipableVariableCanNotBeEmpty"]=array();
185
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
186
		#$conf["skipableVariableName"]=array();
187
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
188
		#$conf["skipableVariableType"]=array();
189
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
190
		#$conf["skipableVarDefaultValue"]=array("");
191
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
192
		#$conf["disallowAllSkipableVarIsEmpty"]="";
193
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
194
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
195
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
196
		#$conf["arrayCountEqualCheck"][]=array();
197
		#參考資料:
198
		#array_keys=>http://php.net/manual/en/function.array-keys.php
199
		#備註:
200
		#無.
201
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
202
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 203
 
3 liveuser 204
		#如果執行失敗
205
		if($checkArguments["status"]==="false"){
226 liveuser 206
 
3 liveuser 207
			#設置執行失敗
208
			$result["status"]="false";
209
 
210
			#設置錯誤訊息
211
			$result["error"]=$checkArguments;
212
 
213
			#回傳結果
214
			return $result;
226 liveuser 215
 
3 liveuser 216
			}#if end
226 liveuser 217
 
3 liveuser 218
		#如果參數檢查不通過
219
		if($checkArguments["passed"]==="false"){
226 liveuser 220
 
3 liveuser 221
			#設置執行失敗
222
			$result["status"]="false";
223
 
224
			#設置錯誤訊息
225
			$result["error"]=$checkArguments;
226
 
227
			#回傳結果
228
			return $result;
226 liveuser 229
 
3 liveuser 230
			}#if end
226 liveuser 231
 
3 liveuser 232
		#取得 header
233
		$headerStr=$conf["input"][0];
226 liveuser 234
 
3 liveuser 235
		#移除標題列
236
		unset($conf["input"][0]);
226 liveuser 237
 
3 liveuser 238
		#解析 header
226 liveuser 239
		#Netid                     Recv-Q                      Send-Q                                                                             Local Address:Port                                             Peer Address:Port
3 liveuser 240
		#Netid State  Recv-Q Send-Q                                   Local Address:Port        Peer Address:PortProcess
241
		#函式說明:
242
		#將固定格式的字串分開,並回傳分開的結果.
243
		#回傳結果:
244
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
245
		#$result["error"],錯誤訊息陣列
246
		#$result["function"],當前執行的函數名稱.
247
		#$result["argu"],使用的參數.
248
		#$result["oriStr"],要分割的原始字串內容
249
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
250
		#$result["dataCounts"],爲總共分成幾段
251
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
252
		#必填參數:
253
		#$conf["stringIn"],字串,要處理的字串.
254
		$conf["stringProcess::spiltString"]["stringIn"]=$headerStr;
255
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
256
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";
257
		#可省略參數:
258
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
259
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
260
		#參考資料:
261
		#無.
262
		#備註:
263
		#無.
264
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
265
		unset($conf["stringProcess::spiltString"]);
226 liveuser 266
 
3 liveuser 267
		#debug
268
		#var_dump(__LINE__,$spiltString);
226 liveuser 269
 
3 liveuser 270
		#如果執行失敗
271
		if($spiltString["status"]==="false"){
226 liveuser 272
 
3 liveuser 273
			#設置執行失敗
274
			$result["status"]="false";
275
 
276
			#設置錯誤訊息
277
			$result["error"]=$spiltString;
278
 
279
			#回傳結果
280
			return $result;
226 liveuser 281
 
3 liveuser 282
			}#if end
226 liveuser 283
 
3 liveuser 284
		#如果執行失敗
285
		if($spiltString["dataCounts"]<=1){
226 liveuser 286
 
3 liveuser 287
			#設置執行失敗
288
			$result["status"]="false";
289
 
290
			#設置錯誤訊息
291
			$result["error"]=$spiltString;
292
 
293
			#回傳結果
294
			return $result;
226 liveuser 295
 
3 liveuser 296
			}#if end
226 liveuser 297
 
3 liveuser 298
		#初始化儲存欄位名稱的變數
299
		$result["columns"]=array();
226 liveuser 300
 
3 liveuser 301
		#針對可能的欄位名稱
302
		for($i=0;$i<count($spiltString["dataArray"]);$i++){
226 liveuser 303
 
3 liveuser 304
			#debug
305
			#var_dump($result["columns"]);
226 liveuser 306
 
3 liveuser 307
			#取得該段內容
308
			$column=$spiltString["dataArray"][$i];
226 liveuser 309
 
3 liveuser 310
			#如果欄位開頭為空格
311
			while(strpos($column," ")===0){
226 liveuser 312
 
3 liveuser 313
				#剔除開頭的空格
314
				$column=substr($column,1);
226 liveuser 315
 
3 liveuser 316
				}#while end
226 liveuser 317
 
3 liveuser 318
			#如果有下一個欄位
319
			if(isset($spiltString["dataArray"][$i+1])){
226 liveuser 320
 
3 liveuser 321
				#如果下一個不是完整的欄位名稱
322
				if(strpos($spiltString["dataArray"][$i+1],":")!==false){
226 liveuser 323
 
3 liveuser 324
					#更新欄位名稱
325
					$column=$column." ".$spiltString["dataArray"][$i+1];
226 liveuser 326
 
3 liveuser 327
					#跳過下個欄位
328
					$i=$i+1;
226 liveuser 329
 
3 liveuser 330
					}#if end
226 liveuser 331
 
3 liveuser 332
				}#if end
226 liveuser 333
 
3 liveuser 334
			#如果需要判斷
335
			if(strlen($column)>=strlen("Process")){
226 liveuser 336
 
3 liveuser 337
				#函式說明:
338
				#取得符合特定字首與字尾的字串
339
				#回傳結果:
340
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
341
				#$result["function"],當前執行的函數名稱.
342
				#$result["error"],錯誤訊息陣列.
343
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
344
				#$result["content"],符合條件的字串,去掉字首字尾後的結果.
345
				#$result["returnString"],爲符合字首字、尾條件的字串內容。
346
				#$result["argu"],使用的參數.
347
				#必填參數:
348
				#$conf["checkString"],字串,要檢查的字串.
349
				$conf["search::getMeetConditionsString"]["checkString"]=$column;
350
				#可省略參數:
351
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
352
				#$conf["frontWord"]="";
353
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
354
				$conf["search::getMeetConditionsString"]["tailWord"]="Process";
355
				#參考資料:
356
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
357
				#備註:
358
				#無.
359
				$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
360
				unset($conf["search::getMeetConditionsString"]);
226 liveuser 361
 
3 liveuser 362
				#debug
363
				#var_dump(__LINE__,$getMeetConditionsString);
226 liveuser 364
 
3 liveuser 365
				#如果執行失敗
366
				if($getMeetConditionsString["status"]==="false"){
226 liveuser 367
 
3 liveuser 368
					#設置執行失敗
369
					$result["status"]="false";
370
 
371
					#設置錯誤訊息
372
					$result["error"]=$getMeetConditionsString;
373
 
374
					#回傳結果
375
					return $result;
226 liveuser 376
 
3 liveuser 377
					}#if end
226 liveuser 378
 
3 liveuser 379
				#如果欄位名稱結尾為 "Process"
380
				if($getMeetConditionsString["founded"]==="true"){
226 liveuser 381
 
3 liveuser 382
					#儲存欄位名稱
383
					$result["columns"][]=$getMeetConditionsString["content"];
226 liveuser 384
 
3 liveuser 385
					#儲存欄位名稱底下資料用於解析資料位置的資訊
386
					$result["addrForParseContet"][$getMeetConditionsString["content"]]=strpos($headerStr,$getMeetConditionsString["content"]);
226 liveuser 387
 
3 liveuser 388
					#儲存欄位名稱
389
					$result["columns"][]="Process";
226 liveuser 390
 
3 liveuser 391
					#儲存欄位名稱底下資料用於解析資料位置的資訊
392
					$result["addrForParseContet"]["Process"]=strpos($headerStr,"Process");
226 liveuser 393
 
3 liveuser 394
					#換下一個
395
					continue;
226 liveuser 396
 
3 liveuser 397
					}#if end
226 liveuser 398
 
3 liveuser 399
				}#if end
226 liveuser 400
 
3 liveuser 401
			#儲存欄位名稱
402
			$result["columns"][]=$column;
226 liveuser 403
 
3 liveuser 404
			#儲存欄位名稱底下資料用於解析資料位置的資訊
405
			$result["addrForParseContet"][$column]=strpos($headerStr,$column);
226 liveuser 406
 
3 liveuser 407
			#debug
408
			#var_dump($result["addrForParseContet"]);
226 liveuser 409
 
3 liveuser 410
			}#for end
226 liveuser 411
 
3 liveuser 412
		#欄位的計數
413
		$columnCount=count($result["columns"]);
226 liveuser 414
 
3 liveuser 415
		#debug
416
		#var_dump(__LINE__,$result);
226 liveuser 417
 
3 liveuser 418
		#break point
419
		#exit;
226 liveuser 420
 
3 liveuser 421
		#針對每列內容:
422
		#可能為:
423
		#"nl    UNCONN 0      0                                                    0:47                      *"
424
		#"tcp   LISTEN 0      128                                        169.254.1.1:22               0.0.0.0:*    users:(("sshd",pid=2920,fd=3))"
425
		#“nl    UNCONN 0      0                                                   18:0                       *"
426
		foreach($conf["input"] as $line){
226 liveuser 427
 
3 liveuser 428
			#debug
429
			#var_dump(__LINE__." ".$line);
226 liveuser 430
 
3 liveuser 431
			#針對每個欄位
432
			for($i=0;$i<$columnCount;$i++){
226 liveuser 433
 
3 liveuser 434
				#取得欄位名稱
435
				$columnName=$result["columns"][$i];
226 liveuser 436
 
3 liveuser 437
				#debug
438
				#var_dump(__LINE__." ".$columnName);
226 liveuser 439
 
3 liveuser 440
				#取得參考的位置
441
				$refAddr=$result["addrForParseContet"][$columnName];
226 liveuser 442
 
3 liveuser 443
				#若是 "Process" 欄位
444
				if($columnName==="Process"){
226 liveuser 445
 
3 liveuser 446
					#更新資料的起始點
447
					$refAddr=$refAddr+1;
226 liveuser 448
 
3 liveuser 449
					#抓取要解析的process字串
450
					$proStr=substr($line,$refAddr);
226 liveuser 451
 
3 liveuser 452
					#debug
453
					#var_dump(__LINE__,$proStr);
226 liveuser 454
 
3 liveuser 455
					#users:(("httpd",pid=3065,fd=4),("httpd",pid=1602,fd=4),("httpd",pid=1601,fd=4),("httpd",pid=1600,fd=4),("httpd",pid=1526,fd=4))
226 liveuser 456
 
3 liveuser 457
					#函式說明:
458
					#取得符合特定字首與字尾的字串
459
					#回傳結果:
460
					#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
461
					#$result["function"],當前執行的函數名稱.
462
					#$result["error"],錯誤訊息陣列.
463
					#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
464
					#$result["content"],符合條件的字串,去掉字首字尾後的結果.
465
					#$result["returnString"],爲符合字首字、尾條件的字串內容。
466
					#$result["argu"],使用的參數.
467
					#必填參數:
468
					#$conf["checkString"],字串,要檢查的字串.
469
					$conf["search::getMeetConditionsString"]["checkString"]=$proStr;
470
					#可省略參數:
471
					#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
472
					$conf["search::getMeetConditionsString"]["frontWord"]="users:(";
473
					#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
474
					$conf["search::getMeetConditionsString"]["tailWord"]=")";
475
					#參考資料:
476
					#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
477
					#備註:
478
					#無.
226 liveuser 479
 
3 liveuser 480
					#debug
481
					#var_dump($conf["search::getMeetConditionsString"]);
226 liveuser 482
 
3 liveuser 483
					$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
484
					unset($conf["search::getMeetConditionsString"]);
226 liveuser 485
 
3 liveuser 486
					#如果執行失敗
487
					if($getMeetConditionsString["status"]==="false"){
226 liveuser 488
 
3 liveuser 489
						#設置執行失敗
490
						$result["status"]="false";
491
 
492
						#設置錯誤訊息
493
						$result["error"]=$getMeetConditionsString;
494
 
495
						#回傳結果
496
						return $result;
226 liveuser 497
 
3 liveuser 498
						}#if end
226 liveuser 499
 
3 liveuser 500
					#如果沒有符合的關鍵字
501
					if($getMeetConditionsString["founded"]==="false"){
226 liveuser 502
 
3 liveuser 503
						#用欄位名稱來儲存資料
504
						$result["content"][$columnName][]=array();
226 liveuser 505
 
3 liveuser 506
						#跳到下個欄位
507
						continue;
226 liveuser 508
 
3 liveuser 509
						}#if end
226 liveuser 510
 
3 liveuser 511
					#("httpd",pid=3065,fd=4),("httpd",pid=1602,fd=4),("httpd",pid=1601,fd=4),("httpd",pid=1600,fd=4),("httpd",pid=1526,fd=4)
226 liveuser 512
 
3 liveuser 513
					#用 "\"" 來進行切割
514
					#$getMeetConditionsString["content"];
226 liveuser 515
 
3 liveuser 516
					#函式說明:
517
					#將固定格式的字串分開,並回傳分開的結果.
518
					#回傳結果:
519
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
520
					#$result["error"],錯誤訊息陣列
521
					#$result["function"],當前執行的函數名稱.
522
					#$result["argu"],使用的參數.
523
					#$result["oriStr"],要分割的原始字串內容
524
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
525
					#$result["dataCounts"],爲總共分成幾段
526
					#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
527
					#必填參數:
528
					#$conf["stringIn"],字串,要處理的字串.
529
					$conf["stringProcess::spiltString"]["stringIn"]=$getMeetConditionsString["content"];
530
					#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
531
					$conf["stringProcess::spiltString"]["spiltSymbol"]="\"";
532
					#可省略參數:
533
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
534
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
535
					#參考資料:
536
					#無.
537
					#備註:
538
					#無.
539
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
540
					unset($conf["stringProcess::spiltString"]);
226 liveuser 541
 
3 liveuser 542
					#如果執行失敗
543
					if($spiltString["status"]==="false"){
226 liveuser 544
 
3 liveuser 545
						#設置執行失敗
546
						$result["status"]="false";
547
 
548
						#設置錯誤訊息
549
						$result["error"]=$spiltString;
550
 
551
						#回傳結果
552
						return $result;
226 liveuser 553
 
3 liveuser 554
						}#if end
226 liveuser 555
 
3 liveuser 556
					#如果沒有符合的關鍵字
557
					if($spiltString["found"]==="false"){
226 liveuser 558
 
3 liveuser 559
						#設置執行失敗
560
						$result["status"]="false";
561
 
562
						#設置錯誤訊息
563
						$result["error"]=$spiltString;
564
 
565
						#回傳結果
566
						return $result;
226 liveuser 567
 
3 liveuser 568
						}#if end
226 liveuser 569
 
3 liveuser 570
					#儲存process陣列的變數
226 liveuser 571
					$proArray=array();
572
 
3 liveuser 573
					#針對奇數的內容
574
					for($j=1;$j<$spiltString["dataCounts"];$j=$j+2){
226 liveuser 575
 
3 liveuser 576
						#儲存 prcess name
577
						$proArray[]=$spiltString["dataArray"][$j];
226 liveuser 578
 
3 liveuser 579
						}#if end
226 liveuser 580
 
3 liveuser 581
					#用欄位名稱來儲存資料
582
					$result["content"][$columnName][]=$proArray;
226 liveuser 583
 
3 liveuser 584
					#換下一個欄位資料
585
					continue;
226 liveuser 586
 
3 liveuser 587
					}#if end
226 liveuser 588
 
3 liveuser 589
				#若是 "Local Address:Port" 欄位
590
				if($columnName==="Local Address:Port"){
226 liveuser 591
 
3 liveuser 592
					#從 $refAddr 往左右抓內容
226 liveuser 593
 
3 liveuser 594
					#抓取左邊的內容
595
					$leftStr=substr($line,0,$refAddr+strlen("Local Address"));
226 liveuser 596
 
3 liveuser 597
					#函式說明:
598
					#將字串特定關鍵字與其前面的內容剔除
599
					#回傳結果:
600
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
601
					#$result["error"],錯誤訊息陣列.
602
					#$result["warning"],警告訊息鎮列.
603
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
604
					#$result["function"],當前執行的函數名稱.
605
					#$result["oriStr"],要處理的原始字串內容.
226 liveuser 606
					#$result["content"],處理好的的字串內容.
3 liveuser 607
					#必填參數:
608
					#$conf["stringIn"],字串,要處理的字串.
609
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$leftStr;
610
					#$conf["keyWord"],字串,特定字串.
611
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
612
					#可省略參數:
613
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
614
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
615
					#參考資料:
616
					#無.
617
					#備註:
618
					#無.
619
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
620
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
226 liveuser 621
 
3 liveuser 622
					#如果執行失敗
623
					if($delStrBeforeKeyWord["status"]==="false"){
226 liveuser 624
 
3 liveuser 625
						#設置執行失敗
626
						$result["status"]="false";
627
 
628
						#設置錯誤訊息
629
						$result["error"]=$delStrBeforeKeyWord;
630
 
631
						#回傳結果
632
						return $result;
226 liveuser 633
 
3 liveuser 634
						}#if end
226 liveuser 635
 
3 liveuser 636
					#取得資料的左半部
637
					$leftDataStr=$delStrBeforeKeyWord["content"];
226 liveuser 638
 
3 liveuser 639
					#抓取右邊的內容
640
					$rightStr=substr($line,$refAddr+strlen("Local Address")+1);
226 liveuser 641
 
3 liveuser 642
					#函式說明:
643
					#將字串特定關鍵字與其後面的內容剔除
644
					#回傳結果:
645
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
646
					#$result["error"],錯誤訊息陣列.
647
					#$result["warning"],警告訊息鎮列.
648
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
649
					#$result["function"],當前執行的函數名稱.
650
					#$result["oriStr"],要處理的原始字串內容.
651
					#$result["content"],處理好的的字串內容.
652
					#$result["argu"],使用的參數.
653
					#必填參數:
654
					#$conf["stringIn"],字串,要處理的字串.
655
					$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$rightStr;
656
					#$conf["keyWord"],字串,特定字串.
657
					$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=" ";
658
					#可省略參數:
659
					#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
660
					#$conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="";
661
					#參考資料:
662
					#無.
663
					#備註:
664
					#無.
665
					$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
666
					unset($conf["stringProcess::delStrAfterKeyWord"]);
226 liveuser 667
 
3 liveuser 668
					#如果執行失敗
669
					if($delStrAfterKeyWord["status"]==="false"){
226 liveuser 670
 
3 liveuser 671
						#設置執行失敗
672
						$result["status"]="false";
673
 
674
						#設置錯誤訊息
675
						$result["error"]=$delStrAfterKeyWord;
676
 
677
						#回傳結果
678
						return $result;
226 liveuser 679
 
3 liveuser 680
						}#if end
226 liveuser 681
 
3 liveuser 682
					#取得資料的右半部
683
					$rightDataStr=$delStrAfterKeyWord["content"];
226 liveuser 684
 
3 liveuser 685
					#用欄位名稱來儲存資料
686
					$result["content"][$columnName][]=array("addr"=>$leftDataStr,"port"=>$rightDataStr);
226 liveuser 687
 
3 liveuser 688
					#換下一個欄位資料
689
					continue;
226 liveuser 690
 
3 liveuser 691
					}#if end
226 liveuser 692
 
3 liveuser 693
				#若是 "Peer Address:Port" 欄位
694
				if($columnName==="Peer Address:Port"){
226 liveuser 695
 
3 liveuser 696
					#從 $refAddr 往左右抓內容
226 liveuser 697
 
3 liveuser 698
					#抓取左邊的內容
699
					$leftStr=substr($line,0,$refAddr+strlen("Peer Address"));
226 liveuser 700
 
3 liveuser 701
					#debug
702
					#var_dump(__LINE__,$leftStr);
226 liveuser 703
 
3 liveuser 704
					#函式說明:
705
					#將字串特定關鍵字與其前面的內容剔除
706
					#回傳結果:
707
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
708
					#$result["error"],錯誤訊息陣列.
709
					#$result["warning"],警告訊息鎮列.
710
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
711
					#$result["function"],當前執行的函數名稱.
712
					#$result["oriStr"],要處理的原始字串內容.
226 liveuser 713
					#$result["content"],處理好的的字串內容.
3 liveuser 714
					#必填參數:
715
					#$conf["stringIn"],字串,要處理的字串.
716
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$leftStr;
717
					#$conf["keyWord"],字串,特定字串.
718
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
719
					#可省略參數:
720
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
721
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
722
					#參考資料:
723
					#無.
724
					#備註:
725
					#無.
726
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
727
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
226 liveuser 728
 
3 liveuser 729
					#debug
730
					#var_dump(__LINE__,$delStrBeforeKeyWord);
226 liveuser 731
 
3 liveuser 732
					#如果執行失敗
733
					if($delStrBeforeKeyWord["status"]==="false"){
226 liveuser 734
 
3 liveuser 735
						#設置執行失敗
736
						$result["status"]="false";
737
 
738
						#設置錯誤訊息
739
						$result["error"]=$delStrBeforeKeyWord;
740
 
741
						#回傳結果
742
						return $result;
226 liveuser 743
 
3 liveuser 744
						}#if end
226 liveuser 745
 
3 liveuser 746
					#如果沒有找到" "
747
					if($delStrBeforeKeyWord["founded"]==="false"){
226 liveuser 748
 
3 liveuser 749
						#用欄位名稱來儲存資料,"*"代表沒有資料
750
						$result["content"][$columnName][]="*";
226 liveuser 751
 
3 liveuser 752
						#換下一個欄位資料
753
						continue;
226 liveuser 754
 
3 liveuser 755
						}#if end
226 liveuser 756
 
3 liveuser 757
					#取得資料的左半部
758
					$leftDataStr=$delStrBeforeKeyWord["content"];
226 liveuser 759
 
3 liveuser 760
					#抓取右邊的內容
761
					$rightStr=substr($line,$refAddr+strlen("Peer Address")+1);
226 liveuser 762
 
3 liveuser 763
					#debug
764
					#var_dump(__LINE__,$rightStr);
226 liveuser 765
 
3 liveuser 766
					#函式說明:
767
					#將字串特定關鍵字與其後面的內容剔除
768
					#回傳結果:
769
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
770
					#$result["error"],錯誤訊息陣列.
771
					#$result["warning"],警告訊息鎮列.
772
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
773
					#$result["function"],當前執行的函數名稱.
774
					#$result["oriStr"],要處理的原始字串內容.
775
					#$result["content"],處理好的的字串內容.
776
					#$result["argu"],使用的參數.
777
					#必填參數:
778
					#$conf["stringIn"],字串,要處理的字串.
779
					$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$rightStr;
780
					#$conf["keyWord"],字串,特定字串.
781
					$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=" ";
782
					#可省略參數:
783
					#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
784
					#$conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="";
785
					#參考資料:
786
					#無.
787
					#備註:
788
					#無.
789
					$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
790
					unset($conf["stringProcess::delStrAfterKeyWord"]);
226 liveuser 791
 
3 liveuser 792
					#debug
793
					#var_dump(__LINE__,$delStrBeforeKeyWord);
226 liveuser 794
 
3 liveuser 795
					#如果執行失敗
796
					if($delStrAfterKeyWord["status"]==="false"){
226 liveuser 797
 
3 liveuser 798
						#設置執行失敗
799
						$result["status"]="false";
800
 
801
						#設置錯誤訊息
802
						$result["error"]=$delStrAfterKeyWord;
803
 
804
						#回傳結果
805
						return $result;
226 liveuser 806
 
3 liveuser 807
						}#if end
226 liveuser 808
 
3 liveuser 809
					#如果沒有找到" "
810
					if($delStrBeforeKeyWord["founded"]==="false"){
226 liveuser 811
 
3 liveuser 812
						#用欄位名稱來儲存資料,"*"代表沒有資料
813
						$result["content"][$columnName][]="*";
226 liveuser 814
 
3 liveuser 815
						#換下一個欄位資料
816
						continue;
226 liveuser 817
 
3 liveuser 818
						}#if end
226 liveuser 819
 
3 liveuser 820
					#取得資料的右半部
821
					$rightDataStr=$delStrAfterKeyWord["content"];
226 liveuser 822
 
3 liveuser 823
					#如果有 peer addr 資訊
824
					if($leftDataStr!=="" && $rightDataStr!==""){
226 liveuser 825
 
3 liveuser 826
						#用欄位名稱來儲存資料
827
						$result["content"][$columnName][]=array("addr"=>$leftDataStr,"port"=>$rightDataStr);
226 liveuser 828
 
3 liveuser 829
						}#if end
226 liveuser 830
 
3 liveuser 831
					#反之
832
					else{
226 liveuser 833
 
3 liveuser 834
						#用欄位名稱來儲存資料
835
						$result["content"][$columnName][]="*";
226 liveuser 836
 
3 liveuser 837
						}#else end
226 liveuser 838
 
3 liveuser 839
					#換下一個欄位資料
840
					continue;
226 liveuser 841
 
3 liveuser 842
					}#if end
226 liveuser 843
 
3 liveuser 844
				#取得資料字串
845
				$dataString=substr($line,$refAddr);
226 liveuser 846
 
3 liveuser 847
				#debug
848
				#var_dump(__LINE__,$dataString);
226 liveuser 849
 
3 liveuser 850
				#如果數值為空
851
				if($dataString===""){
226 liveuser 852
 
3 liveuser 853
					#用欄位名稱來儲存資料
854
					$result["content"][$columnName][]="";
226 liveuser 855
 
3 liveuser 856
					#換下一個欄位資料
857
					continue;
226 liveuser 858
 
3 liveuser 859
					}#if end
226 liveuser 860
 
3 liveuser 861
				#取得需要的部分
862
				#函式說明:
863
				#將字串特定關鍵字與其後面的內容剔除
864
				#回傳結果:
865
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
866
				#$result["error"],錯誤訊息陣列.
867
				#$result["warning"],警告訊息鎮列.
868
				#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
869
				#$result["function"],當前執行的函數名稱.
870
				#$result["oriStr"],要處理的原始字串內容.
871
				#$result["content"],處理好的的字串內容.
872
				#$result["argu"],使用的參數.
873
				#必填參數:
874
				#$conf["stringIn"],字串,要處理的字串.
875
				$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$dataString;
876
				#$conf["keyWord"],字串,特定字串.
877
				$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=" ";
878
				#可省略參數:
879
				#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
880
				#$conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="";
881
				#參考資料:
882
				#無.
883
				#備註:
884
				#無.
885
				$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
886
				unset($conf["stringProcess::delStrAfterKeyWord"]);
226 liveuser 887
 
3 liveuser 888
				#如果執行失敗
889
				if($delStrAfterKeyWord["status"]==="false"){
226 liveuser 890
 
3 liveuser 891
					#設置執行失敗
892
					$result["status"]="false";
893
 
894
					#設置錯誤訊息
895
					$result["error"]=$delStrAfterKeyWord;
896
 
897
					#回傳結果
898
					return $result;
226 liveuser 899
 
3 liveuser 900
					}#if end
226 liveuser 901
 
3 liveuser 902
				#如果沒有找到" "
903
				if($delStrAfterKeyWord["founded"]==="false"){
226 liveuser 904
 
3 liveuser 905
					#設置執行失敗
906
					$result["status"]="false";
907
 
908
					#設置錯誤訊息
909
					$result["error"]=$delStrAfterKeyWord;
910
 
911
					#回傳結果
912
					return $result;
226 liveuser 913
 
3 liveuser 914
					}#if end
915
 
916
				#用欄位名稱來儲存資料
917
				$result["content"][$columnName][]=$delStrAfterKeyWord["content"];
226 liveuser 918
 
3 liveuser 919
				}#for end
226 liveuser 920
 
3 liveuser 921
			}#foreach end
226 liveuser 922
 
3 liveuser 923
		#設置執行正常
924
		$result["status"]="true";
226 liveuser 925
 
3 liveuser 926
		#回傳結果
927
		return $result;
226 liveuser 928
 
3 liveuser 929
		}#function ss end
930
 
931
	/*
932
	#函式說明:
933
	#解析有規律的字串,分成多個段落.
934
	#回傳結果:
935
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
936
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
937
	#$result["function"],當前執行的函式名稱.
938
	#$result["argu"],使用的參數.
939
	#$result["content"],解析好的段落字串陣列.
940
	#$result["count"],解析好的段落數量.
941
	#必填參數:
942
	#$conf["input"],字串,要解析的內容.
943
	$conf["input"]="";
944
	#$conf["startSymbol"],字串,片段開始的識別字串.
945
	$conf["startSymbol"]="";
946
	#$conf["endSymbol"],字串,片段結束的識別字串.
947
	$conf["endSymbol"]="";
948
	#可省略參數:
949
	#$conf["splitSymbol"],字串,片段區隔的識別字串,預設為",".
950
	#$conf["splitSymbol"]=",";
951
	#參考資料:
952
	#無.
953
	#備註:
954
	#無.
955
	*/
956
	public static function section(&$conf){
226 liveuser 957
 
3 liveuser 958
		#初始化要回傳的結果
959
		$result=array();
226 liveuser 960
 
3 liveuser 961
		#取得當前執行的函數名稱
962
		$result["function"]=__FUNCTION__;
226 liveuser 963
 
3 liveuser 964
		#如果 $conf 不為陣列
965
		if(gettype($conf)!="array"){
226 liveuser 966
 
3 liveuser 967
			#設置執行失敗
968
			$result["status"]="false";
226 liveuser 969
 
3 liveuser 970
			#設置執行錯誤訊息
971
			$result["error"][]="\$conf變數須為陣列形態";
972
 
973
			#如果傳入的參數為 null
974
			if($conf==null){
226 liveuser 975
 
3 liveuser 976
				#設置執行錯誤訊息
977
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 978
 
3 liveuser 979
				}#if end
980
 
981
			#回傳結果
982
			return $result;
226 liveuser 983
 
3 liveuser 984
			}#if end
226 liveuser 985
 
3 liveuser 986
		#取得參數
987
		$result["argu"]=$conf;
226 liveuser 988
 
3 liveuser 989
		#函式說明:
990
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
991
		#回傳結果:
992
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
993
		#$result["error"],執行不正常結束的錯訊息陣列.
994
		#$result["simpleError"],簡單表示的錯誤訊息.
995
		#$result["function"],當前執行的函式名稱.
996
		#$result["argu"],設置給予的參數.
997
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
998
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
999
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1000
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1001
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1002
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1003
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1004
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1005
		#必填參數:
1006
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1007
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1008
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1009
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1010
		#可省略參數:
1011
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1012
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("input","startSymbol","endSymbol");
1013
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1014
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
1015
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1016
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1017
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1018
		#$conf["canNotBeEmpty"]=array();
1019
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1020
		#$conf["canBeEmpty"]=array();
1021
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1022
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("splitSymbol");
1023
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1024
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("splitSymbol");
1025
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1026
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1027
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1028
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(",");
1029
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
1030
		#$conf["disallowAllSkipableVarIsEmpty"]="";
1031
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
1032
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
1033
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1034
		#$conf["arrayCountEqualCheck"][]=array();
1035
		#參考資料:
1036
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1037
		#備註:
1038
		#無.
1039
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1040
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1041
 
3 liveuser 1042
		#如果執行失敗
1043
		if($checkArguments["status"]==="false"){
226 liveuser 1044
 
3 liveuser 1045
			#設置執行失敗
1046
			$result["status"]="false";
1047
 
1048
			#設置錯誤訊息
1049
			$result["error"]=$checkArguments;
1050
 
1051
			#回傳結果
1052
			return $result;
226 liveuser 1053
 
3 liveuser 1054
			}#if end
226 liveuser 1055
 
3 liveuser 1056
		#如果參數檢查不通過
1057
		if($checkArguments["passed"]==="false"){
226 liveuser 1058
 
3 liveuser 1059
			#設置執行失敗
1060
			$result["status"]="false";
1061
 
1062
			#設置錯誤訊息
1063
			$result["error"]=$checkArguments;
1064
 
1065
			#回傳結果
1066
			return $result;
226 liveuser 1067
 
3 liveuser 1068
			}#if end
226 liveuser 1069
 
3 liveuser 1070
		#初始化儲存段落結果的陣列
1071
		$result["content"]=array();
226 liveuser 1072
 
3 liveuser 1073
		#初始化贊存的單一片段資料
1074
		$tmpData="";
226 liveuser 1075
 
3 liveuser 1076
		#初始化當前byte的形態,"start"代表開始符號;"end"代表結束符號;"data"代表內容.
1077
		$byteType="";
226 liveuser 1078
 
3 liveuser 1079
		#針對每個byte
1080
		for($i=0;$i<strlen($conf["input"]);$i++){
226 liveuser 1081
 
3 liveuser 1082
			#debug
1083
			#var_dump($conf["input"][$i],$tmpData);
226 liveuser 1084
 
3 liveuser 1085
			#判斷每個字
1086
			switch($conf["input"][$i]){
226 liveuser 1087
 
3 liveuser 1088
				#如果是開始符號字串
1089
				case $conf["startSymbol"]:
226 liveuser 1090
 
3 liveuser 1091
					#如果開始結尾的符號字串相同
1092
					if($conf["startSymbol"]===$conf["endSymbol"]){
226 liveuser 1093
 
3 liveuser 1094
						#如果剛剛的資料是 data
1095
						if($byteType==="data"){
226 liveuser 1096
 
3 liveuser 1097
							#更新當前byte的形態
1098
							$byteType="end";
226 liveuser 1099
 
3 liveuser 1100
							#保存該段落內容
1101
							$result["content"][]=$tmpData;
226 liveuser 1102
 
3 liveuser 1103
							#初始化新的段落內容
1104
							$tmpData="";
226 liveuser 1105
 
3 liveuser 1106
							#結束 switch
1107
							break;
226 liveuser 1108
 
3 liveuser 1109
							}#if end
226 liveuser 1110
 
3 liveuser 1111
						}#if end
226 liveuser 1112
 
3 liveuser 1113
					#更新當前byte的形態
1114
					$byteType="start";
226 liveuser 1115
 
3 liveuser 1116
					#初始化新的段落內容
1117
					$tmpData="";
226 liveuser 1118
 
3 liveuser 1119
					#結束 switch
1120
					break;
226 liveuser 1121
 
3 liveuser 1122
				#如果是結束符號字串
1123
				case $conf["endSymbol"]:
226 liveuser 1124
 
3 liveuser 1125
					#更新當前byte的形態
1126
					$byteType="end";
226 liveuser 1127
 
3 liveuser 1128
					#保存該段落內容
1129
					$result["content"][]=$tmpData;
226 liveuser 1130
 
3 liveuser 1131
					#初始化新的段落內容
1132
					$tmpData="";
226 liveuser 1133
 
3 liveuser 1134
					#結束 switch
1135
					break;
226 liveuser 1136
 
3 liveuser 1137
				#其他結果
1138
				default :
226 liveuser 1139
 
3 liveuser 1140
					#代表為 data
1141
					$byteType="data";
226 liveuser 1142
 
3 liveuser 1143
					#串接段落內容
1144
					$tmpData=$tmpData.$conf["input"][$i];
226 liveuser 1145
 
3 liveuser 1146
				}#switch end
226 liveuser 1147
 
3 liveuser 1148
			}#for end`
226 liveuser 1149
 
3 liveuser 1150
		#取得段落數量
1151
		$result["count"]=count($result["content"]);
226 liveuser 1152
 
3 liveuser 1153
		#設置執行正常
1154
		$result["status"]="true";
226 liveuser 1155
 
3 liveuser 1156
		#回傳結果
1157
		return $result;
226 liveuser 1158
 
3 liveuser 1159
		}#function section end
1160
 
226 liveuser 1161
	}#class parser end