Subversion Repositories qbpwcf-lib(archive)

Rev

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

Rev Author Line No. Line
1 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
842 liveuser 6
    Copyright (C) 2014~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
*/
244 liveuser 24
namespace qbpwcf;
1 liveuser 25
 
26
/*
244 liveuser 27
類別說明:
28
管理QBPWCFW套件的類別.
29
備註:
1 liveuser 30
待所有函數類別與函數都標準化後,再來修改該函數會比較恰當. 
31
*/
32
class phpLib{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
203 liveuser 44
	#可省略參數:
45
	#無.
1 liveuser 46
	#參考資料:
47
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
203 liveuser 48
	#備註:
49
	#無.
1 liveuser 50
	*/
51
	public function __call($method,$arguments){
52
 
53
		#取得當前執行的函式
54
		$result["function"]=__FUNCTION__;
55
 
56
		#設置執行不正常
57
		$result["status"]="false";
58
 
59
		#設置執行錯誤
60
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
61
 
62
		#設置所丟入的參數
63
		$result["error"][]=$arguments;
64
 
65
		#回傳結果
66
		return $result;
67
 
68
		}#function __call end
69
 
70
	/*
71
	#函式說明:
72
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
73
	#回傳結果:
74
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
75
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
76
	#$result["function"],當前執行的函式名稱.
77
	#必填參數:
78
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
79
	#$arguments,陣列,為呼叫方法時所用的參數.
203 liveuser 80
	#可省略參數:
81
	#無.
1 liveuser 82
	#參考資料:
203 liveuser 83
	#__callStatic=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
84
	#備註:
85
	#無.
1 liveuser 86
	*/
87
	public static function __callStatic($method,$arguments){
88
 
89
		#取得當前執行的函式
90
		$result["function"]=__FUNCTION__;
91
 
92
		#設置執行不正常
93
		$result["status"]="false";
94
 
95
		#設置執行錯誤
96
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
97
 
98
		#設置所丟入的參數
99
		$result["error"][]=$arguments;
100
 
101
		#回傳結果
102
		return $result;
103
 
104
		}#function __callStatic end
105
 
106
	/*
107
	#函式說明:
108
	#取得目錄底下函式庫檔案清單
57 liveuser 109
	#回傳結果:
1 liveuser 110
	#$result["status"],"true"表示執行成功;"false"表示執行失敗
111
	#$result["error"],錯誤訊息.
112
	#$result["function"],當前執行的函數名稱.
113
	#$result["dataCount"],有幾筆符合的資料
114
	#$result["neededList"],符合條件的檔案清單		
115
	#必填參數:
116
	#$conf["folderAddress"],字串,要讀取的函式庫目錄
117
	$conf["folderAddress"]="phpLib";
118
	#$conf["fileArgu"],字串,__FILE__的內容.
119
	$conf["fileArgu"]=__FILE__;
120
	#可省略參數:
121
	#$conf["readFileType"],陣列,要讀取具有該陣列底下副檔名的檔案
122
	#$conf["readFileType"]=array("php","js","css");
123
	#$conf["excludeFile"],陣列,要忽略的檔案,*-soap.php代表"-soap.php"結尾的檔案都不要.
124
	#$conf["excludeFile"]=array();
203 liveuser 125
	#參考資料:
126
	#無.
1 liveuser 127
	#備註:
128
	#無.
129
	*/
203 liveuser 130
	public static function getLibFileList(&$conf){
1 liveuser 131
 
132
		#初始化要回傳的內容
133
		$result=array();
134
 
135
		#取得當前函數的名稱
136
		$result["function"]=__FUNCTION__;
137
 
138
		#如果 $conf 不為陣列
139
		if(gettype($conf)!="array"){
140
 
141
			#設置執行失敗
142
			$result["status"]="false";
143
 
144
			#設置執行錯誤訊息
145
			$result["error"][]="\$conf變數須為陣列形態";
146
 
147
			#如果傳入的參數為 null
148
			if($conf==null){
149
 
150
				#設置執行錯誤訊息
151
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
152
 
153
				}#if end
154
 
155
			#回傳結果
156
			return $result;
157
 
158
			}#if end
159
 
57 liveuser 160
		#函式說明:
1 liveuser 161
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
57 liveuser 162
		#回傳結果:
1 liveuser 163
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
164
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
165
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
166
		#必填寫的參數:
167
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
168
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("folderAddress","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
169
		#可以省略的參數:
170
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
171
		#$conf["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
172
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
173
		unset($conf["variableCheck"]["isexistMuti"]);
174
 
175
		#如果參數檢查有問題 
176
		if($checkResult["passed"]=="false"){
177
 
178
			#回傳檢查的結果
179
			return $checkResult;
180
 
181
			}#if end
182
 
183
		#如果 $conf["readFileType"] 沒有設置
184
		if(!isset($conf["readFileType"])){
185
 
186
			#套用預設數值
187
			$conf["readFileType"]=array("php","js","css");
188
 
189
			}#if end
190
 
191
		#如果 $conf["readFileType"] 沒有設置
192
		if(!isset($conf["excludeFile"])){
193
 
194
			#套用預設數值
195
			$conf["excludeFile"]=array("");
196
 
197
			}#if end
198
 
199
		#初始化要回傳的變數
200
		$result["status"]="false";
201
 
57 liveuser 202
		#函式說明:
815 liveuser 203
		#取得目錄底下的詳細資訊.
204
		#回傳結果:
205
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
206
		#$result["error"],錯誤訊息.
207
		#$result["function"],當前執行的函數名稱.
208
		#$result["size"],該清單的大小,單位為bytes.
209
		#$result["dataCount"],該清單的長度.
210
		#$result["content"],指定目錄底下的所有檔案資訊.
211
		#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
212
		#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.
213
		#$result["content"][$i]["permission"],第$i個節點權限.
214
		#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
215
		#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
216
		#$result["content"][$i]["bytes"],第$i個節點大小.
217
		#$result["content"][$i]["date"],第$i個節點最後變更日期.
218
		#$result["content"][$i]["time"],第$i個節點最後異動時間.
219
		#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
220
		#$result["content"][$i]["timezone"],第$i個節點的時區.
221
		#$result["content"][$i]["name"],第$i個節點的名稱.
57 liveuser 222
		#必填參數:
815 liveuser 223
		#$conf["path"],字串,要檢視的路徑.
224
		$conf["fileAccess::ls"]["path"]=$conf["folderAddress"];
225
		#可省略參數:
226
		#無.
227
		#參考資料:
228
		#https://www.businessweekly.com.tw/careers/Blog/14307
229
		#備註:
230
		#清單要不包含 "."開頭 跟 "~" 開頭
231
		$ls=fileAccess::ls($conf["fileAccess::ls"]);
232
		unset($conf["fileAccess::ls"]);
1 liveuser 233
 
815 liveuser 234
		#如果執行失敗
235
		if($ls["status"]==="false"){
236
 
1 liveuser 237
			#設置執行失敗識別
238
			$result["status"]="false";
239
 
240
			#設置執行失敗提示
815 liveuser 241
			$result["error"]=$ls;
1 liveuser 242
 
243
			#回傳結果
244
			return $result;
245
 
246
			}#if end
247
 
248
		#debug
815 liveuser 249
		#var_dump(__FILE__,__LINE__,$ls);
1 liveuser 250
 
251
		#初始化需要的清單
252
		$result["neededList"]=array();
253
 
254
		#針對清單中每個項目
815 liveuser 255
		foreach($ls["content"] as $node){
1 liveuser 256
 
815 liveuser 257
			#debug
258
			#var_dump(__FILE__,__LINE__,$node["name"]);
259
 
260
			#用 "." 分割節點名稱
261
			#函式說明:
262
			#將固定格式的字串分開,並回傳分開的結果.
263
			#回傳結果:
264
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
265
			#$result["error"],錯誤訊息陣列
266
			#$result["function"],當前執行的函數名稱.
267
			#$result["argu"],使用的參數.
268
			#$result["oriStr"],要分割的原始字串內容
269
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
270
			#$result["dataCounts"],爲總共分成幾段
271
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
272
			#必填參數:
273
			#$conf["stringIn"],字串,要處理的字串.
274
			$conf["stringProcess::spiltString"]["stringIn"]=$node["name"];
275
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
276
			$conf["stringProcess::spiltString"]["spiltSymbol"]=".";
277
			#可省略參數:
278
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
279
			#$conf["allowEmptyStr"]="false";
280
			#參考資料:
281
			#無.
282
			#備註:
283
			#無.
284
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
285
			unset($conf["stringProcess::spiltString"]);
286
 
287
			#debug
288
			#var_dump(__FILE__,__LINE__,$spiltString);
289
 
290
			#如果執行失敗
291
			if($spiltString["status"]=="false"){
292
 
293
				#設置執行失敗識別
294
				$result["status"]="false";
295
 
296
				#設置執行失敗提示
297
				$result["error"]=$spiltString["error"];
298
 
299
				#回傳結果
300
				return $result;
301
 
302
				}#if end
303
 
1 liveuser 304
			#如果「.」後面有內容 
815 liveuser 305
			if($spiltString["dataCounts"]>1){
1 liveuser 306
 
307
				#debug
308
				#var_dump($spiltStr);
309
 
310
				#涵式說明:
311
				#處理字串避免網頁出錯
312
				#回傳的結果:
313
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
314
				#$result["function"],當前執行的函數.
315
				#$result["content"],爲處理好的字串.
316
				#$result["error"],錯誤訊息陣列.
317
				#$result["argu"],使用的參數. 
57 liveuser 318
				#必填參數:
815 liveuser 319
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#爲要處理的字串
1 liveuser 320
				#可省略的參數:
321
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("\r","\n","\r\n","\n\r");#爲被選擇要處理的字串/字元,須爲陣列值。
322
					#若不設定則預設爲要將這些字串作替換("<" ">" ";" "=" "//" "'" "$" "%" "&" "|" "#" "/*" "*\/")。
323
				#$conf["changeTo"]=array("","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
324
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
325
				unset($conf["stringProcess"]["correctCharacter"]);
326
 
327
				#如果處理失敗
328
				if($correctCharacter["status"]==="false"){
329
 
330
					#設置執行失敗識別
331
					$result["status"]="false";
332
 
333
					#設置執行失敗提示
334
					$result["error"]=$correctCharacter;
335
 
336
					#回傳結果
337
					return $result;
338
 
339
					}#if end
340
 
341
				#var_dump($spiltStr["dataArray"][$spiltStr["dataCounts"]-1]);
342
				#var_dump($correctCharacter["content"]);
343
 
344
				#更新處理好的字串內容
815 liveuser 345
				$spiltString["dataArray"][$spiltString["dataCounts"]-1]=$correctCharacter["content"];
1 liveuser 346
 
347
				#對照其最後一個「.」後面的內容(副檔名)是否爲我們所需要的。
57 liveuser 348
				#函式說明:
1 liveuser 349
				#檢查一個數值是否與陣列裏面的元素相同
57 liveuser 350
				#回傳結果:
1 liveuser 351
				#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
352
				#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
353
				#$result["error"],錯誤訊息
354
				#$result["function"],當前執行的函數名稱
355
				#$result["argv"],使用的參數
356
				#$result["equalVarName"],相等的變數名稱或key.
357
				#$result["equalVarValue"],相等的變數數值內容.
57 liveuser 358
				#必填參數:
815 liveuser 359
				$conf["search"]["getEqualVar"]["conditionElement"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#條件元素,要等於的元素內容。
1 liveuser 360
				$conf["search"]["getEqualVar"]["compareElements"]=$conf["readFileType"];#要比對的陣列變數內容。
361
				$compareResult=search::getEqualVar($conf["search"]["getEqualVar"]);
362
				unset($conf["search"]["getEqualVar"]);
363
 
364
				#如果執行失敗
365
				if($compareResult["status"]==="false"){
366
 
367
					#設置執行失敗識別
368
					$result["status"]="false";
369
 
370
					#設置執行失敗提示
371
					$result["error"]=$compareResult;
372
 
373
					#回傳結果
374
					return $result;
375
 
376
					}#if end
377
 
378
				#如果有符合
379
				if($compareResult["founded"]==="true"){
380
 
57 liveuser 381
					#函式說明:
1 liveuser 382
					#處理字串避免網頁出錯
815 liveuser 383
					#回傳結果:
384
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
385
					#$result["function"],當前執行的函數.
386
					#$result["content"],爲處理好的字串.
387
					#$result["error"],錯誤訊息陣列.
388
					#$result["argu"],使用的參數. 
57 liveuser 389
					#必填參數:
815 liveuser 390
					$conf["stringProcess"]["correctCharacter"]["stringIn"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#爲要處理的字串
1 liveuser 391
					#可省略的參數:
392
					$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("\r","\n","\r\n","\n\r");#爲被選擇要處理的字串/字元,須爲陣列值。
393
						#若不設定則預設爲要將這些字串作替換("<" ">" ";" "=" "//" "'" "$" "%" "&" "|" "#" "/*" "*\/")。
394
					#$conf["changeTo"]=array("","","","");#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
815 liveuser 395
					$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1 liveuser 396
					unset($conf["stringProcess"]["correctCharacter"]);
397
 
815 liveuser 398
					#debug
399
					#var_dump(__FILE__,__LINE__,$correctCharacter);
400
 
1 liveuser 401
					#如果檔案是要排除的
815 liveuser 402
					if(in_array($correctCharacter["content"],$conf["excludeFile"])){
1 liveuser 403
 
815 liveuser 404
						#debug
405
						#var_dump(__FILE__,__LINE__,$correctCharacter["content"],$conf["excludeFile"]);
406
 
1 liveuser 407
						#忽略之
408
						continue;
409
 
410
						}#if end
411
 
412
					#針對每個要排除的項目	
413
					foreach($conf["excludeFile"] as $excludeFile){
414
 
415
						#如果檔案名稱包含"*",且為第一個字
416
						if(strpos($excludeFile,"*")===0){
417
 
418
							#取得要排除的關鍵字
419
							$excludeFileKeyWord=substr($excludeFile,1);
420
 
421
							#檢查有無結尾一樣
422
							#涵式說明:
423
							#取得符合特定字首與字尾的字串
424
							#回傳的結果:
425
							#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
426
							#$result["function"],當前執行的函數名稱.
427
							#$result["error"],錯誤訊息陣列.
428
							#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
429
							#$result["returnString"],爲符合字首條件的字串內容。
430
							#$result["argu"],使用的參數.
431
							#必填參數:
432
							#$conf["checkString"],字串,要檢查的字串.
815 liveuser 433
							$conf["search::getMeetConditionsString"]["checkString"]=$node["name"];
1 liveuser 434
							#可省略參數:
435
							#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
436
							#$conf["frontWord"]="";
437
							#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
438
							$conf["search::getMeetConditionsString"]["tailWord"]=$excludeFileKeyWord;
439
							#參考資料:
440
							#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
441
							$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
442
							unset($conf["search::getMeetConditionsString"]);
443
 
444
							#如果執行失敗
445
							if($getMeetConditionsString["status"]==="false"){
446
 
447
								#如果不是檔案名稱過短的錯誤
448
								if($getMeetConditionsString["error"][0]!=="要尋找的字尾長度大於要檢查的字串長度"){
449
 
450
									#設置執行失敗識別
451
									$result["status"]="false";
452
 
453
									#設置執行失敗提示
454
									$result["error"]=$getMeetConditionsString["error"];
455
 
456
									#回傳結果
457
									return $result;
458
 
459
									}#if end
460
 
461
								#設置沒有找到結尾相同的
462
								$getMeetConditionsString["founded"]="false";
463
 
464
								}#if end
465
 
466
							#如果結尾相同
467
							if($getMeetConditionsString["founded"]==="true"){
468
 
469
								#跳過該檔案
470
								continue 2;
471
 
472
								}#if end
473
 
474
							}#if end
475
 
476
						}#foreach end
477
 
815 liveuser 478
					#debug
479
					#var_dump(__FILE__,__LINE__,$node["name"]);
1 liveuser 480
 
815 liveuser 481
					#只接受檔案(排除軟連結、資料夾)
482
					if($node["nType"]==='-'){
483
 
484
						#將該檔案項目取出
485
						$result["neededList"][]=$node["name"];
486
 
487
						#將是否有符合條件的檔案的識別設爲 "true"
488
						$result["status"]="true";
489
 
490
						}#if end
491
 
1 liveuser 492
					}#if end
493
 
494
				}#if end
495
 
496
			}#foreach end
497
 
498
		#取得總共有幾個檔案是我們要的
499
		$result["dataCount"]=count($result["neededList"]);
500
 
501
		#回傳結果
502
		return $result;
503
 
504
		}#function getLibFileContent end
505
 
506
	/*
507
	#函式說明:
253 liveuser 508
	#取得php函式庫檔案裡面的結構.
57 liveuser 509
	#回傳結果:
253 liveuser 510
	#$result["status"],"true"表示取得成功;"false"表示取得失敗.
511
	#$result["error"],錯誤訊息.
1 liveuser 512
	#$result["function"],當前執行的函數名稱.
253 liveuser 513
	#$result["namesapceCount"],命名空間的筆數.
514
	#$result["classCount"],類別的筆數.
515
	#$result["functionsCount"],函式的筆數.
275 liveuser 516
	#$result["namespace"],命名空間名稱的陣列,每個元素有"lineNo"記錄所在行數與"content"記錄名稱.
253 liveuser 517
	#$result["commentForNamespace"],每個命令空間對應的註解.
278 liveuser 518
	#$result["class"],類別的陣列,每個元素有"lineNo"記錄所在行數與"content"記錄名稱與"namespace"記錄所屬的命名空間名稱.
253 liveuser 519
	#$result["commentForClass"],每個類別對應的註解.
275 liveuser 520
	#$result["functions"],函式名稱資訊的陣列,每個元素有"namespace"記錄所屬的命名空間與"class"記錄所屬的類別名稱與"content"記錄名稱.
57 liveuser 521
	#必填參數:
1 liveuser 522
	#$conf["libFileAddress"]=,字串,要讀取的函式庫檔案位置
260 liveuser 523
	$conf["libFileAddress"]=".php";
1 liveuser 524
	#$conf["fileArgu"],字串,__FILE__的內容.
525
	$conf["fileArgu"]=__FILE__;
526
	#可省略參數:
527
	#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"false".
822 liveuser 528
	#$conf["web"]="true";
203 liveuser 529
	#參考資料:
530
	#無.
57 liveuser 531
	#備註:
532
	#無.
1 liveuser 533
	*/
203 liveuser 534
	public static function getPhpLibConstruction(&$conf){
1 liveuser 535
 
536
		#初始化要回傳的內容
537
		$result=array();
538
 
539
		#取得當前函數的名稱
540
		$result["function"]=__FUNCTION__;
541
 
542
		#如果 $conf 不為陣列
543
		if(gettype($conf)!="array"){
544
 
545
			#設置執行失敗
546
			$result["status"]="false";
547
 
548
			#設置執行錯誤訊息
549
			$result["error"][]="\$conf變數須為陣列形態";
550
 
551
			#如果傳入的參數為 null
552
			if($conf==null){
553
 
554
				#設置執行錯誤訊息
555
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
556
 
557
				}#if end
558
 
559
			#回傳結果
560
			return $result;
561
 
562
			}#if end
563
 
564
		#函式說明:
565
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
566
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
567
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
568
		#$result["function"],當前執行的函式名稱.
569
		#$result["argu"],設置給予的參數.
570
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
571
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
572
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
573
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
574
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
575
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
576
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
577
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
578
		#必填寫的參數:
579
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
580
		$conf["variable::checkArguments"]["varInput"]=&$conf;
581
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
582
		$conf["variable::checkArguments"]["referenceVarKey"]="variable::checkArguments";
583
		#可以省略的參數:
584
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
585
		$conf["variable::checkArguments"]["mustBeFilledVariableName"]=array("libFileAddress","fileArgu");
586
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
587
		$conf["variable::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
588
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
589
		#$conf["canBeEmptyString"]="false";
590
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
591
		#$conf["canNotBeEmpty"]=array();
592
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
593
		#$conf["canBeEmpty"]=array();
594
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
595
		#$conf["skipableVariableCanNotBeEmpty"]=array();
596
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
597
		$conf["variable::checkArguments"]["skipableVariableName"]=array("web");
598
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
599
		$conf["variable::checkArguments"]["skipableVariableType"]=array("string");
600
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
601
		$conf["variable::checkArguments"]["skipableVarDefaultValue"]=array("false");
602
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
603
		#$conf["disallowAllSkipableVarIsEmpty"]="";
604
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
605
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
606
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
607
		#$conf["arrayCountEqualCheck"][]=array();
608
		#參考資料來源:
609
		#array_keys=>http://php.net/manual/en/function.array-keys.php
610
		$checkArguments=variableCheck::checkArguments($conf["variable::checkArguments"]);
611
		unset($conf["variable::checkArguments"]);
612
 
613
		# 如果檢查出錯
614
		if($checkArguments["status"]=="false"){
615
 
616
			#設置執行錯誤的識別
617
			$result["status"]="fasle";
618
 
619
			#設置執行錯誤的訊息
620
			$result["error"]=$checkArguments;
621
 
622
			#回傳結果
623
			return $result;
624
 
625
			}#if end
626
 
627
		# 如果檢查不通過
628
		if($checkArguments["passed"]=="false"){
629
 
630
			#設置執行錯誤的識別
631
			$result["status"]="fasle";
632
 
633
			#設置執行錯誤的訊息
634
			$result["error"]=$checkArguments;
635
 
636
			#回傳結果
637
			return $result;
638
 
639
			}#if end
640
 
641
		#函數說明:
642
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
643
		#回傳結果:
644
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
645
		#$result["error"],錯誤訊息陣列.
646
		#$result["function"],函數名稱. 
647
		#$result["argu"],使用的參數.
648
		#$result["content"],網址,若是在命令列執行,則為"null".
649
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
650
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
651
		#必填參數:
652
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
653
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["libFileAddress"];
654
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
655
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
656
		#可省略參數:
657
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
658
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
659
		#備註:
660
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
661
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
662
		unset($conf["fileAccess::getInternetAddressV2"]);
663
 
664
		#如果取得網路位置出錯
665
		if($getInternetAddressV2["status"]=="false"){
666
 
667
			#設置執行錯誤的識別
668
			$result["status"]="fasle";
669
 
670
			#設置執行錯誤的訊息
671
			$result["error"]=$checkArguments;
672
 
673
			#回傳結果
674
			return $result;
675
 
676
			}#if end
677
 
678
		#取得檔案系統位置
679
		$conf["libFileAddress"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
680
 
57 liveuser 681
		#函式說明:
1 liveuser 682
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
683
		#回傳的變數說明:
684
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗。
685
		#$result["error"],錯誤訊息提示
686
		#$result["fileContent"],爲檔案的內容陣列
687
		#$result["lineCount"],爲檔案內容總共的行數
57 liveuser 688
		#必填參數:
1 liveuser 689
		$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["libFileAddress"];#爲檔案的位置以及名稱
690
		$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
691
		#可省略參數:
692
		#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
693
		$conf["fileAccess::getFileContent"]["web"]="false";
694
		#參考資料:
695
		#file():取得檔案內容的行數
696
		#http://php.net/manual/en/function.file.php
697
		$fileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
698
		unset($conf["fileAccess::getFileContent"]);
699
 
700
		#如果 檔案取得失敗
701
		if($fileContent["status"]=="false"){
702
 
703
			#設置執行失敗的識別
704
			$result["status"]="false";
705
 
706
			#設置錯誤訊息
707
			$result["error"]=$fileContent["error"];
708
 
709
			return $result;
710
 
711
			}#if end
712
 
713
		#根據 $fileContent 來尋找總共有幾個命名空間
57 liveuser 714
		#函式說明:
1 liveuser 715
		#檢查一個字串裡面是否有多個關鍵字
716
		#回傳的結果:
717
		#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
718
		#$result[$i]["status"],第$i個字串搜尋是否成功,"true"代表執行成功,"false"代表執行失敗。
719
		#$result[$i]["error"],第$i個字串搜尋的錯誤訊息陣列
720
		#$result[$i]["founded"],第$i個字串搜尋,是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
721
		#$result["foundedTrueKey"],["founded"]結果為"true"的元素key陣列。
722
		#$result["foundedFalseKey"],["founded"]結果為"false"的元素key陣列。
57 liveuser 723
		#必填參數:
1 liveuser 724
		$conf["search"]["findManyKeyWordsFromManyString"]["keyWords"]=array("namespace");#想要搜尋的關鍵字
725
		$conf["search"]["findManyKeyWordsFromManyString"]["stringArray"]=$fileContent["fileContent"];#要被搜尋的字串內容陣列		
253 liveuser 726
		#可省略的參數:
1 liveuser 727
		#$conf["search"]["findManyKeyWordsFromManyString"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
728
		$foundedNamespaceStrArray=search::findManyKeyWordsFromManyString($conf["search"]["findManyKeyWordsFromManyString"]);
729
		unset($conf["search"]["findManyKeyWordsFromManyString"]);
730
 
731
		#針對每個找到"namespace"的行編號
253 liveuser 732
		foreach($foundedNamespaceStrArray["foundedTrueKey"] as $lineNo => $value){
1 liveuser 733
 
734
			#確認該行是否為命名空間的宣告行
57 liveuser 735
			#函式說明:
1 liveuser 736
			#檢查一個字串裡面是否沒有多個任何篩選字存在
737
			#回傳的結果:
738
			#$result["status"],執行是否成功的識別,"true"為執行成功;"false"為執行失敗
739
			#$result["error"],錯誤訊息陣列			
740
			#$result["filtered"],該字串是否為要過濾掉的,"true"為要過濾掉的;"false"為不用過濾掉的
57 liveuser 741
			#必填參數:
253 liveuser 742
			$conf["search"]["filterString"]["inputStr"]=$value;#要過濾的字串
1 liveuser 743
			$conf["search"]["filterString"]["filterWord"]=array("#","=","}","unset(","foreach(","var_dump(");#要過濾的字串不能含有該陣列元素之一
744
			$searchResult=search::filterString($conf["search"]["filterString"]);
745
			unset($conf["search"]["filterString"]);
746
 
747
			#如果 $searchResult["filtered"] 等於 "fasle"
748
			if($searchResult["filtered"]=="false"){
749
 
750
				#代表是命名空間宣告的行
751
 
752
				#取得命名空間宣告的行
253 liveuser 753
				$namespaceStr=$value;
1 liveuser 754
 
57 liveuser 755
				#函式說明:
1 liveuser 756
				#處理字串避免網頁出錯
757
				#回傳的結果:
253 liveuser 758
				#回傳結果:
759
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
760
				#$result["function"],當前執行的函數.
761
				#$result["content"],爲處理好的字串.
762
				#$result["error"],錯誤訊息陣列.
763
				#$result["argu"],使用的參數. 
57 liveuser 764
				#必填參數:
1 liveuser 765
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$namespaceStr;#爲要處理的字串
766
				#可省略的參數:
767
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(" ","{","namespace","\n","\t",";");#爲被選擇要處理的字串/字元,須爲陣列值。
768
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
769
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
253 liveuser 770
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1 liveuser 771
				unset($conf["stringProcess"]["correctCharacter"]);
772
 
253 liveuser 773
				#如果執行失敗
774
				if($correctCharacter["status"]==="false"){
775
 
776
					#設置執行失敗的識別
777
					$result["status"]="false";
778
 
779
					#設置錯誤訊息
780
					$result["error"]=$correctCharacter["error"];
781
 
782
					return $result;
783
 
784
					}#if end
785
 
275 liveuser 786
				#記錄取得的命名空間所在行數與名稱
787
				$result["namespace"][]=array("lineNo"=>$lineNo,"content"=>$correctCharacter["content"]);
253 liveuser 788
 
789
				# 從 namespace 往前讀取對應的註解
254 liveuser 790
				for($i=$lineNo-1;$i>0;$i--){
253 liveuser 791
 
257 liveuser 792
					#初始化 $temp
793
					$temp=$fileContent["fileContent"][$i];
256 liveuser 794
 
257 liveuser 795
					#如果該行內容不為空
796
					if(!empty($fileContent["fileContent"][$i])){
253 liveuser 797
 
257 liveuser 798
						#函式說明:
799
						#處理字串避免網頁出錯
800
						#回傳的結果:
801
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
802
						#$result["function"],當前執行的函數.
803
						#$result["content"],爲處理好的字串.
804
						#$result["error"],錯誤訊息陣列.
805
						#$result["argu"],使用的參數. 
806
						#必填參數:
807
						$conf["stringProcess"]["correctCharacter"]["stringIn"]=$fileContent["fileContent"][$i];#爲要處理的字串
808
						#可省略的參數:
259 liveuser 809
						$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array("\n");#爲被選擇要處理的字串/字元,須爲陣列值。
257 liveuser 810
							#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
811
						#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
812
						$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
813
						unset($conf["stringProcess"]["correctCharacter"]);
814
 
815
						#如果處理失敗
816
						if($correctCharacter["status"]==="false"){
253 liveuser 817
 
257 liveuser 818
							#設置執行錯誤的識別
819
							$result["status"]="false";
253 liveuser 820
 
257 liveuser 821
							#設置執行錯誤的訊息
822
							$result["error"]=$correctCharacter;
823
 
824
							#回傳結果
825
							return $result;
253 liveuser 826
 
257 liveuser 827
							}#if end
828
 
829
						#取得處理好的內容列
830
						$temp=$correctCharacter["content"];
253 liveuser 831
 
832
						}#if end
257 liveuser 833
 
253 liveuser 834
					#如果 $temp 為 「/*」
835
					if($temp==="/*"){
836
 
837
						#跳出for迴圈
838
						break;
839
 
840
						}#if end
841
 
842
					#如果 $temp 為 「*/」 
843
					if($temp==="*/"){
844
 
845
						#跳到下一輪
846
						continue;
847
 
848
						}#if end
849
 
850
					#記錄namesapce的註解內容
257 liveuser 851
					$result["commentForNamespace"][count($result["namespace"])-1][]=$temp;
253 liveuser 852
 
853
					}#for end
255 liveuser 854
 
855
				#函式說明:
856
				#將陣列倒置
857
				#回傳的結果:
858
				#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗
859
				#$result["error"],錯誤訊息陣列
860
				#$result["convertArray"],轉置後的陣列內容
861
				#必填參數:
862
				$conf["arrays"]["convertArray"]["inputArray"]=$result["commentForNamespace"][count($result["namespace"])-1];#要倒置的陣列
863
				#參考資料來源:
864
				#http://tw2.php.net/array_reverse => 陣列倒置的內建函式
865
				$convertResult=arrays::convertArray($conf["arrays"]["convertArray"]);
866
				unset($conf["arrays"]["convertArray"]);
867
 
868
				#如果轉置失敗
869
				if($convertResult["status"]=="false"){
870
 
871
					#設置執行失敗的識別
872
					$result["status"]="false";
873
 
874
					#設置執行失敗的提示
875
					$result["error"]=$convertResult;
876
 
877
					#回傳結果
878
					return $result;
879
 
880
					}#if end	
881
 
882
				#反之代表執行成功
883
				else{
884
 
885
					#將倒置後的元素存起來
886
					$result["commentForNamespace"][count($result["namespace"])-1]=$convertResult["convertArray"];
887
 
888
					}#else 	
253 liveuser 889
 
1 liveuser 890
				}#if end
891
 
892
			}#foreach end
893
 
894
		#根據 $fileContent 來尋找總共有幾個類別
57 liveuser 895
		#函式說明:
1 liveuser 896
		#檢查一個字串裡面是否有多個關鍵字
897
		#回傳的結果:
898
		#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
899
		#$result[$i]["status"],第$i個字串搜尋是否成功,"true"代表執行成功,"false"代表執行失敗。
900
		#$result[$i]["error"],第$i個字串搜尋的錯誤訊息陣列
901
		#$result[$i]["founded"],第$i個字串搜尋,是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
902
		#$result["foundedTrueKey"],["founded"]結果為"true"的元素key陣列。
903
		#$result["foundedFalseKey"],["founded"]結果為"false"的元素key陣列。
57 liveuser 904
		#必填參數:
1 liveuser 905
		$conf["search"]["findManyKeyWordsFromManyString"]["keyWords"]=array("class");#想要搜尋的關鍵字
906
		$conf["search"]["findManyKeyWordsFromManyString"]["stringArray"]=$fileContent["fileContent"];#要被搜尋的字串內容陣列
907
		#可省略的參數:
908
		#$conf["search"]["findManyKeyWordsFromManyString"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
909
		$foundedClassStrArray=search::findManyKeyWordsFromManyString($conf["search"]["findManyKeyWordsFromManyString"]);
910
		unset($conf["search"]["findManyKeyWordsFromManyString"]);
911
 
912
		#debug
913
		#var_dump($foundedClassStrArray["foundedTrueKey"]);
914
		#exit;
915
 
916
		#針對每個找到"class"的行編號
253 liveuser 917
		foreach($foundedClassStrArray["foundedTrueKey"] as $lineNo => $value){
1 liveuser 918
 
919
			#確認該行是否真的為類別宣告行。
57 liveuser 920
			#函式說明:
1 liveuser 921
			#檢查一個字串裡面是否沒有多個任何篩選字存在
922
			#回傳的結果:
923
			#$result["status"],執行是否成功的識別,"true"為執行成功;"false"為執行失敗
924
			#$result["error"],錯誤訊息陣列			
925
			#$result["filtered"],該字串是否為要過濾掉的,"true"為要過濾掉的;"false"為不用過濾掉的
57 liveuser 926
			#必填參數:
253 liveuser 927
			$conf["search"]["filterString"]["inputStr"]=$value;#要過濾的字串
1 liveuser 928
			$conf["search"]["filterString"]["filterWord"]=array("#","=","}","unset(","foreach(","var_dump(",";","(",")"," implements ");#要過濾的字串不能含有該陣列元素之一
929
			$searchResult=search::filterString($conf["search"]["filterString"]);
930
			unset($conf["search"]["filterString"]);
931
 
932
			#如果 $searchResult["filtered"] 等於 "fasle"
933
			if($searchResult["filtered"]=="false"){
934
 
935
				#代表是類別宣告的行
936
 
937
				#取得類別宣告的行
253 liveuser 938
				$classStr=$value;
1 liveuser 939
 
57 liveuser 940
				#函式說明:
1 liveuser 941
				#處理字串避免網頁出錯
942
				#回傳的結果:
943
				#$result,爲處理好的字串。
57 liveuser 944
				#必填參數:
1 liveuser 945
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$classStr;#爲要處理的字串
946
				#可省略的參數:
947
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(" ","{","class","\n","\t");#爲被選擇要處理的字串/字元,須爲陣列值。
948
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
949
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
253 liveuser 950
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1 liveuser 951
				unset($conf["stringProcess"]["correctCharacter"]);
952
 
253 liveuser 953
				#如果執行失敗
954
				if($correctCharacter["status"]==="false"){
955
 
956
					#設置執行失敗的識別
957
					$result["status"]="false";
958
 
959
					#設置錯誤訊息
960
					$result["error"]=$correctCharacter["error"];
961
 
962
					return $result;
963
 
964
					}#if end
965
 
278 liveuser 966
				#針對每個命名空間
967
				foreach($result["namespace"] as $nsArray){
968
 
969
					#如果該類別的行數是在該namespace之後
970
					if($lineNo>$nsArray["lineNo"]){
971
 
972
						#設定該類別所屬的命名空間
973
						$namespace=$nsArray["content"];
974
 
975
						}#if end
976
 
977
					#反之
978
					else{
979
 
980
						#跳出foreach
981
						break;
982
 
983
						}#else end
984
 
985
					}#foreach end
986
 
275 liveuser 987
				#記錄取得的類別所在行數與名稱
278 liveuser 988
				$result["class"][]=array("lineNo"=>$lineNo,"content"=>$correctCharacter["content"],"namespace"=>$namespace);
275 liveuser 989
 
253 liveuser 990
				# 從 class 往前讀取對應的註解
254 liveuser 991
				for($i=$lineNo-1;$i>0;$i--){
253 liveuser 992
 
257 liveuser 993
					#初始化 $temp
994
					$temp=$fileContent["fileContent"][$i];
995
 
996
					#如果該行內容不為空
997
					if(!empty($fileContent["fileContent"][$i])){
253 liveuser 998
 
257 liveuser 999
						#函式說明:
1000
						#處理字串避免網頁出錯
1001
						#回傳的結果:
1002
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1003
						#$result["function"],當前執行的函數.
1004
						#$result["content"],爲處理好的字串.
1005
						#$result["error"],錯誤訊息陣列.
1006
						#$result["argu"],使用的參數. 
1007
						#必填參數:
1008
						$conf["stringProcess"]["correctCharacter"]["stringIn"]=$fileContent["fileContent"][$i];#爲要處理的字串
1009
						#可省略的參數:
1010
						$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(" ","\n","\t");#爲被選擇要處理的字串/字元,須爲陣列值。
1011
							#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
1012
						#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1013
						$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1014
						unset($conf["stringProcess"]["correctCharacter"]);
1015
 
1016
						#如果處理失敗
1017
						if($correctCharacter["status"]==="false"){
253 liveuser 1018
 
257 liveuser 1019
							#設置執行錯誤的識別
1020
							$result["status"]="false";
253 liveuser 1021
 
257 liveuser 1022
							#設置執行錯誤的訊息
1023
							$result["error"]=$correctCharacter;
1024
 
1025
							#回傳結果
1026
							return $result;
253 liveuser 1027
 
257 liveuser 1028
							}#if end
1029
 
1030
						#取得處理好的內容列
1031
						$temp=$correctCharacter["content"];
253 liveuser 1032
 
1033
						}#if end
1034
 
1035
					#如果 $temp 為 「/*」
1036
					if($temp==="/*"){
1037
 
1038
						#跳出for迴圈
1039
						break;
1040
 
1041
						}#if end
1042
 
1043
					#如果 $temp 為 「*/」 
1044
					if($temp==="*/"){
1045
 
1046
						#跳到下一輪
1047
						continue;
1048
 
1049
						}#if end
1050
 
1051
					#記錄namesapce的註解內容
257 liveuser 1052
					$result["commentForClass"][count($result["class"])-1][]=$temp;
253 liveuser 1053
 
1054
					}#for end
1055
 
255 liveuser 1056
				#函式說明:
1057
				#將陣列倒置
1058
				#回傳的結果:
1059
				#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗
1060
				#$result["error"],錯誤訊息陣列
1061
				#$result["convertArray"],轉置後的陣列內容
1062
				#必填參數:
258 liveuser 1063
				$conf["arrays"]["convertArray"]["inputArray"]=$result["commentForClass"][count($result["class"])-1];#要倒置的陣列
255 liveuser 1064
				#參考資料來源:
1065
				#http://tw2.php.net/array_reverse => 陣列倒置的內建函式
1066
				$convertResult=arrays::convertArray($conf["arrays"]["convertArray"]);
1067
				unset($conf["arrays"]["convertArray"]);
1068
 
1069
				#如果轉置失敗
1070
				if($convertResult["status"]=="false"){
1071
 
1072
					#設置執行失敗的識別
1073
					$result["status"]="false";
1074
 
1075
					#設置執行失敗的提示
1076
					$result["error"]=$convertResult;
1077
 
1078
					#回傳結果
1079
					return $result;
1080
 
1081
					}#if end	
1082
 
1083
				#反之代表執行成功
1084
				else{
1085
 
1086
					#將倒置後的元素存起來
258 liveuser 1087
					$result["commentForClass"][count($result["class"])-1]=$convertResult["convertArray"];
255 liveuser 1088
 
1089
					}#else 	
1090
 
1 liveuser 1091
				}#if end
1092
 
1093
			}#foreach end
273 liveuser 1094
 
275 liveuser 1095
		#針對每個要處理的命名空間註解陣列
1096
		foreach($result["commentForNamespace"] as $index => $cfn){
273 liveuser 1097
 
275 liveuser 1098
			#函式說明:
1099
			#將一維陣列轉換為用特定符號間隔的字串,ex:array("1","2","3") to "a;b;c;".
1100
			#回傳的結果:
1101
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1102
			#$result["function"],當前執行的function名稱
1103
			#$result["error"],錯誤訊息陣列.
1104
			#$result["content"],處理好的字串.
1105
			#$result["argu"],使用的參數.
1106
			#必填參數:
1107
			#$conf["inputArray"],字串陣列,要轉成字串的一維陣列.
1108
			$conf["arrays::arrayToString"]["inputArray"]=$cfn;
1109
			#可省略參數:
1110
			#$conf["spiltSymbol"],字串,用來區隔字串的符號,預設為;
1111
			$conf["arrays::arrayToString"]["spiltSymbol"]=PHP_EOL;
1112
			#$conf["skipEnd"],字串,結尾是否不要加上符號,預設為"false",要加上符號,"true"代表不要加上符號。
1113
			$conf["arrays::arrayToString"]["skipEnd"]="true";
1114
			#參考資料:
1115
			#無.
1116
			#備註:
1117
			#無.
1118
			$arrayToString=arrays::arrayToString($conf["arrays::arrayToString"]);
1119
			unset($conf["arrays::arrayToString"]);
1 liveuser 1120
 
275 liveuser 1121
			#如果執行失敗
1122
			if($arrayToString["status"]==="false"){
1123
 
1124
				#設定執行錯誤識別
1125
				$result["status"]="false";
1126
 
1127
				#設定執行錯誤提示
1128
				$result["error"]=$arrayToString;
1129
 
1130
				#回傳結果 
1131
				return $result;
1132
 
1133
				}#if end
273 liveuser 1134
 
275 liveuser 1135
			#轉存為字串
1136
			$result["commentForNamespace"][$index]=$arrayToString["content"];
273 liveuser 1137
 
275 liveuser 1138
			}#foreach end
273 liveuser 1139
 
275 liveuser 1140
		#針對每個要處理的類別註解陣列
1141
		foreach($result["commentForClass"] as $index => $cfc){
273 liveuser 1142
 
275 liveuser 1143
			#函式說明:
1144
			#將一維陣列轉換為用特定符號間隔的字串,ex:array("1","2","3") to "a;b;c;".
1145
			#回傳的結果:
1146
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1147
			#$result["function"],當前執行的function名稱
1148
			#$result["error"],錯誤訊息陣列.
1149
			#$result["content"],處理好的字串.
1150
			#$result["argu"],使用的參數.
1151
			#必填參數:
1152
			#$conf["inputArray"],字串陣列,要轉成字串的一維陣列.
1153
			$conf["arrays::arrayToString"]["inputArray"]=$cfc;
1154
			#可省略參數:
1155
			#$conf["spiltSymbol"],字串,用來區隔字串的符號,預設為;
1156
			$conf["arrays::arrayToString"]["spiltSymbol"]=PHP_EOL;
1157
			#$conf["skipEnd"],字串,結尾是否不要加上符號,預設為"false",要加上符號,"true"代表不要加上符號。
1158
			$conf["arrays::arrayToString"]["skipEnd"]="true";
1159
			#參考資料:
1160
			#無.
1161
			#備註:
1162
			#無.
1163
			$arrayToString=arrays::arrayToString($conf["arrays::arrayToString"]);
1164
			unset($conf["arrays::arrayToString"]);
1165
 
1166
			#如果執行失敗
1167
			if($arrayToString["status"]==="false"){
1168
 
1169
				#設定執行錯誤識別
1170
				$result["status"]="false";
1171
 
1172
				#設定執行錯誤提示
1173
				$result["error"]=$arrayToString;
1174
 
1175
				#回傳結果 
1176
				return $result;
1177
 
1178
				}#if end
1179
 
1180
			#轉存為字串
1181
			$result["commentForClass"][$index]=$arrayToString["content"];	
273 liveuser 1182
 
275 liveuser 1183
			}#foreach end
1184
 
1185
		#根據 $fileContent 來尋找總共有幾個 function
57 liveuser 1186
		#函式說明:
1 liveuser 1187
		#檢查一個字串裡面是否有多個關鍵字
1188
		#回傳的結果:
1189
		#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
1190
		#$result[$i]["status"],第$i個字串搜尋是否成功,"true"代表執行成功,"false"代表執行失敗。
1191
		#$result[$i]["error"],第$i個字串搜尋的錯誤訊息陣列
1192
		#$result[$i]["founded"],第$i個字串搜尋,是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
1193
		#$result["foundedTrueKey"],["founded"]結果為"true"的元素key陣列。
1194
		#$result["foundedFalseKey"],["founded"]結果為"false"的元素key陣列。
57 liveuser 1195
		#必填參數:
1 liveuser 1196
		$conf["search"]["findManyKeyWordsFromManyString"]["keyWords"]=array("public static function");#想要搜尋的關鍵字
1197
		$conf["search"]["findManyKeyWordsFromManyString"]["stringArray"]=$fileContent["fileContent"];#要被搜尋的字串內容陣列
1198
		#可省略的參數:
1199
		#$conf["search"]["findManyKeyWordsFromManyString"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
1200
		$foundedFunctionStrArray=search::findManyKeyWordsFromManyString($conf["search"]["findManyKeyWordsFromManyString"]);
1201
		unset($conf["search"]["findManyKeyWordsFromManyString"]);
1202
 
1203
		#針對每個找到"function"的行編號
275 liveuser 1204
		foreach($foundedFunctionStrArray["foundedTrueKey"] as $keyNo=>$keyContent){
1 liveuser 1205
 
1206
			#確認該行是否真的為函式宣告行。
57 liveuser 1207
			#函式說明:
1 liveuser 1208
			#檢查一個字串裡面是否沒有多個任何篩選字存在
1209
			#回傳的結果:
1210
			#$result["status"],執行是否成功的識別,"true"為執行成功;"false"為執行失敗
1211
			#$result["error"],錯誤訊息陣列			
1212
			#$result["filtered"],該字串是否為要過濾掉的,"true"為要過濾掉的;"false"為不用過濾掉的
57 liveuser 1213
			#必填參數:
275 liveuser 1214
			$conf["search"]["filterString"]["inputStr"]=$keyContent;#要過濾的字串
1 liveuser 1215
			$conf["search"]["filterString"]["filterWord"]=array("__call","__callStatic","#","=","}","unset(","foreach(","var_dump(",";","(function","ckeditor.on","-",".","/","!",":",",","onResponseresponse(");#要過濾的字串不能含有該陣列元素之一
1216
			$searchResult=search::filterString($conf["search"]["filterString"]);
1217
			unset($conf["search"]["filterString"]);
1218
 
1219
			#如果 $searchResult["filtered"] 等於 "fasle"
1220
			if($searchResult["filtered"]==="false"){
1221
 
1222
				#代表是宣告函式的行
1223
 
1224
				#取得類宣告函式的行
275 liveuser 1225
				$functionStr=$keyContent;
1 liveuser 1226
 
57 liveuser 1227
				#函式說明:
1 liveuser 1228
				#處理字串避免網頁出錯
1229
				#回傳的結果:
1230
				#$result,爲處理好的字串。
57 liveuser 1231
				#必填參數:
1 liveuser 1232
				$conf["stringProcess"]["correctCharacter"]["stringIn"]=$functionStr;#爲要處理的字串
1233
				#可省略的參數:
1234
				$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(",&\$argu","public static"," ","{","function","\$conf","(",")","&","\n","\t");#爲被選擇要處理的字串/字元,須爲陣列值。
1235
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
1236
				#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
275 liveuser 1237
				$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1 liveuser 1238
				unset($conf["stringProcess"]["correctCharacter"]);
1239
 
275 liveuser 1240
				#如果執行失敗
1241
				if($correctCharacter["status"]==="false"){
1242
 
1243
					#設定執行錯誤識別
1244
					$result["status"]="false";
1245
 
1246
					#設定執行錯誤提示
1247
					$result["error"]=$correctCharacter;
1248
 
1249
					#回傳結果 
1250
					return $result;
1251
 
1252
					}#if end
1253
 
1254
				#針對每個命名空間
1255
				foreach($result["namespace"] as $ni){
1256
 
1257
					#如果所在行數則在該命名空間之後
1258
					if($keyNo > $ni["lineNo"]){
1259
 
1260
						#設置該函式所屬的命名空間名稱
1261
						$namespaceOfFunc=$ni["content"];
1262
 
1263
						}#if end
1264
 
1265
					#反之
1266
					else{
1267
 
1268
						#結束 foreach end
1269
						break;
1270
 
1271
						}#else end
1272
 
1273
					}#foreach end
1274
 
1275
				#針對每個類別名稱
1276
				foreach($result["class"] as $ci){
1277
 
1278
					#如果所在行數則在該類別名稱之後
1279
					if($keyNo > $ci["lineNo"]){
1280
 
1281
						#設置該函式所屬的類別名稱
1282
						$classOfFunc=$ci["content"];
1283
 
1284
						}#if end
1285
 
1286
					#反之
1287
					else{
1288
 
1289
						#結束 foreach end
1290
						break;
1291
 
1292
						}#else end
1293
 
1294
					}#foreach end
1295
 
1296
				#儲存函式的資訊
1297
				$result["functions"][]=array("content"=>$correctCharacter["content"],"namespace"=>$namespaceOfFunc,"class"=>$classOfFunc);
1298
 
1 liveuser 1299
				}#if end
1300
 
1301
			}#foreach end
1302
 
1303
		#取得命名空間的數量
1304
		$result["namesapceCount"]=count($result["namespace"]);
1305
 
1306
		#如果 $result["class"] 不存在
1307
		if(!isset($result["class"])){
1308
 
1309
			#設置為空陣列
1310
			$result["class"]=array();
1311
 
1312
			}#if end
1313
 
1314
		#取得類別的數量
1315
		$result["classCount"]=count($result["class"]);
1316
 
1317
		#如果 $result["class"] 不存在
1318
		if(!isset($result["functions"])){
1319
 
1320
			#設置為空陣列
1321
			$result["functions"]=array();
1322
 
1323
			}#if end
1324
 
1325
		#取得函式的數量
1326
		$result["functionCount"]=count($result["functions"]);
1327
 
1328
		#值行到這邊執行成功
1329
		$result["status"]="true";
1330
 
1331
		#回傳節果
1332
		return $result;
1333
 
1334
		}#function getPhpLibContent end
1335
 
1336
	/*
1337
	#函式說明:
1338
	#取得函式的結構
1339
	#回傳結果:
1340
	#$result["status"],執行是否成功"true"代表執行成功,"false"代表執行失敗
1341
	#$result["error"],錯誤訊息陣列
1342
	#$result["function"],當前執行的函數名稱.
263 liveuser 1343
	#$result["functionComment"],函式的註解全文.
260 liveuser 1344
	#$result["content"],函式的程式內容字串.
1 liveuser 1345
	#$result["comment"],函式說明
1346
	#$result["argvType"],傳入參數的型態,""表示不用參數
1347
	#$result["returnVarType"],回傳的變數型態,目前尚無法判斷其型態為string、int、float、double、boolean的哪一個,所以先一律視為"string"
1348
	#$result["return"]["name"],回傳的變數名稱
1349
	#$result["return"]["comment"],回傳的變數註解
1350
	#$result["mustBeFilled"]["dataCount"],不可省略的參數陣列元素數量 
1351
	#$result["optionalFilled"]["dataCount"],可省略的參數陣列元素數量
1352
	#$result["mustBeFilled"]["name"],不可省略的參數陣列
1353
	#$result["mustBeFilled"]["comment"],不可省略的參數註解陣列
1354
	#$result["optionalFilled"]["name"],可省略的參數陣列
1355
	#$result["optionalFilled"]["comment"],可省略的參數註解陣列
1356
	#$result["reference"]["addr"],參考資料的網址
1357
	#$result["reference"]["comment"],參考資料的說明
1358
	#必填參數:
1359
	#$conf["phpFileAddress"],字串,含有函式內容的php檔案位置與名稱
1360
	$conf["phpFileAddress"]="";
1361
	#$conf["functionName"],字串,函式的名稱
1362
	$conf["functionName"]="";
1363
	#$conf["fileArgu"],字串,__FILE__的內容.
1364
	$conf["fileArgu"]=__FILE__;
1365
	#可省略參數:
1366
	#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"false".
1367
	#$conf["web"]="false";
203 liveuser 1368
	#參考資料:
1369
	#無.
57 liveuser 1370
	#備註:
1371
	#無.
1 liveuser 1372
	*/
203 liveuser 1373
	public static function getFunctionConstruction(&$conf){
1 liveuser 1374
 
1375
		#初始化要回傳的內容
1376
		$result=array();
1377
 
1378
		#取得當前函數的名稱
1379
		$result["function"]=__FUNCTION__;
1380
 
1381
		#如果 $conf 不為陣列
1382
		if(gettype($conf)!="array"){
1383
 
1384
			#設置執行失敗
1385
			$result["status"]="false";
1386
 
1387
			#設置執行錯誤訊息
1388
			$result["error"][]="\$conf變數須為陣列形態";
1389
 
1390
			#如果傳入的參數為 null
1391
			if($conf==null){
1392
 
1393
				#設置執行錯誤訊息
1394
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1395
 
1396
				}#if end
1397
 
1398
			#回傳結果
1399
			return $result;
1400
 
1401
			}#if end
1402
 
1403
		#函式說明:
1404
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1405
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1406
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1407
		#$result["function"],當前執行的函式名稱.
1408
		#$result["argu"],設置給予的參數.
1409
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1410
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1411
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1412
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1413
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1414
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1415
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1416
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1417
		#必填寫的參數:
1418
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1419
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1420
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1421
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1422
		#可以省略的參數:
1423
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1424
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("phpFileAddress","functionName","fileArgu");
1425
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1426
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
1427
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1428
		#$conf["canBeEmptyString"]="false";
1429
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1430
		#$conf["canNotBeEmpty"]=array();
1431
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1432
		#$conf["canBeEmpty"]=array();
1433
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1434
		#$conf["skipableVariableCanNotBeEmpty"]=array();
1435
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1436
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
1437
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1438
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1439
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1440
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
1441
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
1442
		#$conf["disallowAllSkipableVarIsEmpty"]="";
1443
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
1444
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
1445
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1446
		#$conf["arrayCountEqualCheck"][]=array();
1447
		#參考資料來源:
1448
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1449
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1450
		unset($conf["variableCheck::checkArguments"]);
1451
 
1452
		# 如果檢查出錯
1453
		if($checkArguments["status"]==="false"){
1454
 
1455
			#設置執行錯誤的識別
1456
			$result["status"]="false";
1457
 
1458
			#設置執行錯誤的訊息
1459
			$result["error"]=$checkArguments;
1460
 
1461
			#回傳結果
1462
			return $result;
1463
 
1464
			}#if end
1465
 
1466
		# 如果檢查不通過
1467
		if($checkArguments["passed"]==="false"){
1468
 
1469
			#設置執行錯誤的識別
1470
			$result["status"]="false";
1471
 
1472
			#設置執行錯誤的訊息
1473
			$result["error"]=$checkArguments;
1474
 
1475
			#回傳結果
1476
			return $result;
1477
 
1478
			}#if end
1479
 
1480
		#函數說明:
1481
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
1482
		#回傳結果:
1483
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1484
		#$result["error"],錯誤訊息陣列.
1485
		#$result["function"],函數名稱. 
1486
		#$result["argu"],使用的參數.
1487
		#$result["content"],網址,若是在命令列執行,則為"null".
1488
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
1489
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
1490
		#必填參數:
1491
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
1492
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["phpFileAddress"];
1493
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1494
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
1495
		#可省略參數:
1496
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
1497
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
1498
		#備註:
1499
		#建構中,fileSystemRelativePosition尚未實作
1500
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
1501
		unset($conf["fileAccess::getInternetAddressV2"]);
1502
 
1503
		#如果執行出錯
1504
		if($getInternetAddressV2["status"]==="false"){
1505
 
1506
			#設置執行錯誤的識別
1507
			$result["status"]="false";
1508
 
1509
			#設置執行錯誤的訊息
1510
			$result["error"]=$getInternetAddressV2;
1511
 
1512
			#回傳結果
1513
			return $result;
1514
 
1515
			}#if end	
1516
 
1517
		#取得檔案的絕對位置
1518
		$conf["phpFileAddress"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
1519
 
1520
		#取得php檔案的內容
57 liveuser 1521
		#函式說明:
1 liveuser 1522
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1523
		#回傳的變數說明:
1524
		#$result["fileContent"],爲檔案的內容陣列
1525
		#$result["lineCount"],爲檔案內容總共的行數
57 liveuser 1526
		#必填參數:
1 liveuser 1527
		$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["phpFileAddress"];#爲檔案的位置以及名稱
1528
		$conf["fileAccess"]["getFileContent"]["fileArgu"]=$conf["fileArgu"];
1529
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"false".
1530
		$conf["fileAccess"]["getFileContent"]["web"]="false";
1531
		#參考資料:
1532
		#file():取得檔案內容的行數
1533
		#http:#php.net/manual/en/function.file.php
1534
		$fileContent=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
1535
		unset($conf["fileAccess"]["getFileContent"]);
1536
 
1537
		#如果執行出錯
1538
		if($fileContent["status"]==="false"){
1539
 
1540
			#設置執行錯誤的識別
1541
			$result["status"]="false";
1542
 
1543
			#設置執行錯誤的訊息
1544
			$result["error"]=$fileContent;
1545
 
1546
			#回傳結果
1547
			return $result;
1548
 
1549
			}#if end
1550
 
264 liveuser 1551
		#尋找函式定義的位置.
57 liveuser 1552
		#函式說明:
1 liveuser 1553
		#檢查一個字串裡面是否有多個關鍵字
1554
		#回傳的結果:
1555
		#$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
1556
		#$result[$i]["status"],第$i個字串搜尋是否成功,"true"代表執行成功,"false"代表執行失敗。
1557
		#$result[$i]["error"],第$i個字串搜尋的錯誤訊息陣列
1558
		#$result[$i]["founded"],第$i個字串搜尋,是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
1559
		#$result["foundedTrueKey"],["founded"]結果為"true"的元素key陣列。
1560
		#$result["foundedFalseKey"],["founded"]結果為"false"的元素key陣列。
57 liveuser 1561
		#必填參數:
1 liveuser 1562
		$conf["search"]["findManyKeyWordsFromManyString"]["keyWords"]=array("function ".$conf["functionName"]."(");#想要搜尋的關鍵字
1563
		$conf["search"]["findManyKeyWordsFromManyString"]["stringArray"]=$fileContent["fileContent"];#要被搜尋的字串內容陣列
1564
		#可省略的參數:
1565
		#$conf["search"]["findManyKeyWordsFromManyString"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
1566
		$foundedFunctionStrArray=search::findManyKeyWordsFromManyString($conf["search"]["findManyKeyWordsFromManyString"]);
1567
		unset($conf["search"]["findManyKeyWordsFromManyString"]);
1568
 
1569
		#取得可能為函式宣告的陣列元素key
1570
		$maybeAfunctionDefineLine=$foundedFunctionStrArray["foundedTrueKey"];		
1571
 
1572
		#有抓到錯誤的函式名稱,需要剔除
1573
		#針對每個抓到的function行
1574
		foreach($foundedFunctionStrArray["foundedTrueKey"] as $maybeAfunctinKeyNo){
1575
 
1576
			#如果該行內容含有「=」則代表為錯誤的函式行
57 liveuser 1577
			#函式說明:
1 liveuser 1578
			#檢查字串裡面有無指定的關鍵字
1579
			#回傳的結果:
1580
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
1581
			#$result["error"],錯誤訊息
1582
			#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
57 liveuser 1583
			#必填參數:
1 liveuser 1584
			$conf["search"]["findKeyWord"]["keyWord"]="=";#想要搜尋的關鍵字
1585
			$conf["search"]["findKeyWord"]["string"]=$maybeAfunctinKeyNo;#要被搜尋的字串內容
1586
			#可省略的參數:
1587
			#$conf["search"]["findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
1588
			$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
1589
			unset($conf["search"]["findKeyWord"]);
1590
 
1591
			#如果 $searchResult["founded"] 等於 "true" 則代表該行不是真的函式宣告
1592
			if($searchResult["founded"]=="true"){
1593
 
1594
				#涵式說明:
1595
				#將陣列中特定元素剔除
1596
				#回傳的結果:
1597
				#剔除掉特地元素的陣列
57 liveuser 1598
				#必填參數:
1 liveuser 1599
				$conf["arrays"]["eraseElement"]["rawInputArray"]=$maybeAfunctionDefineLine;#要處理的原始數字陣列
1600
				$conf["arrays"]["eraseElement"]["eraseElementKey"]=$maybeAfunctinKeyNo;#要移除的元素key值  
1601
				$maybeAfunctionDefineLine=arrays::eraseElement($conf["arrays"]["eraseElement"]);
1602
				unset($conf["arrays"]["eraseElement"]);
1603
 
1604
				}#if end
1605
 
1606
			}#foreach end
1607
 
1608
		#更新可能為函式宣告的行key
1609
		$foundedFunctionStrArray["foundedTrueKey"]=$maybeAfunctionDefineLine;
1610
 
1611
		#針對每個找到"function"的行編號
1612
		foreach($foundedFunctionStrArray["foundedTrueKey"] as $index=>$keyNum){
1613
 
1614
			#判斷該行是否為註解
57 liveuser 1615
			#函式說明:
1 liveuser 1616
			#檢查一個字串裡面是否有多個關鍵字
1617
			#回傳的結果:
1618
			#$result["status"],"true"代表執行成功,"false"代表執行失敗。
1619
			#$result["error"],錯誤訊息
1620
			#$result["founded"],是否找到所有的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
57 liveuser 1621
			#必填參數:
1 liveuser 1622
			$conf["search"]["findManyKeyWords"]["keyWords"]=array("#");#想要搜尋的關鍵字
1623
			$conf["search"]["findManyKeyWords"]["string"]=$keyNum;#要被搜尋的字串內容
1624
			#可省略的參數:
1625
			#$conf["search"]["findManyKeyWords"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
1626
			$searchResult=search::findManyKeyWords($conf["search"]["findManyKeyWords"]);
1627
			unset($conf["search"]["findManyKeyWords"]);	
1628
 
1629
			#如果沒有「#」關鍵字
1630
			if($searchResult["founded"]==="false"){
1631
 
1632
				#代表是宣告函式的行
1633
 
1634
				#取得函式結構結束的key(檔案內容每行的key)
1635
				$result["functionStructionEndPoint"]=$index;
1636
 
1637
				}#if end
1638
 
1639
			}#foreach end
1640
 
1641
		#如果找不到函數宣告的行數
1642
		if(!isset($result["functionStructionEndPoint"])){
1643
 
1644
			#設置執行錯誤的識別
1645
			$result["status"]="false";
1646
 
1647
			#設置執行錯誤的訊息
1648
			$result["error"]=$foundedFunctionStrArray;
1649
 
1650
			#回傳結果
1651
			return $result;
1652
 
1653
			}#if end
1654
 
1655
		#從 $result["functionStructionEndPoint"] 元素往前讀,直到讀到「/*」為止。
310 liveuser 1656
		for($i=$result["functionStructionEndPoint"]-1;$i>=0;$i--){
1 liveuser 1657
 
57 liveuser 1658
			#函式說明:
1 liveuser 1659
			#處理字串避免網頁出錯
1660
			#回傳的結果:
1661
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1662
			#$result["function"],當前執行的函數.
1663
			#$result["content"],爲處理好的字串.
1664
			#$result["error"],錯誤訊息陣列.
1665
			#$result["argu"],使用的參數. 
57 liveuser 1666
			#必填參數:
1 liveuser 1667
			$conf["stringProcess"]["correctCharacter"]["stringIn"]=$fileContent["fileContent"][$i];#爲要處理的字串
1668
			#可省略的參數:
1669
			$conf["stringProcess"]["correctCharacter"]["selectedCharacter"]=array(" ","\n","\t");#爲被選擇要處理的字串/字元,須爲陣列值。
1670
				#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
1671
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1672
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess"]["correctCharacter"]);
1673
			unset($conf["stringProcess"]["correctCharacter"]);
1674
 
1675
			#如果處理失敗
1676
			if($correctCharacter["status"]==="false"){
1677
 
1678
				#設置執行錯誤的識別
1679
				$result["status"]="false";
1680
 
1681
				#設置執行錯誤的訊息
1682
				$result["error"]=$correctCharacter;
1683
 
1684
				#回傳結果
1685
				return $result;
1686
 
1687
				}#if end
1688
 
1689
			#取得處理號的內容列
1690
			$temp=$correctCharacter["content"];
1691
 
1692
			#如果 $temp 為 「/*」
1693
			if($temp==="/*"){
1694
 
1695
				#跳出for迴圈
1696
				break;
1697
 
1698
				}#if end
1699
 
1700
			#如果 $temp 為 「*/」 
1701
			if($temp==="*/"){
1702
 
1703
				#跳到下一輪
1704
				continue;
1705
 
1706
				}#if end
1707
 
1708
			#取得涵式宣告的內容
264 liveuser 1709
			$result["functionComment"][]=$fileContent["fileContent"][$i];	
1 liveuser 1710
 
1711
			}#for end
1712
 
57 liveuser 1713
		#函式說明:
1 liveuser 1714
		#將陣列倒置
1715
		#回傳的結果:
1716
		#$result["status"],執行是否成功,"true"為執行成功;"false"為執行失敗
1717
		#$result["error"],錯誤訊息陣列
1718
		#$result["convertArray"],轉置後的陣列內容
57 liveuser 1719
		#必填參數:
264 liveuser 1720
		$conf["arrays"]["convertArray"]["inputArray"]=$result["functionComment"];#要倒置的陣列
1 liveuser 1721
		#參考資料來源:
1722
		#http://tw2.php.net/array_reverse => 陣列倒置的內建函式
1723
		$convertResult=arrays::convertArray($conf["arrays"]["convertArray"]);
1724
		unset($conf["arrays"]["convertArray"]);
1725
 
1726
		#如果轉置失敗
1727
		if($convertResult["status"]=="false"){
1728
 
1729
			#設置執行失敗的識別
1730
			$result["status"]="false";
1731
 
1732
			#設置執行失敗的提示
1733
			$result["error"]=$convertResult;
1734
 
1735
			#回傳結果
1736
			return $result;
1737
 
1738
			}#if end	
1739
 
1740
		#反之代表執行成功
1741
		else{
1742
 
1743
			#將倒置後的元素存起來
264 liveuser 1744
			$result["functionComment"]=$convertResult["convertArray"];
1 liveuser 1745
 
1746
			}#else 
1747
 
1748
		#將多餘的字元剔除
57 liveuser 1749
		#函式說明:
1 liveuser 1750
		#處理多個字串避免網頁出錯
1751
		#回傳的結果:
1752
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
1753
		#$result["error"],錯誤訊息
1754
		#$result["processedStrArray"],處理好的字串陣列
57 liveuser 1755
		#必填參數:
264 liveuser 1756
		$conf["stringProcess"]["correctMutiStrCharacter"]["stringIn"]=$result["functionComment"];#爲要處理的字串陣列
1 liveuser 1757
		#可省略的參數:
1758
		$conf["stringProcess"]["correctMutiStrCharacter"]["selectedCharacter"]=array(" ","\t","\n");#爲被選擇要處理的字串/字元,須爲陣列值。
1759
			#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
1760
			#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
1761
		#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
1762
		$strProcessedResult=stringProcess::correctMutiStrCharacter($conf["stringProcess"]["correctMutiStrCharacter"]);
1763
		unset($conf["stringProcess"]["correctMutiStrCharacter"]);
1764
 
1765
		#如果 $strProcessedResult["status"]為"false"
1766
		if($strProcessedResult["status"]=="false"){
1767
 
1768
			#設定執行錯誤識別
1769
			$result["status"]="false";
1770
 
1771
			#設定執行錯誤提示
1772
			$result["error"]=$strProcessedResult;
1773
 
1774
			#回傳結果 
1775
			return $result;
1776
 
1777
			}#if end
1778
 
1779
		#反之代表執行成功
1780
		else{
1781
 
264 liveuser 1782
			$result["functionComment"]=$strProcessedResult["processedStrArray"];
1 liveuser 1783
 
1784
			}#else end
312 liveuser 1785
 
1786
		#取得涵式宣告的那一行	
1787
		$functionDefineLine=$fileContent["fileContent"][$result["functionStructionEndPoint"]];	
1 liveuser 1788
 
1789
		#如果 $functionDefineLine 中有「()」則代表沒有要傳入的參數
57 liveuser 1790
		#函式說明:
1 liveuser 1791
		#檢查字串裡面有無指定的關鍵字
1792
		#回傳的結果:
1793
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
1794
		#$result["error"],錯誤訊息
1795
		#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
57 liveuser 1796
		#必填參數:
1 liveuser 1797
		$conf["search"]["findKeyWord"]["keyWord"]="()";#想要搜尋的關鍵字
1798
		$conf["search"]["findKeyWord"]["string"]=$functionDefineLine;#要被搜尋的字串內容
1799
		#可省略的參數:
1800
		#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
1801
		$searchResult=search::findKeyWord($conf["search"]["findKeyWord"]);
1802
		unset($conf["search"]["findKeyWord"]);
1803
 
1804
		#如果 $searchResult["founded"]為"true"
1805
		if($searchResult["founded"]=="true"){
1806
 
1807
			#代表不須要傳入參數
1808
			$result["argvType"]="";
1809
 
1810
			}#if end
1811
 
1812
		#反之代表有傳入參數
1813
		else{
1814
 
1815
			#用「(」來分割
1816
			#涵式說明:
1817
			#將固定格式的字串分開,並回傳分開的結果。
1818
			#回傳的參數:
1819
			#$result["oriStr"],要分割的原始字串內容
1820
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
1821
			#$result["dataCounts"],爲總共分成幾段
57 liveuser 1822
			#必填參數:
1 liveuser 1823
			$conf["stringProcess"]["spiltString"]["stringIn"]=$functionDefineLine;#要處理的字串。
1824
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]="(";#爲以哪個符號作爲分割
1825
			$spiltedStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
1826
			unset($conf["stringProcess"]["spiltString"]);
1827
 
311 liveuser 1828
			#如果執行失敗
1829
			if($spiltedStr["status"]==="false"){
1830
 
1831
				#設定執行錯誤識別
1832
				$result["status"]="false";
1833
 
1834
				#設定執行錯誤提示
1835
				$result["error"]=$spiltedStr;
1836
 
1837
				#回傳結果 
1838
				return $result;
1839
 
1840
				}#if end	
1841
 
1842
			#如果切割出來小於2段
1843
			if($spiltedStr["dataCounts"]<2){
1844
 
1845
				#設定執行錯誤識別
1846
				$result["status"]="false";
1847
 
1848
				#設定執行錯誤提示
1849
				$result["error"][]=$spiltedStr;
1850
 
1851
				#設定執行錯誤提示
1852
				$result["error"][]="dataCounts 應該要大於等於 2";
1853
 
1854
				#回傳結果 
1855
				return $result;
1856
 
1857
				}#if end
1858
 
1 liveuser 1859
			#用「)」來分割
1860
			#涵式說明:
1861
			#將固定格式的字串分開,並回傳分開的結果。
1862
			#回傳的參數:
1863
			#$result["oriStr"],要分割的原始字串內容
1864
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
1865
			#$result["dataCounts"],爲總共分成幾段
57 liveuser 1866
			#必填參數:
1 liveuser 1867
			$conf["stringProcess"]["spiltString"]["stringIn"]=$spiltedStr["dataArray"][1];#要處理的字串。
1868
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=")";#爲以哪個符號作爲分割
1869
			$spiltedStr=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
1870
			unset($conf["stringProcess"]["spiltString"]);				
1871
 
1872
			#取得參數內容
1873
			$argvName=$spiltedStr["dataArray"][0];
1874
 
1875
			#如果要傳入的參數為 "$conf"
60 liveuser 1876
			if($argvName=="&\$conf"){
1 liveuser 1877
 
1878
				#則為array型態
1879
				$result["argvType"]="array";
1880
 
1881
				}#if end
1882
 
1883
			#反之
1884
			else{
1885
 
1886
				#則未知型態
1887
				$result["argvType"]="unknow";
1888
 
1889
				}#else end
1890
 
1891
			}#else end
1892
 
1893
		#取得函式說明的元素key
57 liveuser 1894
		#函式說明:
1 liveuser 1895
		#檢查一個數值是否與陣列裏面的元素相同
1896
		#回傳的結果:
1897
		#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
1898
		#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
1899
		#$result["error"],錯誤訊息
1900
		#$result["function"],當前執行的函數名稱
1901
		#$result["argv"],使用的參數
1902
		#$result["equalVarName"],相等的變數名稱或key.
1903
		#$result["equalVarValue"],相等的變數數值內容.
57 liveuser 1904
		#必填參數:
1 liveuser 1905
		$conf["search"]["getEqualVar"]["conditionElement"]="#函式說明:";#條件元素,要等於的元素內容。
264 liveuser 1906
		$conf["search"]["getEqualVar"]["compareElements"]=$result["functionComment"];#要比對的陣列變數內容。
1 liveuser 1907
		$searchResult=search::getEqualVar($conf["search"]["getEqualVar"]);
1908
		unset($conf["search"]["getEqualVar"]);
1909
 
1910
		#debug
1911
		#var_dump($searchResult);
1912
 
1913
		#如果執行失敗
1914
		if($searchResult["status"]==="false"){
1915
 
1916
			#設定執行錯誤識別
1917
			$result["status"]="false";
1918
 
1919
			#設定執行錯誤提示
1920
			$result["error"]=$searchResult;
1921
 
1922
			#回傳結果 
1923
			return $result;
1924
 
260 liveuser 1925
			}#if end
1 liveuser 1926
 
1927
		#如果沒有找到
1928
		if($searchResult["founded"]==="false"){
1929
 
1930
			#設定執行錯誤識別
1931
			$result["status"]="false";
1932
 
1933
			#設定執行錯誤提示
1934
			$result["error"]=$searchResult;
1935
 
1936
			#回傳結果 
1937
			return $result;
1938
 
260 liveuser 1939
			}#if end
1 liveuser 1940
 
1941
		#函式說明起始點的key
1942
		$functionCommentStartKey=$searchResult["equalVarName"];
1943
 
1944
		#取得涵式說明內容:
264 liveuser 1945
		$result["comment"]=$result["functionComment"][$functionCommentStartKey+1];
1 liveuser 1946
 
1947
		#卸除暫存變數
1948
		unset($functionCommentStartKey);
1949
 
1950
		#取得回傳結果的陣列...
1951
		#依據開頭為 $result 來判斷...
1952
 
1953
		#涵式說明:
1954
		#取得多個字首一樣的字串,並回傳其字串。
1955
		#回傳的結果:
1956
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
1957
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
1958
		#$result["function"],當前執行的函數名稱.
1959
		#$result["returnString"],爲符合字首條件的字串陣列內容.
1960
		#$result["foundedKey"],找到的內容位於原本的哪一個元素.
1961
		#$result["argu"],使用的參數.
57 liveuser 1962
		#必填參數:
264 liveuser 1963
		$conf["search"]["getMeetConditionsStringMuti"]["checkString"]=$result["functionComment"];#要檢查的字串陣列
1 liveuser 1964
		$conf["search"]["getMeetConditionsStringMuti"]["frontWord"]="#\$result";#用來檢查字首應該要有什麼字串
1965
		#用到的涵式:
1966
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
1967
		$returnVar=search::getMeetConditionsStringMulti($conf["search"]["getMeetConditionsStringMuti"]);
1968
		unset($conf["search"]["getMeetConditionsStringMuti"]);
1969
 
1970
		#如果執行失敗
1971
		if($returnVar["status"]==="false"){
1972
 
1973
			#設定執行錯誤識別
1974
			$result["status"]="false";
1975
 
1976
			#設定執行錯誤提示
1977
			$result["error"]=$returnVar;
1978
 
1979
			#回傳結果 
1980
			return $result;
1981
 
1982
			}#if end
1983
 
1984
		#如果有符合的關鍵字
1985
		if($returnVar["founded"]==="true"){
1986
 
1987
			#用「,」區隔回傳變數名稱與註解
1988
			#涵式說明:
1989
			#將多個固定格式的字串分開,並回傳分開的結果
1990
			#回傳的參數:
1991
			#$result[status],執行成功與否,若爲0,代表執行成功,若爲1代表執失敗。
1992
			#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
1993
			#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
1994
			#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j)段內容
1995
			#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
57 liveuser 1996
			#必填參數:
1 liveuser 1997
			$conf["stringProcess"]["spiltMutiString"]["stringIn"]=$returnVar["returnString"];#要處理的字串陣列。
1998
			$conf["stringProcess"]["spiltMutiString"]["spiltSymbol"]=",";#爲要以哪個符號作爲分割。
1999
			$spiltedVarNameAndComment=stringProcess::spiltMutiString($conf["stringProcess"]["spiltMutiString"]);
2000
			unset($conf["stringProcess"]["spiltMutiString"]);
2001
 
2002
			#如果執行失敗
2003
			if($spiltedVarNameAndComment["status"]==="false"){
2004
 
2005
				#設定執行錯誤識別
2006
				$result["status"]="false";
2007
 
2008
				#設定執行錯誤提示
2009
				$result["error"]=$spiltedVarNameAndComment;
2010
 
2011
				#回傳結果 
2012
				return $result;
2013
 
2014
				}
2015
 
2016
			#針對每行分割的回傳變數名稱
2017
			for($i=0;$i<count($spiltedVarNameAndComment["spiltString"]);$i++){
2018
 
2019
				#將「#」符號剔除
2020
				#涵式說明:
2021
				#處理多個字串避免網頁出錯
2022
				#回傳的結果:
2023
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
2024
				#$result["error"],錯誤訊息
2025
				#$result["processedStrArray"],處理好的字串陣列
57 liveuser 2026
				#必填參數:
1 liveuser 2027
				$conf["stringProcess"]["correctMutiStrCharacter"]["stringIn"]=array($spiltedVarNameAndComment["spiltString"][$i]["dataArray"][0]);#爲要處理的字串陣列
2028
				#可省略的參數:
2029
				$conf["stringProcess"]["correctMutiStrCharacter"]["selectedCharacter"]=array("#");#爲被選擇要處理的字串/字元,須爲陣列值。
2030
					#若不設定則預設爲要將這些字串作替換("<",">",";","=","//","'","$","%","&","|","/*","*\/","#")。
2031
					#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2032
				#$conf["stringProcess"]["correctMutiStrCharacter"]["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串)。
2033
				$processedStr=stringProcess::correctMutiStrCharacter($conf["stringProcess"]["correctMutiStrCharacter"]);
2034
				unset($conf["stringProcess"]["correctMutiStrCharacter"]);
2035
 
2036
				#取得沒有 # 的內容
2037
				$spiltedVarNameAndComment["spiltString"][$i]["dataArray"][0]=$processedStr["processedStrArray"][0];	
2038
 
2039
				}#for end
2040
 
2041
			#將回傳變數名稱與註解紀錄起來
2042
			foreach($spiltedVarNameAndComment["spiltString"] as $returnVar){
2043
 
2044
				#取得回傳的變數名稱
2045
				$result["return"]["name"][]=$returnVar["dataArray"][0];
2046
 
2047
				if(isset($returnVar["dataArray"][1])){
2048
 
2049
					#取得回傳的變數註解
2050
					$result["return"]["comment"][]=$returnVar["dataArray"][1];
2051
 
2052
					}#if end
2053
 
2054
				}#foreach end
2055
 
2056
			#依據回傳變數說明來判斷回傳的型態
2057
 
2058
			#如果回傳的變數名稱數量大於1
2059
			if(count($result["return"]["name"])>1){
2060
 
2061
				#則代表回傳的結果為array
2062
				$result["returnVarType"]="array";
2063
 
2064
				}#if end
2065
 
2066
			#反之其回傳的結果可能為string、int、float、double、boolean,目前先一律視為"string"
2067
			else{
2068
 
2069
				$result["returnVarType"]="string";
2070
 
2071
				}#else end
2072
 
2073
			}#if end
2074
 
2075
		#取得必填參數陣列...
2076
		#依據開頭為 #必填參數 來判斷...
2077
 
2078
		#涵式說明:
2079
		#取得多個字首一樣的字串,並回傳其字串。
2080
		#回傳的結果:
2081
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
2082
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
2083
		#$result["function"],當前執行的函數名稱.
2084
		#$result["returnString"],爲符合字首條件的字串陣列內容.
2085
		#$result["foundedKey"],找到的內容位於原本的哪一個元素.
57 liveuser 2086
		#必填參數:
264 liveuser 2087
		$conf["search"]["getMeetConditionsStringMuti"]["checkString"]=$result["functionComment"];#要檢查的字串陣列
1 liveuser 2088
		#可省略參數:
2089
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
2090
		$conf["search"]["getMeetConditionsStringMuti"]["frontWord"]="#必填參數";
2091
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
2092
		#$conf["tailWord"]="";
2093
		$returnVar=search::getMeetConditionsStringMulti($conf["search"]["getMeetConditionsStringMuti"]);
2094
		unset($conf["search"]["getMeetConditionsStringMuti"]);
2095
 
2096
		#如果執行失敗
2097
		if($returnVar["status"]==="false"){
2098
 
2099
			#設定執行錯誤識別
2100
			$result["status"]="false";
2101
 
2102
			#設定執行錯誤提示
2103
			$result["error"]=$returnVar;
2104
 
2105
			#回傳結果 
2106
			return $result;
2107
 
2108
			}#if end
2109
 
2110
		#如果有找到必填參數的列
2111
		if($returnVar["founded"]==="false")
2112
		{
2113
			#設定執行錯誤識別
2114
			$result["status"]="false";
2115
 
2116
			#設定執行錯誤提示
2117
			$result["error"]=$returnVar;
2118
 
2119
			#回傳結果 
2120
			return $result;
2121
		}
2122
 
2123
		#必填變數的開始行
2124
		$mustBeFilledVarKeyStartPoint=$returnVar["foundedKey"][0];
2125
 
2126
		/*
2127
		#debug		
2128
		var_dump($mustBeFilledVarKeyStartPoint);
264 liveuser 2129
		var_dump($result["functionComment"]);
1 liveuser 2130
		exit;
2131
		*/ 
2132
 
2133
		#取得可省略的參數陣列...
2134
		#依據開頭為 #可省略參數 來判斷...
2135
 
2136
		#涵式說明:
2137
		#取得多個字首一樣的字串,並回傳其字串。
2138
		#回傳的結果:
2139
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
2140
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
2141
		#$result["function"],當前執行的函數名稱.
2142
		#$result["returnString"],爲符合字首條件的字串陣列內容.
2143
		#$result["foundedKey"],找到的內容位於原本的哪一個元素.
57 liveuser 2144
		#必填參數:
264 liveuser 2145
		$conf["search"]["getMeetConditionsStringMuti"]["checkString"]=$result["functionComment"];#要檢查的字串陣列
1 liveuser 2146
		#可省略參數:
2147
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
2148
		$conf["search"]["getMeetConditionsStringMuti"]["frontWord"]="#可省略參數";
2149
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
2150
		#$conf["tailWord"]="";
2151
		$returnVar=search::getMeetConditionsStringMulti($conf["search"]["getMeetConditionsStringMuti"]);
2152
		unset($conf["search"]["getMeetConditionsStringMuti"]);
2153
 
2154
		#如果執行失敗
2155
		if($returnVar["status"]==="false"){
2156
 
2157
			#設定執行錯誤識別
2158
			$result["status"]="false";
2159
 
2160
			#設定執行錯誤提示
2161
			$result["error"]=$returnVar;
2162
 
2163
			#回傳結果 
2164
			return $result;
2165
 
2166
			}#if end
2167
 
2168
		#如果有找到必填參數的列
2169
		if($returnVar["founded"]==="false"){
2170
 
2171
			#設定執行錯誤識別
2172
			$result["status"]="false";
2173
 
2174
			#設定執行錯誤提示
2175
			$result["error"]=$returnVar;
2176
 
2177
			#回傳結果 
2178
			return $result;
2179
 
2180
			}#if end
2181
 
2182
		#可省略參數的開始行
2183
		$skipableVarKeyStartPoint=$returnVar["foundedKey"][0];	
2184
 
60 liveuser 2185
		#取得參考資料來源
2186
		#依據開頭為 #參考資料: 來判斷...
2187
 
2188
		#涵式說明:
2189
		#取得多個字首一樣的字串,並回傳其字串。
2190
		#回傳的結果:
2191
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
2192
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
2193
		#$result["function"],當前執行的函數名稱.
2194
		#$result["returnString"],爲符合字首條件的字串陣列內容.
2195
		#$result["foundedKey"],找到的內容位於原本的哪一個元素.
2196
		#必填參數:
264 liveuser 2197
		$conf["search"]["getMeetConditionsStringMuti"]["checkString"]=$result["functionComment"];#要檢查的字串陣列
60 liveuser 2198
		#可省略參數:
2199
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
2200
		$conf["search"]["getMeetConditionsStringMuti"]["frontWord"]="#參考資料";
2201
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
2202
		#$conf["tailWord"]="";
2203
		$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search"]["getMeetConditionsStringMuti"]);
2204
		unset($conf["search"]["getMeetConditionsStringMuti"]);
2205
 
2206
		#debug
2207
		#var_dump($getMeetConditionsStringMulti);
2208
		#exit;
2209
 
2210
		#如果執行失敗
2211
		if($getMeetConditionsStringMulti["status"]==="false"){
2212
 
2213
			#設定執行錯誤識別
2214
			$result["status"]="false";
2215
 
2216
			#設定執行錯誤提示
2217
			$result["error"]=$getMeetConditionsStringMulti;
2218
 
2219
			#回傳結果 
2220
			return $result;
2221
 
2222
			}#if end
2223
 
2224
		#如果沒有找到備註的列
2225
		if($getMeetConditionsStringMulti["founded"]==="false"){
2226
 
2227
			#設定執行錯誤識別
2228
			$result["status"]="false";
2229
 
2230
			#設定執行錯誤提示
2231
			$result["error"]=$getMeetConditionsStringMulti;
2232
 
2233
			#回傳結果 
2234
			return $result;
2235
 
2236
			}#if end
2237
 
2238
		#參考資料的開始行
2239
		$referenceVarKeyStartPoint=$getMeetConditionsStringMulti["foundedKey"][0];
2240
 
2241
		#取得備註陣列
1 liveuser 2242
		#依據開頭為 #備註: 來判斷...
2243
 
2244
		#涵式說明:
2245
		#取得多個字首一樣的字串,並回傳其字串。
2246
		#回傳的結果:
2247
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
2248
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
2249
		#$result["function"],當前執行的函數名稱.
2250
		#$result["returnString"],爲符合字首條件的字串陣列內容.
2251
		#$result["foundedKey"],找到的內容位於原本的哪一個元素.
57 liveuser 2252
		#必填參數:
264 liveuser 2253
		$conf["search"]["getMeetConditionsStringMuti"]["checkString"]=$result["functionComment"];#要檢查的字串陣列
1 liveuser 2254
		#可省略參數:
2255
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
2256
		$conf["search"]["getMeetConditionsStringMuti"]["frontWord"]="#備註";
2257
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
2258
		#$conf["tailWord"]="";
2259
		$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search"]["getMeetConditionsStringMuti"]);
2260
		unset($conf["search"]["getMeetConditionsStringMuti"]);
2261
 
2262
		#debug
2263
		#var_dump($getMeetConditionsStringMulti);
2264
		#exit;
2265
 
2266
		#如果執行失敗
2267
		if($getMeetConditionsStringMulti["status"]==="false"){
2268
 
2269
			#設定執行錯誤識別
2270
			$result["status"]="false";
2271
 
2272
			#設定執行錯誤提示
2273
			$result["error"]=$getMeetConditionsStringMulti;
2274
 
2275
			#回傳結果 
2276
			return $result;
2277
 
2278
			}#if end
2279
 
60 liveuser 2280
		#如果沒有找到備註的列
1 liveuser 2281
		if($getMeetConditionsStringMulti["founded"]==="false"){
2282
 
2283
			#設定執行錯誤識別
2284
			$result["status"]="false";
2285
 
2286
			#設定執行錯誤提示
2287
			$result["error"]=$getMeetConditionsStringMulti;
2288
 
2289
			#回傳結果 
2290
			return $result;
2291
 
2292
			}#if end
2293
 
60 liveuser 2294
		#備註的開始行
1 liveuser 2295
		$noteVarKeyStartPoint=$getMeetConditionsStringMulti["foundedKey"][0];
2296
 
2297
		#取得必填參數的內容
2298
 
2299
		#初始化必填參數的列
2300
		$mustBeFilledVar=array();	
2301
 
2302
		#從 $result["functionStructionEndPoint"] 元素往前讀,只讀取必填參數.
2303
		for($i=$mustBeFilledVarKeyStartPoint;$i<$skipableVarKeyStartPoint;$i++){
2304
 
2305
			#針對每個必填參數行,檢查是否為"#"開頭
264 liveuser 2306
			$line=$result["functionComment"][$i];
1 liveuser 2307
 
2308
			#涵式說明:
2309
			#取得多個字首一樣的字串,並回傳其字串。
2310
			#回傳的結果:
2311
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
2312
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
2313
			#$result["function"],當前執行的函數名稱.
2314
			#$result["returnString"],爲符合字首條件的字串陣列內容.
2315
			#$result["foundedKey"],找到的內容位於原本的哪一個元素.
57 liveuser 2316
			#必填參數:
1 liveuser 2317
			$conf["search"]["getMeetConditionsStringMuti"]["checkString"]=array($line);#要檢查的字串陣列
2318
			#可省略參數:
2319
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
2320
			$conf["search"]["getMeetConditionsStringMuti"]["frontWord"]="#";
2321
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
2322
			#$conf["tailWord"]="";
2323
			$returnVar=search::getMeetConditionsStringMulti($conf["search"]["getMeetConditionsStringMuti"]);
2324
			unset($conf["search"]["getMeetConditionsStringMuti"]);
2325
 
2326
			#如果執行失敗
2327
			if($returnVar["status"]==="false"){
2328
 
2329
				#設定執行錯誤識別
2330
				$result["status"]="false";
2331
 
2332
				#設定執行錯誤提示
2333
				$result["error"]=$returnVar;
2334
 
2335
				#回傳結果 
2336
				return $result;
2337
 
2338
				}#if end
2339
 
2340
			#如果沒有找到必填參數的列
2341
			if($returnVar["founded"]==="false"){
2342
 
2343
				#跳到下一個迴圈
2344
				continue;
2345
 
2346
				}#if end
2347
 
2348
			#取得必填參數名稱與解說的列
2349
			$mustBeFilledVar[]=$returnVar["returnString"][0];
2350
 
2351
			}#for end
2352
 
2353
		#針對每一列
2354
		foreach($mustBeFilledVar as $key=>$line){
2355
 
2356
			#剔除開頭的 "#"
2357
			#涵式說明:
2358
			#處理字串避免網頁出錯
2359
			#回傳的結果:
2360
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2361
			#$result["function"],當前執行的函數.
2362
			#$result["content"],爲處理好的字串.
2363
			#$result["error"],錯誤訊息陣列.
2364
			#$result["argu"],使用的參數. 
57 liveuser 2365
			#必填參數:
1 liveuser 2366
			$conf["stringProcess::correctCharacter"]["stringIn"]=$line;#爲要處理的字串
2367
			#可省略的參數:
2368
			$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("#");#爲被選擇要處理的字串/字元,須爲陣列值。
2369
				#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
2370
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2371
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
2372
			#備註:
2373
			#無.
2374
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
2375
			unset($conf["stringProcess::correctCharacter"]);
2376
 
2377
			#如果執行失敗
2378
			if($correctCharacter["status"]==="false"){
2379
 
2380
				#設定執行錯誤識別
2381
				$result["status"]="false";
2382
 
2383
				#設定執行錯誤提示
2384
				$result["error"]=$correctCharacter;
2385
 
2386
				#回傳結果 
2387
				return $result;
2388
 
2389
				}#if end
2390
 
2391
 
2392
			#取得剔除開頭 # 的內容列
2393
			$mustBeFilledVar[$key]=$correctCharacter["content"];
2394
 
2395
			}#foreach end
2396
 
2397
		#針對每一列
2398
		foreach($mustBeFilledVar as $key=>$line){
2399
 
2400
			#涵式說明:
2401
			#將固定格式的字串分開,並回傳分開的結果。
2402
			#回傳結果:
2403
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2404
			#$result["error"],錯誤訊息陣列
2405
			#$result["function"],當前執行的函數名稱.
2406
			#$result["argu"],使用的參數.
2407
			#$result["oriStr"],要分割的原始字串內容
2408
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2409
			#$result["dataCounts"],爲總共分成幾段
2410
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
57 liveuser 2411
			#必填參數:
1 liveuser 2412
			$conf["stringProcess::spiltString"]["stringIn"]=$line;#要處理的字串。
2413
			$conf["stringProcess::spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割
2414
			#可省略參數:
2415
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2416
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2417
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2418
			unset($conf["stringProcess::spiltString"]);
2419
 
2420
			#如果執行失敗
2421
			if($spiltString["status"]==="false"){
2422
 
2423
				#設定執行錯誤識別
2424
				$result["status"]="false";
2425
 
2426
				#設定執行錯誤提示
2427
				$result["error"]=$spiltString;
2428
 
2429
				#回傳結果 
2430
				return $result;
2431
 
2432
				}#if end
2433
 
2434
			#如果執行失敗
2435
			if($spiltString["found"]==="false"){
2436
 
2437
				#移除之
2438
				unset($mustBeFilledVar[$key]);
2439
 
2440
				#換下一列
2441
				continue;
2442
 
2443
				}#if end
2444
 
2445
			#取得名稱屬性跟備註
2446
			$mustBeFilledVar[$key]=array();
2447
			$mustBeFilledVar[$key]["name"]=$spiltString["dataArray"][0];
2448
			$mustBeFilledVar[$key]["type"]=$spiltString["dataArray"][1];
2449
 
2450
			#如果沒有備註
2451
			if(!isset($spiltString["dataArray"][2]))
2452
			{
2453
				#設置為空字串
2454
				$spiltString["dataArray"][2]="";
2455
 
2456
			}#if end
2457
 
2458
			$mustBeFilledVar[$key]["note"]=$spiltString["dataArray"][2];
2459
 
2460
			#debug
2461
			if(!isset($spiltString["dataArray"][2])){
2462
 
2463
				#初始化結果
2464
				$result=array();
2465
 
2466
				#設置執行錯誤
2467
				$result["status"]="false";
2468
 
2469
				#設置錯誤訊息
2470
				$result["error"]=$line;
2471
 
2472
				#設置錯誤訊息
2473
				$result["error"][]="未按照「參數名稱,參數形態,參數說明」的格式撰寫";
2474
 
2475
				#回傳結果
2476
				return $result;
2477
 
2478
				}#if end
2479
 
2480
			#針對後面的說明
2481
			for($i=3;$i<$spiltString["dataCounts"];$i++){
2482
 
2483
				#傳接起來
2484
				$mustBeFilledVar[$key]["note"]=$mustBeFilledVar[$key]["note"].",".$spiltString["dataArray"][$i];
2485
 
2486
				}#for end
2487
 
2488
			}#foreach end
2489
 
2490
		/*
2491
		#debug
2492
		var_dump($mustBeFilledVar);
2493
		exit;
2494
		*/
2495
 
2496
		#取得必填的參數
2497
		$result["mustBeFilledVar"]=$mustBeFilledVar;
2498
 
2499
		#初始化儲存可省略的參數
2500
		$skipableVar=array();
2501
 
2502
		/*
2503
		#debug
2504
		var_dump($skipableVarKeyStartPoint);
2505
		var_dump($noteVarKeyStartPoint);		
2506
		exit;
2507
		*/
2508
 
60 liveuser 2509
		#從 $skipableVarKeyStartPoint 元素往後讀,只讀取可省略參數.
2510
		for($i=$skipableVarKeyStartPoint;$i<$referenceVarKeyStartPoint;$i++){
1 liveuser 2511
 
2512
			#另存每個可省略參數行
264 liveuser 2513
			$skipableVar[]=$result["functionComment"][$i];
1 liveuser 2514
 
2515
			}#for end
2516
 
2517
		#debug
2518
		#var_dump($skipableVar);
2519
		#exit;
2520
 
2521
		#暫存真的可省略變數與解說
2522
		$newSkipableVar=array();
2523
 
60 liveuser 2524
		#針對每個可略變數與解說
1 liveuser 2525
		for($i=1;$i<count($skipableVar);$i=$i+2){
2526
 
2527
			#取得真的可省略變數與名稱
2528
			$newSkipableVar[]=$skipableVar[$i];
2529
 
2530
			}#for end
60 liveuser 2531
 
1 liveuser 2532
		#置換內容
2533
		$skipableVar=$newSkipableVar;
60 liveuser 2534
 
1 liveuser 2535
		/*
2536
		#debug
2537
		var_dump($skipableVar);
2538
		exit;
2539
		*/
2540
 
2541
		#針對每一列
2542
		foreach($skipableVar as $key=>$line){
2543
 
2544
			#剔除開頭的 "#"
2545
			#涵式說明:
2546
			#處理字串避免網頁出錯
2547
			#回傳的結果:
2548
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2549
			#$result["function"],當前執行的函數.
2550
			#$result["content"],爲處理好的字串.
2551
			#$result["error"],錯誤訊息陣列.
2552
			#$result["argu"],使用的參數. 
57 liveuser 2553
			#必填參數:
1 liveuser 2554
			$conf["stringProcess::correctCharacter"]["stringIn"]=$line;#爲要處理的字串
2555
			#可省略的參數:
2556
			$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("#");#爲被選擇要處理的字串/字元,須爲陣列值。
2557
				#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
2558
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2559
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
2560
			#備註:
2561
			#無.
2562
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
2563
			unset($conf["stringProcess::correctCharacter"]);
2564
 
2565
			#如果執行失敗
2566
			if($correctCharacter["status"]==="false"){
2567
 
2568
				#設定執行錯誤識別
2569
				$result["status"]="false";
2570
 
2571
				#設定執行錯誤提示
2572
				$result["error"]=$correctCharacter;
2573
 
2574
				#回傳結果 
2575
				return $result;
2576
 
2577
				}#if end
2578
 
2579
 
2580
			#取得剔除開頭 # 的內容列
2581
			$skipableVar[$key]=$correctCharacter["content"];
2582
 
2583
			}#foreach end	
2584
 
2585
		#debug
2586
		#var_dump($skipableVar);
2587
		#exit;	
2588
 
2589
		#針對每一列
2590
		foreach($skipableVar as $key=>$line){
2591
 
2592
			#涵式說明:
2593
			#將固定格式的字串分開,並回傳分開的結果。
2594
			#回傳結果:
2595
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2596
			#$result["error"],錯誤訊息陣列
2597
			#$result["function"],當前執行的函數名稱.
2598
			#$result["argu"],使用的參數.
2599
			#$result["oriStr"],要分割的原始字串內容
2600
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2601
			#$result["dataCounts"],爲總共分成幾段
2602
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
57 liveuser 2603
			#必填參數:
1 liveuser 2604
			$conf["stringProcess::spiltString"]["stringIn"]=$line;#要處理的字串。
2605
			$conf["stringProcess::spiltString"]["spiltSymbol"]=",";#爲以哪個符號作爲分割
2606
			#可省略參數:
2607
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2608
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2609
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2610
			unset($conf["stringProcess::spiltString"]);
2611
 
2612
			#如果執行失敗
2613
			if($spiltString["status"]==="false"){
2614
 
2615
				#設定執行錯誤識別
2616
				$result["status"]="false";
2617
 
2618
				#設定執行錯誤提示
2619
				$result["error"]=$spiltString;
2620
 
2621
				#回傳結果 
2622
				return $result;
2623
 
2624
				}#if end
2625
 
2626
			#如果執行失敗
2627
			if($spiltString["found"]==="false"){
2628
 
2629
				#移除之
2630
				unset($mustBeFilledVar[$key]);
2631
 
2632
				#換下一列
2633
				continue;
2634
 
2635
				}#if end
2636
 
43 liveuser 2637
			#如果缺乏參數名稱位或屬性
2638
			if(!isset($spiltString["dataArray"][0]) || !isset($spiltString["dataArray"][1])){
2639
 
2640
				#設定執行錯誤識別
2641
				$result["status"]="false";
2642
 
2643
				#設定執行錯誤提示
2644
				$result["error"]=$spiltString;
2645
 
2646
				#回傳結果 
2647
				return $result;
2648
 
2649
				}#if end
2650
 
1 liveuser 2651
			#取得名稱屬性跟備註
2652
			$skipableVar[$key]=array();
2653
			$skipableVar[$key]["name"]=$spiltString["dataArray"][0];
2654
			$skipableVar[$key]["type"]=$spiltString["dataArray"][1];
2655
 
2656
			#如果沒有備註
2657
			if(!isset($spiltString["dataArray"][2]))
2658
			{
2659
				#設置為空字串.
2660
				$spiltString["dataArray"][2]="";
2661
			}
2662
 
2663
			$skipableVar[$key]["note"]=$spiltString["dataArray"][2];
2664
 
2665
			#針對後面的說明
2666
			for($i=3;$i<$spiltString["dataCounts"];$i++){
2667
 
60 liveuser 2668
				#串接起來
1 liveuser 2669
				$skipableVar[$key]["note"]=$skipableVar[$key]["note"].",".$spiltString["dataArray"][$i];
2670
 
2671
				}#for end
2672
 
2673
			}#foreach end
2674
 
2675
		#debug
2676
		#var_dump($skipableVar);
2677
		#exit;	
2678
 
2679
		#取得可省略參數的內容
2680
		$result["skipableVar"]=$skipableVar;
2681
 
60 liveuser 2682
		#初始化儲存參考資料的陣列
2683
		$reference=array();
2684
 
2685
		#從 $result["referenceVarKeyStartPoint"] 元素往後讀,只讀取備註.
2686
		for($i=$referenceVarKeyStartPoint+1;$i<$noteVarKeyStartPoint;$i++){
2687
 
2688
			#另存每個可省略參數行
264 liveuser 2689
			$reference[]=$result["functionComment"][$i];
60 liveuser 2690
 
2691
			}#for end
2692
 
2693
		#針對每一列
2694
		foreach($reference as $key=>$line){
2695
 
2696
			#剔除開頭的 "#"
2697
			#涵式說明:
2698
			#處理字串避免網頁出錯
2699
			#回傳的結果:
2700
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2701
			#$result["function"],當前執行的函數.
2702
			#$result["content"],爲處理好的字串.
2703
			#$result["error"],錯誤訊息陣列.
2704
			#$result["argu"],使用的參數. 
2705
			#必填參數:
2706
			$conf["stringProcess::correctCharacter"]["stringIn"]=$line;#爲要處理的字串
2707
			#可省略的參數:
2708
			$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("#");#爲被選擇要處理的字串/字元,須爲陣列值。
2709
				#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
2710
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2711
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
2712
			#備註:
2713
			#無.
2714
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
2715
			unset($conf["stringProcess::correctCharacter"]);
2716
 
2717
			#如果執行失敗
2718
			if($correctCharacter["status"]==="false"){
2719
 
2720
				#設定執行錯誤識別
2721
				$result["status"]="false";
2722
 
2723
				#設定執行錯誤提示
2724
				$result["error"]=$correctCharacter;
2725
 
2726
				#回傳結果 
2727
				return $result;
2728
 
2729
				}#if end
2730
 
2731
 
2732
			#取得剔除開頭 # 的內容列
2733
			$reference[$key]=$correctCharacter["content"];
2734
 
2735
			}#foreach end	
2736
 
2737
		#取得備註的內容
2738
		$result["reference"]=$reference;
2739
 
1 liveuser 2740
		#初始化儲存備註的陣列
2741
		$note=array();
2742
 
2743
		#從 $result["noteVarKeyStartPoint"] 元素往後讀,只讀取備註.
264 liveuser 2744
		for($i=$noteVarKeyStartPoint+1;$i<count($result["functionComment"])-1;$i++){
1 liveuser 2745
 
2746
			#另存每個可省略參數行
264 liveuser 2747
			$note[]=$result["functionComment"][$i];
1 liveuser 2748
 
2749
			}#for end
2750
 
271 liveuser 2751
		#將 $result["functionComment"] 陣列變成字串.
2752
		#函式說明:
2753
		#將一維陣列轉換為用特定符號間隔的字串,ex:array("1","2","3") to "a;b;c;".
2754
		#回傳的結果:
2755
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2756
		#$result["function"],當前執行的function名稱
2757
		#$result["error"],錯誤訊息陣列.
2758
		#$result["content"],處理好的字串.
2759
		#$result["argu"],使用的參數.
2760
		#必填參數:
2761
		#$conf["inputArray"],字串陣列,要轉成字串的一維陣列.
2762
		$conf["arrays::arrayToString"]["inputArray"]=$result["functionComment"];
2763
		#可省略參數:
2764
		#$conf["spiltSymbol"],字串,用來區隔字串的符號,預設為;
2765
		$conf["arrays::arrayToString"]["spiltSymbol"]=PHP_EOL;
2766
		#$conf["skipEnd"],字串,結尾是否不要加上符號,預設為"false",要加上符號,"true"代表不要加上符號。
2767
		#$conf["skipEnd"]="";
2768
		#參考資料:
2769
		#無.
2770
		#備註:
2771
		#無.
2772
		$arrayToString=arrays::arrayToString($conf["arrays::arrayToString"]);
2773
		unset($conf["arrays::arrayToString"]);
2774
 
2775
		#如果執行失敗
2776
		if($arrayToString["status"]==="false"){
2777
 
2778
			#設定執行錯誤識別
2779
			$result["status"]="false";
2780
 
2781
			#設定執行錯誤提示
2782
			$result["error"]=$arrayToString;
2783
 
2784
			#回傳結果 
2785
			return $result;
2786
 
2787
			}#if end
2788
 
2789
		#轉存為字串
2790
		$result["functionComment"]=$arrayToString["content"];
2791
 
1 liveuser 2792
		#針對每一列
2793
		foreach($note as $key=>$line){
2794
 
2795
			#剔除開頭的 "#"
2796
			#涵式說明:
2797
			#處理字串避免網頁出錯
2798
			#回傳的結果:
2799
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2800
			#$result["function"],當前執行的函數.
2801
			#$result["content"],爲處理好的字串.
2802
			#$result["error"],錯誤訊息陣列.
2803
			#$result["argu"],使用的參數. 
57 liveuser 2804
			#必填參數:
1 liveuser 2805
			$conf["stringProcess::correctCharacter"]["stringIn"]=$line;#爲要處理的字串
2806
			#可省略的參數:
2807
			$conf["stringProcess::correctCharacter"]["selectedCharacter"]=array("#");#爲被選擇要處理的字串/字元,須爲陣列值。
2808
				#若不設定則預設爲要將這些字串作替換 ("<",">","=","//","'","$","%","&","|","/*","*","#","\"").
2809
				#特殊字元,「\n」代表換行,「\t」代表tab鍵的間隔
2810
			#$conf["changeTo"]=array();#爲被選擇的字元要換成什麼字串/字元,須爲陣列值。若不設定,則預設爲更換成""(空字串).
2811
			#備註:
2812
			#無.
2813
			$correctCharacter=stringProcess::correctCharacter($conf["stringProcess::correctCharacter"]);
2814
			unset($conf["stringProcess::correctCharacter"]);
2815
 
2816
			#如果執行失敗
2817
			if($correctCharacter["status"]==="false"){
2818
 
2819
				#設定執行錯誤識別
2820
				$result["status"]="false";
2821
 
2822
				#設定執行錯誤提示
2823
				$result["error"]=$correctCharacter;
2824
 
2825
				#回傳結果 
2826
				return $result;
2827
 
2828
				}#if end
2829
 
2830
 
2831
			#取得剔除開頭 # 的內容列
2832
			$note[$key]=$correctCharacter["content"];
2833
 
2834
			}#foreach end	
2835
 
2836
		#取得備註的內容
2837
		$result["note"]=$note;
2838
 
260 liveuser 2839
		#初始化函式的程式內容.
2840
		$result["content"]="";
2841
 
2842
		#針對函式的定義開始行,往後逐行執行.
270 liveuser 2843
		for($i=$result["functionStructionEndPoint"];$i<$fileContent["lineCount"];$i++){
260 liveuser 2844
 
2845
			#暫存該行程式的內容
2846
			$line=$fileContent["fileContent"][$i];
2847
 
262 liveuser 2848
			#如果無任何內容
2849
			if(empty($line)){
2850
 
2851
				#串接程式的內容
2852
				$result["content"]=$result["content"].$line;
2853
 
2854
				#換下一行
2855
				continue;
2856
 
2857
				}#if end
2858
 
260 liveuser 2859
			#判斷是否為函式定義的結束.
2860
			#函式說明:
2861
			#取得符合特定字首與字尾的字串
2862
			#回傳結果:
2863
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
2864
			#$result["function"],當前執行的函數名稱.
2865
			#$result["error"],錯誤訊息陣列.
2866
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
2867
			#$result["returnString"],爲符合字首條件的字串內容。
2868
			#$result["argu"],使用的參數.
2869
			#必填參數:
2870
			#$conf["checkString"],字串,要檢查的字串.
2871
			$conf["search::getMeetConditionsString"]["checkString"]=$line;
2872
			#可省略參數:
2873
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
268 liveuser 2874
			$conf["search::getMeetConditionsString"]["frontWord"]="\t\t}#function";
260 liveuser 2875
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
2876
			#$conf["tailWord"]="";
2877
			#參考資料:
2878
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
2879
			#備註:
2880
			#無.
2881
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
2882
			unset($conf["search::getMeetConditionsString"]);
2883
 
2884
			#如果處理失敗
2885
			if($getMeetConditionsString["status"]==="false"){
2886
 
2887
				#設置執行錯誤的識別
2888
				$result["status"]="false";
2889
 
2890
				#設置執行錯誤的訊息
2891
				$result["error"]=$getMeetConditionsString;
2892
 
2893
				#回傳結果
2894
				return $result;
2895
 
2896
				}#if end
2897
 
2898
			#串接程式的內容
261 liveuser 2899
			$result["content"]=$result["content"].$line;
260 liveuser 2900
 
2901
			#如果找到函式的結尾
2902
			if($getMeetConditionsString["founded"]==="true"){
2903
 
2904
				#跳出迴圈
2905
				break;
2906
 
2907
				}#if end
2908
 
2909
			}#for end
2910
 
1 liveuser 2911
		#值行到這邊執行成功
2912
		$result["status"]="true";
2913
 
2914
		#回傳節果
2915
		return $result;
2916
 
2917
		}#function getFunctionConstruction end
2918
 
2919
	/*
2920
	#函式說明:
2921
	#取得多個函式的結構
57 liveuser 2922
	#回傳結果:
1 liveuser 2923
	#$result["status"],執行是否成功"true"代表執行成功,"false"代表執行失敗
2924
	#$result["error"],錯誤訊息陣列
2925
	#$result["function"],當前執行的函數名稱.
2926
	#$result["comment"],每個函式說明的陣列
2927
	#$result["argvType"],每個函式傳入參數型態的陣列,""表示不用參數
2928
	#$result["returnVarType"],每個函式回傳變數型態的陣列,目前尚無法判斷其型態為string、int、float、double、boolean的哪一個,所以先一律視為"string"
2929
	#$result["return"]["name"][$i],第$i+1個函式回傳變數名稱的陣列
2930
	#$result["return"]["comment"][$i],第$i+1個函式回傳變數註解的陣列
2931
	#$result["mustBeFilled"]["dataCount"][$j],第j+1個函式不可省略參數數量的陣列 
2932
	#$result["optionalFilled"]["dataCount"][$k],第$k+1每個函式可省略參數數量的陣列
2933
	#$result["mustBeFilled"]["name"][$j],第$j+1個函式不可省略參數的陣列
2934
	#$result["mustBeFilled"]["comment"][$j],第$j+1個函式不可省略參數註解的陣列
2935
	#$result["optionalFilled"]["name"][$k],第$k+1個函式可省略參數的陣列
2936
	#$result["optionalFilled"]["comment"][$k],第$k+1個函式可省略參數註解的陣列
2937
	#$result["reference"]["addr"][$l],第$l+1個函式參考資料網址的陣列
2938
	#$result["reference"]["comment"][$l],第$l+1個函式參考資料說明的陣列
2939
	#必填參數:
2940
	#$conf["phpFileAddress"],字串,含有函式內容的php檔案位置與名稱
2941
	$conf["phpFileAddress"]="";
2942
	#$conf["functionName"],字串陣列,函式的名稱陣列.
2943
	$conf["functionName"]="array("");
2944
	#$conf["fileArgu"],字串,__FILE__的內容.
2945
	$conf["fileArgu"]=__FILE__;
2946
	#可省略參數:
2947
	#無.
203 liveuser 2948
	#參考資料:
2949
	#無.
1 liveuser 2950
	#備註:
203 liveuser 2951
	#目前尚未開發完畢.
1 liveuser 2952
	*/
203 liveuser 2953
	public static function getMutiFunctionConstruction(&$conf){
1 liveuser 2954
 
2955
		#初始化要回傳的內容
2956
		$result=array();
2957
 
2958
		#取得當前函數的名稱
2959
		$result["function"]=__FUNCTION__;
2960
 
2961
		#如果 $conf 不為陣列
2962
		if(gettype($conf)!="array"){
2963
 
2964
			#設置執行失敗
2965
			$result["status"]="false";
2966
 
2967
			#設置執行錯誤訊息
2968
			$result["error"][]="\$conf變數須為陣列形態";
2969
 
2970
			#如果傳入的參數為 null
2971
			if($conf==null){
2972
 
2973
				#設置執行錯誤訊息
2974
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2975
 
2976
				}#if end
2977
 
2978
			#回傳結果
2979
			return $result;
2980
 
2981
			}#if end
2982
 
2983
		#檢查參數
57 liveuser 2984
		#函式說明:
1 liveuser 2985
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
57 liveuser 2986
		#回傳結果:
1 liveuser 2987
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2988
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2989
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2990
		#必填寫的參數:
2991
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
2992
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("phpFileAddress","functionName","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
2993
		#可以省略的參數:
2994
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
2995
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="true";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
2996
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
2997
		unset($conf["variableCheck"]["isexistMuti"]);
2998
 
2999
		# 如果 $checkResult["status"] 為 "fasle"
3000
		if($checkResult["status"]=="false"){
3001
 
3002
			#設置執行錯誤的識別
3003
			$result["status"]="false";
3004
 
3005
			#設置執行錯誤的訊息
3006
			$result["error"]=$checkResult;
3007
 
3008
			#回傳結果
3009
			return $result;
3010
 
3011
			}#if end
3012
 
3013
		# 如果 $checkResult["passed"] 為 "fasle"
3014
		if($checkResult["passed"]=="false"){
3015
 
3016
			#設置執行錯誤的識別
3017
			$result["status"]="false";
3018
 
3019
			#設置執行錯誤的訊息
3020
			$result["error"]=$checkResult;
3021
 
3022
			#回傳結果
3023
			return $result;
3024
 
3025
			}#if end
3026
 
3027
		#針對每個要解析的函式
3028
		foreach($conf["functionName"] as $functionName){
3029
 
3030
			#debug
3031
			#var_dump($functionName);
3032
 
3033
			#如果涵式名稱是 "empty"
3034
			if($functionName==="empty"){
3035
 
3036
				#跳過
3037
				continue;
3038
 
3039
				}#if end
3040
 
57 liveuser 3041
			#函式說明:
1 liveuser 3042
			#取得函式的結構
3043
			#回傳的結果:
3044
			#$result["status"],執行是否成功"true"代表執行成功,"false"代表執行失敗
3045
			#$result["error"],錯誤訊息陣列
3046
			#$result["comment"],函式說明
3047
			#$result["argvType"],傳入參數的型態,null表示不用參數
3048
			#$result["returnVarType"],回傳的變數型態,目前尚無法判斷其型態為string、int、float、double、boolean的哪一個,所以先一律視為"string"
3049
			#$result["return"]["name"],回傳的變數名稱
3050
			#$result["return"]["comment"],回傳的變數註解
3051
			#$result["mustBeFilled"]["dataCount"],不可省略的參數陣列元素數量 
3052
			#$result["optionalFilled"]["dataCount"],可省略的參數陣列元素數量
3053
			#$result["mustBeFilled"]["name"],不可省略的參數陣列
3054
			#$result["mustBeFilled"]["comment"],不可省略的參數註解陣列
3055
			#$result["optionalFilled"]["name"],可省略的參數陣列
3056
			#$result["optionalFilled"]["comment"],可省略的參數註解陣列
3057
			#$result["reference"]["addr"],參考資料的網址
3058
			#$result["reference"]["comment"],參考資料的說明
57 liveuser 3059
			#必填參數:
1 liveuser 3060
			$conf["phpLib"]["getFunctionConstruction"]["phpFileAddress"]=$conf["phpFileAddress"];#含有函式內容的php檔案位置與名稱
3061
			$conf["phpLib"]["getFunctionConstruction"]["functionName"]=$functionName;#函式的名稱
3062
			$conf["phpLib"]["getFunctionConstruction"]["fileArgu"]=$conf["fileArgu"];#函式的名稱
3063
			#備註:目前尚未開發完畢
3064
			$functionConstruction=phpLib::getFunctionConstruction($conf["phpLib"]["getFunctionConstruction"]);
3065
			#var_dump($conf["phpLib"]["getFunctionConstruction"]);
3066
			unset($conf["phpLib"]["getFunctionConstruction"]);
3067
 
3068
			#如果執行失敗
3069
			if($functionConstruction["status"]==="false"){
3070
 
3071
				#設置執行錯誤的識別
3072
				$result["status"]="false";
3073
 
3074
				#設置執行錯誤的訊息
3075
				$result["error"]=$functionConstruction;
3076
 
3077
				#回傳結果
3078
				return $result;
3079
 
3080
				}#if end
3081
 
3082
			#debug
3083
			#var_dump($functionConstruction);
3084
			#exit;
3085
 
3086
			#取得函式說明
3087
			$result["comment"][]=$functionConstruction["comment"];
3088
 
3089
			#取得函式傳入參數型態
3090
			$result["argvType"][]=$functionConstruction["argvType"];
3091
 
3092
			#取得函式回傳變數型態
3093
			$result["returnVarType"][]=$functionConstruction["returnVarType"];
3094
 
3095
			#取得函式回傳變數名稱陣列
3096
			$result["return"]["name"][]=$functionConstruction["return"]["name"];
3097
 
3098
			#取得函式回傳變數註解陣列
3099
			$result["return"]["comment"][]=$functionConstruction["return"]["comment"];
3100
 
3101
			}#foreach end		
3102
 
3103
		#執行到這邊代表執行成功
3104
 
3105
		#設置執行成功的識別
3106
		$result["status"]="true";
3107
 
3108
		#回傳結果
3109
		return $result;
3110
 
3111
		}#function getMutiFunctionConstruction end
3112
 
3113
	/*
57 liveuser 3114
	#函式說明:
1 liveuser 3115
	#提供將含有類別宣告的php檔案轉成類別圖的功能
57 liveuser 3116
	#回傳結果:
1 liveuser 3117
	#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
3118
	#$result["error"],錯誤訊息陣列.
3119
	#$result["error"]["noFunction"],若為"true"則代表檔案裡面沒有涵式.
3120
	#$result["function"],當前執行的函數名稱.
3121
	#$result["diagramCode"],類別圖的網頁code
57 liveuser 3122
	#必填參數:
1 liveuser 3123
	#$conf["phpFileAddress"],字串,含有宣告類別的php檔案
3124
	$conf["phpFileAddress"]="";
3125
	#$conf["fileArgu"],字串,__FILE__的內容.
3126
	$conf["fileArgu"]=__FILE__;
57 liveuser 3127
	#可省略參數:
3128
	#無.
203 liveuser 3129
	#參考資料:
3130
	#無.
57 liveuser 3131
	#備註:
3132
	#無.
1 liveuser 3133
	*/
203 liveuser 3134
	public static function classDiagramMaker(&$conf){
1 liveuser 3135
 
3136
		#初始化要回傳的內容
3137
		$result=array();
3138
 
3139
		#取得當前函數的名稱
3140
		$result["function"]=__FUNCTION__;
3141
 
3142
		#如果 $conf 不為陣列
3143
		if(gettype($conf)!="array"){
3144
 
3145
			#設置執行失敗
3146
			$result["status"]="false";
3147
 
3148
			#設置執行錯誤訊息
3149
			$result["error"][]="\$conf變數須為陣列形態";
3150
 
3151
			#如果傳入的參數為 null
3152
			if($conf==null){
3153
 
3154
				#設置執行錯誤訊息
3155
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3156
 
3157
				}#if end
3158
 
3159
			#回傳結果
3160
			return $result;
3161
 
3162
			}#if end
3163
 
3164
		#初始化要暫存的函式結構陣列
3165
		$functionConstruction=array();
3166
 
3167
		#參數檢查
3168
		#檢查參數
57 liveuser 3169
		#函式說明:
1 liveuser 3170
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
57 liveuser 3171
		#回傳結果:
1 liveuser 3172
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3173
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3174
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3175
		#必填寫的參數:
3176
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
3177
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("phpFileAddress","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3178
		#可以省略的參數:
3179
		$conf["variableCheck"]["isexistMuti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3180
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3181
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
3182
		unset($conf["variableCheck"]["isexistMuti"]);
3183
 
3184
		#如果 $checkResult["status"] 為 "fasle"
3185
		if($checkResult["status"]==="false"){
3186
 
3187
			#設置執行錯誤的識別
3188
			$result["status"]="false";
3189
 
3190
			#設置執行錯誤的訊息
3191
			$result["error"]=$checkResult;
3192
 
3193
			#回傳結果
3194
			return $result;
3195
 
3196
			}#if end
3197
 
3198
		#如果 $checkResult["passed"] 為 "fasle"
3199
		if($checkResult["passed"]==="false"){
3200
 
3201
			#設置執行錯誤的識別
3202
			$result["status"]="false";
3203
 
3204
			#設置執行錯誤的訊息
3205
			$result["error"]=$checkResult;
3206
 
3207
			#回傳結果
3208
			return $result;
3209
 
3210
			}#if end
3211
 
3212
		#函數說明:
3213
		#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.
3214
		#回傳結果:
3215
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
3216
		#$result["error"],錯誤訊息陣列.
3217
		#$result["function"],當前執行的函數名稱.
3218
		#必填參數:
3219
		#$conf["sec"],整數,要延長多少執行時間,單位爲秒
3220
		$conf["config::delayRunTimeExectionMax"]["sec"]=300;
3221
		#參考資料:
3222
		#http://php.net/manual/en/function.set-time-limit.php
3223
		$delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);
3224
		unset($conf["config::delayRunTimeExectionMax"]);
3225
 
3226
		#如果執行失敗
3227
		if($delayRunTimeExectionMax["status"]==="false"){
3228
 
3229
			#設定類別圖繪製失敗
3230
			$result["status"]="false";			
3231
 
3232
			#設定該檔案的類別圖繪製失敗提示
3233
			$result["error"]=$delayRunTimeExectionMax;
3234
 
3235
			#回傳結果
3236
			return $result;
3237
 
3238
			}#if end		
3239
 
57 liveuser 3240
		#函式說明:
1 liveuser 3241
		#取得php函式庫檔案裡面的結構
3242
		#回傳的結果:
3243
		#$result["status"],0表示取得成功;1表示取得失敗
3244
		#$result["namesapceCount"],命名空間的筆數
3245
		#$result["classCount"],類別的筆數
3246
		#$result["functionCount"],函式的筆數
3247
		#$result["namespace"],命名空間陣列 
3248
		#$result["class"],類別的陣列
3249
		#$result["function"],函式的陣列
57 liveuser 3250
		#必填參數:
1 liveuser 3251
		$conf["phpLib"]["getPhpLibConstruction"]["libFileAddress"]=$conf["phpFileAddress"];#要讀取的函式庫檔案位置
3252
		$conf["phpLib"]["getPhpLibConstruction"]["fileArgu"]=$conf["fileArgu"];
3253
		$classConstruction=phpLib::getPhpLibConstruction($conf["phpLib"]["getPhpLibConstruction"]);
3254
		unset($conf["phpLib"]["getPhpLibConstruction"]);
3255
 
3256
		#如果 $classConstruction["status"] 為 "fasle"
3257
		if($classConstruction["status"]==="false"){
3258
 
3259
			#設置執行錯誤的識別
3260
			$result["status"]="false";
3261
 
3262
			#設置執行錯誤的訊息
3263
			$result["error"]=$classConstruction;
3264
 
3265
			#回傳結果
3266
			return $result;
3267
 
3268
			}#if end			
3269
 
3270
		#如果裡面沒有函式
3271
		if($classConstruction["functionCount"]===0){
3272
 
3273
			#設置只有一個叫做emtpy的函數
3274
			$classConstruction["functions"][]["content"]="empty";
3275
 
3276
			}#if end
3277
 
3278
		#初始化記錄所有函數名稱
3279
		$funcs=array();
3280
 
3281
		#針對每個既有的函數名稱
3282
		foreach($classConstruction["functions"] as $funcStr){
3283
 
3284
			#記錄函數名稱
3285
			$funcs[]=$funcStr["content"];
3286
 
3287
			}#foreach end		
3288
 
3289
		#取得每個函式的結構
57 liveuser 3290
		#函式說明:
1 liveuser 3291
		#取得多個函式的結構
3292
		#回傳的結果:
3293
		#$result["status"],執行是否成功"true"代表執行成功,"false"代表執行失敗
3294
		#$result["error"],錯誤訊息陣列
3295
		#$result["comment"],每個函式說明的陣列
3296
		#$result["argvType"],每個函式傳入參數型態的陣列,null表示不用參數
3297
		#$result["returnVarType"],每個函式回傳變數型態的陣列,目前尚無法判斷其型態為string、int、float、double、boolean的哪一個,所以先一律視為"string"
3298
		#$result["return"]["name"][$i],第$i+1個函式回傳變數名稱的陣列
3299
		#$result["return"]["comment"][$i],第$i+1個函式回傳變數註解的陣列
3300
		#$result["mustBeFilled"]["dataCount"][$j],第j+1個函式不可省略參數數量的陣列 
3301
		#$result["optionalFilled"]["dataCount"][$k],第$k+1每個函式可省略參數數量的陣列
3302
		#$result["mustBeFilled"]["name"][$j],第$j+1個函式不可省略參數的陣列
3303
		#$result["mustBeFilled"]["comment"][$j],第$j+1個函式不可省略參數註解的陣列
3304
		#$result["optionalFilled"]["name"][$k],第$k+1個函式可省略參數的陣列
3305
		#$result["optionalFilled"]["comment"][$k],第$k+1個函式可省略參數註解的陣列
3306
		#$result["reference"]["addr"][$l],第$l+1個函式參考資料網址的陣列
3307
		#$result["reference"]["comment"][$l],第$l+1個函式參考資料說明的陣列
57 liveuser 3308
		#必填參數:
1 liveuser 3309
		$conf["phpLib"]["getMutiFunctionConstruction"]["phpFileAddress"]=$conf["phpFileAddress"];#含有函式內容的php檔案位置與名稱
3310
		$conf["phpLib"]["getMutiFunctionConstruction"]["functionName"]=$funcs;#函式的名稱
3311
		$conf["phpLib"]["getMutiFunctionConstruction"]["fileArgu"]=$conf["fileArgu"];
3312
		#備註:目前尚未開發完畢
3313
		$functionConstruction=phpLib::getMutiFunctionConstruction($conf["phpLib"]["getMutiFunctionConstruction"]);
3314
 
3315
		#如果 $classConstruction["status"] 為 "fasle"
3316
		if($functionConstruction["status"]==="false"){
3317
 
3318
			#設置執行錯誤的識別
3319
			$result["status"]="false";
3320
 
3321
			#設置執行錯誤的訊息
3322
			$result["error"]=$functionConstruction;
3323
 
3324
			#回傳結果
3325
			return $result;
3326
 
3327
			}#if end		
3328
 
3329
		#debug
3330
		#var_dump($functionConstruction); 
3331
 
3332
		#由於每個函式都沒有指定屬性,所以都為public的函式
3333
 
3334
		#函式說明:
3335
		#建立一個陣列,可以指派陣列的內容,然後回傳
3336
		#回傳的結果:
3337
		#$result,爲陣列變數內容
57 liveuser 3338
		#必填參數:
1 liveuser 3339
		$conf["arrays"]["create"]["arrayContent"]=array("+");#陣列元素的內容,須爲陣列值。
3340
		#可省略的參數:
3341
		$conf["arrays"]["create"]["arrayCounts"]=count($classConstruction["functions"]);#爲陣列的元素有幾個,若沒設定,則數量爲$conf["arrayContent"]裏的元素數量
3342
		$conf["arrays"]["create"]["theSameAs"]="true";#若設爲"true",則所有元素內容都跟第一個元素內容相同
3343
		$functionTypeArray=arrays::create($conf["arrays"]["create"]);
3344
		unset($conf["arrays"]["create"]);
3345
 
3346
		#var_dump($functionTypeArray);
3347
		#var_dump($classConstruction["class"][0]);
3348
		#exit;
3349
 
3350
		#如果不存在 $classConstruction["class"][0]
3351
		if(!isset($classConstruction["class"][0])){
3352
 
3353
			#設置為 "empty"
3354
			$classConstruction["class"][0]["content"]="empty";
3355
 
3356
			}#if end
3357
 
3358
		#如果不存在 $functionConstruction["argvType"]
3359
		if(!isset($functionConstruction["argvType"])){
3360
 
3361
			#設置為 "array"
3362
			$functionConstruction["argvType"][0]="array";
3363
 
3364
			}#if end
3365
 
3366
		#如果不存在 $functionConstruction["returnVarType"]
3367
		if(!isset($functionConstruction["returnVarType"])){
3368
 
3369
			#設置為 "array"
3370
			$functionConstruction["returnVarType"][0]="array";
3371
 
3372
			}#if end
3373
 
3374
		#var_dump($classConstruction["functions"]);
3375
		#exit;
3376
 
3377
		#建立類別圖表格
57 liveuser 3378
		#函式說明:
1 liveuser 3379
		#依據類別的名稱、裡面的函式存限制、函式名稱、函式參數、函式回傳型態來建立類別圖表格
57 liveuser 3380
		#回傳結果:
1 liveuser 3381
		#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
3382
		#$result["error"],錯誤訊息陣列
3383
		#$result["classDiagramTable"],類別圖的網頁code
57 liveuser 3384
		#必填參數:
1 liveuser 3385
		$conf["table"]["classDiagramTable"]["className"]=$classConstruction["class"][0]["content"];#類別的名稱
3386
		$conf["table"]["classDiagramTable"]["functionOpenAccessType"]=$functionTypeArray;#函式存取的限制,每個元素代表一個函式的設定,"+"代表開放存取
3387
		$conf["table"]["classDiagramTable"]["functionName"]=$classConstruction["functions"];#各函式的名稱,每個元素代表一個函式的名稱
3388
		$conf["table"]["classDiagramTable"]["functionArgv"]=$functionConstruction["argvType"];#各函式的傳入參數型態,每個元素代表一個函式的入參數型態,""代表沒有傳入參數;
3389
		$conf["table"]["classDiagramTable"]["functionReturnType"]=$functionConstruction["returnVarType"];#各函式回傳的型態,每個元素代表一個函式回傳的型態,"void"代表沒有回傳變數
3390
		$createClassDiagramTableResult=table::classDiagramTable($conf["table"]["classDiagramTable"]);
3391
		unset($conf["table"]["classDiagramTable"]);
3392
 
3393
		#如果類別圖表格建立失敗
3394
		if($createClassDiagramTableResult["status"]==="false"){
3395
 
3396
			#設置執行錯誤的識別
3397
			$result["status"]="false";
3398
 
3399
			#設置錯誤訊息提示
3400
			$result["error"]=$createClassDiagramTableResult["error"];
3401
 
3402
			#回傳結果
3403
			return $result;
3404
 
3405
			}#if end
3406
 
3407
		#取得類別圖的html內容	
3408
		$result["diagramCode"]=$createClassDiagramTableResult["classDiagramTable"];
3409
 
3410
		#執行到這邊代表執行成功
3411
		$result["status"]="true";
3412
 
3413
		#回傳結果 
3414
		return $result;
3415
 
3416
		}#function classDiagramMaker end
3417
 
3418
	/*
57 liveuser 3419
	#函式說明:
1 liveuser 3420
	#提供將目標目錄裡的所有php檔案轉成類別圖的功能
57 liveuser 3421
	#回傳結果:
1 liveuser 3422
	#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
3423
	#$result["error"],錯誤訊息陣列
3424
	#$result["function"],當前執行的函數名稱.
3425
	#$result["diagramCode"][$i],第$i+1個類別圖的網頁code
57 liveuser 3426
	#必填參數:
1 liveuser 3427
	#$conf["phpDirAddress"],字串,含有宣告類別的php檔案目錄,""代表當前目錄。
3428
	$conf["phpDirAddress"]="";
3429
	#$conf["fileArgu"],字串,__FILE__的內容.
3430
	$conf["fileArgu"]=__FILE__;
57 liveuser 3431
	#可省略參數:
3432
	#無.
203 liveuser 3433
	#參考資料:
3434
	#無.
1 liveuser 3435
	#備註:
3436
	#有bug...
3437
	*/
203 liveuser 3438
	public static function classDiagramsMaker(&$conf){
1 liveuser 3439
 
3440
		#初始化要回傳的內容
3441
		$result=array();
3442
 
3443
		#取得當前函數的名稱
3444
		$result["function"]=__FUNCTION__;
3445
 
3446
		#如果 $conf 不為陣列
3447
		if(gettype($conf)!="array"){
3448
 
3449
			#設置執行失敗
3450
			$result["status"]="false";
3451
 
3452
			#設置執行錯誤訊息
3453
			$result["error"][]="\$conf變數須為陣列形態";
3454
 
3455
			#如果傳入的參數為 null
3456
			if($conf==null){
3457
 
3458
				#設置執行錯誤訊息
3459
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3460
 
3461
				}#if end
3462
 
3463
			#回傳結果
3464
			return $result;
3465
 
3466
			}#if end
3467
 
3468
		#參數檢查
3469
		#檢查參數
57 liveuser 3470
		#函式說明:
1 liveuser 3471
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
57 liveuser 3472
		#回傳結果:
1 liveuser 3473
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3474
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3475
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3476
		#必填寫的參數:
3477
		$conf["variableCheck"]["isexistMuti"]["varInput"]=$conf;#要檢查的陣列變數
3478
		$conf["variableCheck"]["isexistMuti"]["variableCheck"]=array("phpDirAddress","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
3479
		#可以省略的參數:
3480
		$conf["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
3481
		$conf["variableCheck"]["isexistMuti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
3482
		$checkResult=variableCheck::isexistMulti($conf["variableCheck"]["isexistMuti"]);
3483
		unset($conf["variableCheck"]["isexistMuti"]);
3484
 
3485
		#如果 $checkResult["status"] 為 "fasle"
3486
		if($checkResult["status"]=="false"){
3487
 
3488
			#設置執行錯誤的識別
3489
			$result["status"]="false";
3490
 
3491
			#設置執行錯誤的訊息
3492
			$result["error"]=$checkResult;
3493
 
3494
			#回傳結果
3495
			return $result;
3496
 
3497
			}#if end
3498
 
3499
		#如果 $checkResult["passed"] 為 "fasle"
3500
		if($checkResult["passed"]=="false"){
3501
 
3502
			#設置執行錯誤的識別
3503
			$result["status"]="false";
3504
 
3505
			#設置執行錯誤的訊息
3506
			$result["error"]=$checkResult;
3507
 
3508
			#回傳結果
3509
			return $result;
3510
 
3511
			}#if end
3512
 
3513
		#取得目標目錄底下的php檔案
57 liveuser 3514
		#函式說明:
1 liveuser 3515
		#取得目錄底下函式庫檔案清單
3516
		#回傳的結果:
3517
		#$result["status"],0表示有清單;1表示沒有清單
3518
		#$result["dataCount"],有幾筆符合的資料
3519
		#$result["neededList"],符合條件的檔案清單		
57 liveuser 3520
		#必填參數:
1 liveuser 3521
		$conf["phpLib"]["getLibFileList"]["folderAddress"]=$conf["phpDirAddress"];#要讀取的函式庫目錄
3522
		#$conf["fileArgu"],字串__FILE__的內容.
3523
		$conf["phpLib"]["getLibFileList"]["fileArgu"]=$conf["fileArgu"];
3524
		#可省略的參數:
3525
		$conf["phpLib"]["getLibFileList"]["readFileType"]=array("php");#要讀取具有該陣列底下副檔名的檔案
3526
		#$conf["excludeFile"],陣列,要忽略的檔案.
3527
		$conf["phpLib"]["getLibFileList"]["excludeFile"]=array("allInOne.php");
3528
		$phpLib_getLibFileList=phpLib::getLibFileList($conf["phpLib"]["getLibFileList"]);
3529
		unset($conf["phpLib"]["getLibFileList"]);
3530
 
3531
		#debug
3532
		#var_dump($phpLib_getLibFileList);
3533
		#exit;
3534
 
3535
		#如果執行失敗
3536
		if($phpLib_getLibFileList["status"]==="false"){
3537
 
3538
			#設定執行失敗
3539
			$result["status"]="false";
3540
 
3541
			#設置錯誤訊息
3542
			$result["error"]="目標目錄下沒有任何php檔案";
3543
 
3544
			#回傳結果
3545
			return $result;
3546
 
3547
			}#if end
3548
 
3549
		#如果 $phpLib_getLibFileList["dataCount"] 等於 0,則代表目標目錄底下沒有php檔案。
3550
		if($phpLib_getLibFileList["dataCount"]===0){
3551
 
3552
			#設定執行失敗
3553
			$result["status"]="false";
3554
 
3555
			#設置錯誤訊息
3556
			$result["error"]="目標目錄下沒有任何php檔案";
3557
 
3558
			#回傳結果
3559
			return $result;
3560
 
3561
			}#if end
3562
 
3563
		#var_dump($phpLib_getLibFileList);
3564
 
3565
		#根據每個php檔案
3566
		for($i=0;$i<$phpLib_getLibFileList["dataCount"];$i++){
3567
 
3568
			#取得其類別函式結構
57 liveuser 3569
			#函式說明:
1 liveuser 3570
			#提供將含有類別宣告的php檔案轉成類別圖的功能
57 liveuser 3571
			#回傳結果:
1 liveuser 3572
			#$result["status"],執行是否成功,"true"代表執行成功;"false"代表執行失敗。
3573
			#$result["error"],錯誤訊息陣列
3574
			#$result["diagramCode"],類別圖的網頁code
57 liveuser 3575
			#必填參數:
1 liveuser 3576
			$conf["phpLib"]["classDiagramMaker"]["phpFileAddress"]=$conf["phpDirAddress"].$phpLib_getLibFileList["neededList"][$i];#含有宣告類別的php檔案
3577
			$conf["phpLib"]["classDiagramMaker"]["fileArgu"]=$conf["fileArgu"];
3578
			$classDiagram["diagramCode"][$i]=phpLib::classDiagramMaker($conf["phpLib"]["classDiagramMaker"]);
3579
			unset($conf["phpLib"]["classDiagramMaker"]);
3580
 
3581
			#如果該檔案的類別圖取得失敗
3582
			if($classDiagram["diagramCode"][$i]["status"]=="false"){
3583
 
3584
				#設定類別圖繪製失敗
3585
				$result["status"]="false";
3586
 
3587
				#設定錯誤訊息
3588
				$result["error"]=$classDiagram;
3589
 
3590
				#設定該檔案的類別圖繪製失敗提示
3591
				$result["error"][]="無法正確取得".$phpLib_getLibFileList["neededList"][$i]."檔案裡面的類別結構或該檔案非類別檔案";
3592
 
3593
				#回傳結果
3594
				return $result;
3595
 
3596
				}#if end
3597
 
3598
			#取得類別圖表格htmlCode
3599
			$result["diagramCode"][]=$classDiagram["diagramCode"][$i]["diagramCode"];	
3600
 
3601
			}#for end
3602
 
3603
		#執行到這邊代表執行成功
3604
		$result["status"]="true";
3605
 
3606
		#回傳結果
3607
		return $result;	
3608
 
3609
		}#function classDiagramsMaker end
842 liveuser 3610
 
3611
	/*
3612
	#函式說明:
3613
	#更新程式檔案開頭版權宣告的年份
3614
	#回傳結果:
3615
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3616
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
3617
	#$result["function"],當前執行的函式名稱.
3618
	#$result["content"],有更新的檔案清單,其元素有被取代的檔案路徑與名稱跟replacedInfo,其中replacedInfo為陣列,其key為要變動的行號(從0開始算),其數值有"from"代表要被取代的原始內容,"to"代表要置換成的新內容.
3619
	#$result["scannedFile"],陣列,有檢查過的檔案清單其完整路徑與檔案名稱.
3620
	#必填參數:
3621
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3622
	$conf["fileArgu"]=__FILE__;
3623
	#可省略參數:
3624
	#$conf["replaceFrom"],陣列,目標關鍵字,每個元素代表一行的內容,預設內容可參照本檔案開頭的版權宣告文字.
3625
	#$conf["replaceFrom"]=array();
3626
	#$conf["yearFrom],字串,起始年份,預設為西元"2014"年.
3627
	#$conf["yearFrom"]="2014";
3628
	#$conf["yearTo],字串,結束年份,預設為西元"gmdate('Y')"年.
3629
	#$conf["yearTo"]=gmdate('Y');
3630
	#$conf["Authors"],陣列,該套件的參與者,預設為array("Min-Jhin,Chen");
3631
	#$conf["Authors"]=array("Min-Jhin,Chen");
3632
	#$conf["searchPath"],陣列,要搜尋哪些地方的檔案要更新版權宣告年份,預設為使用中的本套件位置.
3633
	#$conf["searchPath"]=array("");
849 liveuser 3634
	#$conf["skipHiddenFolder"],字串,要略過隱藏的資料夾,預設為"true";反之為"false";
3635
	#$conf["skipHiddenFolder"]="true";
3636
	#$conf["includeHiddenFolder"],陣列,符合名稱的隱藏資料夾會存取,預設不指定;
3637
	#$conf["includeHiddenFolder"]=array("");
3638
	#$conf["excludeDirName"],陣列,哪些目錄名稱要忽略,預設有"free-lib"、"no-free-lib"、"composer".
3639
	#$conf["excludeDirName"]=array("free-lib","no-free-lib","composer");
3640
	#$conf["excludeMineType"],陣列,哪些檔案類型要忽略,預設有"image/*"、"video/*"、"audio/*"、"media/*"、"application/*".
3641
	#$conf["excludeMineType"]=array("image/*","video/*","audio/*","media/*","application/*");
3642
	#$conf["excludeSecondName"],陣列,哪些附檔名的檔案要忽略,預設有"log"、"csv"、"sql"、"js"、"css"、"html".
3643
	#$conf["excludeSecondName"]=array("log"、,"csv","sql","js","css","html");
3644
	#$conf["multiThread"],字串,是否要啟用多執行序,預設為"false",反之為"true".
3645
	#$conf["multiThread"]="false";
855 liveuser 3646
	#$conf["threadType"],字串,當"multiThread"參數為"true"時,要使用的threas類型,預設為"socket",其他可能有"proc".
3647
	#$conf["threadType"]="socket";
3648
	#$conf["socket"],字串,unix domain socket 的位置與名稱,預設為 qbpwcf_usock_path;
3649
	#$conf["socket"]=qbpwcf_usock_path;
849 liveuser 3650
	#$conf["log"],字串,log的檔案位置與名稱,預設不使用.
3651
	#$conf["log"]="";
842 liveuser 3652
	#參考資料:
3653
	#無.
3654
	#備註:
3655
	#無.
3656
	*/
3657
	public static function updateCopyRightYear(&$conf){
3658
 
3659
		#初始化要回傳的結果
3660
		$result=array();
3661
 
3662
		#取得當前執行的函數名稱
3663
		$result["function"]=__FUNCTION__;
3664
 
3665
		#如果沒有參數
3666
		if(func_num_args()==0){
3667
 
3668
			#設置執行失敗
3669
			$result["status"]="false";
3670
 
3671
			#設置執行錯誤訊息
3672
			$result["error"]="函數".$result["function"]."需要參數";
3673
 
3674
			#回傳結果
3675
			return $result;
3676
 
3677
			}#if end
3678
 
3679
		#取得參數
3680
		$result["argu"]=$conf;
3681
 
3682
		#如果 $conf 不為陣列
3683
		if(gettype($conf)!=="array"){
3684
 
3685
			#設置執行失敗
3686
			$result["status"]="false";
3687
 
3688
			#設置執行錯誤訊息
3689
			$result["error"][]="\$conf變數須為陣列形態";
3690
 
3691
			#如果傳入的參數為 null
3692
			if(is_null($conf)){
3693
 
3694
				#設置執行錯誤訊息
3695
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3696
 
3697
				}#if end
3698
 
3699
			#回傳結果
3700
			return $result;
3701
 
3702
			}#if end
3703
 
3704
		#函式說明:
3705
		#取得檔案路徑字串的路徑與檔案的名稱與檔案副檔名
3706
		#回傳的結果:
3707
		#$result["status"],執行是否正常,"true"正常,"false"代表不正常.
3708
		#$result["error"],錯誤訊息.
3709
		#$result["function"],當前執行的函式名稱.
3710
		#$result["filePath"],路徑字串.
3711
		#$result["fileName"],檔案名稱字串.
3712
		#$result["fileExtention"],檔案的副檔名.
3713
		#$result["fullFileName"],含副檔名的檔案名稱.
3714
		#$result["fullFilePathAndName"],完整的檔案路徑(含副檔名).
3715
		#必填參數:
3716
		#$conf["fileAddressAndName"],字串,檔案名稱與其路徑.
3717
		$conf["fileAccess::getFileAddressAndNameAndFileExtention"]["fileAddressAndName"]=__FILE__;
3718
		#可省略參數:
3719
		#無.
3720
		#參考資料:
3721
		#無.
3722
		#備註:
3723
		#無.
3724
		$getFileAddressAndNameAndFileExtention=fileAccess::getFileAddressAndNameAndFileExtention($conf["fileAccess::getFileAddressAndNameAndFileExtention"]);
3725
		unset($conf["fileAccess::getFileAddressAndNameAndFileExtention"]);
3726
 
3727
		#var_dump($getFileAddressAndNameAndFileExtention);exit;
3728
 
3729
		#如果執行失敗
3730
		if($getFileAddressAndNameAndFileExtention["status"]==="false"){
3731
 
3732
			#設置錯誤識別
3733
			$result["status"]="false";
3734
 
3735
			#設置錯誤訊息
3736
			$result["error"]=$getFileAddressAndNameAndFileExtention;
3737
 
3738
			#回傳結果
3739
			return $result;
3740
 
3741
			}#if end
3742
 
3743
		#初始化有異動的檔案清單
3744
		$result["content"]=array();
3745
 
3746
		#取得當前使用套件的路徑
849 liveuser 3747
		$libPath=$getFileAddressAndNameAndFileExtention["filePath"]."../";
842 liveuser 3748
 
849 liveuser 3749
		#函式說明:
3750
		#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
3751
		#回傳結果:
3752
		#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
3753
		#$result["function"],當前執行的函數.
3754
		#$result["error"],錯誤訊息陣列.
3755
		#$result["argu"],使用者參數.
3756
		#$result["changedPath"],處理完後回傳的目錄字串.
3757
		#$result["oriPath"],原始的路徑字串
3758
		#必填參數:
3759
		#$conf["dirStr"],字串,要處理的檔案目錄字串.
3760
		$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$libPath;
3761
		#可省略參數:
3762
		#無.
3763
		#參考資料:
3764
		#無.
3765
		#備註:
3766
		#考慮用realpath取代
3767
		$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
3768
		unset($conf["stringProcess::changeDirByDotDotSolidus"]);
3769
 
3770
		#如果執行失敗
3771
		if($changeDirByDotDotSolidus["status"]==="false"){
3772
 
3773
			#設置錯誤識別
3774
			$result["status"]="false";
3775
 
3776
			#設置錯誤訊息
3777
			$result["error"]=$changeDirByDotDotSolidus;
3778
 
3779
			#回傳結果
3780
			return $result;
3781
 
3782
			}#if end
3783
 
3784
		#取得直觀的絕對路徑
3785
		$libPath=$changeDirByDotDotSolidus["changedPath"];
3786
 
842 liveuser 3787
		#設置要取代的內容關鍵字陣列 - start
3788
 
3789
		$replaceFromArray=array();
3790
 
3791
		$replaceFromArray[]="        QBPWCF, Quick Build PHP website Component base on Fedora Linux.";
3792
 
3793
		$replaceFromArray[]="    Copyright (C) \${yearFrom}~\${yearTo} \${Authors}";
3794
 
3795
		$replaceFromArray[]="";
3796
 
3797
		$replaceFromArray[]="    This file is part of QBPWCF.";
3798
 
3799
		$replaceFromArray[]="";
3800
 
3801
		$replaceFromArray[]="    QBPWCF is free software: you can redistribute it and/or modify";
3802
 
3803
		$replaceFromArray[]="    it under the terms of the GNU General Public License as published by";
3804
 
3805
		$replaceFromArray[]="    the Free Software Foundation, either version 3 of the License, or";
3806
 
3807
		$replaceFromArray[]="    (at your option) any later version.";
3808
 
3809
		$replaceFromArray[]="";
3810
 
3811
		$replaceFromArray[]="    QBPWCF is distributed in the hope that it will be useful,";
3812
 
3813
		$replaceFromArray[]="    but WITHOUT ANY WARRANTY; without even the implied warranty of";
3814
 
3815
		$replaceFromArray[]="    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the";
3816
 
3817
		$replaceFromArray[]="    GNU General Public License for more details.";
3818
 
3819
		$replaceFromArray[]="";
3820
 
3821
		$replaceFromArray[]="    You should have received a copy of the GNU General Public License";
3822
 
3823
		$replaceFromArray[]="    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.";
3824
 
3825
		#設置要取代的內容關鍵字陣列 - end
3826
 
3827
		#函式說明:
3828
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
3829
		#回傳結果:
3830
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3831
		#$result["error"],執行不正常結束的錯訊息陣列.
3832
		#$result["simpleError"],簡單表示的錯誤訊息.
3833
		#$result["function"],當前執行的函式名稱.
3834
		#$result["argu"],設置給予的參數.
3835
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3836
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3837
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3838
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
3839
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
3840
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3841
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3842
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3843
		#必填參數:
3844
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3845
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3846
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3847
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3848
		#可省略參數:
3849
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3850
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
3851
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
3852
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
3853
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
3854
		#$conf["canBeEmptyString"]="false";
3855
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
3856
		#$conf["canNotBeEmpty"]=array();
3857
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
3858
		#$conf["canBeEmpty"]=array();
3859
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3860
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array();
3861
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
855 liveuser 3862
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("replaceFrom","yearFrom","yearTo","Authors","searchPath","skipHiddenFolder","includeHiddenFolder","excludeDirName","excludeMineType","excludeSecondName","multiThread","log","threadType","socket");
842 liveuser 3863
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
855 liveuser 3864
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","array","array","string","array","array","array","array","string","string","string","string");
842 liveuser 3865
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
855 liveuser 3866
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($replaceFromArray,"2014",gmdate("Y"),array("Min-Jhin,Chen"),array($libPath),"true",null,array("free-lib","non-free-lib","composer"),array("image/*","video/*","audio/*","media/*","application/*"),array("log","csv","sql","js","css","html"),"false",null,"socket",qbpwcf_usock_path);
842 liveuser 3867
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3868
		#$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmpty"]="true";
3869
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
3870
		#$conf["variableCheck::checkArguments"]["disallowAllSkipableVarIsEmptyArray"]="true";
3871
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
3872
		#$conf["disallowAllSkipableVarNotExist"]="";
3873
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3874
		#$conf["arrayCountEqualCheck"][]=array();
3875
		#參考資料:
3876
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3877
		#備註:
3878
		#無.
3879
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3880
		unset($conf["variableCheck::checkArguments"]);
3881
 
3882
		#如果執行失敗
3883
		if($checkArguments["status"]==="false"){
3884
 
3885
			#設置錯誤識別
3886
			$result["status"]="false";
3887
 
3888
			#設置錯誤訊息
3889
			$result["error"]=$checkArguments;
3890
 
3891
			#回傳結果
3892
			return $result;
3893
 
3894
			}#if end
3895
 
3896
		#如果檢查不通過
3897
		if($checkArguments["passed"]==="false"){
3898
 
3899
			#設置錯誤識別
3900
			$result["status"]="false";
3901
 
3902
			#設置錯誤訊息
3903
			$result["error"]=$checkArguments;
3904
 
3905
			#回傳結果
3906
			return $result;
3907
 
3908
			}#if end
3909
 
849 liveuser 3910
		#函式說明:
3911
		#使用 linux 的 uuid 指令來產生 uuid 字串
3912
		#回傳結果:
3913
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3914
		#$result["error"],錯誤訊息.
3915
		#$result["function"],當前執行的函式名稱.
3916
		#$result["content"],uuid.
3917
		#必填參數:
3918
		#無.
3919
		#可省略參數:
3920
		#無.
3921
		#參考資料:
3922
		#無.
3923
		#備註:
3924
		#無.
3925
		$uuid=cmd::uuid();
3926
 
3927
		#如果執行失敗
3928
		if($uuid["status"]==="false"){
3929
 
3930
			#debug
3931
			var_dump($uuid);
3932
 
3933
			#結束執行回傳代碼1給shell
3934
			exit(1);
3935
 
3936
			}#if end
3937
 
3938
		#取得 uuid
3939
		$uuid=$uuid["content"];
3940
 
842 liveuser 3941
		#針對 $conf["searchPath"] 的每個路徑
3942
		foreach($conf["searchPath"] as $path){
3943
 
3944
			#取得 $path 底下的所有檔案.
3945
			#函式說明:
3946
			#取得目錄底下的詳細資訊.
3947
			#回傳結果:
3948
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3949
			#$result["error"],錯誤訊息.
3950
			#$result["function"],當前執行的函數名稱.
3951
			#$result["size"],該清單的大小,單位為bytes.
3952
			#$result["dataCount"],該清單的長度.
3953
			#$result["content"],指定目錄底下的所有檔案資訊.
3954
			#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
3955
			#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.
3956
			#$result["content"][$i]["permission"],第$i個節點權限.
3957
			#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
3958
			#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
3959
			#$result["content"][$i]["bytes"],第$i個節點大小.
3960
			#$result["content"][$i]["date"],第$i個節點最後變更日期.
3961
			#$result["content"][$i]["time"],第$i個節點最後異動時間.
3962
			#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
3963
			#$result["content"][$i]["timezone"],第$i個節點的時區.
849 liveuser 3964
			#$result["content"][$i]["secondName"],第$i個節點為檔案時,若有附檔名,會記錄在這.
842 liveuser 3965
			#$result["content"][$i]["name"],第$i個節點的名稱.
849 liveuser 3966
			#$result["content"][$i]["mimeType"],第$i個節點為檔案且可以讀取時,會有 mime type 可取得.
842 liveuser 3967
			#必填參數:
3968
			#$conf["path"],字串,要檢視的路徑,若非"/"結尾,會自動補上.
3969
			$conf["fileAccess::ls"]["path"]=$path;
3970
			#可省略參數:
3971
			#無.
3972
			#參考資料:
3973
			#https://www.businessweekly.com.tw/careers/Blog/14307
3974
			#備註:
3975
			#無.
3976
			$ls=fileAccess::ls($conf["fileAccess::ls"]);
3977
			unset($conf["fileAccess::ls"]);
3978
 
3979
			#如果執行失敗
3980
			if($ls["status"]==="false"){
3981
 
3982
				#設置錯誤識別
3983
				$result["status"]="false";
3984
 
3985
				#設置錯誤訊息
3986
				$result["error"]=$ls;
3987
 
3988
				#回傳結果
3989
				return $result;
3990
 
3991
				}#if end
3992
 
3993
			#如果沒資料
3994
			if($ls["dataCount"]===0){
3995
 
3996
				#跳過
3997
				continue;
3998
 
3999
				}#if end
4000
 
4001
			#針對每個節點
4002
			foreach($ls["content"] as $node){
4003
 
4004
				#取得節點的路徑與名稱
849 liveuser 4005
				$NodePathAndName=$ls["path"].$node["name"];
842 liveuser 4006
 
4007
				#儲存該節點需要取代的行號相關資訊
4008
				$replacedInfo=array();
4009
 
4010
				#預設該節點檔案不需要更新
4011
				$shouldReplace="false";
4012
 
848 liveuser 4013
				#debug
4014
				#var_dump(__LINE__,$node);
842 liveuser 4015
 
4016
				#如果是資料夾
848 liveuser 4017
				if($node["nType"]==="d"){
842 liveuser 4018
 
849 liveuser 4019
					#如果要忽略隱藏資料夾
4020
					if($conf["skipHiddenFolder"]==="true"){
1 liveuser 4021
 
849 liveuser 4022
						#如果開頭為 "."
4023
						if(strpos($node["name"],".")===0){
4024
 
4025
							#如果有設定要包含特定的隱藏目錄
4026
							if(isset($conf["includeHiddenFolder"])){
4027
 
4028
								#如果不是需要的特定隱藏目錄
4029
								if(!(in_array($node["name"],$conf["includeHiddenFolder"]))){
4030
 
4031
									#跳過
4032
									continue;
4033
 
4034
									}#if end
4035
 
4036
								}#if end
4037
 
4038
							#反之
4039
							else{
4040
 
4041
								#跳過
4042
								continue;
4043
 
4044
								}#else end
4045
 
4046
							}#if end
842 liveuser 4047
 
849 liveuser 4048
						}#if end
4049
 
4050
					#如果是要跳過的資料夾名稱
4051
					if(in_array($node["name"],$conf["excludeDirName"])){
842 liveuser 4052
 
849 liveuser 4053
						#跳過
4054
						continue;
842 liveuser 4055
 
849 liveuser 4056
						}#if end
4057
 
4058
					#跳過 
4059
					#continue;
4060
 
4061
					#如果為單執行序
4062
					if($conf["multiThread"]==="false"){
4063
 
4064
						#繼承本函式參數
4065
						$conf["self::updateCopyRightYear"]=$conf;
842 liveuser 4066
 
849 liveuser 4067
						#置換要執行的路徑
4068
						$conf["self::updateCopyRightYear"]["searchPath"]=array($NodePathAndName);
842 liveuser 4069
 
849 liveuser 4070
						#遞迴呼叫
4071
						$updateCopyRightYear=self::updateCopyRightYear($conf["self::updateCopyRightYear"]);
4072
 
4073
						#移除參數,避免出錯.
4074
						unset($conf["self::updateCopyRightYear"]);
4075
 
4076
						#如果執行失敗
4077
						if($updateCopyRightYear["status"]==="false"){
4078
 
4079
							#設置錯誤識別
4080
							$result["status"]="false";
4081
 
4082
							#設置錯誤訊息
4083
							$result["error"]=$updateCopyRightYear;
4084
 
4085
							#回傳結果
4086
							return $result;
4087
 
4088
							}#if end
4089
 
4090
						#記錄有掃描的資料夾路徑與名稱 
4091
						$result["scannedFile"][]=$NodePathAndName;
4092
 
4093
						#合併 content - start
4094
 
4095
						#函式說明:
4096
						#將多個一維陣列串聯起來,key從0開始排序.
4097
						#回傳的結果:
4098
						#$result["status"],"true"表執行正常,"false"代表執行不正常.
4099
						#$result["error"],錯誤訊息陣列.
4100
						#$result["function"],當前執行的函數.
4101
						#$result["content"],合併好的一維陣列.
4102
						#必填參數
4103
						#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
4104
						$conf["arrays::mergeArray"]["inputArray"]=array($result["content"],$updateCopyRightYear["content"]);
4105
						#可省略參數:
4106
						#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
4107
						#$conf["allowRepeat"]="true";
4108
						#參考資料:
4109
						#無.
4110
						#備註:
4111
						#無.
4112
						$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
4113
						unset($conf["arrays::mergeArray"]);
4114
 
4115
						#如果執行失敗
4116
						if($mergeArray["status"]==="false"){
4117
 
4118
							#設置錯誤識別
4119
							$result["status"]="false";
4120
 
4121
							#設置錯誤訊息
4122
							$result["error"]=$mergeArray;
4123
 
4124
							#回傳結果
4125
							return $result;
4126
 
4127
							}#if end
4128
 
4129
						#取得合併好的有異動檔案結果
4130
						$result["content"]=$mergeArray["content"];
4131
 
4132
						#合併 content - end
4133
 
4134
						#合併 scannedFile - start
4135
 
4136
						if(isset($updateCopyRightYear["scannedFile"])){
4137
 
4138
							#函式說明:
4139
							#將多個一維陣列串聯起來,key從0開始排序.
4140
							#回傳的結果:
4141
							#$result["status"],"true"表執行正常,"false"代表執行不正常.
4142
							#$result["error"],錯誤訊息陣列.
4143
							#$result["function"],當前執行的函數.
4144
							#$result["content"],合併好的一維陣列.
4145
							#必填參數
4146
							#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
4147
							$conf["arrays::mergeArray"]["inputArray"]=array($result["scannedFile"],$updateCopyRightYear["scannedFile"]);
4148
							#可省略參數:
4149
							#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
4150
							#$conf["allowRepeat"]="true";
4151
							#參考資料:
4152
							#無.
4153
							#備註:
4154
							#無.
4155
							$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
4156
							unset($conf["arrays::mergeArray"]);
4157
 
4158
							#如果執行失敗
4159
							if($mergeArray["status"]==="false"){
4160
 
4161
								#設置錯誤識別
4162
								$result["status"]="false";
4163
 
4164
								#設置錯誤訊息
4165
								$result["error"]=$mergeArray;
4166
 
4167
								#回傳結果
4168
								return $result;
4169
 
4170
								}#if end
4171
 
4172
							#取得合併好的有異動檔案結果
4173
							$result["scannedFile"]=$mergeArray["content"];
4174
 
4175
							}#if end
4176
 
4177
						#合併 scannedFile - end
842 liveuser 4178
 
4179
						}#if end
4180
 
849 liveuser 4181
					#反之為多執行程
4182
					else{
842 liveuser 4183
 
849 liveuser 4184
						/* 
4185
 
4186
						預想的程式 - start
842 liveuser 4187
 
849 liveuser 4188
						#繼承本函式參數
4189
						$conf["self::updateCopyRightYear"]=$conf;
842 liveuser 4190
 
849 liveuser 4191
						#置換要執行的路徑
4192
						$conf["self::updateCopyRightYear"]["searchPath"]=array($NodePathAndName);
842 liveuser 4193
 
849 liveuser 4194
						#遞迴呼叫
4195
						$updateCopyRightYear=self::updateCopyRightYear($conf["self::updateCopyRightYear"]);
4196
 
4197
						預想的程式 - end
4198
 
4199
						*/
4200
 
4201
						#要執行的php程式內容
4202
						$cmdString=<<<'PHP'
4203
/*
4204
 
4205
        QBPWCF, Quick Build PHP website Component base on Fedora Linux.
4206
    Copyright (C) 2014~2025 Min-Jhin,Chen
4207
 
4208
    This file is part of QBPWCF.
4209
 
4210
    QBPWCF is free software: you can redistribute it and/or modify
4211
    it under the terms of the GNU General Public License as published by
4212
    the Free Software Foundation, either version 3 of the License, or
4213
    (at your option) any later version.
4214
 
4215
    QBPWCF is distributed in the hope that it will be useful,
4216
    but WITHOUT ANY WARRANTY; without even the implied warranty of
4217
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4218
    GNU General Public License for more details.
4219
 
4220
    You should have received a copy of the GNU General Public License
4221
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
4222
 
4223
*/
4224
 
4225
#使用命名空間qbpwcf
4226
namespace qbpwcf;
4227
 
4228
#匯入套件
4229
require_once("qbpwcf/allInOne.php");
4230
 
4231
#建議的log位置
4232
$logFile=$_SERVER["DOCUMENT_ROOT"].$_SERVER["PHP_SELF"].".log";
4233
 
4234
PHP;
4235
 
4236
						#要執行的php程式內容,繼承本函式參數
4237
						$cmdString=$cmdString.PHP_EOL."\$conf=(array)(json_decode(urldecode(base64_decode(\"".base64_encode(urlencode(json_encode($conf)))."\"))));";
4238
 
4239
						#要執行的php程式內容,置換要執行的路徑
4240
						$cmdString=$cmdString.PHP_EOL."\$conf[\"searchPath\"]=array(\"".$NodePathAndName."\");";
4241
 
4242
						#要執行的php程式內容
4243
						$cmdString=$cmdString.PHP_EOL.<<<'PHP'
4244
 
4245
#函式說明:
4246
#更新程式檔案開頭版權宣告的年份
4247
#回傳結果:
4248
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4249
#$reuslt["error"],執行不正常結束的錯訊息陣列.
4250
#$result["function"],當前執行的函式名稱.
4251
#$result["content"],有更新的檔案清單,其元素有被取代的檔案路徑與名稱跟replacedInfo,其中replacedInfo為陣列,其key為要變動的行號(從0開始算),其數值有"from"代表要被取代的原始內容,"to"代表要置換成的新內容.
4252
#$result["scannedFile"],陣列,有檢查過的檔案清單其完整路徑與檔案名稱.
4253
#必填參數:
4254
#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4255
#$conf["fileArgu"]=__FILE__;
4256
#可省略參數:
4257
#$conf["replaceFrom"],陣列,目標關鍵字,每個元素代表一行的內容,預設內容可參照本檔案開頭的版權宣告文字.
4258
#$conf["replaceFrom"]=array();
4259
#$conf["yearFrom],字串,起始年份,預設為西元"2014"年.
4260
#$conf["yearFrom"]="2014";
4261
#$conf["yearTo],字串,結束年份,預設為西元"gmdate('Y')"年.
4262
#$conf["yearTo"]=gmdate('Y');
4263
#$conf["Authors"],陣列,該套件的參與者,預設為array("Min-Jhin,Chen");
4264
#$conf["Authors"]=array("Min-Jhin,Chen");
4265
#$conf["searchPath"],陣列,要搜尋哪些地方的檔案要更新版權宣告年份,預設為使用中的本套件位置.
4266
#$conf["searchPath"]=array("");
4267
#$conf["skipHiddenFolder"],字串,要略過隱藏的資料夾,預設為"true";反之為"false";
4268
#$conf["skipHiddenFolder"]="true";
4269
#$conf["includeHiddenFolder"],陣列,符合名稱的隱藏資料夾會存取,預設不指定;
4270
#$conf["includeHiddenFolder"]=array("");
4271
#$conf["excludeDirName"],陣列,哪些目錄名稱要忽略,預設有"free-lib"、"no-free-lib"、"composer".
4272
#$conf["excludeDirName"]=array("free-lib","no-free-lib","composer");
4273
#$conf["excludeMineType"],陣列,哪些檔案類型要忽略,預設有"image/*"、"video/*"、"audio/*"、"media/*"、"application/*".
4274
#$conf["excludeMineType"]=array("image/*","video/*","audio/*","media/*","application/*");
4275
#$conf["excludeSecondName"],陣列,哪些附檔名的檔案要忽略,預設有"log"、"csv"、"sql"、"js"、"css"、"html".
4276
#$conf["excludeSecondName"]=array("log"、,"csv","sql","js","css","html");
4277
#$conf["multiThread"],字串,是否要啟用多執行序,預設為"false",反之為"true".
4278
#$conf["multiThread"]="false";
4279
#參考資料:
4280
#無.
4281
#備註:
4282
#無.
4283
$updateCopyRightYear=phpLib::updateCopyRightYear($conf);
4284
unset($conf);
4285
 
4286
#輸出json結果
4287
echo json_encode($updateCopyRightYear);
4288
PHP;
842 liveuser 4289
 
855 liveuser 4290
						#設置多執行序的類型
4291
						$threadType=$conf["threadType"];
842 liveuser 4292
 
855 liveuser 4293
						#判斷多執行序的類型
4294
						switch($threadType){
849 liveuser 4295
 
855 liveuser 4296
							#若是直接用 proc
4297
							case "proc":
849 liveuser 4298
 
855 liveuser 4299
								#函式說明:
4300
								#透過proc來多執行序運作.
4301
								#回傳結果:
4302
								#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4303
								#$reuslt["error"],執行不正常結束的錯訊息陣列.
4304
								#$result["function"],當前執行的函式名稱.
4305
								#$result["argu"],使用的參數.
4306
								#$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
4307
								#必填參數:
4308
								#$conf["cmds"],字串陣列,每個元素代表要執行的指令與參數.
4309
								$conf["threads::proc"]["cmds"]=array("php -r ".escapeshellarg($cmdString));
4310
								#可省略參數:
4311
								#$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
4312
								$conf["threads::proc"]["wait"]="false";
4313
								#$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
4314
								$conf["threads::proc"]["workingDir"]=array($NodePathAndName);
4315
								#$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
4316
								#$conf["envs"]=array(array("key"=>"value"));
4317
								#$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
4318
								#$conf["threads::proc"]["executeBy"]=array("php");
4319
								#參考資料:
4320
								#https://www.php.net/manual/en/function.proc-open.php
4321
								#https://www.php.net/manual/en/function.proc-get-status.php
4322
								#備註:
4323
								#無.
4324
								$proc=threads::proc($conf["threads::proc"]);
4325
								unset($conf["threads::proc"]);
4326
 
4327
								#如果執行失敗
4328
								if($proc["status"]==="false"){
4329
 
4330
									#設置錯誤識別
4331
									$result["status"]="false";
4332
 
4333
									#設置錯誤訊息
4334
									$result["error"]=$proc;
4335
 
4336
									#回傳結果
4337
									return $result;
4338
 
4339
									}#if end
4340
 
4341
								#如果有開啟 log
4342
								if(isset($conf["log"])){
4343
 
4344
									#函式說明:
4345
									#撰寫log
4346
									#回傳結果:
4347
									#$result["status"],狀態,"true"或"false".
4348
									#$result["error"],錯誤訊息陣列.
4349
									#$result["function"],當前函式的名稱.
4350
									#$result["argu"],使用的參數.
4351
									#必填參數:
4352
									#$conf["path"],字串,log檔案的路徑與名稱.
4353
									$conf["logs::record"]["path"]=$conf["log"];
4354
									#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
4355
									$conf["logs::record"]["content"]=$proc;
4356
									#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4357
									$conf["logs::record"]["fileArgu"]=$conf["fileArgu"];
4358
									#可省略參數:
4359
									#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
4360
									#$conf["rewrite"]="false";
4361
									#參考資料:
4362
									#無.
4363
									#備註:
4364
									#無.
4365
									$record=logs::record($conf["logs::record"]);
4366
									unset($conf["logs::record"]);
4367
 
4368
									#如果出錯
4369
									if($record["status"]==="false"){
4370
 
4371
										#設置錯誤識別
4372
										$result["status"]="false";
4373
 
4374
										#設置錯誤訊息
4375
										$result["error"]=$record;
4376
 
4377
										#印出json
4378
										echo json_encode($result);
4379
 
4380
										#結束執行,回傳1給shell,代表異常,
4381
										exit(1);
4382
 
4383
										}#if end
4384
 
4385
									}#if end
4386
 
4387
								#儲存要執行的程序
4388
								$procs[]=$proc;
849 liveuser 4389
 
855 liveuser 4390
								#結束 switch
4391
								break;
4392
 
4393
							#如果是要透過 socket 來執行
4394
							case "socket":
849 liveuser 4395
 
855 liveuser 4396
								#函式說明:
4397
								#透過 unix socket 來多執行序運作.
4398
								#回傳結果:
4399
								#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4400
								#$reuslt["error"],執行不正常結束的錯訊息陣列.
4401
								#$result["function"],當前執行的函式名稱.
4402
								#$result["argu"],使用的參數.
4403
								#$result["content"],陣列,每個元素為cmds參數中個別元素其指令傳送後得到的uuid,可透過sock::getProcInfo來查詢結果.
4404
								#必填參數:
4405
								#$conf["cmds"],字串陣列,每個元素代表要執行的指令與參數.
4406
								$conf["threads::socket"]["cmds"]=array("php -r ".escapeshellarg($cmdString));
4407
								#可省略參數:
4408
								#$conf["sock"],字串,要連線的 usr/bin/qbpwcf-sock.php 所產生的 unix domain socket 路徑與名稱,預設為 qbpwcf_usock_path.
4409
								$conf["threads::socket"]["sock"]=$conf["socket"];
4410
								#參考資料:
4411
								#無
4412
								#備註:
4413
								#需要透過sock::unixDomainSockServer來運行.
4414
								$socket=threads::socket($conf["threads::socket"]);
4415
								unset($conf["threads::socket"]);
4416
 
4417
								#如果執行失敗
4418
								if($socket["status"]==="false"){
4419
 
4420
									#設置錯誤識別
4421
									$result["status"]="false";
4422
 
4423
									#設置錯誤訊息
4424
									$result["error"]=$proc;
4425
 
4426
									#回傳結果
4427
									return $result;
4428
 
4429
									}#if end
4430
 
4431
								#如果有開啟 log
4432
								if(isset($conf["log"])){
4433
 
4434
									#函式說明:
4435
									#撰寫log
4436
									#回傳結果:
4437
									#$result["status"],狀態,"true"或"false".
4438
									#$result["error"],錯誤訊息陣列.
4439
									#$result["function"],當前函式的名稱.
4440
									#$result["argu"],使用的參數.
4441
									#必填參數:
4442
									#$conf["path"],字串,log檔案的路徑與名稱.
4443
									$conf["logs::record"]["path"]=$conf["log"];
4444
									#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
4445
									$conf["logs::record"]["content"]=$socket;
4446
									#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4447
									$conf["logs::record"]["fileArgu"]=$conf["fileArgu"];
4448
									#可省略參數:
4449
									#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
4450
									#$conf["rewrite"]="false";
4451
									#參考資料:
4452
									#無.
4453
									#備註:
4454
									#無.
4455
									$record=logs::record($conf["logs::record"]);
4456
									unset($conf["logs::record"]);
4457
 
4458
									#如果出錯
4459
									if($record["status"]==="false"){
4460
 
4461
										#設置錯誤識別
4462
										$result["status"]="false";
4463
 
4464
										#設置錯誤訊息
4465
										$result["error"]=$record;
4466
 
4467
										#印出json
4468
										echo json_encode($result);
4469
 
4470
										#結束執行,回傳1給shell,代表異常,
4471
										exit(1);
4472
 
4473
										}#if end
4474
 
4475
									}#if end
4476
 
4477
								#儲存要執行的程序
4478
								$procs[]=$socket;
4479
 
4480
								#結束 switch
4481
								break;
4482
 
4483
							#其他類型
4484
							default:
4485
 
849 liveuser 4486
								#設置錯誤識別
4487
								$result["status"]="false";
4488
 
4489
								#設置錯誤訊息
855 liveuser 4490
								$result["error"][]="not supported multi threads type ".$threadType;
849 liveuser 4491
 
4492
								#印出json
4493
								echo json_encode($result);
4494
 
4495
								#結束執行,回傳1給shell,代表異常,
4496
								exit(1);
4497
 
855 liveuser 4498
							}#switch end
849 liveuser 4499
 
4500
						}#else end
842 liveuser 4501
 
4502
					}#if end
4503
 
4504
				#反之如果是檔案
4505
				else if($node["nType"]==="-"){
4506
 
849 liveuser 4507
					#針對每個要忽略的 mime type
4508
					foreach($conf["excludeMineType"] as $mimeType){
4509
 
4510
						#取得 "/*" 的位置
4511
						$positionOfSlashStar=strpos($mimeType,"/*");
4512
 
4513
						#如果是含有 "/*" 的廣義 mime 類型
4514
						if($positionOfSlashStar!==false){
4515
 
4516
							#取得 廣義類型的內容
4517
							$ignoredWileMimeTypeWithSlash=substr($mimeType,0,$positionOfSlashStar+1);
4518
 
4519
							#debug
4520
							#var_dump(__LINE__,$ignoredWileMimeTypeWithSlash);
4521
 
4522
							#如果是要忽略的 廣義類型內容
4523
							if(strpos($node["mimeType"],$ignoredWileMimeTypeWithSlash)===0){
4524
 
4525
								#跳過之
4526
								continue 2;
4527
 
4528
								}#if end
4529
 
4530
							}#if end
842 liveuser 4531
 
849 liveuser 4532
						#反之
4533
						else{
4534
 
4535
							#如果是要忽略的 mime 類型
4536
							if($mimeType===$node["mimeType"]){
4537
 
4538
								#跳過之
4539
								continue 2;
4540
 
4541
								}#if end
4542
 
4543
							}#else end
842 liveuser 4544
 
849 liveuser 4545
						}#foreach end
842 liveuser 4546
 
849 liveuser 4547
					#如果有副檔案名存在
4548
					if(isset($node["secondName"])){
4549
 
4550
						#如果是要忽略的附檔名
4551
						if(in_array($node["secondName"],$conf["excludeSecondName"])){
4552
 
4553
							#跳過檔案
842 liveuser 4554
							continue;
4555
 
4556
							}#if end
4557
 
4558
						}#if end
849 liveuser 4559
 
4560
					#debug
4561
					#var_dump(__LINE__,$NodePathAndName,$node["mimeType"]);
842 liveuser 4562
 
4563
					#記錄有掃描的檔案路徑與名稱 
4564
					$result["scannedFile"][]=$NodePathAndName;
4565
 
4566
					#取得檔案的內容
4567
					#函式說明:
4568
					#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
4569
					#回傳的變數說明:
4570
					#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
4571
					#$result["error"],錯誤訊息提示.
4572
					#$result["warning"],警告訊息.
4573
					#$result["function"],當前執行的函數名稱.
4574
					#$result["fileContent"],爲檔案的內容陣列.
4575
					#$result["lineCount"],爲檔案內容總共的行數.
4576
					#$result["fullContent"],為檔案的完整內容.
4577
					#$result["base64data"],為檔案的base64內容.
4578
					#$result["mimeType"],為檔案的mime type.
4579
					#必填參數:
4580
					#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
4581
					$conf["fileAccess::getFileContent"]["filePositionAndName"]=$NodePathAndName;
4582
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4583
					$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
4584
					#可省略參數:
4585
					#$conf["web"],是要取得網路上的檔案則為"true";反之預設為"false".
4586
					#$conf["web"]="true";
4587
					#$conf["createIfnotExist"],字串,預設為"false"代表檔案不存在也不需要建立;反之為"true".
4588
					#$conf["createIfnotExist"]="false";
4589
					#$conf["autoDeleteSpaceOnEachLineStart"],字串,預設為"false",不做額外處理;反之為"true"
4590
					#$conf["autoDeleteSpaceOnEachLineStart"]="false";
4591
					#參考資料:
4592
					#file(),取得檔案內容的行數.
4593
					#file=>http:#php.net/manual/en/function.file.php
4594
					#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
4595
					#filesize=>http://php.net/manual/en/function.filesize.php
4596
					#參考資料:
4597
					#無.
4598
					#備註:
4599
					#無.
4600
					$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
4601
					unset($conf["fileAccess::getFileContent"]);
4602
 
4603
					#如果執行失敗
4604
					if($getFileContent["status"]==="false"){
4605
 
4606
						#設置錯誤識別
4607
						$result["status"]="false";
4608
 
4609
						#設置錯誤訊息
4610
						$result["error"]=$getFileContent;
4611
 
4612
						#回傳結果
4613
						return $result;
4614
 
4615
						}#if end
4616
 
4617
					#關鍵字行搜尋的索引預設數值為0
4618
					$keyWordLineIndex=0;
4619
 
4620
					#針對檔案每行原始內容
4621
					for($oriLineContentIndex=0;$oriLineContentIndex<$getFileContent["lineCount"];$oriLineContentIndex++){
4622
 
4623
						#取得原始內容行
4624
						$oriLineContent=$getFileContent["fileContent"][$oriLineContentIndex];
4625
 
4626
						#預設調整後的原始內容跟原本一樣
4627
						$modifiedOriLineContent=$oriLineContent;
4628
 
849 liveuser 4629
						#如果要log
4630
						if(isset($conf["log"])){
4631
 
842 liveuser 4632
							#提示正在比對哪個檔案的第幾行
849 liveuser 4633
							$log="比對 檔案(".$path."/".$node["name"].") 的第 ".($oriLineContentIndex+1)." 行...".PHP_EOL;
842 liveuser 4634
 
4635
							#提示原始內容
849 liveuser 4636
							$log=$log."原始內容為:".PHP_EOL;
842 liveuser 4637
 
4638
							#印出原始內容
849 liveuser 4639
							$log=$log.$oriLineContent.PHP_EOL;
4640
 
4641
							#log的路徑與名稱
4642
							$path="/tmp/".basename($conf["log"]).":".$uuid.":".$node["name"].".log";
842 liveuser 4643
 
849 liveuser 4644
							#函式說明:
4645
							#撰寫log
4646
							#回傳結果:
4647
							#$result["status"],狀態,"true"或"false".
4648
							#$result["error"],錯誤訊息陣列.
4649
							#$result["function"],當前函式的名稱.
4650
							#$result["argu"],使用的參數.
4651
							#必填參數:
4652
							#$conf["path"],字串,log檔案的路徑與名稱.
4653
							$conf["logs::record"]["path"]=$path;
4654
							#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
4655
							$conf["logs::record"]["content"]=$log;
4656
							#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4657
							$conf["logs::record"]["fileArgu"]=__FILE__;
4658
							#可省略參數:
4659
							#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
4660
							#$conf["rewrite"]="false";
4661
							#參考資料:
4662
							#無.
4663
							#備註:
4664
							#無.
851 liveuser 4665
							$record=logs::record($conf["logs::record"]);
849 liveuser 4666
							unset($conf["logs::record"]);
4667
 
4668
							#如果出錯
4669
							if($record["status"]==="false"){
4670
 
4671
								#設置錯誤識別
4672
								$result["status"]="false";
4673
 
4674
								#設置錯誤訊息
4675
								$result["error"]=$getFileContent;
4676
 
4677
								#回傳結果
4678
								return $result;
4679
 
4680
								}#if end
4681
 
842 liveuser 4682
							}#if end
4683
 
4684
						#無窮迴圈
4685
						while(true){
4686
 
4687
							#嘗試移除開頭的 空格 跟 \t
4688
 
4689
							#函式說明:
4690
							#取得符合多個特定字首與字尾的字串
4691
							#回傳結果:
4692
							#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4693
							#$result["function"],當前執行的函數名稱.
4694
							#$result["error"],錯誤訊息陣列.
4695
							#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4696
							#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4697
							#$result["returnString"],爲符合字首字、尾條件的字串內容.
4698
							#$result["meetConditions"],為符合的條件,會是$conf["keyWord"]中的其中一個元素.
4699
							#$result["argu"],使用的參數.
4700
							#必填參數:
4701
							#$conf["checkString"],字串,要檢查的字串.
848 liveuser 4702
							$conf["search::getMeetMultiConditionsString"]["checkString"]=$modifiedOriLineContent;
842 liveuser 4703
							#$conf["keyWord"],字串陣列,用來檢查字首、字尾應該要有哪些字串之一,每個元素代表一個可能的條件,key為front者代表開頭的關鍵字,key為tail為代表結尾的官關鍵字.
848 liveuser 4704
							$conf["search::getMeetMultiConditionsString"]["keyWord"]=array(array("front"=>" "),array("front"=>"\t"));
842 liveuser 4705
							#可省略參數:
4706
							#無.
4707
							#參考資料:
4708
							#無.
4709
							#備註:
4710
							#無.
4711
							$getMeetMultiConditionsString=search::getMeetMultiConditionsString($conf["search::getMeetMultiConditionsString"]);
4712
							unset($conf["search::getMeetMultiConditionsString"]);
4713
 
4714
							#debug
848 liveuser 4715
							#var_dump(__LINE__,$getMeetMultiConditionsString);
842 liveuser 4716
 
4717
							#如果執行失敗
4718
							if($getMeetMultiConditionsString["status"]==="false"){
4719
 
4720
								#設置錯誤識別
4721
								$result["status"]="false";
4722
 
4723
								#設置錯誤訊息
4724
								$result["error"]=$getMeetMultiConditionsString;
4725
 
4726
								#回傳結果
4727
								return $result;
4728
 
4729
								}#if end
4730
 
4731
							#如果有關鍵字存在
4732
							if($getMeetMultiConditionsString["founded"]==="true"){
4733
 
848 liveuser 4734
								#取得已經移開頭空格跟\t後的內容
4735
								$modifiedOriLineContent=$getMeetMultiConditionsString["content"];
842 liveuser 4736
 
848 liveuser 4737
								#繼續檢查
4738
								continue;
4739
 
842 liveuser 4740
								}#if end
4741
 
4742
							#到這表代表已經移除開頭的 空格 跟 \t
4743
 
4744
							#結束 while
4745
							break;
4746
 
4747
							}#while end
4748
 
4749
						#針對每個關鍵字
4750
						for(;$keyWordLineIndex<count($conf["replaceFrom"]);$keyWordLineIndex++){
4751
 
4752
							#取得關鍵字行的內容
4753
							$keyWordLine=$conf["replaceFrom"][$keyWordLineIndex];
4754
 
849 liveuser 4755
							#如果要log
4756
							if(isset($conf["log"])){
842 liveuser 4757
 
4758
								#提示期望的內容格式
849 liveuser 4759
								$log="期望的第 ".($keyWordLineIndex+1)." 個行內容格式為:".PHP_EOL;
842 liveuser 4760
 
4761
								#提示期望的內容
849 liveuser 4762
								$log=$log.$keyWordLine.PHP_EOL;
842 liveuser 4763
 
849 liveuser 4764
								#log的路徑與名稱
4765
								$path="/tmp/".basename($conf["log"]).":".$uuid.":".$node["name"].".log";
4766
 
4767
								#函式說明:
4768
								#撰寫log
4769
								#回傳結果:
4770
								#$result["status"],狀態,"true"或"false".
4771
								#$result["error"],錯誤訊息陣列.
4772
								#$result["function"],當前函式的名稱.
4773
								#$result["argu"],使用的參數.
4774
								#必填參數:
4775
								#$conf["path"],字串,log檔案的路徑與名稱.
4776
								$conf["logs::record"]["path"]=$path;
4777
								#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
4778
								$conf["logs::record"]["content"]=$log;
4779
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4780
								$conf["logs::record"]["fileArgu"]=__FILE__;
4781
								#可省略參數:
4782
								#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
4783
								#$conf["rewrite"]="false";
4784
								#參考資料:
4785
								#無.
4786
								#備註:
4787
								#無.
851 liveuser 4788
								$record=logs::record($conf["logs::record"]);
849 liveuser 4789
								unset($conf["logs::record"]);
4790
 
4791
								#如果出錯
4792
								if($record["status"]==="false"){
4793
 
4794
									#設置錯誤識別
4795
									$result["status"]="false";
4796
 
4797
									#設置錯誤訊息
4798
									$result["error"]=$getFileContent;
4799
 
4800
									#回傳結果
4801
									return $result;
4802
 
4803
									}#if end
4804
 
842 liveuser 4805
								}#if end
4806
 
4807
							#調整過的關鍵字內容行預設跟原始關鍵行內容一樣
4808
							$modifiedKeyWordLine=$keyWordLine;
848 liveuser 4809
 
849 liveuser 4810
							#初始化關鍵字前面的內容(可能有為多個空格或tab)
4811
							$keyWordContentOfHead="";
4812
 
842 liveuser 4813
							#無窮迴圈
4814
							while(true){
4815
 
4816
								#嘗試剔除開頭的 空格 跟 "\t"
4817
 
4818
								#函式說明:
4819
								#取得符合多個特定字首與字尾的字串
4820
								#回傳結果:
4821
								#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4822
								#$result["function"],當前執行的函數名稱.
4823
								#$result["error"],錯誤訊息陣列.
4824
								#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4825
								#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4826
								#$result["returnString"],爲符合字首字、尾條件的字串內容.
4827
								#$result["meetConditions"],為符合的條件,會是$conf["keyWord"]中的其中一個元素.
4828
								#$result["argu"],使用的參數.
4829
								#必填參數:
4830
								#$conf["checkString"],字串,要檢查的字串.
848 liveuser 4831
								$conf["search::getMeetMultiConditionsString"]["checkString"]=$modifiedKeyWordLine;
842 liveuser 4832
								#$conf["keyWord"],字串陣列,用來檢查字首、字尾應該要有哪些字串之一,每個元素代表一個可能的條件,key為front者代表開頭的關鍵字,key為tail為代表結尾的官關鍵字.
848 liveuser 4833
								$conf["search::getMeetMultiConditionsString"]["keyWord"]=array(array("front"=>" "),array("front"=>"\t"));
842 liveuser 4834
								#可省略參數:
4835
								#無.
4836
								#參考資料:
4837
								#無.
4838
								#備註:
4839
								#無.
4840
								$getMeetMultiConditionsString=search::getMeetMultiConditionsString($conf["search::getMeetMultiConditionsString"]);
4841
								unset($conf["search::getMeetMultiConditionsString"]);
4842
 
4843
								#debug
848 liveuser 4844
								#var_dump(__LINE__,$getMeetMultiConditionsString);
842 liveuser 4845
 
4846
								#如果執行失敗
4847
								if($getMeetMultiConditionsString["status"]==="false"){
4848
 
4849
									#設置錯誤識別
4850
									$result["status"]="false";
4851
 
4852
									#設置錯誤訊息
4853
									$result["error"]=$getMeetMultiConditionsString;
4854
 
4855
									#回傳結果
4856
									return $result;
4857
 
4858
									}#if end
4859
 
4860
								#如果有關鍵字存在
4861
								if($getMeetMultiConditionsString["founded"]==="true"){
4862
 
848 liveuser 4863
									#取得移除開頭 空格 跟 \t 後的內容
4864
									$modifiedKeyWordLine=$getMeetMultiConditionsString["content"];
842 liveuser 4865
 
849 liveuser 4866
									#取得關鍵字前面的內容
4867
									$keyWordContentOfHead=substr($keyWordLine,0,strlen($keyWordLine)-strlen($modifiedKeyWordLine));
4868
 
848 liveuser 4869
									#繼續檢查
4870
									continue;
842 liveuser 4871
 
4872
									}#if end
4873
 
4874
								#到這表代表已經移除開頭的 空格 跟 \t
4875
 
4876
								#結束 while
4877
								break;
4878
 
4879
								}#while end
4880
 
848 liveuser 4881
							#debug
4882
							#var_dump(__LINE__,$modifiedOriLineContent,$modifiedKeyWordLine);
4883
 
842 liveuser 4884
							#預設分段的關鍵字為空
4885
							$keyWordPart=array();
4886
 
4887
							#預設該行的變數為空
4888
							$varPart=array();
4889
 
4890
							#關鍵字行的結構順序
4891
							$OderOfPartInLine=array();
4892
 
4893
							#無窮迴圈
4894
							while(true){
4895
 
4896
								#判斷是否含有 "${"、"}" 關鍵字
4897
								#函式說明:
4898
								#檢查一個字串裡面是否有多個關鍵字
4899
								#回傳結果:
4900
								#$result["status"],"true"代表執行成功,"false"代表執行失敗.
4901
								#$result["error"],錯誤訊息.
4902
								#$result["function"],當前執行的函數名稱.
4903
								#$result["founded"],是否有找到的關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字.
4904
								#$result["foundedKeyWords"],找到的關鍵字.
4905
								#$result["foundedAll"],是否有找到全部的關鍵字,"true"代表有;"false"代表沒有.
4906
								#$result["argu"],使用的參數.
4907
								#必填參數:
4908
								#$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
4909
								$conf["search::findManyKeyWords"]["keyWords"]=array("\${","}");
4910
								#$conf["string"],字串,要被搜尋的字串內容.
4911
								$conf["search::findManyKeyWords"]["string"]=$modifiedKeyWordLine;
4912
								#可省略參數:
4913
								#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合.
4914
								#$conf["completeEqual"]="true";
4915
								#參考資料:
4916
								#無.
4917
								#備註:
4918
								#無.
4919
								$findManyKeyWords=search::findManyKeyWords($conf["search::findManyKeyWords"]);
4920
								unset($conf["search::findManyKeyWords"]);
4921
 
4922
								#如果執行失敗
4923
								if($findManyKeyWords["status"]==="false"){
4924
 
4925
									#設置錯誤識別
4926
									$result["status"]="false";
4927
 
4928
									#設置錯誤訊息
4929
									$result["error"]=$findManyKeyWords;
4930
 
4931
									#回傳結果
4932
									return $result;
4933
 
4934
									}#if end
4935
 
4936
								#如果有 "${"、"}" 存在
4937
								if($findManyKeyWords["foundedAll"]==="true"){
4938
 
4939
									#debug
4940
									#var_dump(__LINE__,$findManyKeyWords);
4941
 
4942
									#取得 ${... 前面的部分
4943
									#函式說明:
4944
									#將字串特定關鍵字與其後面的內容剔除
4945
									#回傳結果:
4946
									#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4947
									#$result["error"],錯誤訊息陣列.
4948
									#$result["warning"],警告訊息鎮列.
4949
									#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
4950
									#$result["function"],當前執行的函數名稱.
4951
									#$result["oriStr"],要處理的原始字串內容.
4952
									#$result["content"],處理好的的字串內容.
4953
									#$result["argu"],使用的參數.
4954
									#必填參數:
4955
									#$conf["stringIn"],字串,要處理的字串.
4956
									$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$modifiedKeyWordLine;
4957
									#$conf["keyWord"],字串,特定字串.
4958
									$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]="\${";
4959
									#可省略參數:
4960
									#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
4961
									#$conf["deleteLastRepeatedOne"]="";
4962
									#參考資料:
4963
									#無.
4964
									#備註:
4965
									#無.
4966
									$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
4967
									unset($conf["stringProcess::delStrAfterKeyWord"]);
4968
 
4969
									#debug
4970
									#var_dump(__LINE__,$delStrAfterKeyWord);
4971
 
4972
									#如果執行失敗
4973
									if($delStrAfterKeyWord["status"]==="false"){
4974
 
4975
										#設置錯誤識別
4976
										$result["status"]="false";
4977
 
4978
										#設置錯誤訊息
4979
										$result["error"]=$delStrAfterKeyWord;
4980
 
4981
										#回傳結果
4982
										return $result;
4983
 
4984
										}#if end
4985
 
4986
									#如果要有關鍵字找不到
4987
									if($delStrAfterKeyWord["founded"]==="false"){
4988
 
4989
										#設置錯誤識別
4990
										$result["status"]="false";
4991
 
4992
										#設置錯誤訊息
4993
										$result["error"]=$delStrAfterKeyWord;
4994
 
4995
										#回傳結果
4996
										return $result;
4997
 
4998
										}#if end
4999
 
5000
									#如果前面有內容
5001
									if($delStrAfterKeyWord["content"]!==""){
5002
 
5003
										#儲存該行的關鍵字之一
5004
										$keyWordPart[]=$delStrAfterKeyWord["content"];
5005
 
5006
										#暫存的關鍵字資訊
5007
										$tmp=array("name"=>"keyWordPart","index"=>count($keyWordPart)-1,"value"=>$keyWordPart[count($keyWordPart)-1]);
5008
 
5009
										#設置順序資訊
5010
										$OderOfPartInLine[]=$tmp;
5011
 
5012
										}#if end
5013
 
5014
									#取得 }... 前面的部分
5015
									#函式說明:
5016
									#將字串特定關鍵字與其後面的內容剔除
5017
									#回傳結果:
5018
									#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5019
									#$result["error"],錯誤訊息陣列.
5020
									#$result["warning"],警告訊息鎮列.
5021
									#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
5022
									#$result["function"],當前執行的函數名稱.
5023
									#$result["oriStr"],要處理的原始字串內容.
5024
									#$result["content"],處理好的的字串內容.
5025
									#$result["argu"],使用的參數.
5026
									#必填參數:
5027
									#$conf["stringIn"],字串,要處理的字串.
5028
									$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$delStrAfterKeyWord["deleted"];
5029
									#$conf["keyWord"],字串,特定字串.
5030
									$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]="}";
5031
									#可省略參數:
5032
									#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
5033
									#$conf["deleteLastRepeatedOne"]="";
5034
									#參考資料:
5035
									#無.
5036
									#備註:
5037
									#無.
5038
									$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
5039
									unset($conf["stringProcess::delStrAfterKeyWord"]);
5040
 
5041
									#debug
5042
									#var_dump(__LINE__,$delStrAfterKeyWord);
5043
 
5044
									#如果執行失敗
5045
									if($delStrAfterKeyWord["status"]==="false"){
5046
 
5047
										#設置錯誤識別
5048
										$result["status"]="false";
5049
 
5050
										#設置錯誤訊息
5051
										$result["error"]=$delStrAfterKeyWord;
5052
 
5053
										#回傳結果
5054
										return $result;
5055
 
5056
										}#if end
5057
 
5058
									#如果要有關鍵字找不到
5059
									if($delStrAfterKeyWord["founded"]==="false"){
5060
 
5061
										#設置錯誤識別
5062
										$result["status"]="false";
5063
 
5064
										#設置錯誤訊息
5065
										$result["error"]=$delStrAfterKeyWord;
5066
 
5067
										#回傳結果
5068
										return $result;
5069
 
5070
										}#if end
5071
 
5072
									#儲存該行的變數名稱之一
5073
									$varPart[]=$delStrAfterKeyWord["content"]."}";
5074
 
848 liveuser 5075
									#移除 "}" 其面的內容
5076
									#函式說明:
5077
									#將字串特定關鍵字與其前面的內容剔除
5078
									#回傳結果:
5079
									#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5080
									#$result["error"],錯誤訊息陣列.
5081
									#$result["warning"],警告訊息鎮列.
5082
									#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
5083
									#$result["function"],當前執行的函數名稱.
5084
									#$result["argu"],使用的參數.
5085
									#$result["oriStr"],要處理的原始字串內容.
5086
									#$result["content"],處理好的的字串內容.
5087
									#$result["deleted"],被移除的內容.
5088
									#必填參數:
5089
									#$conf["stringIn"],字串,要處理的字串.
5090
									$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$modifiedKeyWordLine;
5091
									#$conf["keyWord"],字串,特定字串.
5092
									$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="}";
5093
									#可省略參數:
5094
									#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
5095
									#$conf["recursive"]="true";
5096
									#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
5097
									#$conf["lastResult"]=$delStrBeforeKeyWord;
5098
									#參考資料:
5099
									#無.
5100
									#備註:
5101
									#無.
5102
									$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
5103
									unset($conf["stringProcess::delStrBeforeKeyWord"]);
5104
 
5105
									#如果執行失敗
5106
									if($delStrBeforeKeyWord["status"]==="false"){
5107
 
5108
										#設置錯誤識別
5109
										$result["status"]="false";
5110
 
5111
										#設置錯誤訊息
5112
										$result["error"]=$delStrBeforeKeyWord;
5113
 
5114
										#回傳結果
5115
										return $result;
5116
 
5117
										}#if end
5118
 
5119
									#如果要有關鍵字找不到
5120
									if($delStrBeforeKeyWord["founded"]==="false"){
5121
 
5122
										#設置錯誤識別
5123
										$result["status"]="false";
5124
 
5125
										#設置錯誤訊息
5126
										$result["error"]=$delStrBeforeKeyWord;
5127
 
5128
										#回傳結果
5129
										return $result;
5130
 
5131
										}#if end
5132
 
842 liveuser 5133
									#取得剩下的部分
848 liveuser 5134
									$modifiedKeyWordLine=$delStrBeforeKeyWord["content"];
842 liveuser 5135
 
5136
									#暫存的關鍵字資訊
5137
									$tmp=array("name"=>"varPart","index"=>count($varPart)-1,"value"=>$varPart[count($varPart)-1]);
5138
 
5139
									#設置順序資訊
5140
									$OderOfPartInLine[]=$tmp;
5141
 
5142
									#下一輪檢查有無變數關鍵字
5143
									continue;
5144
 
5145
									}#if end
848 liveuser 5146
 
5147
								#debug
5148
								#var_dump(__LINE__,$OderOfPartInLine);
5149
 
842 liveuser 5150
								#如果有關鍵字片段與變數的順序存在
5151
								if( count($OderOfPartInLine)>0 ){
5152
 
5153
									#debug
5154
									#var_dump(__LINE__,$OderOfPartInLine);
5155
 
5156
									#針對每個資訊
5157
									foreach($OderOfPartInLine as $index=>$condition){
5158
 
848 liveuser 5159
										#debug
5160
										#var_dump(__LINE__,$index,$condition);
5161
 
842 liveuser 5162
										#判斷資訊
5163
										switch($condition["name"]){
5164
 
5165
											#如果是 "keyWordPart"
5166
											case "keyWordPart":
5167
 
5168
												#確認是否開頭有符合
5169
 
5170
												#函式說明:
848 liveuser 5171
												#取得關鍵字在字串的哪個位置(字首,字尾,中間)
5172
												#回傳結果:
5173
												#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
5174
												#$result["error"],錯誤訊息陣列.
5175
												#$result["function"],當前執行的函數名稱.
5176
												#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".
5177
												#$result["argu"],傳入的參數.
5178
												#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
5179
												#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
5180
												#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
5181
												#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.
5182
												#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.
5183
												#必填參數:
5184
												#$conf["inputStr"],字串,被搜尋的字串.
5185
												$conf["search::findKeyWordPosition"]["inputStr"]=$modifiedOriLineContent;
5186
												#$conf["keyWord"],字串,關鍵字.
5187
												$conf["search::findKeyWordPosition"]["keyWord"]=$condition["value"];
5188
												#可省略參數:
5189
												#無.
5190
												#參考資料:
5191
												#http://php.net/manual/en/function.strpos.php
5192
												#備註:
5193
												#無.
5194
												$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
5195
												unset($conf["search::findKeyWordPosition"]);
5196
 
5197
												#debug
5198
												#var_dump(__LINE__,$findKeyWordPosition);
5199
 
5200
												#如果執行失敗
5201
												if($findKeyWordPosition["status"]==="false"){
5202
 
5203
													#設置錯誤識別
5204
													$result["status"]="false";
5205
 
5206
													#設置錯誤訊息
5207
													$result["error"]=$findKeyWordPosition;
5208
 
5209
													#回傳結果
5210
													return $result;
5211
 
5212
													}#if end
5213
 
5214
												#如果沒有符合
5215
												if($findKeyWordPosition["found"]==="false"){
5216
 
5217
													#初始化關鍵字行
5218
													$keyWordLineIndex=0;
5219
 
5220
													#換下行原始內容
5221
													continue 5;
5222
 
5223
													}#if end
5224
 
5225
												#如果關鍵字不在開頭
5226
												if($findKeyWordPosition["head"]==="false"){
5227
 
5228
													#初始化關鍵字行
5229
													$keyWordLineIndex=0;
5230
 
5231
													#換下行原始內容
5232
													continue 5;
5233
 
5234
													}#if end
5235
 
5236
												#函式說明:
842 liveuser 5237
												#將字串特定關鍵字與其前面的內容剔除
5238
												#回傳結果:
5239
												#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5240
												#$result["error"],錯誤訊息陣列.
5241
												#$result["warning"],警告訊息鎮列.
5242
												#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
5243
												#$result["function"],當前執行的函數名稱.
5244
												#$result["argu"],使用的參數.
5245
												#$result["oriStr"],要處理的原始字串內容.
5246
												#$result["content"],處理好的的字串內容.
5247
												#$result["deleted"],被移除的內容.
5248
												#必填參數:
5249
												#$conf["stringIn"],字串,要處理的字串.
5250
												$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$modifiedOriLineContent;
5251
												#$conf["keyWord"],字串,特定字串.
5252
												$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$condition["value"];
5253
												#可省略參數:
5254
												#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
5255
												#$conf["recursive"]="true";
5256
												#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
5257
												#$conf["lastResult"]=$delStrBeforeKeyWord;
5258
												#參考資料:
5259
												#無.
5260
												#備註:
5261
												#無.
5262
												$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
5263
												unset($conf["stringProcess::delStrBeforeKeyWord"]);
5264
 
5265
												#debug
5266
												#var_dump(__LINE__,$delStrBeforeKeyWord);
5267
 
5268
												#如果執行失敗
5269
												if($delStrBeforeKeyWord["status"]==="false"){
5270
 
5271
													#設置錯誤識別
5272
													$result["status"]="false";
5273
 
5274
													#設置錯誤訊息
5275
													$result["error"]=$delStrBeforeKeyWord;
5276
 
5277
													#回傳結果
5278
													return $result;
5279
 
5280
													}#if end
5281
 
5282
												#如果沒有符合
5283
												if($delStrBeforeKeyWord["founded"]==="false"){
5284
 
5285
													#初始化關鍵字行
5286
													$keyWordLineIndex=0;
5287
 
5288
													#換下行原始內容
5289
													continue 5;
5290
 
5291
													}#if end
5292
 
5293
												#執行到這邊代表有符合
5294
 
5295
												#取得剩下未判斷是否符合的項目
5296
												$modifiedOriLineContent=$delStrBeforeKeyWord["content"];
5297
 
5298
												#換找下個資訊有無符合
5299
												continue 2;
5300
 
5301
												#結束 switch
5302
												break;
5303
 
5304
											#如果是 "varPart"
5305
											case "varPart":
5306
 
848 liveuser 5307
												#判斷變數名稱
5308
												switch($OderOfPartInLine[($index)]["value"]){
5309
 
5310
													#如果為 起始年份
5311
													case "\${yearFrom}":
5312
 
5313
													#或如果為 結束年份
5314
													case "\${yearTo}":
5315
 
5316
														#取得變數名稱,亦即去掉開頭的 "${" 跟結尾的 "}"
5317
														$varName=substr($OderOfPartInLine[($index)]["value"],2,strlen($OderOfPartInLine[($index)]["value"])-3);
5318
 
5319
														#取得變數實際數值
5320
														$varVal=$conf[$varName];
5321
 
5322
														#轉換成 keyWordPart
5323
														$OderOfPartInLine[($index)]["name"]="keyWordPart";
5324
 
5325
														#轉換成期望的數值
5326
														$OderOfPartInLine[($index)]["value"]=$varVal;
5327
 
5328
														#跳出 switch
5329
														break;
5330
 
5331
													#或如果為作者資訊
5332
													case "\${Authors}":
5333
 
5334
														#取得變數名稱,亦即去掉開頭的 "${" 跟結尾的 "}"
5335
														$varName=substr($OderOfPartInLine[($index)]["value"],2,strlen($OderOfPartInLine[($index)]["value"])-3);
5336
 
5337
														#取得變數實際數值
5338
														$varVal=$conf[$varName];
5339
 
5340
														#轉換成 keyWordPart
5341
														$OderOfPartInLine[($index)]["name"]="keyWordPart";
5342
 
5343
														#初始化作者清單
5344
														$authorNameList="";
5345
 
5346
														#針對每個作者
5347
														foreach($varVal as $authorNameIndex=>$authorName){
5348
 
5349
															#預設的間隔內容
5350
															$comma=" | ";
5351
 
5352
															#如果是第一個作者
5353
															if($authorNameIndex===0){
5354
 
5355
																#不需要間隔內容
5356
																$comma="";
5357
 
5358
																}#if end
5359
 
5360
															#串接間隔與作者名字
5361
															$authorNameList=$authorNameList.$comma.$authorName;
5362
 
5363
															}#foreach end
5364
 
5365
														#轉換成期望的數值
5366
														$OderOfPartInLine[($index)]["value"]=$authorNameList;
5367
 
5368
														#跳出 switch
5369
														break;
5370
 
5371
													#其他變數
5372
													default:
5373
 
5374
														#請定義實際內容要如何產生
5375
														#...
5376
 
5377
													}#switch end
842 liveuser 5378
 
5379
												#如果後面沒有 $OderOfPartInLine 了
5380
												if(!isset($OderOfPartInLine[($index+1)])){
5381
 
5382
													#代表有符合所有條件
5383
 
5384
													#輪到下個關鍵字行
5385
													$keyWordLineIndex++;
5386
 
848 liveuser 5387
													#結束 switch
5388
													break;
842 liveuser 5389
 
5390
													}#if end
5391
 
848 liveuser 5392
												#debug
5393
												#var_dump(__LINE__,$OderOfPartInLine[($index+1)]);
5394
 
842 liveuser 5395
												#執行到這邊代表後面還有 $OderOfPartInLine
5396
 
5397
												#如果後面的內容不是 keyWordPart
5398
												if($OderOfPartInLine[($index+1)]["name"]!=="keyWordPart"){
5399
 
5400
													#設置錯誤識別
5401
													$result["status"]="false";
5402
 
5403
													#設置錯誤訊息
5404
													$result["error"][]="multi continued varName not supported";
5405
 
5406
													#回傳結果
5407
													return $result;
5408
 
5409
													}#if end
5410
 
848 liveuser 5411
												#執行到這邊代表為 varPart
842 liveuser 5412
 
5413
												#函式說明:
5414
												#取得關鍵字在字串的哪個位置(字首,字尾,中間)
5415
												#回傳結果:
5416
												#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
5417
												#$result["error"],錯誤訊息陣列.
5418
												#$result["function"],當前執行的函數名稱.
5419
												#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".
5420
												#$result["argu"],傳入的參數.
5421
												#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
5422
												#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
5423
												#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
5424
												#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.
5425
												#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.
5426
												#必填參數:
5427
												#$conf["inputStr"],字串,被搜尋的字串.
848 liveuser 5428
												$conf["search::findKeyWordPosition"]["inputStr"]=$modifiedOriLineContent;
842 liveuser 5429
												#$conf["keyWord"],字串,關鍵字.
848 liveuser 5430
												$conf["search::findKeyWordPosition"]["keyWord"]=$OderOfPartInLine[($index+1)]["value"];
842 liveuser 5431
												#可省略參數:
5432
												#無.
5433
												#參考資料:
5434
												#http://php.net/manual/en/function.strpos.php
5435
												#備註:
5436
												#無.
848 liveuser 5437
												$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
5438
												unset($conf["search::findKeyWordPosition"]);
842 liveuser 5439
 
5440
												#debug
5441
												#var_dump(__LINE__,$findKeyWordPosition);
5442
 
5443
												#如果執行失敗
5444
												if($findKeyWordPosition["status"]==="false"){
5445
 
5446
													#設置錯誤識別
5447
													$result["status"]="false";
5448
 
5449
													#設置錯誤訊息
5450
													$result["error"]=$findKeyWordPosition;
5451
 
5452
													#回傳結果
5453
													return $result;
5454
 
5455
													}#if end
5456
 
5457
												#如果沒有符合
5458
												if($findKeyWordPosition["found"]==="false"){
5459
 
5460
													#初始化關鍵字行
5461
													$keyWordLineIndex=0;
5462
 
5463
													#換下行原始內容
5464
													continue 5;
5465
 
5466
													}#if end
848 liveuser 5467
 
842 liveuser 5468
												#執行到這邊代表有符合
5469
 
5470
												#函式說明:
5471
												#將字串特定關鍵字與其前面的內容剔除
5472
												#回傳結果:
5473
												#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5474
												#$result["error"],錯誤訊息陣列.
5475
												#$result["warning"],警告訊息鎮列.
5476
												#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
5477
												#$result["function"],當前執行的函數名稱.
5478
												#$result["argu"],使用的參數.
5479
												#$result["oriStr"],要處理的原始字串內容.
5480
												#$result["content"],處理好的的字串內容.
5481
												#$result["deleted"],被移除的內容.
5482
												#必填參數:
5483
												#$conf["stringIn"],字串,要處理的字串.
5484
												$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$modifiedOriLineContent;
5485
												#$conf["keyWord"],字串,特定字串.
848 liveuser 5486
												$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$OderOfPartInLine[($index+1)]["value"];
842 liveuser 5487
												#可省略參數:
5488
												#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
5489
												#$conf["recursive"]="true";
5490
												#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
5491
												#$conf["lastResult"]=$delStrBeforeKeyWord;
5492
												#參考資料:
5493
												#無.
5494
												#備註:
5495
												#無.
5496
												$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
5497
												unset($conf["stringProcess::delStrBeforeKeyWord"]);
5498
 
5499
												#debug
848 liveuser 5500
												#var_dump(__LINE__,$delStrBeforeKeyWord);
842 liveuser 5501
 
5502
												#如果執行失敗
5503
												if($delStrBeforeKeyWord["status"]==="false"){
5504
 
5505
													#設置錯誤識別
5506
													$result["status"]="false";
5507
 
5508
													#設置錯誤訊息
5509
													$result["error"]=$delStrBeforeKeyWord;
5510
 
5511
													#回傳結果
5512
													return $result;
5513
 
5514
													}#if end
5515
 
5516
												#如果該存在的關鍵字不在
5517
												if($delStrBeforeKeyWord["founded"]==="false"){
5518
 
5519
													#初始化關鍵字行
5520
													$keyWordLineIndex=0;
5521
 
5522
													#換下行原始內容
5523
													continue 5;
5524
 
5525
													}#if end
5526
 
5527
												#取得剩下未判斷是否符合的項目
848 liveuser 5528
												$modifiedOriLineContent=$OderOfPartInLine[($index+1)]["value"].$delStrBeforeKeyWord["content"];
842 liveuser 5529
 
848 liveuser 5530
												#debug
5531
												#var_dump(__LINE__,$modifiedOriLineContent);
5532
 
842 liveuser 5533
												#換找下個資訊有無符合
5534
												continue 2;
5535
 
5536
												break;
5537
 
5538
											#其他狀況
5539
											default:
5540
 
5541
												#設置錯誤識別
5542
												$result["status"]="false";
5543
 
5544
												#設置錯誤訊息
5545
												$result["error"][]="unexpected name value";
5546
 
5547
												#設置錯誤訊息
5548
												$result["error"][]=$condition;
5549
 
5550
												#回傳結果
5551
												return $result;
5552
 
5553
											}#switch end
5554
 
848 liveuser 5555
										}#foreach end
842 liveuser 5556
 
848 liveuser 5557
									#執行到這邊代表該行有符合關鍵字的結構
5558
 
5559
									#初始化期望的關鍵字內容
5560
									$fixedKeyWordVal="";
5561
 
5562
									#debug
5563
									#var_dump(__LINE__,$OderOfPartInLine);
5564
 
5565
									#針對關鍵字的每個字串段落
5566
									foreach($OderOfPartInLine as $indexOfOderOfPartInLine => $keyWordStrPart){
5567
 
5568
										#串接之
5569
										$fixedKeyWordVal=$fixedKeyWordVal.$OderOfPartInLine[$indexOfOderOfPartInLine]["value"];
5570
 
5571
										}#foreach end
5572
 
5573
									#debug
5574
									#var_dump(__LINE__,$oriLineContent,$fixedKeyWordVal);
5575
 
849 liveuser 5576
									#補上關鍵字前面的tab或空格
5577
									$fixedKeyWordVal=$keyWordContentOfHead.$fixedKeyWordVal;
5578
 
848 liveuser 5579
									#如果內容有差
5580
									if($oriLineContent!=$fixedKeyWordVal){
5581
 
5582
										#debug
5583
										#var_dump(__LINE__,$oriLineContent,$fixedKeyWordVal);
5584
 
842 liveuser 5585
										#設置要取代的暫存資訊
5586
										$detailRepaceddInfo=array();
848 liveuser 5587
 
842 liveuser 5588
										#設置暫存的取代詳細資訊,包含取代的行(從0開始算),原始內容,新內容.
848 liveuser 5589
										$detailRepaceddInfo[$oriLineContentIndex]=array("from"=>$oriLineContent,"to"=>$fixedKeyWordVal);
5590
 
842 liveuser 5591
										#debug
5592
										#var_dump(__LINE__,$detailRepaceddInfo);
848 liveuser 5593
 
842 liveuser 5594
										#儲存要取代的資訊
5595
										$replacedInfo[]=$detailRepaceddInfo;
5596
 
848 liveuser 5597
										}#if end
5598
 
5599
									#取代期望的關鍵字
5600
									$modifiedKeyWordLine=$fixedKeyWordVal;
5601
 
5602
									#換看下行內容有無符合關鍵字,會執行for迴圈的 $keyWordLineIndex++
5603
									continue 3;
5604
 
842 liveuser 5605
									}#if end
5606
 
5607
								#結束 while
5608
								break;
5609
 
5610
								}#while end
5611
 
5612
							#若原始內容沒有符合關鍵字
5613
							if($modifiedOriLineContent!==$modifiedKeyWordLine){
5614
 
5615
								#debug
5616
								#var_dump(__LINE__,$modifiedOriLineContent,$modifiedKeyWordLine);
5617
 
5618
								#初始化關鍵字行
5619
								$keyWordLineIndex=0;
5620
 
5621
								#換下行原始內容
5622
								continue 2;
5623
 
5624
								}#if end
5625
 
5626
							#反之代表內容有符合
5627
							else{
5628
 
848 liveuser 5629
								#debug
5630
								#var_dump(__LINE__,"第 ".($keyWordLineIndex+1)." 個關鍵字有符合,總關鍵行有 ".count($conf["replaceFrom"])." 個");
5631
 
5632
								#如果內容有差
5633
								if($oriLineContent!=$conf["replaceFrom"][$keyWordLineIndex]){
5634
 
5635
									#debug
5636
									#var_dump(__LINE__,$oriLineContent,$conf["replaceFrom"][$keyWordLineIndex]);
5637
 
5638
									#設置要取代的暫存資訊
5639
									$detailRepaceddInfo=array();
5640
 
5641
									#設置暫存的取代詳細資訊,包含取代的行(從0開始算),原始內容,新內容.
5642
									$detailRepaceddInfo[$oriLineContentIndex]=array("from"=>$oriLineContent,"to"=>$conf["replaceFrom"][$keyWordLineIndex]);
5643
 
5644
									#儲存要取代的資訊
5645
									$replacedInfo[]=$detailRepaceddInfo;
5646
 
5647
									}#if end
5648
 
842 liveuser 5649
								#若為最後一個關鍵行.
5650
								if( count($conf["replaceFrom"])===($keyWordLineIndex+1) ){
5651
 
5652
									#代表符合要取代的條件
5653
									$shouldReplace="true";
5654
 
848 liveuser 5655
									#debug
5656
									#var_dump(__LINE__,$result["content"]);
5657
 
842 liveuser 5658
									#如果沒有既有的記錄
5659
									if(!isset($result["content"][$NodePathAndName])){
5660
 
5661
										#記錄有更新的檔案路徑與名稱與其次數為1
5662
										$result["content"][$NodePathAndName]["time"]=1;
5663
 
5664
										}#if end
5665
 
5666
									#反之
5667
									else{
5668
 
5669
										#記錄有更新的檔案路徑與名稱與的次數+1
5670
										$result["content"][$NodePathAndName]["time"]++;
5671
 
5672
										}#else end
5673
 
848 liveuser 5674
									#記錄要更新的相關資訊
5675
									$result["content"][$NodePathAndName]["replacedInfo"]=$replacedInfo;
5676
 
5677
									#debug
5678
									#var_dump(__LINE__,$result["content"]);
5679
 
5680
									#關鍵字行初始化
5681
									$keyWordLineIndex=0;
5682
 
842 liveuser 5683
									}#if end
5684
 
848 liveuser 5685
								#反之
5686
								else{
842 liveuser 5687
 
848 liveuser 5688
									#輪到下個關鍵字行
5689
									$keyWordLineIndex++;
5690
 
5691
									}#else end
5692
 
5693
								#換找下個行內容有無符合關鍵字
842 liveuser 5694
								continue 2;
5695
 
5696
								}#else end
5697
 
5698
							}#for end
5699
 
5700
						}#for end
5701
 
5702
					}#if end
5703
 
5704
				#如果有需要更新檔案內容的識別
5705
				if($shouldReplace==="true"){
5706
 
5707
					#更新檔案內容
5708
					#...
5709
 
5710
					}#if end
5711
 
5712
				}#foreach end
5713
 
5714
			}#foreach end
849 liveuser 5715
 
851 liveuser 5716
		#debug
5717
		#var_dump(__FUNCTION__,__LINE__,print_r($conf,true));exit;
5718
 
849 liveuser 5719
		#如果有啟用多執行序
5720
		if($conf["multiThread"]==="true"){
842 liveuser 5721
 
851 liveuser 5722
			#debug
5723
			#var_dump($conf);exit;
5724
 
849 liveuser 5725
			#如果有執行的程序要確認回饋
5726
			if(isset($procs)){
5727
 
851 liveuser 5728
				#debug
5729
				#var_dump($procs);exit;
5730
 
5731
				#如果有要log
5732
				if(isset($conf["log"])){
5733
 
5734
					#log for run time of start and end info
5735
					$logPathForRunTimeOfStartAndEnd="/tmp/".basename($conf["log"]).":".$uuid."-runTimeOfStartAndEnd.log";
5736
 
5737
					#函式說明:
5738
					#撰寫log
5739
					#回傳結果:
5740
					#$result["status"],狀態,"true"或"false".
5741
					#$result["error"],錯誤訊息陣列.
5742
					#$result["function"],當前函式的名稱.
5743
					#$result["argu"],使用的參數.
5744
					#必填參數:
5745
					#$conf["path"],字串,log檔案的路徑與名稱.
5746
					$conf["logs::record"]["path"]=$logPathForRunTimeOfStartAndEnd;
5747
					#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
5748
					$conf["logs::record"]["content"]="start at ".gmdate("Y-m-d H:i:s");
5749
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5750
					$conf["logs::record"]["fileArgu"]=__FILE__;
5751
					#可省略參數:
5752
					#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
5753
					#$conf["rewrite"]="false";
5754
					#參考資料:
5755
					#無.
5756
					#備註:
5757
					#無.
5758
					$record=logs::record($conf["logs::record"]);
5759
					unset($conf["logs::record"]);
5760
 
5761
					#如果出錯
5762
					if($record["status"]==="false"){
5763
 
5764
						#設置錯誤識別
5765
						$result["status"]="false";
5766
 
5767
						#設置錯誤訊息
5768
						$result["error"]=$record;
5769
 
5770
						#印出json
5771
						echo json_encode($result);
5772
 
5773
						#結束執行,回傳1給shell,代表異常,
5774
						exit(1);
5775
 
5776
						}#if end
5777
 
5778
					}#if end
5779
 
849 liveuser 5780
				#無窮迴圈
5781
				while(true){
5782
 
5783
					#如果有開啟 log
5784
					if(isset($conf["log"])){
5785
 
5786
						#要記錄的log
5787
						$log="There are ".count($procs)." process under path of ".$conf["searchPath"][0]." unend.".PHP_EOL;
5788
 
5789
						#log的路徑與名稱
5790
						$path="/tmp/".basename($conf["log"]).":".$uuid.".log";
5791
 
851 liveuser 5792
						#log for latest running 的路徑與名稱
5793
						$logPathForLatestRunning="/tmp/".basename($conf["log"]).":".$uuid."-latest.log";
5794
 
849 liveuser 5795
						#函式說明:
5796
						#撰寫log
5797
						#回傳結果:
5798
						#$result["status"],狀態,"true"或"false".
5799
						#$result["error"],錯誤訊息陣列.
5800
						#$result["function"],當前函式的名稱.
5801
						#$result["argu"],使用的參數.
5802
						#必填參數:
5803
						#$conf["path"],字串,log檔案的路徑與名稱.
5804
						$conf["logs::record"]["path"]=$path;
5805
						#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
5806
						$conf["logs::record"]["content"]=$log;
5807
						#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5808
						$conf["logs::record"]["fileArgu"]=__FILE__;
5809
						#可省略參數:
5810
						#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
5811
						#$conf["rewrite"]="false";
5812
						#參考資料:
5813
						#無.
5814
						#備註:
5815
						#無.
851 liveuser 5816
						$record=logs::record($conf["logs::record"]);
849 liveuser 5817
						unset($conf["logs::record"]);
5818
 
5819
						#如果出錯
5820
						if($record["status"]==="false"){
5821
 
5822
							#設置錯誤識別
5823
							$result["status"]="false";
5824
 
5825
							#設置錯誤訊息
5826
							$result["error"]=$record;
5827
 
5828
							#印出json
5829
							echo json_encode($result);
5830
 
5831
							#結束執行,回傳1給shell,代表異常,
5832
							exit(1);
5833
 
5834
							}#if end
5835
 
5836
						}#if end
5837
 
5838
					#針對每個要確認的程序
5839
					foreach($procs as $procIndex => $procValue){
5840
 
855 liveuser 5841
						#判斷多執行序的類型
5842
						switch($threadType){
849 liveuser 5843
 
855 liveuser 5844
							#如果是直接透過 proc
5845
							case "proc":
849 liveuser 5846
 
5847
								#函式說明:
855 liveuser 5848
								#更新透過proc執行的多程序資訊.
849 liveuser 5849
								#回傳結果:
855 liveuser 5850
								#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5851
								#$reuslt["error"],執行不正常結束的錯訊息陣列.
5852
								#$result["function"],當前執行的函式名稱.
849 liveuser 5853
								#$result["argu"],使用的參數.
855 liveuser 5854
								#$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
849 liveuser 5855
								#必填參數:
855 liveuser 5856
								#$conf["procs"],陣列,運行self::proc後回傳的content.
5857
								$conf["threads::proc_update"]["procs"]=$procValue["content"];
849 liveuser 5858
								#可省略參數:
855 liveuser 5859
								#無.
849 liveuser 5860
								#參考資料:
5861
								#無.
5862
								#備註:
5863
								#無.
855 liveuser 5864
								$proc_update=threads::proc_update($conf["threads::proc_update"]);
5865
								unset($conf["threads::proc_update"]);
5866
 
5867
								#如果執行失敗
5868
								if($proc_update["status"]==="false"){
5869
 
849 liveuser 5870
									#關閉程序
5871
									proc_close($procs[$procIndex]["content"][0]["process"]);
855 liveuser 5872
 
5873
									#設置錯誤識別
5874
									$result["status"]="false";
849 liveuser 5875
 
855 liveuser 5876
									#設置錯誤訊息
5877
									$result["error"]=$procValue;
5878
 
5879
									#印出json
5880
									echo json_encode($result);
5881
 
849 liveuser 5882
									#卸除異常的程序
5883
									unset($procs[$procIndex]);
855 liveuser 5884
 
5885
									#結束執行,回傳1給shell,代表異常,
5886
									exit(1);
5887
 
5888
									}#if end
5889
 
5890
								#debug
5891
								#var_dump($procValue["content"][0]["statusCode"]);exit;
5892
 
5893
								#如果執行失敗
5894
								if($procValue["content"][0]["status"]==="false"){
5895
 
5896
									#關閉程序
5897
									proc_close($procs[$procIndex]["content"][0]["process"]);
5898
 
849 liveuser 5899
									#設置錯誤識別
5900
									$result["status"]="false";
5901
 
5902
									#設置錯誤訊息
855 liveuser 5903
									$result["error"]=$procValue;
849 liveuser 5904
 
5905
									#印出json
5906
									echo json_encode($result);
5907
 
855 liveuser 5908
									#卸除異常的程序
5909
									unset($procs[$procIndex]);
5910
 
849 liveuser 5911
									#結束執行,回傳1給shell,代表異常,
5912
									exit(1);
855 liveuser 5913
 
849 liveuser 5914
									}#if end
5915
 
855 liveuser 5916
								#如果可能尚在執行中
5917
								if($procValue["content"][0]["statusCode"]==="?"){
5918
 
5919
									#debug
5920
									#var_dump($procValue["content"][0]["statusCode"]);exit(1);
5921
 
849 liveuser 5922
									#如果有要log
5923
									if(isset($conf["log"])){
855 liveuser 5924
 
849 liveuser 5925
										#要記錄的log
855 liveuser 5926
										$log=$procValue["content"][0];
849 liveuser 5927
 
5928
										#函式說明:
5929
										#撰寫log
5930
										#回傳結果:
5931
										#$result["status"],狀態,"true"或"false".
5932
										#$result["error"],錯誤訊息陣列.
5933
										#$result["function"],當前函式的名稱.
5934
										#$result["argu"],使用的參數.
5935
										#必填參數:
5936
										#$conf["path"],字串,log檔案的路徑與名稱.
855 liveuser 5937
										$conf["logs::record"]["path"]=$logPathForLatestRunning;
849 liveuser 5938
										#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
5939
										$conf["logs::record"]["content"]=$log;
5940
										#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5941
										$conf["logs::record"]["fileArgu"]=__FILE__;
5942
										#可省略參數:
5943
										#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
855 liveuser 5944
										$conf["logs::record"]["rewrite"]="true";
849 liveuser 5945
										#參考資料:
5946
										#無.
5947
										#備註:
5948
										#無.
851 liveuser 5949
										$record=logs::record($conf["logs::record"]);
849 liveuser 5950
										unset($conf["logs::record"]);
5951
 
5952
										#如果出錯
5953
										if($record["status"]==="false"){
5954
 
5955
											#關閉程序
5956
											proc_close($procs[$procIndex]["content"][0]["process"]);
5957
 
855 liveuser 5958
											#卸除異常的程序
5959
											unset($procs[$procIndex]);
5960
 
849 liveuser 5961
											#設置錯誤識別
5962
											$result["status"]="false";
5963
 
5964
											#設置錯誤訊息
5965
											$result["error"]=$record;
5966
 
5967
											#印出json
5968
											echo json_encode($result);
5969
 
5970
											#結束執行,回傳1給shell,代表異常,
5971
											exit(1);
5972
 
5973
											}#if end
855 liveuser 5974
 
5975
										}#if end
5976
 
5977
									#$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
5978
 
5979
									#如果錯誤訊息目前為resource,亦即pipe
5980
									if(gettype($procValue["content"][0]["error"])==="resource"){
5981
 
5982
										#取得錯誤輸出
5983
										$stderr=stream_get_contents($procValue["content"][0]["error"]);
5984
 
5985
										#如果有錯誤訊息存在
5986
										if(!empty($stderr)){
5987
 
5988
											#如果有要log
5989
											if(isset($conf["log"])){
851 liveuser 5990
 
855 liveuser 5991
												#要記錄的log
5992
												$log=$stderr;
5993
 
5994
												#函式說明:
5995
												#撰寫log
5996
												#回傳結果:
5997
												#$result["status"],狀態,"true"或"false".
5998
												#$result["error"],錯誤訊息陣列.
5999
												#$result["function"],當前函式的名稱.
6000
												#$result["argu"],使用的參數.
6001
												#必填參數:
6002
												#$conf["path"],字串,log檔案的路徑與名稱.
6003
												$conf["logs::record"]["path"]=$conf["log"];
6004
												#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
6005
												$conf["logs::record"]["content"]=$log;
6006
												#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6007
												$conf["logs::record"]["fileArgu"]=__FILE__;
6008
												#可省略參數:
6009
												#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
6010
												#$conf["rewrite"]="false";
6011
												#參考資料:
6012
												#無.
6013
												#備註:
6014
												#無.
6015
												$record=logs::record($conf["logs::record"]);
6016
												unset($conf["logs::record"]);
6017
 
6018
												#如果出錯
6019
												if($record["status"]==="false"){
6020
 
6021
													#關閉程序
6022
													proc_close($procs[$procIndex]["content"][0]["process"]);
6023
 
6024
													#設置錯誤識別
6025
													$result["status"]="false";
6026
 
6027
													#設置錯誤訊息
6028
													$result["error"]=$record;
6029
 
6030
													#印出json
6031
													echo json_encode($result);
6032
 
6033
													#卸除異常的程序
6034
													unset($procs[$procIndex]);
6035
 
6036
													#結束執行,回傳1給shell,代表異常,
6037
													exit(1);
6038
 
6039
													}#if end
6040
 
6041
												#關閉程序
6042
												proc_close($procs[$procIndex]["content"][0]["process"]);
6043
 
6044
												#設置錯誤識別
6045
												$result["status"]="false";
6046
 
6047
												#設置錯誤訊息
6048
												$result["error"][]=$record;
6049
 
6050
												#設置錯誤訊息
6051
												$result["error"][]=$stderr;
6052
 
6053
												#印出json
6054
												echo json_encode($result);
6055
 
6056
												#卸除異常的程序
6057
												unset($procs[$procIndex]);
6058
 
6059
												#結束執行,回傳1給shell,代表異常,
6060
												exit(1);
6061
 
6062
												}#if end
6063
 
6064
											}#if ene
6065
 
6066
										}#if end
6067
 
6068
									#反之為字串
6069
									else{
6070
 
6071
										#取得錯誤輸出
6072
										$stderr=$procValue["content"][0]["error"];
6073
 
6074
										#如果有錯誤訊息存在
6075
										if(!empty($stderr)){
6076
 
6077
											#如果有要log
6078
											if(isset($conf["log"])){
6079
 
6080
												#要記錄的log
6081
												$log=$stderr;
6082
 
6083
												#函式說明:
6084
												#撰寫log
6085
												#回傳結果:
6086
												#$result["status"],狀態,"true"或"false".
6087
												#$result["error"],錯誤訊息陣列.
6088
												#$result["function"],當前函式的名稱.
6089
												#$result["argu"],使用的參數.
6090
												#必填參數:
6091
												#$conf["path"],字串,log檔案的路徑與名稱.
6092
												$conf["logs::record"]["path"]=$conf["log"];
6093
												#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
6094
												$conf["logs::record"]["content"]=$log;
6095
												#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6096
												$conf["logs::record"]["fileArgu"]=__FILE__;
6097
												#可省略參數:
6098
												#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
6099
												#$conf["rewrite"]="false";
6100
												#參考資料:
6101
												#無.
6102
												#備註:
6103
												#無.
6104
												$record=logs::record($conf["logs::record"]);
6105
												unset($conf["logs::record"]);
6106
 
6107
												#如果出錯
6108
												if($record["status"]==="false"){
6109
 
6110
													#關閉程序
6111
													proc_close($procs[$procIndex]["content"][0]["process"]);
6112
 
6113
													#設置錯誤識別
6114
													$result["status"]="false";
6115
 
6116
													#設置錯誤訊息
6117
													$result["error"]=$record;
6118
 
6119
													#印出json
6120
													echo json_encode($result);
6121
 
6122
													#卸除異常的程序
6123
													unset($procs[$procIndex]);
6124
 
6125
													#結束執行,回傳1給shell,代表異常,
6126
													exit(1);
6127
 
6128
													}#if end
6129
 
6130
												#關閉程序
6131
												proc_close($procs[$procIndex]["content"][0]["process"]);
6132
 
6133
												#設置錯誤識別
6134
												$result["status"]="false";
6135
 
6136
												#設置錯誤訊息
6137
												$result["error"][]=$record;
6138
 
6139
												#設置錯誤訊息
6140
												$result["error"][]=$stderr;
6141
 
6142
												#印出json
6143
												echo json_encode($result);
6144
 
6145
												#卸除異常的程序
6146
												unset($procs[$procIndex]);
6147
 
6148
												#結束執行,回傳1給shell,代表異常,
6149
												exit(1);
6150
 
6151
												}#if end
6152
 
6153
											}#if ene
6154
 
6155
										}#else end
6156
 
6157
									#跳過該子程序
6158
									continue 2;
6159
 
6160
									}#if end
6161
 
6162
								#反之可能為執行結束了,且執行異常
6163
								else if($procValue["content"][0]["statusCode"]!==0){
6164
 
6165
									#關閉程序
6166
									proc_close($procs[$procIndex]["content"][0]["process"]);
6167
 
6168
									#設置錯誤識別
6169
									$result["status"]="false";
6170
 
6171
									#設置錯誤訊息
6172
									$result["error"]=$procValue;
6173
 
6174
									#印出json
6175
									echo json_encode($result);
6176
 
6177
									#卸除異常的程序
6178
									unset($procs[$procIndex]);
6179
 
6180
									#結束執行,回傳1給shell,代表異常,
6181
									exit(1);
6182
 
6183
									}#if end
6184
 
6185
								#反之執行正常
6186
								else{
6187
 
6188
									#debug
6189
									#var_dump($procValue["content"][0]["statusCode"]);
6190
 
6191
									#儲存程序執行的標準輸出
6192
									$threadStdOut=$procValue["content"][0]["content"];
6193
 
6194
									#如果標準輸出不是json
6195
									if(json_validate($threadStdOut)===false){
6196
 
851 liveuser 6197
										#關閉程序
6198
										proc_close($procs[$procIndex]["content"][0]["process"]);
6199
 
6200
										#設置錯誤識別
6201
										$result["status"]="false";
6202
 
6203
										#設置錯誤訊息
855 liveuser 6204
										$result["error"]=$procValue;
851 liveuser 6205
 
855 liveuser 6206
										#印出json
6207
										echo json_encode($result);
6208
 
6209
										#卸除異常的程序
6210
										unset($procs[$procIndex]);
6211
 
6212
										#結束執行,回傳1給shell,代表異常,
6213
										exit(1);
6214
 
6215
										}#if end
6216
 
6217
									#取得解析的json
6218
									$updateCopyRightYear=(array)(json_decode($threadStdOut));
6219
 
6220
									#如果執行失敗
6221
									if($updateCopyRightYear["status"]==="false"){
6222
 
6223
										#關閉程序
6224
										proc_close($procs[$procIndex]["content"][0]["process"]);
6225
 
6226
										#設置錯誤識別
6227
										$result["status"]="false";
6228
 
851 liveuser 6229
										#設置錯誤訊息
855 liveuser 6230
										$result["error"]=$updateCopyRightYear;
851 liveuser 6231
 
6232
										#印出json
6233
										echo json_encode($result);
6234
 
6235
										#卸除異常的程序
6236
										unset($procs[$procIndex]);
6237
 
6238
										#結束執行,回傳1給shell,代表異常,
6239
										exit(1);
849 liveuser 6240
 
6241
										}#if end
855 liveuser 6242
 
6243
									#記錄有掃描的資料夾路徑與名稱 
6244
									$result["scannedFile"][]=$NodePathAndName;
849 liveuser 6245
 
855 liveuser 6246
									#合併 content - start
849 liveuser 6247
 
855 liveuser 6248
									#函式說明:
6249
									#將多個一維陣列串聯起來,key從0開始排序.
6250
									#回傳的結果:
6251
									#$result["status"],"true"表執行正常,"false"代表執行不正常.
6252
									#$result["error"],錯誤訊息陣列.
6253
									#$result["function"],當前執行的函數.
6254
									#$result["content"],合併好的一維陣列.
6255
									#必填參數
6256
									#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
6257
									$conf["arrays::mergeArray"]["inputArray"]=array($result["content"],$updateCopyRightYear["content"]);
6258
									#可省略參數:
6259
									#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
6260
									#$conf["allowRepeat"]="true";
6261
									#參考資料:
6262
									#無.
6263
									#備註:
6264
									#無.
6265
									$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
6266
									unset($conf["arrays::mergeArray"]);
6267
 
6268
									#如果執行失敗
6269
									if($mergeArray["status"]==="false"){
6270
 
6271
										#關閉程序
6272
										proc_close($procs[$procIndex]["content"][0]["process"]);
6273
 
6274
										#設置錯誤識別
6275
										$result["status"]="false";
6276
 
6277
										#設置錯誤訊息
6278
										$result["error"]=$mergeArray;
6279
 
6280
										#印出json
6281
										echo json_encode($result);
6282
 
6283
										#卸除異常的程序
6284
										unset($procs[$procIndex]);
6285
 
6286
										#結束執行,回傳1給shell,代表異常,
6287
										exit(1);
6288
 
6289
										}#if end
6290
 
6291
									#取得合併好的有異動檔案結果
6292
									$result["content"]=$mergeArray["content"];
6293
 
6294
									#合併 content - end
6295
 
6296
									#合併 scannedFile - start
6297
 
6298
									if(isset($updateCopyRightYear["scannedFile"])){
6299
 
849 liveuser 6300
										#函式說明:
855 liveuser 6301
										#將多個一維陣列串聯起來,key從0開始排序.
6302
										#回傳的結果:
6303
										#$result["status"],"true"表執行正常,"false"代表執行不正常.
849 liveuser 6304
										#$result["error"],錯誤訊息陣列.
855 liveuser 6305
										#$result["function"],當前執行的函數.
6306
										#$result["content"],合併好的一維陣列.
6307
										#必填參數
6308
										#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
6309
										$conf["arrays::mergeArray"]["inputArray"]=array($result["scannedFile"],$updateCopyRightYear["scannedFile"]);
849 liveuser 6310
										#可省略參數:
855 liveuser 6311
										#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
6312
										#$conf["allowRepeat"]="true";
849 liveuser 6313
										#參考資料:
6314
										#無.
6315
										#備註:
6316
										#無.
855 liveuser 6317
										$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
6318
										unset($conf["arrays::mergeArray"]);
6319
 
6320
										#如果執行失敗
6321
										if($mergeArray["status"]==="false"){
6322
 
849 liveuser 6323
											#關閉程序
6324
											proc_close($procs[$procIndex]["content"][0]["process"]);
6325
 
6326
											#設置錯誤識別
6327
											$result["status"]="false";
6328
 
6329
											#設置錯誤訊息
855 liveuser 6330
											$result["error"]=$mergeArray;
849 liveuser 6331
 
6332
											#印出json
6333
											echo json_encode($result);
6334
 
6335
											#卸除異常的程序
6336
											unset($procs[$procIndex]);
6337
 
6338
											#結束執行,回傳1給shell,代表異常,
6339
											exit(1);
855 liveuser 6340
 
849 liveuser 6341
											}#if end
851 liveuser 6342
 
855 liveuser 6343
										#取得合併好的有異動檔案結果
6344
										$result["scannedFile"]=$mergeArray["content"];
851 liveuser 6345
 
855 liveuser 6346
										}#if end
6347
 
6348
									#合併 scannedFile - end
6349
 
6350
									#關閉程序
6351
									proc_close($procs[$procIndex]["content"][0]["process"]);
6352
 
6353
									#卸除做好的程序
6354
									unset($procs[$procIndex]);
6355
 
6356
									}#else end
6357
 
6358
								#end switch
6359
								break;
6360
 
6361
							#如果是透過socket
6362
							case "socket":
6363
 
6364
								#取得  proc 的 uuid
6365
								$procUuid=$procValue["content"][0]["content"];
6366
 
6367
								#函式說明:
6368
								#詢問透過 sock::unixDomainSockServer 執行的程序狀況
6369
								#回傳結果:
6370
								#$result["status"],"true"代表執行正常;"false"代表執行不正常.
6371
								#$result["error"],錯誤訊息陣列.
6372
								#$result["function"],當前執行的函式名稱.
6373
								#$result["argu"],使用的參數.
6374
								#$result["content"],陣列,程序的資訊.
6375
								#$result["content"]["pid"],字串,程序的pid.
6376
								#$result["content"]["running"],字串,是否正常執行中.
6377
								#$result["content"]["statusCode"],字串,回傳給 shell 的代碼.
6378
								#$result["content"]["input"],字串,輸入的內容.
6379
								#$result["content"]["output"],字串,標準輸出的內容.
6380
								#$result["content"]["error"],字串,錯誤輸出的內容.
6381
								#必填參數:
6382
								#$conf["uuid"],字串,proc的uuid.
6383
								$conf["sock::getProcInfo"]["uuid"]=$procUuid;
6384
								#可省略參數:
6385
								#$conf["sock"],字串,要連線的 usr/bin/qbpwcf-sock.php(sock::unixDomainSockServer) 所產生的 unix domain socket 路徑與名稱,預設為 qbpwcf_usock_path.
6386
								$conf["sock::getProcInfo"]["sock"]=$conf["socket"];
6387
								#參考資料:
6388
								#無.
6389
								#備註:
6390
								#無.
6391
								$getProcInfo=sock::getProcInfo($conf["sock::getProcInfo"]);
6392
								unset($conf["sock::getProcInfo"]);
6393
 
6394
								#debug
6395
								if($getProcInfo["status"]==="false"){
6396
 
6397
									#設置錯誤識別
6398
									$result["status"]="false";
6399
 
6400
									#設置錯誤訊息
6401
									$result["error"][]="get process info by uuid failed";
6402
 
6403
									#設置錯誤訊息
6404
									$result["error"][]=$getProcInfo;
6405
 
6406
									#印出json
6407
									echo json_encode($result);
6408
 
6409
									}#if end
6410
 
6411
								#如果已經停止運行
6412
								if($getProcInfo["content"]["running"]==="false"){
6413
 
6414
									#儲存程序執行的標準輸出
6415
									$threadStdOut=$getProcInfo["content"]["output"];
6416
 
6417
									#如果標準輸出不是json
6418
									if(json_validate($threadStdOut)===false){
6419
 
851 liveuser 6420
										#設置錯誤識別
6421
										$result["status"]="false";
6422
 
6423
										#設置錯誤訊息
855 liveuser 6424
										$result["error"]=$procValue;
851 liveuser 6425
 
855 liveuser 6426
										#印出json
6427
										echo json_encode($result);
6428
 
6429
										#卸除異常的程序
6430
										unset($procs[$procIndex]);
6431
 
6432
										#結束執行,回傳1給shell,代表異常,
6433
										exit(1);
6434
 
6435
										}#if end
6436
 
6437
									#取得解析的json
6438
									$updateCopyRightYear=(array)(json_decode($threadStdOut));
6439
 
6440
									#如果執行失敗
6441
									if($updateCopyRightYear["status"]==="false"){
6442
 
6443
										#設置錯誤識別
6444
										$result["status"]="false";
6445
 
851 liveuser 6446
										#設置錯誤訊息
855 liveuser 6447
										$result["error"]=$updateCopyRightYear;
851 liveuser 6448
 
6449
										#印出json
6450
										echo json_encode($result);
6451
 
6452
										#卸除異常的程序
6453
										unset($procs[$procIndex]);
6454
 
6455
										#結束執行,回傳1給shell,代表異常,
6456
										exit(1);
849 liveuser 6457
 
6458
										}#if end
855 liveuser 6459
 
6460
									#記錄有掃描的資料夾路徑與名稱 
6461
									$result["scannedFile"][]=$NodePathAndName;
6462
 
6463
									#合併 content - start
6464
 
6465
									#函式說明:
6466
									#將多個一維陣列串聯起來,key從0開始排序.
6467
									#回傳的結果:
6468
									#$result["status"],"true"表執行正常,"false"代表執行不正常.
6469
									#$result["error"],錯誤訊息陣列.
6470
									#$result["function"],當前執行的函數.
6471
									#$result["content"],合併好的一維陣列.
6472
									#必填參數
6473
									#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
6474
									$conf["arrays::mergeArray"]["inputArray"]=array($result["content"],$updateCopyRightYear["content"]);
6475
									#可省略參數:
6476
									#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
6477
									#$conf["allowRepeat"]="true";
6478
									#參考資料:
6479
									#無.
6480
									#備註:
6481
									#無.
6482
									$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
6483
									unset($conf["arrays::mergeArray"]);
6484
 
6485
									#如果執行失敗
6486
									if($mergeArray["status"]==="false"){
6487
 
6488
										#設置錯誤識別
6489
										$result["status"]="false";
6490
 
6491
										#設置錯誤訊息
6492
										$result["error"]=$mergeArray;
6493
 
6494
										#印出json
6495
										echo json_encode($result);
6496
 
6497
										#卸除異常的程序
6498
										unset($procs[$procIndex]);
6499
 
6500
										#結束執行,回傳1給shell,代表異常,
6501
										exit(1);
6502
 
6503
										}#if end
6504
 
6505
									#取得合併好的有異動檔案結果
6506
									$result["content"]=$mergeArray["content"];
6507
 
6508
									#合併 content - end
6509
 
6510
									#合併 scannedFile - start
6511
 
6512
									if(isset($updateCopyRightYear["scannedFile"])){
6513
 
6514
										#函式說明:
6515
										#將多個一維陣列串聯起來,key從0開始排序.
6516
										#回傳的結果:
6517
										#$result["status"],"true"表執行正常,"false"代表執行不正常.
6518
										#$result["error"],錯誤訊息陣列.
6519
										#$result["function"],當前執行的函數.
6520
										#$result["content"],合併好的一維陣列.
6521
										#必填參數
6522
										#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
6523
										$conf["arrays::mergeArray"]["inputArray"]=array($result["scannedFile"],$updateCopyRightYear["scannedFile"]);
6524
										#可省略參數:
6525
										#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
6526
										#$conf["allowRepeat"]="true";
6527
										#參考資料:
6528
										#無.
6529
										#備註:
6530
										#無.
6531
										$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
6532
										unset($conf["arrays::mergeArray"]);
6533
 
6534
										#如果執行失敗
6535
										if($mergeArray["status"]==="false"){
6536
 
6537
											#設置錯誤識別
6538
											$result["status"]="false";
6539
 
6540
											#設置錯誤訊息
6541
											$result["error"]=$mergeArray;
6542
 
6543
											#印出json
6544
											echo json_encode($result);
6545
 
6546
											#卸除異常的程序
6547
											unset($procs[$procIndex]);
6548
 
6549
											#結束執行,回傳1給shell,代表異常,
6550
											exit(1);
6551
 
6552
											}#if end
6553
 
6554
										#取得合併好的有異動檔案結果
6555
										$result["scannedFile"]=$mergeArray["content"];
6556
 
6557
										}#if end
6558
 
6559
									#合併 scannedFile - end
6560
 
6561
									#卸除做好的程序
6562
									unset($procs[$procIndex]);
849 liveuser 6563
 
855 liveuser 6564
									}#if end
849 liveuser 6565
 
855 liveuser 6566
								#end switch
6567
								break;
849 liveuser 6568
 
855 liveuser 6569
							#其他類型
6570
							default:
849 liveuser 6571
 
6572
								#設置錯誤識別
6573
								$result["status"]="false";
6574
 
6575
								#設置錯誤訊息
855 liveuser 6576
								$result["error"][]="not supported multi threads type ".$threadType;
849 liveuser 6577
 
6578
								#印出json
6579
								echo json_encode($result);
6580
 
6581
								#結束執行,回傳1給shell,代表異常,
6582
								exit(1);
6583
 
855 liveuser 6584
							}#switch end
849 liveuser 6585
 
6586
						}#foreach end
6587
 
6588
					#如果已經執行完所有子程序
6589
					if(empty($procs)){
6590
 
851 liveuser 6591
						#如果有要log
6592
						if(isset($conf["log"])){
6593
 
6594
							#函式說明:
6595
							#撰寫log
6596
							#回傳結果:
6597
							#$result["status"],狀態,"true"或"false".
6598
							#$result["error"],錯誤訊息陣列.
6599
							#$result["function"],當前函式的名稱.
6600
							#$result["argu"],使用的參數.
6601
							#必填參數:
6602
							#$conf["path"],字串,log檔案的路徑與名稱.
6603
							$conf["logs::record"]["path"]=$logPathForRunTimeOfStartAndEnd;
6604
							#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
6605
							$conf["logs::record"]["content"]="end at ".gmdate("Y-m-d H:i:s");
6606
							#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6607
							$conf["logs::record"]["fileArgu"]=__FILE__;
6608
							#可省略參數:
6609
							#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
6610
							#$conf["rewrite"]="false";
6611
							#參考資料:
6612
							#無.
6613
							#備註:
6614
							#無.
6615
							$record=logs::record($conf["logs::record"]);
6616
							unset($conf["logs::record"]);
6617
 
6618
							#如果出錯
6619
							if($record["status"]==="false"){
6620
 
6621
								#設置錯誤識別
6622
								$result["status"]="false";
6623
 
6624
								#設置錯誤訊息
6625
								$result["error"]=$record;
6626
 
6627
								#印出json
6628
								echo json_encode($result);
6629
 
6630
								#結束執行,回傳1給shell,代表異常,
6631
								exit(1);
6632
 
6633
								}#if end
6634
 
6635
							}#if end
6636
 
849 liveuser 6637
						#結束子程序的檢查
6638
						break;
6639
 
6640
						}#if end
851 liveuser 6641
 
6642
					#執行到這邊,代表尚有程序再執行.
6643
 
6644
					#如果要log
6645
					if(isset($conf["log"])){
6646
 
849 liveuser 6647
 
851 liveuser 6648
 
6649
						}#if end
6650
 
849 liveuser 6651
					#休息1秒鐘
6652
					sleep(1);
6653
 
6654
					}#while end
6655
 
6656
				}#if end
6657
 
6658
			}#if end
6659
 
842 liveuser 6660
		#設置執行正常
6661
		$result["status"]="true";
6662
 
849 liveuser 6663
		#如果是透過多執行序執行
6664
		if($conf["multiThread"]==="true"){
6665
 
6666
			#印出json結果
6667
			echo json_encode($result);
6668
 
6669
			}#if end
6670
 
6671
		#反之
6672
		else{
6673
 
6674
			#回傳結果
6675
			return $result;
6676
 
6677
			}#else end
6678
 
842 liveuser 6679
		}#function updateCopyRightYear end
6680
 
1 liveuser 6681
	}#class phpLib end
6682
 
254 liveuser 6683
?>