Subversion Repositories php-qbpwcf

Rev

Rev 230 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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