Subversion Repositories php-qbpwcf

Rev

Rev 200 | Rev 220 | 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.
36 liveuser 6
    Copyright (C) 2014~2025 Min-Jhin,Chen
3 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
檔案存取應用的類別.
29
備註:
30
無.
31
*/
32
class fileAccess{
33
 
34
	/*
35
	#函式說明:
36
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
37
	#回傳結果:
38
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
39
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
40
	#$result["function"],當前執行的函式名稱.
41
	#必填參數:
42
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
43
	#$arguments,陣列,為呼叫方法時所用的參數.
44
	#參考資料:
45
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
46
	*/
47
	public function __call($method,$arguments){
48
 
49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
51
 
52
		#設置執行不正常
53
		$result["status"]="false";
54
 
55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
57
 
58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
60
 
61
		#回傳結果
62
		return $result;
63
 
64
		}#function __call end
65
 
66
	/*
67
	#函式說明:
68
	#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
69
	#回傳結果:
70
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
71
	#$reuslt["error"],執行不正常結束的錯訊息陣列.
72
	#$result["function"],當前執行的函式名稱.
73
	#必填參數:
74
	#$method,物件,為物件實體或類別名稱,會自動置入該參數.
75
	#$arguments,陣列,為呼叫方法時所用的參數.
76
	#參考資料:
77
	#__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
78
	*/
79
	public static function __callStatic($method,$arguments){
80
 
81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
83
 
84
		#設置執行不正常
85
		$result["status"]="false";
86
 
87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
89
 
90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
92
 
93
		#回傳結果
94
		return $result;
95
 
96
		}#function __callStatic end
97
 
98
	/*
99
	#函式說明:
100
	#將字串寫入到檔案
101
	#回傳結果:
102
	#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
103
	#$result["error"],錯誤訊息陣列.
104
	#$result["function"],當前執行的函數名稱.
105
	#$result["fileInfo"],實際上寫入的檔案資訊陣列.
106
	#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
107
	#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
108
	#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
109
	#$result["argu"],使用的參數.
110
	#必填參數:
111
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
112
	$conf["fileArgu"]=__FILE__;
113
	#可省略參數:
114
	#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
115
	#$conf["fileName"]="";
116
	#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
117
	#$conf["inputString"]="";
118
	#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
119
	#$conf["writeMethod"]="a";
120
	#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
121
	#$conf["checkRepeat"]="";
122
	#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
123
	#$conf["filenameExtensionStartPoint"]="";
124
	#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
125
	#$conf["repeatNameRule"]="";
126
	#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
127
	#$conf["web"]="true";
128
	#參考資料:
129
	#無.
130
	#備註:
131
	#無.
132
	*/
133
	public static function writeTextIntoFile(&$conf){
134
 
135
		#初始化要回傳的變數
136
		$result=array();
137
 
138
		#初始化當前執行的函數名稱
139
		$result["function"]=__FUNCTION__;
140
 
141
		#如果 $conf 不為陣列
142
		if(gettype($conf)!="array"){
143
 
144
			#設置執行失敗
145
			$result["status"]="false";
146
 
147
			#設置執行錯誤訊息
148
			$result["error"][]="\$conf變數須為陣列形態";
149
 
150
			#如果傳入的參數為 null
151
			if($conf==null){
152
 
153
				#設置執行錯誤訊息
154
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
155
 
156
				}#if end
157
 
158
			#回傳結果
159
			return $result;
160
 
161
			}#if end
162
 
163
		#取得使用的參數
164
		$result["argu"]=$conf;
165
 
166
		#檢查參數
167
		#函式說明:
168
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
169
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
170
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
171
		#$result["function"],當前執行的函式名稱.
172
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
173
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
174
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
175
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
176
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
177
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
178
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
179
		#必填寫的參數:
180
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
181
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
182
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
183
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
184
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
185
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
186
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
187
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
188
		#可以省略的參數:
189
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
190
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
191
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
192
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName","inputString","writeMethod","checkRepeat","filenameExtensionStartPoint","repeatNameRule","web");
193
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
194
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string");
195
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
196
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"","w","false",null,null,"true");
197
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
198
		#$conf["arrayCountEqualCheck"][]=array();
199
		#參考資料來源:
200
		#array_keys=>http://php.net/manual/en/function.array-keys.php
201
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
202
		unset($conf["variableCheck::checkArguments"]);
203
 
204
		#如果 $checkArguments["status"] 等於 "false"
205
		if($checkArguments["status"]=="false"){
206
 
207
			#設置錯誤識別
208
			$result["status"]="false";
209
 
210
			#設置錯誤訊息
211
			$result["error"]=$checkArguments;
212
 
213
			#回傳結果
214
			return $result;				
215
 
216
			}#if end
217
 
218
		#如果 $checkArguments["passed"] 等於 "false"
219
		if($checkArguments["passed"]=="false"){
220
 
221
			#設置錯誤識別
222
			$result["status"]="false";
223
 
224
			#設置錯誤訊息
225
			$result["error"]=$checkArguments;
226
 
227
			#回傳結果
228
			return $result;				
229
 
230
			}#if end
231
 
232
		#如果沒有設置 $conf["fileName"]
233
		if(!isset($conf["fileName"])){
234
 
235
			#設定要檢查是否有重複的檔案名稱
236
			$conf["checkRepeat"]="true";
237
 
238
			#亂數產生檔案名稱
239
			#函式說明:
240
			#建立以圖片(PNG格式)呈現的驗證碼.
241
			#回傳的解果:
242
			#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
243
			#$result["error"],錯誤訊息.
244
			#$result["function"],檔前執行的函數名稱.
245
			#$result["randNumberWord"],傳驗證碼的內容.
246
			#$result["imgAddress"],圖片的位置與名稱.
247
			#必填參數:
248
			#$conf["imgAddressAndName"],字串,爲驗證碼圖片儲存的位置與名稱,副檔名程式會自動產生
249
			$conf["authenticate::validationCode"]["imgAddressAndName"]="don't need!";
250
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
251
			$conf["authenticate::validationCode"]["fileArgu"]=$conf["fileArgu"];
252
			#可省略參數:
253
			#$conf["num"],字串,爲驗證碼的位數,請輸入阿拉伯數字,預設為"8"位數.
254
			$conf["authenticate::validationCode"]["num"]="10";
255
			#$conf["disableImg"],字串,是否要取消驗證碼圖片的輸出,"true"為要取消,預設為"false"為不取消
256
			$conf["authenticate::validationCode"]["disableImg"]="true";
257
			#$conf["imgToData"],字串,預設為"true"代表將圖片轉存成base64圖片,並將原始圖片移除;反之為"false"
258
			#$conf["imgToData"]="true";
259
			$validationCode=authenticate::validationCode($conf["authenticate::validationCode"]);
260
			unset($conf["authenticate::validationCode"]);
261
 
262
			#如果亂數產生錯誤
263
			if($validationCode["status"]=="false"){
264
 
265
				#設置錯誤識別
266
				$result["status"]="false";
267
 
268
				#設置錯誤訊息
269
				$result["error"]=$validationCode;
270
 
271
				#回傳結果
272
				return $result;	
273
 
274
				}#if end
275
 
276
			#取得產生的檔案名稱
277
			$conf["fileName"]=$validationCode["randNumberWord"];
278
 
279
			}#if end
280
 
281
		#剃除 $conf["fileName"] 開頭的 "./"
282
		#函式說明:
283
		#移除字串開頭的特定內容
284
		#回傳的接結果:
285
		#$result["status"],寄信的情況,若爲"true",則十之八九沒有問題.
286
		#$result["error"],錯誤訊息陣列.
287
		#$result["function"],當前執行的函數.
288
		#$result["content"],處理好的字串.
289
		#必填參數:
290
		#$conf["inputStr"],字串,要檢查並移除開頭有 $conf["keyWords"] 的字串.
291
		$conf["stringProcess::delKeyWordsInStrHead"]["inputStr"]=$conf["fileName"];
292
		#$conf["keyWord"],字串,要移除的字串開頭關鍵字.
293
		$conf["stringProcess::delKeyWordsInStrHead"]["keyWord"]="./"; 
294
		#可省略參數:
295
		#無.
296
		$delKeyWordsInStrHead=stringProcess::delKeyWordsInStrHead($conf["stringProcess::delKeyWordsInStrHead"]);
297
		unset($conf["stringProcess::delKeyWordsInStrHead"]);
298
 
299
		#如果處理失敗
300
		if($delKeyWordsInStrHead["status"]=="false"){
301
 
302
			#設置錯誤識別
303
			$result["status"]="false";
304
 
305
			#設置錯誤訊息
306
			$result["error"]=$delKeyWordsInStrHead;
307
 
308
			#回傳結果
309
			return $result;	
310
 
311
			}#if end
312
 
313
		#取得處理好的檔案名稱
314
		$conf["fileName"]=$delKeyWordsInStrHead["content"];
315
 
316
		#函式說明:
317
		#確保路徑存在.
318
		#回傳結果:
319
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
320
		#$result["error"],錯誤訊息陣列.
321
		#$resutl["function"],當前執行的涵式名稱.
322
		#必填參數:
323
		#$conf["path"],要檢查的路徑
324
		$conf["fileAccess::validatePath"]["path"]=$conf["fileName"];		
325
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
326
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
327
		#可省略參數:
328
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
329
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
330
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
331
		#$conf["dirPermission"]="";
332
		$conf["fileAccess::validatePath"]["web"]=$conf["web"];
333
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
334
		unset($conf["fileAccess::validatePath"]);
335
 
336
		#debug
337
		#var_dump($validatePath);exit;
338
 
339
		#如果確保路徑失敗
340
		if($validatePath["status"]=="false"){
341
 
342
			#設置錯誤識別
343
			$result["status"]="false";
344
 
345
			#設置錯誤訊息
346
			$result["error"]=$validatePath;
347
 
348
			#回傳結果
349
			return $result;	
350
 
351
			}#if end
352
 
353
		if($conf["checkRepeat"]=="true"){
354
 
355
			#函式說明:
356
			#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
357
			#回傳的結果:
358
			#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
359
			#$result["error"],錯誤訊息陣列.
360
			#$result["function"],當前執行的函數名稱.
361
			#$result["createdFileName"],建立好的檔案名稱.
362
			#$result["createdFilePath"],檔案建立的路徑.
363
			#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
364
			#必填參數:
365
			#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
366
			$conf["fileAccess::createFileAfterCheck"]["checkedFileAndPath"]=$conf["fileName"];
367
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
368
			$conf["fileAccess::createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];
369
			#可省略參數:
370
 
371
			#如果有設定 $conf["filenameExtensionStartPoint"]
372
			if(isset($conf["filenameExtensionStartPoint"])){
373
 
374
				#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.
375
				$conf["fileAccess::createFileAfterCheck"]["filenameExtensionStartPoint"]=$conf["filenameExtensionStartPoint"];
376
 
377
				}#if end
378
 
379
			#如果有設定 $conf["repeatNameRule"]
380
			if(isset($conf["repeatNameRule"])){
381
 
382
				#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".
383
				$conf["fileAccess::createFileAfterCheck"]["repeatNameRule"]=$conf["repeatNameRule"];
384
 
385
				}#if end
386
 
387
			#如果有設定 $conf["web"] 參數
388
			if(isset($conf["web"])){
389
 
390
				$conf["fileAccess::createFileAfterCheck"]["web"]=$conf["web"];
391
 
392
				}#if end
393
 
394
			$createFileAfterCheck=fileAccess::createFileAfterCheck($conf["fileAccess::createFileAfterCheck"]);
395
			unset($conf["fileAccess::createFileAfterCheck"]);
396
 
397
			#debug
398
			#var_dump($createFileAfterCheck);
399
			#exit;
400
 
401
			#如果嘗試建立檔案失敗
402
			if($createFileAfterCheck["status"]=="false"){
403
 
404
				#設置執行不正常
405
				$result["status"]="false";
406
 
407
				#設置錯誤訊息
408
				$result["error"]=$createFileAfterCheck;
409
 
410
				#回傳結果
411
				return $result;
412
 
413
				}#if end
414
 
415
			#取得建立的檔案資訊
416
			$result["fileInfo"]["createdFilePathAndName"]=$createFileAfterCheck["createdFilePathAndName"];
417
			$result["fileInfo"]["createdFilePath"]=$createFileAfterCheck["createdFilePath"];
418
			$result["fileInfo"]["createdFileName"]=$createFileAfterCheck["createdFileName"];	
419
 
420
			#取得建立好的檔案路徑與名稱
421
			$conf["fileName"]=$createFileAfterCheck["createdFilePathAndName"];
422
 
423
			}#if end			
424
 
425
		#反之沒有要檢查檔案是否存在
426
		else{
427
 
428
			#取得建立的檔案資訊
429
			$result["fileInfo"]["createdFilePathAndName"]=$conf["fileName"];
430
			$result["fileInfo"]["createdFilePath"]=$validatePath["path"];
431
			$result["fileInfo"]["createdFileName"]=$validatePath["fileName"];	
432
 
433
			}#else end
434
 
435
		#設定要寫入或複寫的檔案
436
		$fileopenResult=fopen($conf["fileName"],$conf["writeMethod"]);
437
 
438
		#如果 $fileopenResult 等於 FALSE
439
		if($fileopenResult==FALSE){
440
 
441
			#設置錯誤識別
442
			$result["status"]="false";
443
 
444
			#代表打開檔案失敗
445
			$result["error"][]="檔案".$conf["fileName"]."開啟失敗";
446
 
447
			#回傳結果
448
			return $result;
449
 
450
			}#if end
451
 
452
		#將資料寫入到檔案裡面
453
		$fwriteResult=fwrite($fileopenResult,$conf["inputString"]);
454
 
455
		#如果 $fwriteResult 等於 FALSE
456
		if($fwriteResult!=0 && $fwriteResult==FALSE){
457
 
458
			#設置錯誤識別
459
			$result["status"]="false";
460
 
461
			#代表檔案寫入失敗
462
			$result["error"][]="檔案".$conf["fileName"]."寫入失敗";
463
 
464
			#回傳結果
465
			return $result;
466
 
467
			}#if end
468
 
469
		#存檔並關閉檔案
470
		$fcloseResult=fclose($fileopenResult);
471
 
472
		#如果 $fcloseResult 等於 FALSE
473
		if($fcloseResult==FALSE){
474
 
475
			#設置錯誤識別
476
			$result["status"]="false";
477
 
478
			#代表檔案寫入失敗
479
			$result["error"][]="檔案".$conf["fileName"]."儲存失敗";
480
 
481
			#回傳結果
482
			return $result;
483
 
484
			}#if end
485
 
486
		#檢查用來寫入的檔案是否存在
487
		#函式說明:檢查多個檔案與資料夾是否存在
488
		#回傳的結果:
489
		#$result["varName"][$i],爲第$i個變數的名稱。
490
		#$result["varExist"][$i],爲第$i個變數是否存在,true代表存在,false代表不存在。
491
		#必填參數:
492
		$conf["fileAccess::checkMutiFileExist"]["fileArray"]=array($conf["fileName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
493
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
494
		$conf["fileAccess::checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
495
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false".
496
		$conf["fileAccess::checkMutiFileExist"]["web"]=$conf["web"];
497
		#參考資料來源:
498
		#http:#php.net/manual/en/function.file-exists.php
499
		#http:#php.net/manual/en/control-structures.foreach.php
500
		$fileAccess["checkMutiFileExist"]=fileAccess::checkMultiFileExist($conf["fileAccess::checkMutiFileExist"]);
501
		unset($conf["fileAccess::checkMutiFileExist"]);
502
 
503
		#如果檢查檔案是否存在失敗
504
		if($fileAccess["checkMutiFileExist"]["status"]==="false"){
505
 
506
			#設置錯誤識別
507
			$result["status"]="false";
508
 
509
			#設置錯誤訊息陣列
510
			$result["error"]=$fileAccess["checkMutiFileExist"];
511
 
512
			#回傳結果
513
			return $result;
514
 
515
			}#if end
516
 
517
		#如果$fileAccess["checkMutiFileExist"]["varExist"][0] 等於 "false" 
518
		if($fileAccess["checkMutiFileExist"]["varExist"][0]==="false"){
519
 
520
			#設置錯誤識別
521
			$result["status"]="false";
522
 
523
			#設置錯誤訊息
524
			$result["error"]=$fileAccess["checkMutiFileExist"];
525
 
526
			#設置錯誤訊息陣列
527
			$result["error"][]="愈建立的檔案不存在";
528
 
529
			#回傳結果
530
			return $result;
531
 
532
			}#if end
533
 
534
		#函式說明:
535
		#依據取得檔案的擁有着資訊
536
		#回傳結果:
537
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
538
		#$result["error"],錯誤訊息陣列.
539
		#$result["function"],函數名稱. 
540
		#$result["content"],檔案擁有着資訊.
541
		#$result["content"],檔案資訊陣列.
542
		#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
543
		#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
544
		#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
545
		#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
546
		#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
547
		#$result["content"]["ownerName"],檔案擁有着資訊.
548
		#$result["content"]["groupName"],檔案所屬擁有着資訊.
549
		#$result["content"]["size"],檔案大小.
550
		#$result["content"]["modifyDate"],檔案變更年月日.
551
		#$result["content"]["modifyTime"],檔案變更時分秒.
552
		#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
553
		#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
554
		#必填參數:
555
		#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
556
		$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];
557
		#$conf["file"],字串,要查看擁有者資訊的檔案.
558
		$conf["fileAccess::fileInfo"]["file"]=$conf["fileName"];
559
		#可省略參數:
560
		#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".
561
		#$conf["fileToRead"]="help";
562
		#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".
563
		#$conf["output"]="help.html"; 
564
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false".
565
		$conf["fileAccess::fileInfo"]["web"]=$conf["web"];
566
		#參考資料:
567
		#fileowner=>http://php.net/manual/en/function.fileowner.php
568
		#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
569
		$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);
570
		unset($conf["fileAccess::fileInfo"]);
571
 
572
		#如果取得檔案資訊失敗
573
		if($fileInfo["status"]==="false"){
574
 
575
			#設置執行失敗
576
			$result["status"]="false";
577
 
578
			#設置錯誤訊息
579
			$result["error"]=$fileInfo;
580
 
581
			#回傳結果
582
			return $result;
583
 
584
			}#if end	
585
 
586
		#取得檔案的擁有者名稱
587
		$fileOwner=$fileInfo["content"]["ownerName"];
588
 
589
		#執行php的帳戶
590
		$runner=csInformation::runner();	
591
 
592
		#如果執行php的使用者等於檔案的擁有者名稱或為root
593
		if($runner===$fileOwner || $runner==="root"){
594
 
595
			#改變檔案的權限為0770
596
			chmod($conf["fileName"],0770);
597
 
598
			}#if end
599
 
600
		#執行到這邊代表執行正常
601
		$result["status"]="true";
602
 
603
		#回傳結果
604
		return $result;
605
 
606
		}#function writeTextIntoFile end
607
 
608
	/*
609
	#函式說明:
610
	#一次建立多個檔案,並寫入內容.
611
	#回傳結果:
612
	#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
613
	#$result["error"],錯誤訊息陣列.
614
	#$result["function"],當前執行的函數名稱.
615
	#$result["content"][i],實際上寫入的第$i+1個檔案資訊陣列.
616
	#$result["content"][i]["createdFileName"],第$i+1個建立好的檔案名稱.
617
	#$result["content"][i]["createdFilePath"],第$i+1個檔案建立的路徑.
618
	#$result["content"][i]["createdFilePathAndName"].第$i+1個建立好的檔案名稱與路徑.
619
	#$result["argu"],使用的參數.
620
	#必填參數:
621
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
622
	$conf["fileArgu"]=__FILE__;
623
	#$conf["fileName"],字串陣列,爲要寫入的多個檔案名稱
624
	$conf["fileName"]=array("");
625
	#可省略參數:
626
	#$conf["inputString"],字串陣列,爲要寫入到各別檔案裏面的內容,預設每個元素為空字串.
627
	#$conf["inputString"]=array("");
628
	#參考資料:
629
	#無.
630
	#備註:
631
	#無.
632
	*/
633
	public static function writeMultiFile(&$conf){
634
 
635
		#初始化要回傳的變數
636
		$result=array();
637
 
638
		#初始化當前執行的函數名稱
639
		$result["function"]=__FUNCTION__;
640
 
641
		#如果 $conf 不為陣列
642
		if(gettype($conf)!="array"){
643
 
644
			#設置執行失敗
645
			$result["status"]="false";
646
 
647
			#設置執行錯誤訊息
648
			$result["error"][]="\$conf變數須為陣列形態";
649
 
650
			#如果傳入的參數為 null
651
			if($conf==null){
652
 
653
				#設置執行錯誤訊息
654
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
655
 
656
				}#if end
657
 
658
			#回傳結果
659
			return $result;
660
 
661
			}#if end
662
 
663
		#取得使用的參數
664
		$result["argu"]=$conf;
665
 
666
		#檢查參數
667
		#函式說明:
668
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
669
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
670
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
671
		#$result["function"],當前執行的函式名稱.
672
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
673
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
674
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
675
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
676
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
677
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
678
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
679
		#必填寫的參數:
680
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
681
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
682
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
683
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileName");
684
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
685
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
686
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
687
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
688
		#可以省略的參數:
689
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
690
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
691
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
692
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("inputString");
693
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
694
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
695
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
696
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
697
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
698
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("fileName","inputString");
699
		#參考資料來源:
700
		#array_keys=>http://php.net/manual/en/function.array-keys.php
701
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
702
		unset($conf["variableCheck::checkArguments"]);
703
 
704
		#如果 $checkArguments["status"] 等於 "false"
705
		if($checkArguments["status"]=="false"){
706
 
707
			#設置錯誤識別
708
			$result["status"]="false";
709
 
710
			#設置錯誤訊息
711
			$result["error"]=$checkArguments;
712
 
713
			#回傳結果
714
			return $result;				
715
 
716
			}#if end
717
 
718
		#如果 $checkArguments["passed"] 等於 "false"
719
		if($checkArguments["passed"]=="false"){
720
 
721
			#設置錯誤識別
722
			$result["status"]="false";
723
 
724
			#設置錯誤訊息
725
			$result["error"]=$checkArguments;
726
 
727
			#回傳結果
728
			return $result;				
729
 
730
			}#if end
731
 
732
		#如果沒有設定要個別寫入的內容
733
		if(!isset($conf["inputString"])){
734
 
735
			#針對每個檔案名稱
736
			for($i=0;$i<count($conf["fileName"]);$i++){
737
 
738
				#建立空的 $conf["inputString"]
739
				$conf["inputString"][$i]="";
740
 
741
				}#for end
742
 
743
			}#if end
744
 
745
		#針對每個要寫入的檔案
746
		foreach($conf["fileName"] as $index => $file2writre){
747
 
748
			#取得要寫入的內容
749
			$content2writre=$conf["inputString"][$index];
750
 
751
			#函式說明:
752
			#將字串寫入到檔案
753
			#回傳結果:
754
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
755
			#$result["error"],錯誤訊息陣列.
756
			#$result["function"],當前執行的函數名稱.
757
			#$result["fileInfo"],實際上寫入的檔案資訊陣列.
758
			#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
759
			#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
760
			#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
761
			#$result["argu"],使用的參數.
762
			#必填參數:
763
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
764
			$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
765
			#可省略參數:
766
			#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
767
			$conf["fileAccess::writeTextIntoFile"]["fileName"]=$file2writre;
768
			#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
769
			$conf["fileAccess::writeTextIntoFile"]["inputString"]=$content2writre;
770
			#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
771
			#$conf["writeMethod"]="a";
772
			#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
773
			#$conf["checkRepeat"]="";
774
			#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
775
			#$conf["filenameExtensionStartPoint"]="";
776
			#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
777
			#$conf["repeatNameRule"]="";
778
			#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
779
			$conf["fileAccess::writeTextIntoFile"]["web"]="false";
780
			#備註:
781
			#無.
782
			$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
783
			unset($conf["fileAccess::writeTextIntoFile"]);
784
 
785
			#如果建立檔案失敗
786
			if($writeTextIntoFile["status"]==="false"){
787
 
788
				#設置錯誤識別
789
				$result["status"]="false";
790
 
791
				#設置錯誤訊息
792
				$result["error"]=$writeTextIntoFile;
793
 
794
				#回傳結果
795
				return $result;		
796
 
797
				}#if end
798
 
799
			#設置建立好的檔案資訊
800
			$result["content"][]=$writeTextIntoFile["fileInfo"];	
801
 
802
			}#foreach end
803
 
804
			#設置執行正常
805
			$result["status"]="true";
806
 
807
			#回傳結果
808
			return $result;	
809
 
810
		}#function writeMultiFile end
811
 
812
	/*
813
	#函式說明:
814
	#將多行字串寫入到檔案
815
	#回傳結果:
816
	#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
817
	#$result["error"],錯誤訊息陣列.
818
	#$result["function"],當前執行函數的名稱.
819
	#必填參數:
820
	#$conf["fileName"],字串,爲要編輯的檔案名稱
821
	$conf["fileName"]="";
822
	#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
823
	$conf["inputString"]=array("");
824
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
825
	$conf["fileArgu"]=__FILE__;
826
	#可省略參數:
827
	#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
828
	#參考資料:
829
	#無.
830
	#備註:
831
	#無.
832
	*/
833
	public static function writeMultiLine(&$conf){
834
 
835
		#初始化要回傳的結果
836
		$result=array();
837
 
838
		#取得當前執行的函數
839
		$result["function"]=__FUNCTION__;
840
 
841
		#如果 $conf 不為陣列
842
		if(gettype($conf)!="array"){
843
 
844
			#設置執行失敗
845
			$result["status"]="false";
846
 
847
			#設置執行錯誤訊息
848
			$result["error"][]="\$conf變數須為陣列形態";
849
 
850
			#如果傳入的參數為 null
851
			if($conf==null){
852
 
853
				#設置執行錯誤訊息
854
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
855
 
856
				}#if end
857
 
858
			#回傳結果
859
			return $result;
860
 
861
			}#if end
862
 
863
		#檢查必填參數
864
		#函式說明:
865
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
866
		#回傳的結果:
867
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
868
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
869
		#$result["function"],當前執行的函式名稱.
870
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
871
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
872
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
873
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
874
		#必填寫的參數:
875
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
876
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileName","inputString","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
877
		#可以省略的參數:
878
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
879
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
880
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
881
		unset($conf["variableCheck.isexistMulti"]);
882
 
883
		#如果檢查失敗
884
		if($checkResult["status"]=="false"){
885
 
886
			#設置執行錯誤
887
			$result["status"]="false";
888
 
889
			#設置執行錯誤訊息
890
			$result["error"]=$checkResult;
891
 
892
			#回傳結果
893
			return $result;
894
 
895
			}#if end
896
 
897
		#如果檢查不通過
898
		if($checkResult["passed"]=="false"){
899
 
900
			#設置執行錯誤
901
			$result["status"]="false";
902
 
903
			#設置執行錯誤訊息
904
			$result["error"]=$checkResult;
905
 
906
			#回傳結果
907
			return $result;
908
 
909
			}#if end
910
 
911
		#檢查可省略參數 
912
		#函式說明:
913
		#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。
914
		#回傳結果:
915
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
916
		#$result["error"],錯誤訊息陣列.
917
		#$result["function"],當前執行的函式名稱.
918
		#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。
919
		#必填參數:
920
		#$conf["variableCheck.checkSkipableVarType"]["checkedVar"],陣列,要檢查的變數陣列名稱為?
921
		$conf["variableCheck.checkSkipableVarType"]["checkedVar"]=$conf;
922
		#$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.
923
		$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"]=array("writeMethod");
924
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?
925
		$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("string");
926
		#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).
927
		$argu=&$conf;
928
		#可省略參數:
929
		#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.
930
		$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array("w");
931
		#無
932
		$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);
933
		unset($conf["variableCheck.checkSkipableVarType"]);
934
 
935
		#如果檢查不通過
936
		if($checkResult["status"]=="false"){
937
 
938
			#設置執行錯誤
939
			$result["status"]="false";
940
 
941
			#設置執行錯誤訊息
942
			$result["error"]=$checkResult;
943
 
944
			#回傳結果
945
			return $result;
946
 
947
			}#if end
948
 
949
		#如果檢查不通過
950
		if($checkResult["passed"]=="false"){
951
 
952
			#設置執行錯誤
953
			$result["status"]="false";
954
 
955
			#設置執行錯誤訊息
956
			$result["error"]=$checkResult;
957
 
958
			#回傳結果
959
			return $result;
960
 
961
			}#if end
962
 
963
		#初始化第一次寫入識別變數
964
		$firstTimeToWrite="true";
965
 
966
		#有幾行字要寫就執行幾次
967
		foreach($conf["inputString"] as $inputStr){
968
 
969
			#附加 "\r\n"
970
			$inputStr=$inputStr.PHP_EOL;
971
 
972
			#如果是第一次寫入
973
			if($firstTimeToWrite=="true"){
974
 
975
				#如果是要重新寫入
976
				if($conf["writeMethod"]=="w"){
977
 
978
					#函式說明:
979
					#將字串寫入到檔案
980
					#回傳結果:
981
					#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
982
					#$result["error"],錯誤訊息陣列.
983
					#必填參數:
984
					$conf["fileAccess.writeTextIntoFile"]["fileName"]=$conf["fileName"];#爲要編輯的檔案名稱
985
					$conf["fileAccess.writeTextIntoFile"]["inputString"]=$inputStr;#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
986
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
987
					$conf["fileAccess.writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
988
					#可省略參數:
989
					$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
990
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
991
					$conf["fileAccess.writeTextIntoFile"]["web"]="false";
992
					$writeStatus=fileAccess::writeTextIntoFile($conf["fileAccess.writeTextIntoFile"]);
993
					unset($conf["fileAccess.writeTextIntoFile"]);
994
 
995
					#如果寫入失敗
996
					if($writeStatus["status"]=="false"){
997
 
998
						#設置執行錯誤
999
						$result["status"]="false";
1000
 
1001
						#設置執行錯誤訊息
1002
						$result["error"]=$writeStatus;
1003
 
1004
						#回傳結果
1005
						return $result;
1006
 
1007
						}#if end
1008
 
1009
					}#if end
1010
 
1011
				#反之不是重新寫入,而是附加寫入。
1012
				else{
1013
 
1014
					#函式說明:
1015
					#將字串寫入到檔案
1016
					#回傳結果:
1017
					#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1018
					#$result["error"],錯誤訊息陣列.
1019
					#必填參數:
1020
					$conf["fileAccess.writeTextIntoFile"]["fileName"]=$conf["fileName"];#爲要編輯的檔案名稱
1021
					$conf["fileAccess.writeTextIntoFile"]["inputString"]=$inputStr;#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
1022
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1023
					$conf["fileAccess.writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
1024
					#可省略參數:
1025
					$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
1026
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1027
					$conf["fileAccess.writeTextIntoFile"]["web"]="false";
1028
					$writeStatus=fileAccess::writeTextIntoFile($conf["fileAccess.writeTextIntoFile"]);
1029
					unset($conf["fileAccess.writeTextIntoFile"]);
1030
 
1031
					#如果寫入失敗
1032
					if($writeStatus["status"]=="false"){
1033
 
1034
						#設置執行錯誤
1035
						$result["status"]="false";
1036
 
1037
						#設置執行錯誤訊息
1038
						$result["error"]=$writeStatus;
1039
 
1040
						#回傳結果
1041
						return $result;
1042
 
1043
						}#if end
1044
 
1045
					}#else end
1046
 
1047
				#將之設為不是第一次寫入
1048
				$firstTimeToWrite="false";
1049
 
1050
				}#if end
1051
 
1052
			#反之不是第一次寫入
1053
			else{
1054
 
1055
				#函式說明:
1056
				#將字串寫入到檔案
1057
				#回傳結果:
1058
				#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1059
				#$result["error"],錯誤訊息陣列.
1060
				#必填參數:
1061
				$conf["fileAccess.writeTextIntoFile"]["fileName"]=$conf["fileName"];#爲要編輯的檔案名稱
1062
				$conf["fileAccess.writeTextIntoFile"]["inputString"]=$inputStr;#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
1063
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1064
				$conf["fileAccess.writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
1065
				#可省略參數:
1066
				$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
1067
				#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1068
				$conf["fileAccess.writeTextIntoFile"]["web"]="false";
1069
				$writeStatus=fileAccess::writeTextIntoFile($conf["fileAccess.writeTextIntoFile"]);
1070
				unset($conf["fileAccess.writeTextIntoFile"]);
1071
 
1072
				#如果寫入失敗
1073
				if($writeStatus["status"]=="false"){
1074
 
1075
					#設置執行錯誤
1076
					$result["status"]="false";
1077
 
1078
					#設置執行錯誤訊息
1079
					$result["error"]=$writeStatus;
1080
 
1081
					#回傳結果
1082
					return $result;
1083
 
1084
					}#if end
1085
 
1086
				}#else end
1087
 
1088
			}#foreach end
1089
 
1090
		#執行到這邊代表一切正常
1091
		$result["status"]="true";
1092
 
1093
		#回傳結果
1094
		return $result;
1095
 
1096
		}#function writeMultiLine end
1097
 
1098
	/*
1099
	#函式說明:
1100
	#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1101
	#回傳的變數說明:
1102
	#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
1103
	#$result["error"],錯誤訊息提示.
1104
	#$result["warning"],警告訊息.
1105
	#$result["function"],當前執行的函數名稱.
1106
	#$result["fileContent"],爲檔案的內容陣列.
1107
	#$result["lineCount"],爲檔案內容總共的行數.
1108
	#$result["fullContent"],為檔案的完整內容.
200 liveuser 1109
	#$result["base64dataOnly"],檔案的base64data.
1110
	#$result["base64data"],為在網頁上給予src參數的數值.
3 liveuser 1111
	#$result["mimeType"],為檔案的mime type.
1112
	#必填參數:
1113
	#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
1114
	$conf["filePositionAndName"]="";
1115
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1116
	$conf["fileArgu"]=__FILE__;
1117
	#可省略參數:
1118
	#$conf["web"],是要取得網路上的檔案則為"true";反之預設為"false".
1119
	#$conf["web"]="true";
1120
	#$conf["createIfnotExist"],字串,預設為"false"代表檔案不存在也不需要建立;反之為"true".
1121
	#$conf["createIfnotExist"]="false";
1122
	#$conf["autoDeleteSpaceOnEachLineStart"],字串,預設為"false",不做額外處理;反之為"true"
1123
	#$conf["autoDeleteSpaceOnEachLineStart"]="false";
1124
	#參考資料:
1125
	#file(),取得檔案內容的行數.
1126
	#file=>http:#php.net/manual/en/function.file.php
1127
	#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
1128
	#filesize=>http://php.net/manual/en/function.filesize.php
1129
	#參考資料:
1130
	#無.
1131
	#備註:
1132
	#無.
1133
	*/
1134
	public static function getFileContent($conf){
1135
 
1136
		#初始化要回傳的內容
1137
		$result=array();
1138
 
1139
		#取得當前執行函數名稱
1140
		$result["function"]=__FUNCTION__;
1141
 
1142
		#如果 $conf 不為陣列
1143
		if(gettype($conf)!="array"){
1144
 
1145
			#設置執行失敗
1146
			$result["status"]="false";
1147
 
1148
			#設置執行錯誤訊息
1149
			$result["error"][]="\$conf變數須為陣列形態";
1150
 
1151
			#如果傳入的參數為 null
1152
			if($conf==null){
1153
 
1154
				#設置執行錯誤訊息
1155
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1156
 
1157
				}#if end
1158
 
1159
			#回傳結果
1160
			return $result;
1161
 
1162
			}#if end
1163
 
1164
		#檢查參數
1165
		#函式說明:
1166
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
1167
		#回傳結果:
1168
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1169
		#$result["error"],執行不正常結束的錯訊息陣列.
1170
		#$result["simpleError"],簡單表示的錯誤訊息.
1171
		#$result["function"],當前執行的函式名稱.
1172
		#$result["argu"],設置給予的參數.
1173
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1174
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1175
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1176
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1177
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1178
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1179
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1180
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1181
		#必填參數:
1182
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1183
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1184
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1185
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1186
		#可省略參數:
1187
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1188
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePositionAndName","fileArgu");
1189
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1190
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
1191
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1192
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1193
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1194
		#$conf["canNotBeEmpty"]=array();
1195
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1196
		#$conf["canBeEmpty"]=array();
1197
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1198
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");
1199
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1200
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");
1201
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1202
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
1203
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1204
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","false","false");
1205
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
1206
		#$conf["disallowAllSkipableVarIsEmpty"]="";
1207
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
1208
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
1209
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
1210
		#$conf["disallowAllSkipableVarNotExist"]="";
1211
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1212
		#$conf["arrayCountEqualCheck"][]=array();
1213
		#參考資料:
1214
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1215
		#備註:
1216
		#無.
1217
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1218
		unset($conf["variableCheck::checkArguments"]);
1219
 
1220
		#如果檢查出錯
1221
		if($checkArguments["status"]==="false"){
1222
 
1223
			#設置執行錯誤識別
1224
			$result["status"]="false";
1225
 
1226
			#設置執行錯誤訊息
1227
			$result["error"]=$checkArguments;
1228
 
1229
			#回傳結果
1230
			return $result;
1231
 
1232
			}#if end
1233
 
1234
		#如果檢查參數不通過
1235
		if($checkArguments["passed"]==="false"){
1236
 
1237
			#設置執行錯誤識別
1238
			$result["status"]="false";
1239
 
1240
			#設置執行錯誤訊息
1241
			$result["error"]=$checkArguments;
1242
 
1243
			#回傳結果
1244
			return $result;
1245
 
1246
			}#if end
1247
 
1248
		#檢查檔案是否存在
1249
		#函式說明:檢查多個檔案與資料夾是否存在
1250
		#回傳的結果:
1251
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1252
		#$result["error"],錯誤訊息陣列.
1253
		#$resutl["function"],當前執行的涵式名稱.
1254
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
1255
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
1256
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1257
		#必填參數:
1258
		$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($conf["filePositionAndName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
1259
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1260
		$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
1261
		#可省略參數:
1262
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
1263
		$conf["fileAccess"]["checkMutiFileExist"]["disableWebSearch"]="true";
1264
 
1265
		#如果有設置 $conf["web"]
1266
		if(isset($conf["web"])){
1267
 
1268
			#設置 web 參數.
1269
			$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
1270
 
1271
			}#if end
1272
 
1273
		#參考資料來源:
1274
		#http:#php.net/manual/en/function.file-exists.php
1275
		#http:#php.net/manual/en/control-structures.foreach.php
1276
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
1277
		unset($conf["fileAccess"]["checkMutiFileExist"]);
1278
 
1279
		#如果檢查檔案是否存在出錯
1280
		if($fileCheckResult["status"]=="false"){
1281
 
1282
			#設置執行錯誤識別
1283
			$result["status"]="false";
1284
 
1285
			#設置執行錯誤訊息
1286
			$result["error"]=$fileCheckResult;
1287
 
1288
			#回傳結果
1289
			return $result;
1290
 
1291
			}#if end
1292
 
1293
		#如果該檔案不存在
1294
		if($fileCheckResult["varExist"][0]=="false"){
1295
 
1296
			#如果也不要自動建立檔案
1297
			if($conf["createIfnotExist"]==="false"){
1298
 
1299
				#設置執行錯誤識別
1300
				$result["status"]="false";
1301
 
1302
				#設置執行錯誤訊息
1303
				$result["error"]=$fileCheckResult;
1304
 
1305
				#設置易讀的錯誤訊息
1306
				$result["error"][]="名為".$fileCheckResult["varName"][0]."的檔案不存在";
1307
 
1308
				#回傳結果
1309
				return $result;
1310
 
1311
				}#if end
1312
 
1313
			#執行到這邊代表需要建立該檔案
1314
			#函式說明:
1315
			#將字串寫入到檔案
1316
			#回傳結果:
1317
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1318
			#$result["error"],錯誤訊息陣列.
1319
			#$result["function"],當前執行的函數名稱.
1320
			#$result["fileInfo"],實際上寫入的檔案資訊陣列.
1321
			#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
1322
			#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
1323
			#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
1324
			#$result["argu"],使用的參數.
1325
			#必填參數:
1326
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1327
			$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
1328
			#可省略參數:
1329
			#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
1330
			$conf["fileAccess::writeTextIntoFile"]["fileName"]=$fileCheckResult["varNameFullPath"][0];
1331
			#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
200 liveuser 1332
			$conf["fileAccess::writeTextIntoFile"]["inputString"]="";
3 liveuser 1333
			#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
1334
			#$conf["checkRepeat"]="";
1335
			#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
1336
			#$conf["filenameExtensionStartPoint"]="";
1337
			#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
1338
			#$conf["repeatNameRule"]="";
1339
 
1340
			#如果有設置 $conf["web"]
1341
			if(isset($conf["web"])){
1342
 
1343
				#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1344
				$conf["fileAccess::writeTextIntoFile"]["web"]=$conf["web"];
1345
 
200 liveuser 1346
				}#if end
3 liveuser 1347
 
1348
			#參考資料:
1349
			#無.
1350
			#備註:
1351
			#無.
1352
			$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
1353
			unset($conf["fileAccess::writeTextIntoFile"]);
1354
 
1355
			#如果建立檔案失敗
1356
			if($writeTextIntoFile["status"]=="false"){
1357
 
1358
				#設置執行錯誤識別
1359
				$result["status"]="false";
1360
 
1361
				#設置執行錯誤訊息
1362
				$result["error"]=$writeTextIntoFile;
1363
 
1364
				#回傳結果
1365
				return $result;
1366
 
1367
				}#if end
1368
 
1369
			}#if end
1370
 
1371
		#file absolute addr
1372
		$fileAbAddr=$fileCheckResult["varNameFullPath"][0];
1373
 
1374
		#將檔案的內容放進變數裡面(會得到陣列)
1375
		$fileContent=file($fileAbAddr);
1376
 
1377
		#如果 $fileContent 等於
1378
		if($fileContent==FALSE){
1379
 
1380
			#如果檔案大小為0bytes
1381
			if(filesize($fileAbAddr)==0){
1382
 
1383
				#設置錯誤識別
1384
				$result["warning"][]="執行結果沒有輸出內容";
1385
 
1386
				}#if end
1387
 
1388
			#反之檔案有內容
1389
			else{
1390
 
1391
				#設置錯誤識別
1392
				$result["status"]="false";
1393
 
1394
				#設置錯誤訊息
1395
				$result["error"][]="讀取檔案失敗";
1396
 
42 liveuser 1397
				#取得詳細的錯誤訊息
1398
				$result["error"][]=$fileCheckResult;
1399
 
3 liveuser 1400
				#回傳結果
1401
				return $result;
1402
 
1403
				}#else end
1404
 
1405
			}#if end
1406
 
1407
		#針對每行內容
1408
		for($i=0;$i<count($fileContent);$i++){
1409
 
1410
			#剔除字串尾的換行符號
1411
			$fileContent[$i]=rtrim($fileContent[$i]);
1412
 
1413
			#如果要移除開頭的空白
1414
			if($conf["autoDeleteSpaceOnEachLineStart"]==="true"){
1415
 
1416
				#如果開頭是空格
1417
				while(strpos($fileContent[$i]," ")===0){
1418
 
1419
					#函式說明:
1420
					#將字串特定關鍵字與其前面的內容剔除
1421
					#回傳結果:
1422
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1423
					#$result["error"],錯誤訊息陣列.
1424
					#$result["warning"],警告訊息鎮列.
1425
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1426
					#$result["function"],當前執行的函數名稱.
1427
					#$result["argu"],使用的參數.
1428
					#$result["oriStr"],要處理的原始字串內容.
1429
					#$result["content"],處理好的的字串內容.	
1430
					#必填參數:
1431
					#$conf["stringIn"],字串,要處理的字串.
1432
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileContent[$i];
1433
					#$conf["keyWord"],字串,特定字串.
1434
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
1435
					#可省略參數:
1436
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
1437
					#$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
1438
					#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
1439
					#$conf["lastResult"]=$delStrBeforeKeyWord;
1440
					#參考資料:
1441
					#無.
1442
					#備註:
1443
					#無.
1444
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
1445
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
1446
 
1447
					#如果建立檔案失敗
1448
					if($delStrBeforeKeyWord["status"]=="false"){
1449
 
1450
						#設置執行錯誤識別
1451
						$result["status"]="false";
1452
 
1453
						#設置執行錯誤訊息
1454
						$result["error"]=$delStrBeforeKeyWord;
1455
 
1456
						#回傳結果
1457
						return $result;
1458
 
1459
						}#if end
1460
 
1461
					#取得剔除開頭空格後的內容
1462
					$fileContent[$i]=$delStrBeforeKeyWord["content"];
1463
 
1464
					}#while end
1465
 
1466
				}#if end
1467
 
1468
			}#for end
1469
 
1470
		#取得總共有幾行
1471
		$lineCount=count($fileContent);
1472
 
1473
		#將檔案內容的陣列放進 $result 陣列變數裏面
1474
		$result["fileContent"]=$fileContent;
1475
 
1476
		#建立暫存檔案
1477
		$tmpFile=tempnam("/tmp", "qbpwcf");
1478
 
1479
		#讀取要取得的檔案內容
1480
		$content=file_get_contents($fileAbAddr);
1481
 
1482
		#開啟暫存檔案(寫入模式)
1483
		$file=fopen($tmpFile,'w');
1484
 
1485
		#寫入讀取到的內容
1486
		fwrite($file,$content);
1487
 
1488
		#關閉暫存檔案
1489
		fclose($file);
1490
 
1491
		#取得檔案的 mime 類型
1492
		$mimeType=mime_content_type($tmpFile);
1493
 
1494
		#設置檔案的mime類型
1495
		$result["mimeType"]=$mimeType;
1496
 
1497
		#取得檔案的內容為字串
1498
		$result["fullContent"]=file_get_contents($tmpFile);
1499
 
1500
		#取得檔案的base64data
200 liveuser 1501
		$result["base64dataOnly"]=base64_encode($result["fullContent"]);
3 liveuser 1502
 
200 liveuser 1503
		#取得檔案用 data:mimeType;base64,base64data 表示的字串
203 liveuser 1504
		$result["base64data"]="data:".$result["mimeType"].";base64,".$result["base64dataOnly"];
200 liveuser 1505
 
3 liveuser 1506
		#移除暫存檔案
1507
		unlink($tmpFile);
200 liveuser 1508
 
3 liveuser 1509
		#將檔案內容的行數放進 $result 陣列變數裏面
1510
		$result["lineCount"]=$lineCount;
1511
 
1512
		#執行到這邊代表執行成功
1513
		$result["status"]="true";
1514
 
1515
		#回傳結果
1516
		return $result;
1517
 
1518
		}#function getFileContent end
1519
 
1520
	/*
1521
	#函式說明:
1522
	#依據逗號分隔抓取檔案的內容,結果會回傳一個陣列
1523
	#回傳結果:	
1524
	#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
1525
	#$result["error"],錯誤訊息提示.
1526
	#$result["function"],函數名稱.
1527
	#$result["lineCount"]爲總共有幾行
1528
	#$result["lineContent"][i]["dataCounts"],爲第 i+1 行總共有幾個字串
1529
	#$result["lineContent"][0][i],爲第1行第 i+1 個分割好的字串
1530
	#$result["lineContent"][1][i],爲第2行第 i+1 個分割好的字串
1531
	#必填參數:
1532
	#$conf["filePositionAndName"],字串,要抓取的檔案位置與名稱
1533
	$conf["filePositionAndName"]="";
1534
	#可省略參數:
1535
	#$conf["spiltSign"],字串,爲要用來分割字串的符號,可省略,預設爲「,」
1536
	#$conf["spiltSign"]="";
1537
	#參考資料:
1538
	#無.
1539
	#備註:
1540
	#無.
1541
	*/
1542
	public static function getFileContentSpiltBySomething($conf){
1543
 
1544
		#初始化要回傳的內容
1545
		$result=array();
1546
 
1547
		#取得當前執行函數名稱
1548
		$result["function"]=__FUNCTION__;
1549
 
1550
		#如果 $conf 不為陣列
1551
		if(gettype($conf)!="array"){
1552
 
1553
			#設置執行失敗
1554
			$result["status"]="false";
1555
 
1556
			#設置執行錯誤訊息
1557
			$result["error"][]="\$conf變數須為陣列形態";
1558
 
1559
			#如果傳入的參數為 null
1560
			if($conf==null){
1561
 
1562
				#設置執行錯誤訊息
1563
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1564
 
1565
				}#if end
1566
 
1567
			#回傳結果
1568
			return $result;
1569
 
1570
			}#if end
1571
 
1572
		#如果 $conf["spiltSign"] 爲空,則預設爲","。
1573
		if(!isset($conf["spiltSign"])){
1574
 
1575
			$conf["spiltSign"]=",";
1576
 
1577
			}#if end
1578
 
1579
		#依據行號抓取所有的內容
1580
		#函式說明:
1581
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1582
		#回傳的變數說明:
1583
		#$result["fileContent"],爲檔案的內容陣列
1584
		#$result["lineCount"],爲檔案內容總共的行數
1585
		#必填參數:
1586
		$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["filePositionAndName"];#爲檔案的位置以及名稱
1587
		#參考資料:
1588
		#file():取得檔案內容的行數
1589
		#http:#php.net/manual/en/function.file.php
1590
		$fileContent=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
1591
		unset($conf["fileAccess"]["getFileContent"]);
1592
 
1593
		#如果取得檔案內容失敗
1594
		if($fileContent["status"]=="false"){
1595
 
1596
			#設置執行失敗
1597
			$result["status"]="false";
1598
 
1599
			#設置執行錯誤訊息
1600
			$result["error"]=$fileContent;
1601
 
1602
			#回傳結果
1603
			return $result;
1604
 
1605
			}#if end
1606
 
1607
		#迴圈,有幾行資料就執行幾次
1608
		for($i=0;$i<$fileContent["lineCount"];$i++){
1609
 
1610
			#將該行內容用逗號分隔
1611
			$conf["stringProcess"]["spiltString"]["stringIn"]=$fileContent["fileContent"][$i];#要處理的字串。
1612
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=$conf["spiltSign"];#爲以哪個符號作爲分割
1613
			$lineSpiltResult[$i]=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
1614
			unset($conf["stringProcess"]["spiltString"]);	
1615
 
1616
			#如果分割字串失敗
1617
			if($lineSpiltResult[$i]["status"]=="false"){
1618
 
1619
				#設置執行失敗
1620
				$result["status"]="false";
1621
 
1622
				#設置執行錯誤訊息
1623
				$result["error"]=$lineSpiltResult[$i];
1624
 
1625
				#回傳結果
1626
				return $result;
1627
 
1628
				}#if end
1629
 
1630
			}#for end
1631
 
1632
		#取得
1633
		$result["lineContent"]=$lineSpiltResult;
1634
 
1635
		#取得資料的行數
1636
		$result["lineCount"]=$fileContent["lineCount"];
1637
 
1638
		#回傳結果
1639
		return $result;
1640
 
1641
		}#function getFileContentSpiltBySomething end
1642
 
1643
	/*
1644
	#函式說明:
1645
	#檢查多個檔案與資料夾是否存在.
1646
	#回傳的結果:
1647
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1648
	#$result["error"],錯誤訊息陣列.
1649
	#$resutl["function"],當前執行的涵式名稱.
1650
	#$result["argu"],使用的參數.
1651
	#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
1652
	#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
1653
	#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
1654
	#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
1655
	#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1656
	#必填參數:
1657
	#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
1658
	$conf["fileArray"]=array();
1659
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1660
	$conf["fileArgu"]=__FILE__;
1661
	#可省略參數:
1662
	#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
1663
	#$conf["disableWebSearch"]="false";
1664
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
1665
	#$conf["userDir"]="true";
1666
	#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
1667
	#$conf["web"]="true";
1668
	#參考資料:
1669
	#http://php.net/manual/en/function.file-exists.php
1670
	#http://php.net/manual/en/control-structures.foreach.php
1671
	#備註:
1672
	#函數file_exists檢查的路徑為檔案系統的路徑
1673
	#$result["varName"][$i]結果未實作
1674
	*/
1675
	public static function checkMultiFileExist(&$conf){
1676
 
1677
		#初始化要回傳的變數
1678
		$result=array();
1679
 
1680
		#設置當前執行的涵式
1681
		$result["function"]=__FUNCTION__;
1682
 
1683
		#如果 $conf 不為陣列
1684
		if(gettype($conf)!="array"){
1685
 
1686
			#設置執行失敗
1687
			$result["status"]="false";
1688
 
1689
			#設置執行錯誤訊息
1690
			$result["error"][]="\$conf變數須為陣列形態";
1691
 
1692
			#如果傳入的參數為 null
1693
			if($conf==null){
1694
 
1695
				#設置執行錯誤訊息
1696
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1697
 
1698
				}#if end
1699
 
1700
			#回傳結果
1701
			return $result;
1702
 
1703
			}#if end
1704
 
1705
		#取得使用的參數
1706
		$result["argu"]=$conf;
1707
 
1708
		#檢查參數
1709
		#函式說明:
1710
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1711
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1712
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1713
		#$result["function"],當前執行的函式名稱.
1714
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1715
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1716
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1717
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1718
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1719
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1720
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1721
		#必填寫的參數:
1722
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1723
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1724
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1725
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArray","fileArgu");
1726
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1727
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
1728
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1729
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1730
		#可以省略的參數:
1731
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1732
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1733
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1734
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("disableWebSearch","userDir","web");
1735
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1736
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
1737
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1738
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","true","true");
1739
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1740
		#$conf["arrayCountEqualCheck"][]=array();
1741
		#參考資料來源:
1742
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1743
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1744
		unset($conf["variableCheck::checkArguments"]);
1745
 
1746
		#如果 $checkArguments["status"] 等於 "false"
1747
		if($checkArguments["status"]=="false"){
1748
 
1749
			#設置錯誤識別
1750
			$result["status"]="false";
1751
 
1752
			#設置錯誤訊息
1753
			$result["error"]=$checkArguments;
1754
 
1755
			#回傳結果
42 liveuser 1756
			return $result;
3 liveuser 1757
 
1758
			}#if end
1759
 
1760
		#如果 $checkArguments["passed"] 等於 "false"
1761
		if($checkArguments["passed"]=="false"){
1762
 
1763
			#設置錯誤識別
1764
			$result["status"]="false";
1765
 
1766
			#設置錯誤訊息
1767
			$result["error"]=$checkArguments;
1768
 
1769
			#回傳結果
42 liveuser 1770
			return $result;
3 liveuser 1771
 
1772
			}#if end
1773
 
1774
		#初始化儲存每個檔案是否存在的陣列變數
1775
		$result["varName"]=array();
1776
		$result["varExist"]=array();
1777
 
1778
		#針對每個要檢查的檔案
1779
		foreach($conf["fileArray"] as $i=>$varName){
1780
 
1781
			#儲存要判斷是否存在的物件
1782
			$result["varName"][]=$varName;
1783
 
1784
			#函式說明:
1785
			#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
1786
			#回傳結果:
1787
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1788
			#$result["error"],錯誤訊息陣列.
1789
			#$result["function"],函數名稱. 
1790
			#$result["argu"],使用的參數.
1791
			#$result["content"],網址,若是在命令列執行,則為"null".
1792
			#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
1793
			#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
1794
			#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
1795
			#必填參數:
1796
			#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
1797
			$conf["fileAccess::getInternetAddressV2"]["address"]=$varName;
1798
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1799
			$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
1800
			#可省略參數:
1801
			$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
1802
			#備註:
1803
			#建構中,fileSystemRelativePosition尚未實作.
1804
			$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
1805
			unset($conf["fileAccess::getInternetAddressV2"]);
1806
 
1807
			#如果轉換成絕對路徑失敗
1808
			if($getInternetAddressV2["status"]=="false"){
1809
 
1810
				#設置錯誤識別
1811
				$result["status"]="false";
1812
 
1813
				#設置錯誤訊息
1814
				$result["error"]=$getInternetAddressV2;
1815
 
1816
				#回傳結果
1817
				return $result;
1818
 
1819
				}#if end
1820
 
1821
			#傳參考
1822
			$getInternetAddress=&$getInternetAddressV2;
1823
 
1824
			#如果沒有檔案的絕對路徑位置
1825
			if(!isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1826
 
1827
				#置換成給予的參數網址
1828
				$conf["fileArray"][$i]=$getInternetAddress["content"];
1829
 
1830
				#設置無法從檔案系統找到
1831
				$exist=FALSE;
1832
 
1833
				}#if end
1834
 
1835
			#反之取得
1836
			else{
1837
 
1838
				#轉換好的絕對路徑
1839
				$conf["fileArray"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
1840
 
42 liveuser 1841
				#無窮迴圈
1842
				while(true){
3 liveuser 1843
 
42 liveuser 1844
					#判斷該檔案是否存在
1845
					$exist=file_exists($conf["fileArray"][$i]);
3 liveuser 1846
 
42 liveuser 1847
					#如果不存在
1848
					if($exist===false){
1849
 
1850
						#無窮迴圈
1851
						while(true){
1852
 
1853
							#當要檢查的目標是 link 時
1854
							if(is_link($conf["fileArray"][$i])){
1855
 
1856
								#取得link的路徑
1857
								$conf["fileArray"][$i]=readlink($conf["fileArray"][$i]);
1858
 
1859
								#結束連結的判斷,回到判斷目標是否存在的地方.
1860
								continue 2;
1861
 
1862
								}#if end
1863
 
1864
							#結束連結的判斷
1865
							break;
1866
 
1867
							}#while end
1868
 
1869
						}#if end
1870
 
1871
					#結束到判斷目標是否存在
1872
					break;
3 liveuser 1873
 
42 liveuser 1874
					}#while end
3 liveuser 1875
 
1876
				}#else end
1877
 
1878
			#如果 $exist 等於 false (檔案不存在) 且 沒有停用網路搜尋功能
1879
			if($exist===FALSE && $conf["disableWebSearch"]==="false"){
1880
 
1881
				#將目標轉換成網址
1882
				#函式說明:
1883
				#將檔案的位置名稱變成網址
1884
				#回傳結果:
1885
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1886
				#$result["error"],錯誤訊息陣列.
1887
				#$result["function"],函數名稱. 
1888
				#$result["content"],網址.
1889
				#必填參數:
1890
				#$conf["address"],字串,檔案的相對位置.
1891
				$conf["fileAccess::getInternetAddress"]["address"]=$conf["fileArray"][$i];
1892
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1893
				$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
1894
				$getInternetAddress=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddress"]);
1895
				unset($conf["fileAccess::getInternetAddress"]);
1896
 
1897
				#如果轉換失敗
1898
				if($getInternetAddress["status"]=="false"){
1899
 
1900
					#設置錯誤識別
1901
					$result["status"]="false";
1902
 
1903
					#設置錯誤訊息
1904
					$result["error"]=$getInternetAddress;
1905
 
1906
					#回傳結果
1907
					return $result;	
1908
 
1909
					}#if end
1910
 
1911
				#函式說明:
1912
				#運行curl cmd
1913
				#回傳結果:
1914
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1915
				#$result["error"],錯誤訊息陣列.
1916
				#$result["function"],當前執行的函式名稱.
1917
				#$result["content"],取得的回應內容.
1918
				#$result["cookie"],cookie檔案的位置與名稱.
1919
				#$result["cmd"],執行的command.
1920
				#$result["argu],使用的參數.
1921
				#必填參數:
1922
				#$conf["url"],字串,目標url.
1923
				$conf["catchWebContent::curlCmd"]["url"]=$getInternetAddress["content"];
1924
				#$conf["fileArgu"],字串,變數__FILE__的內容.
1925
				$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];
1926
				#可省略參數:
1927
				#$conf["header"],字串陣列,要傳送的header.
1928
				#$conf["header"]=array();
1929
				#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
1930
				#$conf["allowAnySSLcertificate"]="";
1931
				#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
1932
				#$conf["postVar"]=array();
1933
				#$conf["rawPost"]="字串",要傳送的raw post內容.
1934
				#$conf["rawPost"]="";
1935
				#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
1936
				#$conf["urlEncode"]="false";
1937
				#$conf["agent"],字串,user agent的名稱.
1938
				#$conf["agent"]="";
1939
				#$conf["cookie"],字串,cookie位置與檔案位置.
1940
				#$conf["cookie"]="";
1941
				#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
1942
				#$conf["forceNewCookie"]="";
1943
				$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
1944
				unset($conf["catchWebContent::curlCmd"]);
1945
 
1946
				#如果抓取資料失敗
1947
				if($curlCmd["status"]==="false"){
1948
 
1949
					#設置錯誤識別
1950
					$result["status"]="false";
1951
 
1952
					#設置錯誤訊息
1953
					$result["error"]=$curlCmd;
1954
 
1955
					#回傳結果
1956
					return $result;
1957
 
1958
					}#if end
1959
 
1960
				#反之檔案存在網路上
1961
				else{
1962
 
1963
					#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1964
					$result["varName"][$i]=$getInternetAddress["content"];
1965
 
1966
					#如果存在檔案路徑的絕對位置
1967
					if(isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1968
 
42 liveuser 1969
						#設置該檔案的絕對路徑位置
3 liveuser 1970
						$result["varNameFullPath"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
42 liveuser 1971
 
3 liveuser 1972
						}#if end
1973
 
1974
					#反之代表輸入參數是網址	
1975
					else{
1976
 
1977
						#設置該檔案的網址
1978
						$result["varNameWebPath"][$i]=$getInternetAddress["content"];
1979
 
1980
						}#else end
1981
 
1982
					#設置有無找到的識別
1983
					$result["varExist"][$i]=$curlCmd["founded"];
1984
 
1985
					}#else end
1986
 
1987
				}#if end
1988
 
1989
			#反之檔案不存在,且停用網路搜尋.
1990
			else if($exist===FALSE){
1991
 
1992
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1993
				$result["varName"][$i]=$conf["fileArray"][$i];
1994
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
1995
				$result["varExist"][$i]="false";
1996
 
1997
				#設置全部檔案都存在的識別變數為 "false"
1998
				$result["allExist"]="false";
1999
 
2000
				}#if end
2001
 
2002
			#反之代表檔案存在
2003
			else{
2004
 
2005
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
2006
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
2007
 
2008
				#如果 web 參數為 "true"
2009
				if($conf["web"]==="true"){
2010
 
2011
					#設置網路上的位置
2012
					$result["varNameWebPath"][$i]=$getInternetAddress["content"];
2013
 
2014
					}#if end
2015
 
2016
				$result["varExist"][$i]="true";
2017
 
2018
				}#else end
2019
 
2020
			}#foreach end
2021
 
2022
		#如果所有檔案與資料夾都找到的識別變數不存在
2023
		if(!isset($result["allExist"])){
2024
 
2025
			#設置全部檔案與資料夾都有找到
2026
			$result["allExist"]="true";
2027
 
2028
			}#if end
2029
 
2030
		#執行到這邊代表執行正常
2031
		$result["status"]="true";
2032
 
2033
		#回傳結果
2034
		return $result;
2035
 
2036
		}#function checkMutiFileExist
2037
 
2038
	/*
2039
	#函式說明:
2040
	#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
2041
	#回傳結果:
2042
	#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
2043
	#$result["error"],錯誤訊息陣列.
2044
	#$result["function"],當前執行的函數名稱.
2045
	#$result["argu"],使用的參數.
2046
	#$result["createdFileName"],建立好的檔案名稱.
2047
	#$result["createdFilePath"],檔案建立的路徑.
2048
	#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
2049
	#必填參數:
2050
	#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
2051
	$conf["checkedFileAndPath"]="";
2052
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2053
	$conf["fileArgu"]=__FILE__;
2054
	#可省略參數:
2055
	#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.
2056
	#$conf["filenameExtensionStartPoint"]="";
2057
	#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".
2058
	#$conf["repeatNameRule"]="";
2059
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2060
	#$conf["web"]="false";
2061
	#參考資料:
2062
	#無.
2063
	#備註:
2064
	#如果要在/tmp底下建立檔案,若在apache環境下則會被作業系統特殊處理,即不等於實際上的路徑.
2065
	*/
2066
	public static function createFileAfterCheck(&$conf){
2067
 
2068
		#初始化要回傳的結果
2069
		$result=array();
2070
 
2071
		#設置當前執行的涵式
2072
		$result["function"]=__FUNCTION__;
2073
 
2074
		#如果 $conf 不為陣列
2075
		if(gettype($conf)!="array"){
2076
 
2077
			#設置執行失敗
2078
			$result["status"]="false";
2079
 
2080
			#設置執行錯誤訊息
2081
			$result["error"][]="\$conf變數須為陣列形態";
2082
 
2083
			#如果傳入的參數為 null
2084
			if($conf==null){
2085
 
2086
				#設置執行錯誤訊息
2087
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2088
 
2089
				}#if end
2090
 
2091
			#回傳結果
2092
			return $result;
2093
 
2094
			}#if end
2095
 
2096
		#取得參數
2097
		$result["argu"]=$conf;
2098
 
2099
		#檢查參數
2100
		#函式說明:
2101
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2102
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2103
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2104
		#$result["function"],當前執行的函式名稱.
2105
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2106
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2107
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2108
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2109
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2110
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2111
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2112
		#必填寫的參數:
2113
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2114
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2115
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2116
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","checkedFileAndPath");
2117
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2118
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2119
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2120
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2121
		#可以省略的參數:
2122
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2123
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2124
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2125
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("filenameExtensionStartPoint","repeatNameRule","web");
2126
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2127
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
2128
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2129
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1","(\$i)","false");
2130
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2131
		#$conf["arrayCountEqualCheck"][]=array();
2132
		#參考資料來源:
2133
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2134
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2135
		unset($conf["variableCheck::checkArguments"]);
2136
 
2137
		#如果 $checkArguments["status"] 等於 "false"
2138
		if($checkArguments["status"]=="false"){
2139
 
2140
			#設置錯誤識別
2141
			$result["status"]="false";
2142
 
2143
			#設置錯誤訊息
2144
			$result["error"]=$checkArguments;
2145
 
2146
			#回傳結果
2147
			return $result;				
2148
 
2149
			}#if end
2150
 
2151
		#如果 $checkArguments["passed"] 等於 "false"
2152
		if($checkArguments["passed"]=="false"){
2153
 
2154
			#設置錯誤識別
2155
			$result["status"]="false";
2156
 
2157
			#設置錯誤訊息
2158
			$result["error"]=$checkArguments;
2159
 
2160
			#回傳結果
2161
			return $result;				
2162
 
2163
			}#if end	
2164
 
2165
		#確保要建立檔案的路徑
2166
		#函式說明:
2167
		#確保路徑存在.
2168
		#回傳結果:
2169
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2170
		#$result["error"],錯誤訊息陣列.
2171
		#$resutl["function"],當前執行的涵式名稱.
2172
		#$result["path"],建立好的路徑字串.
2173
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
2174
		#必填參數:
2175
		#$conf["path"],要檢查的路徑
2176
		$conf["fileAccess::validatePath"]["path"]=$conf["checkedFileAndPath"];		
2177
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2178
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2179
		#可省略參數:
2180
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2181
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2182
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2183
		#$conf["dirPermission"]="";
2184
		$conf["fileAccess::validatePath"]["web"]=$conf["web"];
2185
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2186
		unset($conf["fileAccess::validatePath"]);	
2187
 
2188
		#debug
2189
		#var_dump($validatePath);
2190
		#exit;	
2191
 
2192
		#如果確保路徑失敗
2193
		if($validatePath["status"]==="false"){
2194
 
2195
			#設置錯誤識別
2196
			$result["status"]="false";
2197
 
2198
			#設置錯誤訊息
2199
			$result["error"]=$validatePath;
2200
 
2201
			#回傳結果
2202
			return $result;
2203
 
2204
			}#if end
2205
 
2206
		#取得要建立的檔案名稱
2207
		$createdFileName=$validatePath["fileName"];
2208
 
2209
		#取得要建立的路徑			
2210
		$createdFilePath=$validatePath["path"];
2211
 
2212
		#透過無窮迴圈嘗試建立不同編號的檔案
2213
		for($i=0;$i>-1;$i++){
2214
 
2215
			#如果 $i 為 0
2216
			if($i==0){
2217
 
2218
				#檢查該檔案是否存在
2219
				#函式說明:
2220
				#檢查多個檔案與資料夾是否存在.
2221
				#回傳的結果:
2222
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2223
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2224
				#必填參數:
2225
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2226
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2227
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2228
				#參考資料來源:
2229
				#http://php.net/manual/en/function.file-exists.php
2230
				#http://php.net/manual/en/control-structures.foreach.php
2231
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2232
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2233
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2234
 
2235
				#debug
2236
				#var_dump($checkResult);
2237
				#exit;
2238
 
2239
				#如果檢查檔案是否存在失敗
2240
				if($checkResult["status"]=="false"){
2241
 
2242
					#設置執行失敗
2243
					$result["status"]="false";
2244
 
2245
					#設置錯誤訊息
2246
					$result["error"]=$checkResult;
2247
 
2248
					#回傳結果
2249
					return $result;
2250
 
2251
					}#if end
2252
 
2253
				#如果 $createFilePath.$createdFileName 檔案存在
2254
				if($checkResult["varExist"][0]=="true"){
2255
 
2256
					#跳過這次迴圈
2257
					continue;
2258
 
2259
					}#if end
2260
 
2261
				#反之代表 $createFilePath.$createdFileName 檔案不存在
2262
				else{
2263
 
2264
					#嘗試建立該檔案
2265
					#函式說明:
2266
					#將字串寫入到檔案
2267
					#回傳結果:
2268
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2269
					#$result["error"],錯誤訊息陣列.
2270
					#必填參數:
2271
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2272
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2273
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2274
					#可省略參數:
2275
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2276
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2277
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2278
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2279
 
2280
					#如果 $fileCreateResult["status"] 等於 "true"
2281
					if($fileCreateResult["status"]=="true"){
2282
 
2283
						#代表檔案建立成功
2284
 
2285
						#更新建立的檔案名稱
2286
						$result["createdFileName"]=$createdFileName;
2287
 
2288
						#設置新建立的檔案名稱與路徑
2289
						$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2290
 
2291
						#設置新建立的檔與路徑
2292
						$result["createdFilePath"]=$createdFilePath;
2293
 
2294
						#跳出迴圈
2295
						break;
2296
 
2297
						}#if end
2298
 
2299
					#反之代表檔案建立失敗
2300
					else{
2301
 
2302
						#設置錯誤識別
2303
						$result["status"]="false";
2304
 
2305
						#設置錯誤訊息
2306
						$result["error"]=$fileCreateResult;
2307
 
2308
						#回傳結果
2309
						return $result;
2310
 
2311
						}#else end
2312
 
2313
					}#else end	
2314
 
2315
				}#if end
2316
 
2317
			#反之代表有相同檔名存在
2318
			else{					
2319
 
2320
				#用「.」分割檔案名稱
2321
				#函式說明:
2322
				#將固定格式的字串分開,並回傳分開的結果。
2323
				#回傳結果:
2324
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2325
				#$result["error"],錯誤訊息陣列
2326
				#$result["function"],當前執行的函數名稱.
2327
				#$result["oriStr"],要分割的原始字串內容
2328
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2329
				#$result["dataCounts"],爲總共分成幾段
2330
				#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
2331
				#必填參數:
2332
				$conf["stringProcess::spiltString"]["stringIn"]=$createdFileName;#要處理的字串。
2333
				$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
2334
				#可省略參數:
2335
				#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2336
				$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2337
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2338
				unset($conf["stringProcess::spiltString"]);					
2339
 
2340
				#如果分割檔案名稱失敗
2341
				if($spiltString["status"]=="false"){
2342
 
2343
					#設置執行失敗
2344
					$result["status"]="false";
2345
 
2346
					#設置錯誤訊息
2347
					$result["error"]=$spiltString;
2348
 
2349
					#回傳結果
2350
					return $result;
2351
 
2352
					}#if end
2353
 
2354
				#初始化儲存建立的檔案名稱
2355
				$createdFileName="";
2356
 
2357
				#初始化儲存編號的變數
2358
				$no="";
2359
 
2360
				#如果沒有dot存在
2361
				if($spiltString["found"]=="false"){
2362
 
2363
					#解析 $conf["repeatNameRule"],用 \$i 分割.
2364
					#函式說明:
2365
					#將固定格式的字串分開,並回傳分開的結果。
2366
					#回傳結果:
2367
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2368
					#$result["error"],錯誤訊息陣列
2369
					#$result["function"],當前執行的函數名稱.
2370
					#$result["oriStr"],要分割的原始字串內容
2371
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2372
					#$result["dataCounts"],爲總共分成幾段
2373
					#必填參數:
2374
					$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2375
					$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2376
					#可省略參數:
2377
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2378
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2379
					$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2380
					unset($conf["stringProcess::spiltString"]);					
2381
 
2382
					#如果分割檔案名稱失敗
2383
					if($noString["status"]=="false"){
2384
 
2385
						#設置執行失敗
2386
						$result["status"]="false";
2387
 
2388
						#設置錯誤訊息
2389
						$result["error"]=$noString;
2390
 
2391
						#回傳結果
2392
						return $result;
2393
 
2394
						}#if end
2395
 
2396
					#如果 編號規則字串 分割出來的段數為2
2397
					if($noString["dataCounts"]==2){
2398
 
2399
						#組合編號
2400
						$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2401
 
2402
						}#if end
2403
 
2404
					#反之 號規則字串 分割出來的段數為1
2405
					else if($noString["dataCounts"]==1){
2406
 
2407
						#判斷 "\$i" 在開頭或結尾
2408
						#函式說明:
2409
						#取得關鍵字在字串的哪個位置
2410
						#回傳結果:
2411
						#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2412
						#$result["error"],錯誤訊息陣列.
2413
						#$result["function"],當前執行的函數名稱.
2414
						#$result["argu"],傳入的參數.
2415
						#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2416
						#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2417
						#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2418
						#必填參數:
2419
						#$conf["inputStr"],字串,被搜尋的字串.
2420
						$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2421
						#$conf["keyWord"],字串,關鍵字.
2422
						$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2423
						#參考資料:
2424
						#http://php.net/manual/en/function.strpos.php
2425
						$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2426
						unset($conf["search::findKeyWordPosition"]);
2427
 
2428
						#如果取得關鍵字位置失敗
2429
						if($findKeyWordPosition["status"]=="false"){
2430
 
2431
							#設置執行失敗
2432
							$result["status"]="false";
2433
 
2434
							#設置錯誤訊息
2435
							$result["error"]=$findKeyWordPosition;
2436
 
2437
							#回傳結果
2438
							return $result;
2439
 
2440
							}#if end
2441
 
2442
						#如果關鍵字在開頭
2443
						if($findKeyWordPosition["head"]=="true"){
2444
 
2445
							#組合編號
2446
							$no=$i.$noString["dataArray"][0];
2447
 
2448
							}#if end
2449
 
2450
						#反之如果關鍵字在結尾
2451
						else if($findKeyWordPosition["tail"]=="true"){
2452
 
2453
							#組合編號
2454
							$no=$noString["dataArray"][0].$i;
2455
 
2456
							}#if end
2457
 
2458
						#其他情況
2459
						else{
2460
 
2461
							#設置執行失敗
2462
							$result["status"]="false";
2463
 
2464
							#設置錯誤訊息
2465
							$result["error"]=$findKeyWordPosition;
2466
 
2467
							#設置額外的錯誤訊息
2468
							$result["error"][]="非預期的結果";
2469
 
2470
							#回傳結果
2471
							return $result;
2472
 
2473
							}#else end
2474
 
2475
						}#if end
2476
 
2477
					#反之 編號規則字串 分割出來的段數為0
2478
					else if($noString["dataCounts"]==0){
2479
 
2480
						#組合編號
2481
						$no=$j;
2482
 
2483
						}#if end
2484
 
2485
					#其他結果
2486
					else{
2487
 
2488
						#設置執行失敗
2489
						$result["status"]="false";
2490
 
2491
						#設置錯誤訊息
2492
						$result["error"]=$noString;
2493
 
2494
						#設置額外的錯誤訊息
2495
						$result["error"][]="非預期的結果";
2496
 
2497
						#回傳結果
2498
						return $result;
2499
 
2500
						}#else end	
2501
 
2502
					#串接編號到檔案名稱上
2503
					$createdFileName=$validatePath["fileName"].$no;
2504
 
2505
					}#if end
2506
 
2507
				#反之有dot存在	
2508
				else{
2509
 
2510
					#依據 $spiltString["dataCounts"] 值來組裝新的檔案名稱
2511
					for($j=0;$j<$spiltString["dataCounts"];$j++){
2512
 
2513
						#如果是副檔名的前一段內容
2514
						if(($conf["filenameExtensionStartPoint"]+1)==($spiltString["dataCounts"]-$j)){
2515
 
2516
							#解析 $conf["repeatNameRule"],用 \$i 分割.
2517
							#函式說明:
2518
							#將固定格式的字串分開,並回傳分開的結果。
2519
							#回傳結果:
2520
							#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2521
							#$result["error"],錯誤訊息陣列
2522
							#$result["function"],當前執行的函數名稱.
2523
							#$result["oriStr"],要分割的原始字串內容
2524
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2525
							#$result["dataCounts"],爲總共分成幾段
2526
							#必填參數:
2527
							$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2528
							$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2529
							#可省略參數:
2530
							#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2531
							$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2532
							$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2533
							unset($conf["stringProcess::spiltString"]);					
2534
 
2535
							#如果分割檔案名稱失敗
2536
							if($noString["status"]=="false"){
2537
 
2538
								#設置執行失敗
2539
								$result["status"]="false";
2540
 
2541
								#設置錯誤訊息
2542
								$result["error"]=$noString;
2543
 
2544
								#回傳結果
2545
								return $result;
2546
 
2547
								}#if end
2548
 
2549
							#如果 編號規則字串 分割出來的段數為2
2550
							if($noString["dataCounts"]==2){
2551
 
2552
								#組合編號
2553
								$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2554
 
2555
								}#if end
2556
 
2557
							#反之 號規則字串 分割出來的段數為1
2558
							else if($noString["dataCounts"]==1){
2559
 
2560
								#判斷 "\$i" 在開頭或結尾
2561
								#函式說明:
2562
								#取得關鍵字在字串的哪個位置
2563
								#回傳結果:
2564
								#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2565
								#$result["error"],錯誤訊息陣列.
2566
								#$result["function"],當前執行的函數名稱.
2567
								#$result["argu"],傳入的參數.
2568
								#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2569
								#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2570
								#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2571
								#必填參數:
2572
								#$conf["inputStr"],字串,被搜尋的字串.
2573
								$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2574
								#$conf["keyWord"],字串,關鍵字.
2575
								$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2576
								#參考資料:
2577
								#http://php.net/manual/en/function.strpos.php
2578
								$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2579
								unset($conf["search::findKeyWordPosition"]);
2580
 
2581
								#如果取得關鍵字位置失敗
2582
								if($findKeyWordPosition["status"]=="false"){
2583
 
2584
									#設置執行失敗
2585
									$result["status"]="false";
2586
 
2587
									#設置錯誤訊息
2588
									$result["error"]=$findKeyWordPosition;
2589
 
2590
									#回傳結果
2591
									return $result;
2592
 
2593
									}#if end
2594
 
2595
								#如果關鍵字在開頭
2596
								if($findKeyWordPosition["head"]=="true"){
2597
 
2598
									#組合編號
2599
									$no=$i.$noString["dataArray"][0];
2600
 
2601
									}#if end
2602
 
2603
								#反之如果關鍵字在結尾
2604
								else if($findKeyWordPosition["tail"]=="true"){
2605
 
2606
									#組合編號
2607
									$no=$noString["dataArray"][0].$i;
2608
 
2609
									}#if end
2610
 
2611
								#其他情況
2612
								else{
2613
 
2614
									#設置執行失敗
2615
									$result["status"]="false";
2616
 
2617
									#設置錯誤訊息
2618
									$result["error"]=$findKeyWordPosition;
2619
 
2620
									#設置額外的錯誤訊息
2621
									$result["error"][]="非預期的結果";
2622
 
2623
									#回傳結果
2624
									return $result;
2625
 
2626
									}#else end
2627
 
2628
								}#if end
2629
 
2630
							#反之 編號規則字串 分割出來的段數為0
2631
							else if($noString["dataCounts"]==0){
2632
 
2633
								#組合編號
2634
								$no=$j;
2635
 
2636
								}#if end
2637
 
2638
							#其他結果
2639
							else{
2640
 
2641
								#設置執行失敗
2642
								$result["status"]="false";
2643
 
2644
								#設置錯誤訊息
2645
								$result["error"]=$noString;
2646
 
2647
								#設置額外的錯誤訊息
2648
								$result["error"][]="非預期的結果";
2649
 
2650
								#回傳結果
2651
								return $result;
2652
 
2653
								}#else end	
2654
 
2655
							#串接編號到檔案名稱上
2656
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].$no;
2657
 
2658
							#如果不是最後一段
2659
							if($j!=$spiltString["dataCounts"]-1){
2660
 
2661
								#串接並加上 dot
2662
								$createdFileName=$createdFileName.".";
2663
 
2664
								}#if end
2665
 
2666
							}#if end
2667
 
2668
						#反之如果不是最後一段
2669
						else if($j!=$spiltString["dataCounts"]-1){
2670
 
2671
							#串接並加上 dot
2672
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].".";
2673
 
2674
							}#if end
2675
 
2676
						#反之是最後一段	
2677
						else{
2678
 
2679
							#串接並加上 dot
2680
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j];
2681
 
2682
							}#else end
2683
 
2684
						}#for end
2685
 
2686
					}#else end
2687
 
2688
				#檢查加上編號的檔案是否存在
2689
				#函式說明:
2690
				#檢查多個檔案與資料夾是否存在.
2691
				#回傳的結果:
2692
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2693
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2694
				#必填參數:
2695
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2696
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2697
				#參考資料來源:
2698
				#http://php.net/manual/en/function.file-exists.php
2699
				#http://php.net/manual/en/control-structures.foreach.php
2700
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2701
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2702
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2703
 
2704
				#如果檢查檔案是否存在失敗
2705
				if($checkResult["status"]=="false"){
2706
 
2707
					#設置執行失敗
2708
					$result["status"]="false";
2709
 
2710
					#設置錯誤訊息
2711
					$result["error"]=$checkResult;
2712
 
2713
					#回傳結果
2714
					return $result;
2715
 
2716
					}#if end						
2717
 
2718
				#如果 $checkResult["varExist"][0] 等於 "true"
2719
				if($checkResult["varExist"][0]=="true"){						
2720
 
2721
					#取得要建立的檔案名稱
2722
					$createdFileName=$validatePath["fileName"];
2723
 
2724
					#跳到下個迴圈
2725
					continue;
2726
 
2727
					}#if end
2728
 
2729
				#反之代表 $createFilePath.$createdFileName."(".$i.")" 檔檔案不存在
2730
				else{
2731
 
2732
					#嘗試建立該檔案
2733
					#函式說明:
2734
					#將字串寫入到檔案
2735
					#回傳結果:
2736
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2737
					#$result["error"],錯誤訊息陣列.
2738
					#必填參數:
2739
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2740
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2741
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2742
					#可省略參數:
2743
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2744
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2745
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2746
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2747
 
2748
					#如果 $fileCreateResult["status"] 等於 "true"
2749
					if($fileCreateResult["status"]=="true"){
2750
 
2751
						#代表檔案建立成功
2752
 
2753
						#更新建立的檔案名稱
2754
						$result["createdFileName"]=$createdFileName;
2755
 
2756
						#跳出迴圈
2757
						break;
2758
 
2759
						}#if end
2760
 
2761
					#反之代表檔案建立失敗
2762
					else{
2763
 
2764
						#設置錯誤識別
2765
						$result["status"]="false";
2766
 
2767
						#設置錯誤訊息
2768
						$result["error"]=$fileCreateResult;
2769
 
2770
						#回傳結果
2771
						return $result;
2772
 
2773
						}#else end
2774
 
2775
					}#else end
2776
 
2777
				}#else end
2778
 
2779
			}#for end
2780
 
2781
		#如果不存在建立的檔案名稱
2782
		if(!isset($result["createdFileName"])){
2783
 
2784
			#設置錯誤識別
2785
			$result["status"]="false";
2786
 
2787
			#設置錯誤訊息
2788
			$result["error"][]="建立的檔案名稱不存在";
2789
 
2790
			#回傳結果
2791
			return $result;
2792
 
2793
			}#if end	
2794
 
2795
		#執行到這邊代表執行成功
2796
		$result["status"]="true";
2797
 
2798
		#設置新建立的檔案名稱與路徑
2799
		$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2800
 
2801
		#設置新建立的檔與路徑
2802
		$result["createdFilePath"]=$createdFilePath;
2803
 
2804
		#回傳結果
2805
		return $result;
2806
 
2807
		}#fucntion createFileAfterCheck end
2808
 
2809
	/*
2810
	#函式說明:
2811
	#將檔案內容清空
2812
	#回傳結果:
2813
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2814
	#$result["error"],錯誤訊息陣列
2815
	#必填參數:
2816
	#$conf["fileAddr"],字串,要清空的檔案位置與名稱.
2817
	$conf["fileAddr"]="";
2818
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2819
	$conf["fileArgu"]=__FILE__;
2820
	#可省略參數:
2821
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2822
	#$conf["web"]="false";
2823
	#參考資料:
2824
	#無.
2825
	#備註:
2826
	#無.
2827
	*/
2828
	public static function emptyFile(&$conf){
2829
 
2830
		#初始化要回傳的結果
2831
		$result=array();
2832
 
2833
		#設置當前執行的涵式
2834
		$result["function"]=__FUNCTION__;
2835
 
2836
		#如果 $conf 不為陣列
2837
		if(gettype($conf)!="array"){
2838
 
2839
			#設置執行失敗
2840
			$result["status"]="false";
2841
 
2842
			#設置執行錯誤訊息
2843
			$result["error"][]="\$conf變數須為陣列形態";
2844
 
2845
			#如果傳入的參數為 null
2846
			if($conf==null){
2847
 
2848
				#設置執行錯誤訊息
2849
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2850
 
2851
				}#if end
2852
 
2853
			#回傳結果
2854
			return $result;
2855
 
2856
			}#if end
2857
 
2858
		#取得參數
2859
		$result["argu"]=$conf;
2860
 
2861
		#檢查參數
2862
		#函式說明:
2863
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2864
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2865
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2866
		#$result["function"],當前執行的函式名稱.
2867
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2868
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2869
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2870
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2871
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2872
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2873
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2874
		#必填寫的參數:
2875
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2876
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2877
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2878
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddr");
2879
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2880
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2881
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2882
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2883
		#可以省略的參數:
2884
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2885
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2886
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2887
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
2888
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2889
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
2890
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2891
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
2892
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2893
		#$conf["arrayCountEqualCheck"][]=array();
2894
		#參考資料來源:
2895
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2896
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2897
		unset($conf["variableCheck::checkArguments"]);
2898
 
2899
		#如果 $checkArguments["status"] 等於 "false"
2900
		if($checkArguments["status"]=="false"){
2901
 
2902
			#設置錯誤識別
2903
			$result["status"]="false";
2904
 
2905
			#設置錯誤訊息
2906
			$result["error"]=$checkArguments;
2907
 
2908
			#回傳結果
2909
			return $result;				
2910
 
2911
			}#if end
2912
 
2913
		#如果 $checkArguments["passed"] 等於 "false"
2914
		if($checkArguments["passed"]=="false"){
2915
 
2916
			#設置錯誤識別
2917
			$result["status"]="false";
2918
 
2919
			#設置錯誤訊息
2920
			$result["error"]=$checkArguments;
2921
 
2922
			#回傳結果
2923
			return $result;				
2924
 
2925
			}#if end	
2926
 
2927
		#函式說明:
2928
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
2929
		#回傳結果:
2930
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2931
		#$result["error"],錯誤訊息陣列.
2932
		#$result["function"],函數名稱. 
2933
		#$result["argu"],使用的參數.
2934
		#$result["content"],網址,若是在命令列執行,則為"null".
2935
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
2936
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
2937
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
2938
		#必填參數:
2939
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
2940
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["fileAddr"];
2941
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
2942
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
2943
		#可省略參數:
2944
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2945
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
2946
		#備註:
2947
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
2948
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
2949
		unset($conf["fileAccess::getInternetAddressV2"]);
2950
 
2951
		#如果確保路徑失敗
2952
		if($getInternetAddressV2["status"]==="false"){
2953
 
2954
			#設置錯誤識別
2955
			$result["status"]="false";
2956
 
2957
			#設置錯誤訊息
2958
			$result["error"]=$getInternetAddressV2;
2959
 
2960
			#回傳結果
2961
			return $result;
2962
 
2963
			}#if end
2964
 
2965
		#更新檔案路徑
2966
		$conf["fileAddr"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
2967
 
2968
		#確保要建立檔案的路徑
2969
		#函式說明:
2970
		#確保路徑存在.
2971
		#回傳結果:
2972
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2973
		#$result["error"],錯誤訊息陣列.
2974
		#$resutl["function"],當前執行的涵式名稱.
2975
		#$result["path"],建立好的路徑字串.
2976
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
2977
		#必填參數:
2978
		#$conf["path"],要檢查的路徑
2979
		$conf["fileAccess::validatePath"]["path"]=$conf["fileAddr"];		
2980
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2981
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2982
		#可省略參數:
2983
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2984
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2985
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2986
		#$conf["dirPermission"]="";
2987
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2988
		$conf["fileAccess::validatePath"]["web"]="false";
2989
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2990
		unset($conf["fileAccess::validatePath"]);	
2991
 
2992
		#如果確保路徑失敗
2993
		if($validatePath["status"]==="false"){
2994
 
2995
			#設置錯誤識別
2996
			$result["status"]="false";
2997
 
2998
			#設置錯誤訊息
2999
			$result["error"]=$validatePath;
3000
 
3001
			#回傳結果
3002
			return $result;
3003
 
3004
			}#if end
3005
 
3006
		#清空檔案
3007
		#函式說明:
3008
		#將字串寫入到檔案
3009
		#回傳結果:
3010
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
3011
		#$result["error"],錯誤訊息陣列.
3012
		#$result["function"],當前執行的函數名稱.
3013
		#$result["fileInfo"],實際上寫入的檔案資訊陣列.
3014
		#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
3015
		#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
3016
		#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
3017
		#$result["argu"],使用的參數.
3018
		#必填參數:
3019
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3020
		$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
3021
		#可省略參數:
3022
		#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
3023
		#$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];
3024
		$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];;
3025
		#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
3026
		#$conf["inputString"]="";
3027
		#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
3028
		#$conf["writeMethod"]="a";
3029
		#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
3030
		#$conf["checkRepeat"]="";
3031
		#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
3032
		#$conf["filenameExtensionStartPoint"]="";
3033
		#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
3034
		#$conf["repeatNameRule"]="";
3035
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3036
		$conf["fileAccess::writeTextIntoFile"]["web"]="false";
3037
		$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
3038
		unset($conf["fileAccess::writeTextIntoFile"]);
3039
 
3040
		#如果確保路徑失敗
3041
		if($writeTextIntoFile["status"]==="false"){
3042
 
3043
			#設置錯誤識別
3044
			$result["status"]="false";
3045
 
3046
			#設置錯誤訊息
3047
			$result["error"]=$writeTextIntoFile;
3048
 
3049
			#回傳結果
3050
			return $result;
3051
 
3052
			}#if end
3053
 
3054
		#設置執行正常
3055
		$result["status"]="true";
3056
 
3057
		#儲存建立的結果
3058
		$result["content"]=$writeTextIntoFile;
3059
 
3060
		#回傳結果
3061
		return $result;
3062
 
3063
		}#function emptyFile end
3064
 
3065
	/*
3066
	#函式說明:
3067
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
3068
	#回傳結果:
3069
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3070
	#$result["error"],錯誤訊息陣列
3071
	#$result["warning"],警告訊息陣列
3072
	#必填參數:
3073
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3074
	$conf["dirPositionAndName"]="";
3075
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3076
	$conf["fileArgu"]=__FILE__;
3077
	#可省略參數:
3078
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3079
	#$conf["dirPermission"]="";
3080
	#參考資料:
3081
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3082
	#chmod=>http://php.net/manual/en/function.chmod.php
3083
	#參考資料:
3084
	#無.
3085
	#備註:
3086
	#同 function createFolderAfterCheck.
3087
	*/
3088
	public static function createNewFolder(&$conf){
3089
 
3090
		/*
3091
		#函式說明:
3092
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
3093
		#回傳的結果:
3094
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
3095
		#$result["error"],錯誤訊息陣列.
3096
		#$result["function"],當前執行的函數名稱.
3097
		#$result["createdFileName"],建立好的檔案名稱.
3098
		#$result["createdFilePath"],檔案建立的路徑.
3099
		#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
3100
		#必填參數:
3101
		#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
3102
		$conf["checkedFileAndPath"]="";
3103
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3104
		$conf["fileArgu"]=__FILE__;
3105
		*/
3106
		return fileAccess::createFolderAfterCheck($conf);
3107
		unset($conf);
3108
 
3109
		}#function createNewFolder end
3110
 
3111
	/*
3112
	#函式說明:
3113
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
3114
	#回傳結果:
3115
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3116
	#$result["error"],錯誤訊息陣列
3117
	#$result["warning"],警告訊息陣列
3118
	#$result["argu"],使用的參數.
3119
	#$result["content"],建立的目錄路徑.
3120
	#必填參數:
3121
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3122
	$conf["dirPositionAndName"]="";
3123
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3124
	$conf["fileArgu"]=__FILE__;
3125
	#可省略參數:
3126
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3127
	#$conf["dirPermission"]="";
3128
	#$conf["web"],"false"代表在檔案系統環境,"true"代表在網頁稀系統環境.
3129
	#$conf["web"]="false";
3130
	#參考資料:
3131
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3132
	#chmod=>http://php.net/manual/en/function.chmod.php
3133
	#備註:
3134
	#無.
3135
	*/
3136
	public static function createFolderAfterCheck(&$conf){
3137
 
3138
		#初始化要回傳的結果
3139
		$result=array();
3140
 
3141
		#初始化警告訊息陣列
3142
		$result["warning"]=array();
3143
 
3144
		#記錄當前執行的函數名稱
3145
		$result["function"]=__FUNCTION__;
3146
 
3147
		#如果 $conf 不為陣列
3148
		if(gettype($conf)!="array"){
3149
 
3150
			#設置執行失敗
3151
			$result["status"]="false";
3152
 
3153
			#設置執行錯誤訊息
3154
			$result["error"][]="\$conf變數須為陣列形態";
3155
 
3156
			#如果傳入的參數為 null
3157
			if($conf==null){
3158
 
3159
				#設置執行錯誤訊息
3160
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3161
 
3162
				}#if end
3163
 
3164
			#回傳結果
3165
			return $result;
3166
 
3167
			}#if end
3168
 
3169
		#取得參數
3170
		$result["argu"]=$conf;
3171
 
3172
		#檢查參數
3173
		#函式說明:
3174
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3175
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3176
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3177
		#$result["function"],當前執行的函式名稱.
3178
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3179
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3180
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3181
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3182
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3183
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3184
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3185
		#必填寫的參數:
3186
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3187
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3188
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3189
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dirPositionAndName");
3190
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3191
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3192
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3193
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3194
		#可以省略的參數:
3195
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3196
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3197
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3198
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dirPermission","web");
3199
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3200
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
3201
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3202
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("0770","false");
3203
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3204
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
3205
		#參考資料來源:
3206
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3207
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3208
		unset($conf["variableCheck::checkArguments"]);
3209
 
3210
		#如果 $checkArguments["status"] 等於 "false"
3211
		if($checkArguments["status"]==="false"){
3212
 
3213
			#設置 $result["status"] 為 "false"
3214
			$result["status"]="false";
3215
 
3216
			#設置 $result["error"]
3217
			$result["error"]=$checkArguments;
3218
 
3219
			#回傳結果
3220
			return $result;
3221
 
3222
			}#if end
3223
 
3224
		#如果 $checkArguments["passed"] 等於 "false"
3225
		if($checkArguments["passed"]==="false"){
3226
 
3227
			#設置 $result["status"] 為 "false"
3228
			$result["status"]="false";
3229
 
3230
			#設置 $result["error"]
3231
			$result["error"]=$checkArguments;
3232
 
3233
			#回傳結果
3234
			return $result;
3235
 
3236
			}#if end			
3237
 
3238
		#函式說明:
3239
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
3240
		#回傳結果:
3241
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3242
		#$result["error"],錯誤訊息陣列.
3243
		#$result["function"],函數名稱. 
3244
		#$result["argu"],使用的參數.
3245
		#$result["content"],網址,若是在命令列執行,則為"null".
3246
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
3247
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
3248
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
3249
		#必填參數:
3250
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
3251
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["dirPositionAndName"];
3252
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3253
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
3254
		#可省略參數:
3255
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3256
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
3257
		#備註:
3258
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
3259
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
3260
		unset($conf["fileAccess::getInternetAddressV2"]);
3261
 
3262
		#如果 $getInternetAddressV2["status"] 等於 "false"
3263
		if($getInternetAddressV2["status"]==="false"){
3264
 
3265
			#設置 $result["status"] 為 "false"
3266
			$result["status"]="false";
3267
 
3268
			#設置 $result["error"]
3269
			$result["error"]=$getInternetAddressV2;
3270
 
3271
			#回傳結果
3272
			return $result;
3273
 
3274
			}#if end
3275
 
3276
		#取得絕對位置
3277
		$conf["dirPositionAndName"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
3278
 
3279
		#用「/」分割要建立的路徑
3280
		#函式說明:
3281
		#將固定格式的字串分開,並回傳分開的結果。
3282
		#回傳結果:
3283
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3284
		#$result["error"],錯誤訊息陣列
3285
		#$result["function"],當前執行的函數名稱.
3286
		#$result["oriStr"],要分割的原始字串內容
3287
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
3288
		#$result["dataCounts"],爲總共分成幾段
3289
		#必填參數:
3290
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["dirPositionAndName"];
3291
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
3292
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
3293
		unset($conf["stringProcess::spiltString"]);	
3294
 
3295
		#如果分割失敗
3296
		if($spiltString["status"]=="false"){
3297
 
3298
			#設置 $result["status"] 為 "false"
3299
			$result["status"]="false";
3300
 
3301
			#設置 $result["error"]
3302
			$result["error"]=$spiltString;
3303
 
3304
			#回傳結果
3305
			return $result;
3306
 
3307
			}#if end
3308
 
3309
		$checkedPath="";
3310
 
3311
		#依據切割成的路徑片段數目
3312
		for($i=0;$i<$spiltString["dataCounts"];$i++){
3313
 
3314
			$checkedPath=$checkedPath."/".$spiltString["dataArray"][$i];
3315
 
3316
			#檢查路徑是否存在
3317
			#函式說明:
3318
			#檢查多個檔案與資料夾是否存在.
3319
			#回傳的結果:
3320
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3321
			#$result["error"],錯誤訊息陣列.
3322
			#$resutl["function"],當前執行的涵式名稱.
3323
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3324
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
3325
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
3326
			#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
3327
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3328
			#必填參數:
3329
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
3330
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($checkedPath);
3331
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3332
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3333
			#可省略參數
3334
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3335
			#$conf["disableWebSearch"]="false";
3336
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3337
			#$conf["userDir"]="true";
3338
			#參考資料來源:
3339
			#http://php.net/manual/en/function.file-exists.php
3340
			#http://php.net/manual/en/control-structures.foreach.php
3341
			#備註:
3342
			#函數file_exists檢查的路徑為檔案系統的路徑
3343
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
3344
 
3345
			#如果檢查資料夾路徑失敗
3346
			if($checkMultiFileExist["status"]=="false"){
3347
 
3348
				#設置 $result["status"] 為 "false"
3349
				$result["status"]="false";
3350
 
3351
				#設置 $result["error"]
3352
				$result["error"]=$spiltString;
3353
 
3354
				#回傳結果
3355
				return $result;
3356
 
3357
				}#if end
3358
 
3359
			#如果目錄不存在
3360
			if($checkMultiFileExist["allExist"]=="false"){
3361
 
3362
				#如果有這個名稱的東西存在
3363
				if(file_exists($checkedPath)){
3364
 
3365
					#如果目錄存在
3366
					if(is_dir($checkedPath)){
3367
 
3368
						#目錄已經存在換下一層
3369
						continue;
3370
 
3371
						}#if end
3372
 
3373
					}#if end
3374
 
3375
				#建立目錄
3376
				$mkdir=@mkdir($checkedPath,0770);
3377
 
3378
				#如果建立目錄失敗
3379
				#參考資料:
3380
				#http://php.net/manual/en/function.mkdir.php
3381
				if($mkdir===false){
3382
 
3383
					#設置 $result["status"] 為 "false"
3384
					$result["status"]="false";
3385
 
3386
					#設置 $result["error"]
3387
					$result["error"][]="建立目錄「".$checkedPath."」失敗";
3388
 
3389
					#回傳結果
3390
					return $result;
3391
 
3392
					}#if end
3393
 
3394
				#更改目錄的權限為 0770
3395
				chmod($checkedPath,0770);
3396
 
3397
				}#if end
3398
 
3399
			}#for end
3400
 
3401
		#取得建立好的目錄
3402
		$result["content"]=$checkedPath;	
3403
 
3404
		#執行到這邊代表執行成功
3405
		$result["status"]="true";
3406
 
3407
		#回傳結果
3408
		return $result;
3409
 
3410
		}#function createFolderAfterCheck end
3411
 
3412
	/*
3413
	#函式說明:
3414
	#移除檔案
3415
	#回傳結果:
3416
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3417
	#$result["error"],錯誤訊息陣列.
3418
	#$result["warning"],警告訊息陣列.
3419
	#$result["function"],當前執行的函數名稱.
3420
	#$result["argu"],當前函式使用的參數.
3421
	#必填參數:
3422
	#$conf["fileAddress"],字串,要移除檔案的位置.
3423
	$conf["fileAddress"]="";
3424
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3425
	$conf["fileArgu"]=__FILE__;
3426
	#可省略參數:
3427
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3428
	#$conf["commentsArray"]=array("");
3429
	#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
3430
	#$conf["allowDelSymlink"]="true";
3431
	#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
3432
	#$conf["allowDelFolder"]="true";
3433
	#參考資料:
3434
	#無.
3435
	#備註:
3436
	#無.
3437
	*/		
3438
	public static function delFile(&$conf){
3439
 
3440
		#初始化要回傳的結果
3441
		$result=array();
3442
 
3443
		#設置當其函數名稱
3444
		$result["function"]=__FUNCTION__;
3445
 
3446
		#如果 $conf 不為陣列
3447
		if(gettype($conf)!="array"){
3448
 
3449
			#設置執行失敗
3450
			$result["status"]="false";
3451
 
3452
			#設置執行錯誤訊息
3453
			$result["error"][]="\$conf變數須為陣列形態";
3454
 
3455
			#如果傳入的參數為 null
3456
			if($conf==null){
3457
 
3458
				#設置執行錯誤訊息
3459
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3460
 
3461
				}#if end
3462
 
3463
			#回傳結果
3464
			return $result;
3465
 
3466
			}#if end
3467
 
3468
		#取得參數
3469
		$result["argu"]=$conf;
3470
 
3471
		#檢查參數
3472
		#函式說明:
3473
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3474
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3475
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3476
		#$result["function"],當前執行的函式名稱.
3477
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3478
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3479
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3480
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3481
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3482
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3483
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3484
		#必填寫的參數:
3485
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3486
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3487
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3488
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3489
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3490
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3491
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3492
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3493
		#可以省略的參數:
3494
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3495
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3496
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3497
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","allowDelSymlink","allowDelFolder");
3498
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3499
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
3500
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3501
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
3502
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3503
		#$conf["arrayCountEqualCheck"][]=array();
3504
		#參考資料來源:
3505
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3506
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3507
		unset($conf["variableCheck::checkArguments"]);
3508
 
3509
		#如果檢查失敗
3510
		if($checkResult["status"]=="false"){
3511
 
3512
			#設置錯誤識別
3513
			$result["status"]="false";
3514
 
3515
			#設置錯誤訊息
3516
			$result["error"]=$checkResult;
3517
 
3518
			#回傳結果
3519
			return $result;
3520
 
3521
			}#if end
3522
 
3523
		#如果檢查不通過
3524
		if($checkResult["passed"]=="false"){
3525
 
3526
			#設置錯誤識別
3527
			$result["status"]="false";
3528
 
3529
			#設置錯誤訊息
3530
			$result["error"]=$checkResult;
3531
 
3532
			#回傳結果
3533
			return $result;
3534
 
3535
			}#if end
3536
 
3537
		#如果 $conf["commentsArray"] 有設定
3538
		if(isset($conf["commentsArray"])){
3539
 
3540
			#印出提示文字
3541
			#函式說明:
3542
			#印出多行文字,結尾自動換行.
3543
			#回傳的結果:
3544
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3545
			#$result["function"],當前執行的函數名稱.
3546
			#$result["error"],錯誤訊息陣列.
3547
			#必填參數:
3548
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
3549
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
3550
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
3551
			unset($conf["cmd::echoMultiLine"]);
3552
 
3553
			#如果印出提示文字失敗
3554
			if($echoMultiLine["status"]=="false"){
3555
 
3556
				#設置執行失敗
3557
				$result["status"]="false";
3558
 
3559
				#設置執行錯誤訊息
3560
				$result["error"]=$echoMultiLine;
3561
 
3562
				#回傳結果
3563
				return $result;
3564
 
3565
				}#if end
3566
 
3567
			}#if end
3568
 
3569
		#檢查要移除的檔案是否存在
3570
		#函式說明:
3571
		#檢查多個檔案與資料夾是否存在.
3572
		#回傳的結果:
3573
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3574
		#$result["error"],錯誤訊息陣列.
3575
		#$resutl["function"],當前執行的涵式名稱.
3576
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3577
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3578
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3579
		#必填參數:
3580
		$conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["fileAddress"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
3581
		#$conf["fileAccess.checkMultiFileExist"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3582
		$conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3583
		#可省略參數:
3584
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3585
		#$conf["disableWebSearch"]="false";
3586
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3587
		#$conf["userDir"]="true";
3588
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
3589
		$conf["fileAccess.checkMultiFileExist"]["web"]="false";
3590
		#參考資料來源:
3591
		#http://php.net/manual/en/function.file-exists.php
3592
		#http://php.net/manual/en/control-structures.foreach.php
3593
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3594
		unset($conf["fileAccess.checkMultiFileExist"]);
3595
 
3596
		#var_dump($checkResult);
3597
 
3598
		#如果檢查檔案是否存在失敗
3599
		if($checkResult["status"]==="false"){
3600
 
3601
			#設置執行失敗
3602
			$result["status"]="false";
3603
 
3604
			#回傳錯誤訊息
3605
			$result["error"]=$checkResult;
3606
 
3607
			#回傳結果
3608
			return $result;
3609
 
3610
			}#if end
3611
 
3612
		#如果目標檔案不存在
3613
		if($checkResult["varExist"][0]==="false"){
3614
 
3615
			#設置錯誤識別
3616
			$result["status"]="true";
3617
 
3618
			#回傳錯誤訊息
3619
			$result["warning"][]="要移除的檔案不存在";
3620
 
3621
			#回傳結果
3622
			return $result;
3623
 
3624
			}#if end
3625
 
3626
		#如果要移除的目標是檔案
3627
		if(is_file($conf["fileAddress"])){
3628
 
3629
			#移除檔案,並回傳移除的結果
3630
			$eraseResult=(@unlink($conf["fileAddress"]));
3631
 
3632
			#如果 $eraseResult 等於 false
3633
			if($eraseResult===false){
3634
 
3635
				#設置錯誤識別
3636
				$result["status"]="false";
3637
 
3638
				#回傳錯誤訊息
3639
				$result["error"][]="檔案移除失敗";
3640
 
3641
				#回傳結果
3642
				return $result;
3643
 
3644
				}#if end
3645
 
3646
			}#if end
3647
 
3648
		#反之要移除的目標是目錄
3649
		else if(is_dir($conf["fileAddress"])){
3650
 
3651
			#如果允許移除目錄
3652
			if($conf["allowDelFolder"]==="true"){
3653
 
3654
				#移除目錄跟底下的內容
3655
				w函式說明:
3656
				#呼叫shell執行系統命令,並取得回傳的內容.
3657
				#回傳結果:
3658
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3659
				#$result["error"],錯誤訊息陣列.
3660
				#$result["function"],當前執行的函數名稱.
3661
				#$result["argu"],使用的參數.
3662
				#$result["cmd"],執行的指令內容.
3663
				#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
3664
				#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
3665
				#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
3666
				#$result["running"],是否還在執行.
3667
				#$result["pid"],pid.
3668
				#$result["statusCode"],執行結束後的代碼.
3669
				#必填參數:
3670
				#$conf["command"],字串,要執行的指令.
3671
				$conf["external::callShell"]["command"]="rm";
3672
				#$conf["fileArgu"],字串,變數__FILE__的內容.
3673
				$conf["external::callShell"]["fileArgu"]=__FILE__;
3674
				#可省略參數:
3675
				#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
3676
				$conf["external::callShell"]["argu"]=array("-rf",$conf["fileAddress"]);
3677
				#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
3678
				#$conf["arguIsAddr"]=array();
3679
				#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
3680
				#$conf["plainArgu"]=array();
3681
				#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
3682
				#$conf["useApostrophe"]=array();
3683
				#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
3684
				#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
3685
				#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
3686
				#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
3687
				#$conf["enablePrintDescription"]="true";
3688
				#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
3689
				#$conf["printDescription"]="";
3690
				#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
3691
				$conf["external::callShell"]["escapeshellarg"]="true";
3692
				#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
3693
				#$conf["thereIsShellVar"]=array();
3694
				#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
3695
				#$conf["username"]="";
3696
				#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
3697
				#$conf["password"]="";
3698
				#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
3699
				#$conf["useScript"]="";
3700
				#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
3701
				#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
3702
				#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
3703
				#$conf["inBackGround"]="";
3704
				#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
3705
				#$conf["getErr"]="false";
3706
				#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
3707
				#$conf["doNotRun"]="false";
3708
				#參考資料:
3709
				#exec=>http://php.net/manual/en/function.exec.php
3710
				#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
3711
				#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
3712
				#備註:
3713
				#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
3714
				#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
3715
				$callShell=external::callShell($conf["external::callShell"]);
3716
				unset($conf["external::callShell"]);
3717
 
3718
				#如果執行失敗
3719
				if($callShell["status"]==="false"){
3720
 
3721
					#設置錯誤識別
3722
					$result["status"]="false";
3723
 
3724
					#回傳錯誤訊息
3725
					$result["error"]=$callShell;
3726
 
3727
					#回傳結果
3728
					return $result;
3729
 
3730
					}#if end
3731
 
3732
				}#if end	
3733
 
3734
			#反之不允許
3735
			else{
3736
 
3737
				#設置錯誤識別
3738
				$result["status"]="false";
3739
 
3740
				#回傳錯誤訊息
3741
				$result["error"][]="不允許移除目錄";
3742
 
3743
				#回傳結果
3744
				return $result;
3745
 
3746
				}#else end
3747
 
3748
			}#if end
3749
 
3750
		#反之
3751
		else{
3752
 
3753
			#可能為 軟連結
3754
 
3755
			#如果允許移除
3756
			if($conf["allowDelSymlink"]==="true"){
3757
 
3758
				#移除檔案,並回傳移除的結果
3759
				$eraseResult=(@unlink($conf["fileAddress"]));
3760
 
3761
				#如果 $eraseResult 等於 false
3762
				if($eraseResult===false){
3763
 
3764
					#設置錯誤識別
3765
					$result["status"]="false";
3766
 
3767
					#回傳錯誤訊息
3768
					$result["error"][]="檔案移除失敗";
3769
 
3770
					#回傳結果
3771
					return $result;
3772
 
3773
					}#if end
3774
 
3775
				}#if end
3776
 
3777
			#反之
3778
			else{
3779
 
3780
				#設置錯誤識別
3781
				$result["status"]="false";
3782
 
3783
				#設置錯誤訊息
3784
				$result["error"][]="不允許移除 檔案、目錄 以外類型的目標";
3785
 
3786
				#回傳結果
3787
				return $result;
3788
 
3789
				}#else end
3790
 
3791
			}#else end
3792
 
3793
		#執行到這邊代表執行正常.
3794
		$result["status"]="true";
3795
 
3796
		#回傳結果
3797
		return $result;
3798
 
3799
		}#function delFile end
3800
 
3801
	/*
3802
	#函式說明:
3803
	#移除多個檔案
3804
	#回傳結果:
3805
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3806
	#$result["error"],錯誤訊息陣列
3807
	#$result["function"],當前執行的函數名稱.
3808
	#$result["argu"],使用的參數.
3809
	#$result["content"],陣列,移除各個檔案的結果.
3810
	#必填參數:
3811
	#$conf["fileAddress"],字串陣列,要移除檔案的位置.
3812
	$conf["fileAddress"]=array("");
3813
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3814
	$conf["fileArgu"]=__FILE__;
3815
	#可省略參數:
3816
	#無.
3817
	#參考資料:
3818
	#無.
3819
	#備註:
3820
	#無.
3821
	*/		
3822
	public static function delMultiFile(&$conf){
3823
 
3824
		#初始化要回傳的結果
3825
		$result=array();
3826
 
3827
		#設置當其函數名稱
3828
		$result["function"]=__FUNCTION__;
3829
 
3830
		#如果 $conf 不為陣列
3831
		if(gettype($conf)!="array"){
3832
 
3833
			#設置執行失敗
3834
			$result["status"]="false";
3835
 
3836
			#設置執行錯誤訊息
3837
			$result["error"][]="\$conf變數須為陣列形態";
3838
 
3839
			#如果傳入的參數為 null
3840
			if($conf==null){
3841
 
3842
				#設置執行錯誤訊息
3843
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3844
 
3845
				}#if end
3846
 
3847
			#回傳結果
3848
			return $result;
3849
 
3850
			}#if end
3851
 
3852
		#取得使用的參數.
3853
		$result["argu"]=$conf;
3854
 
3855
		#檢查參數
3856
		#函式說明:
3857
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3858
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3859
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3860
		#$result["function"],當前執行的函式名稱.
3861
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3862
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3863
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3864
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3865
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3866
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3867
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3868
		#必填寫的參數:
3869
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3870
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3871
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3872
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3873
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3874
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
3875
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3876
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3877
		#可以省略的參數:
3878
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3879
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3880
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3881
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
3882
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3883
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3884
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3885
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3886
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3887
		#$conf["arrayCountEqualCheck"][]=array();
3888
		#參考資料來源:
3889
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3890
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3891
		unset($conf["variableCheck::checkArguments"]);
3892
 
3893
		#如果檢查失敗
3894
		if($checkResult["status"]=="false"){
3895
 
3896
			#設置錯誤識別
3897
			$result["status"]="false";
3898
 
3899
			#設置錯誤訊息
3900
			$result["error"]=$checkResult;
3901
 
3902
			#回傳結果
3903
			return $result;
3904
 
3905
			}#if end
3906
 
3907
		#如果檢查不通過
3908
		if($checkResult["passed"]=="false"){
3909
 
3910
			#設置錯誤識別
3911
			$result["status"]="false";
3912
 
3913
			#設置錯誤訊息
3914
			$result["error"]=$checkResult;
3915
 
3916
			#回傳結果
3917
			return $result;
3918
 
3919
			}#if end
3920
 
3921
		#針對每個要移除的檔案
3922
		foreach($conf["fileAddress"] as $fileAddr){
3923
 
3924
			#函式說明:
3925
			#移除檔案
3926
			#回傳結果:
3927
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3928
			#$result["error"],錯誤訊息陣列
3929
			#$result["warning"],警告訊息陣列
3930
			#$result["function"],當前執行的函數名稱
3931
			#必填參數:
3932
			#$conf["fileAddress"],字串,要移除檔案的位置.
3933
			$conf["fileAccess::delFile"]["fileAddress"]=$fileAddr;
3934
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3935
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
3936
			#可省略參數:
3937
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3938
			#$conf["commentsArray"]=array("");
3939
			#備註:
3940
			#無.
3941
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
3942
			unset($conf["fileAccess::delFile"]);
3943
 
3944
			#如果檢查失敗
3945
			if($delFile["status"]==="false"){
3946
 
3947
				#設置錯誤識別
3948
				$result["status"]="false";
3949
 
3950
				#設置錯誤訊息
3951
				$result["error"]=$delFile;
3952
 
3953
				#回傳結果
3954
				return $result;
3955
 
3956
				}#if end
3957
 
3958
			#取得移除檔案的結果
3959
			$result["content"][]=$delFile;
3960
 
3961
			}#foreach end
3962
 
3963
		#設置執行正常
3964
		$result["status"]="true";
3965
 
3966
		#回傳結果
3967
		return $result;
3968
 
3969
		}#function delMultiFile end
3970
 
3971
	/*
3972
	#函式說明:
3973
	#確保路徑存在.
3974
	#回傳結果:
3975
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3976
	#$result["error"],錯誤訊息陣列.
3977
	#$resutl["function"],當前執行的涵式名稱.
3978
	#$result["path"],建立好的路徑字串.
3979
	#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
3980
	#$result["argu"],使用的參數.
3981
	#必填參數:
3982
	#$conf["path"],要檢查的路徑
3983
	$conf["path"]="";		
3984
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3985
	$conf["fileArgu"]=__FILE__;
3986
	#可省略參數:
3987
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
3988
	#$conf["haveFileName"]="false";
3989
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人無法使用.
3990
	#$conf["dirPermission"]="";
3991
	#$conf["web"],是否為檔案系統,"true"為網頁路徑,"false"為網頁系統,預設為"false".
3992
	#$conf["web"]="";
3993
	#參考資料:
3994
	#無.
3995
	#備註:
3996
	#無.
3997
	*/ 
3998
	public static function validatePath(&$conf){
3999
 
4000
		#初始化要回傳的結果
4001
		$result=array();
4002
 
4003
		#設置當其函數名稱
4004
		$result["function"]=__FUNCTION__;
4005
 
4006
		#如果 $conf 不為陣列
4007
		if(gettype($conf)!="array"){
4008
 
4009
			#設置執行失敗
4010
			$result["status"]="false";
4011
 
4012
			#設置執行錯誤訊息
4013
			$result["error"][]="\$conf變數須為陣列形態";
4014
 
4015
			#如果傳入的參數為 null
4016
			if($conf==null){
4017
 
4018
				#設置執行錯誤訊息
4019
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4020
 
4021
				}#if end
4022
 
4023
			#回傳結果
4024
			return $result;
4025
 
4026
			}#if end
4027
 
4028
		#取得使用的參數
4029
		$result["argu"]=$conf;	
4030
 
4031
		#檢查參數
4032
		#函式說明:
4033
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4034
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4035
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4036
		#$result["function"],當前執行的函式名稱.
4037
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4038
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4039
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4040
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4041
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4042
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4043
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4044
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4045
		#必填寫的參數:
4046
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4047
		$conf["variableCheck::checkArgument"]["varInput"]=&$conf;
4048
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4049
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableName"]=array("path","fileArgu");
4050
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4051
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableType"]=array("string","string");
4052
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4053
		$conf["variableCheck::checkArgument"]["referenceVarKey"]="variableCheck::checkArgument";
4054
		#可以省略的參數:
4055
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4056
		$conf["variableCheck::checkArgument"]["canBeEmptyString"]="false";
4057
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4058
		$conf["variableCheck::checkArgument"]["skipableVariableCanNotBeEmpty"]=array("haveFileName","dirPermission","web");
4059
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4060
		$conf["variableCheck::checkArgument"]["skipableVariableName"]=array("haveFileName","dirPermission","web");
4061
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4062
		$conf["variableCheck::checkArgument"]["skipableVariableType"]=array("string","string","string");
4063
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4064
		$conf["variableCheck::checkArgument"]["skipableVarDefaultValue"]=array("false","0770","false");
4065
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4066
		#$conf["arrayCountEqualCheck"][]=array();
4067
		#參考資料來源:
4068
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4069
		$checkArgument=variableCheck::checkArguments($conf["variableCheck::checkArgument"]);
4070
		unset($conf["variableCheck::checkArgument"]);
4071
 
4072
		#如果檢查過程出錯
4073
		if($checkArgument["status"]==="false"){
4074
 
4075
			#設置執行失敗
4076
			$result["status"]="false";
4077
 
4078
			#設置執行錯誤訊息
4079
			$result["error"]=$checkArgument;
4080
 
4081
			#回傳結果
4082
			return $result;
4083
 
4084
			}#if end
4085
 
4086
		#如果檢查不通過
4087
		if($checkArgument["passed"]==="false"){
4088
 
4089
			#設置執行失敗
4090
			$result["status"]="false";
4091
 
4092
			#設置執行錯誤訊息
4093
			$result["error"]=$checkArgument;
4094
 
4095
			#回傳結果
4096
			return $result;
4097
 
4098
			}#if end
4099
 
4100
		#函式說明:
4101
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
4102
		#回傳結果:
4103
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4104
		#$result["error"],錯誤訊息陣列.
4105
		#$result["function"],函數名稱. 
4106
		#$result["argu"],使用的參數.
4107
		#$result["content"],網址,若是在命令列執行,則為"null".
4108
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
4109
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
4110
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
4111
		#必填參數:
4112
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
4113
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["path"];
4114
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
4115
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
4116
		#可省略參數:
4117
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
4118
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
4119
		#備註:
4120
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
4121
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
4122
		unset($conf["fileAccess::getInternetAddressV2"]);	
4123
 
4124
		#如果檢查過程出錯
4125
		if($getInternetAddressV2["status"]=="false"){
4126
 
4127
			#設置執行失敗
4128
			$result["status"]="false";
4129
 
4130
			#設置執行錯誤訊息
4131
			$result["error"]=$getInternetAddressV2;
4132
 
4133
			#回傳結果
4134
			return $result;
4135
 
4136
			}#if end		
4137
 
4138
		#取得轉換好的絕對路徑
4139
		$result["path"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
4140
 
4141
		#debug
4142
		#var_dump($getInternetAddressV2);exit;
4143
 
4144
		#如果 路徑 含有檔案名稱
4145
		if($conf["haveFileName"]==="true"){
4146
 
4147
			#預設要加回去的結束字串為空字串
4148
			$endStr="";
4149
 
4150
			#如果開頭跟結尾都是 "'"
4151
			if( strpos($result["path"],"'")===0 && strpos($result["path"],"'")===(strlen($result["path"])-1) ){
4152
 
4153
				#設置要加回去的結束字串
4154
				$endStr="'";
4155
 
4156
				}#if end
4157
 
4158
			#函式說明:
4159
			#將固定格式的字串分開,並回傳分開的結果。
4160
			#回傳結果:
4161
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4162
			#$result["error"],錯誤訊息陣列
4163
			#$result["function"],當前執行的函數名稱.
4164
			#$result["argu"],使用的參數.
4165
			#$result["oriStr"],要分割的原始字串內容
4166
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4167
			#$result["dataCounts"],爲總共分成幾段
4168
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4169
			#必填參數:
4170
			#$conf["stringIn"],字串,要處理的字串.
4171
			$conf["stringProcess::spiltString"]["stringIn"]=$result["path"];
4172
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4173
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4174
			#可省略參數:
4175
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4176
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
4177
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4178
			unset($conf["stringProcess::spiltString"]);
4179
 
4180
			#如果檢查過程出錯
4181
			if($spiltString["status"]==="false"){
4182
 
4183
				#設置執行失敗
4184
				$result["status"]="false";
4185
 
4186
				#設置執行錯誤訊息
4187
				$result["error"]=$spiltString;
4188
 
4189
				#回傳結果
4190
				return $result;
4191
 
4192
				}#if end
4193
 
4194
			#初始化儲存 path
4195
			$path="";
4196
 
4197
			#針對n-1段的內容
4198
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
4199
 
4200
				#串接路徑
4201
				$path=$path."/".$spiltString["dataArray"][$i];
4202
 
4203
				}#for end
4204
 
4205
			#如果路徑為空
4206
			if($path===""){
4207
 
4208
				#則與設為根目錄
4209
				$path="/";
4210
 
4211
				}#if end
4212
 
4213
			#設置檔案名稱
4214
			$result["fileName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
4215
 
4216
			#取得不含檔案名稱的路徑
4217
			$conf["path"]=$path.$endStr;
4218
 
4219
			#取得不含檔案名稱的路徑
4220
			$result["path"]=$path.$endStr;
4221
 
4222
			}#if end
4223
 
4224
		#函式說明:
4225
		#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
4226
		#回傳結果:
4227
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4228
		#$result["error"],錯誤訊息陣列
4229
		#必填參數:
4230
		$conf["fileAccess::createFolderAfterCheck"]["dirPositionAndName"]=$conf["path"];#新建的位置與名稱
4231
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4232
		$conf["fileAccess::createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];
4233
		#可省略參數:
4234
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
4235
		$conf["fileAccess::createFolderAfterCheck"]["dirPermission"]=$conf["dirPermission"];
4236
		$conf["fileAccess::createFolderAfterCheck"]["web"]="false";
4237
		#參考資料:
4238
		#mkdir=>http://php.net/manual/en/function.mkdir.php
4239
		#chmod=>http://php.net/manual/en/function.chmod.php
4240
		$createFolderAfterCheck=fileAccess::createFolderAfterCheck($conf["fileAccess::createFolderAfterCheck"]);
4241
		unset($conf["fileAccess::createFolderAfterCheck"]);
4242
 
4243
		#如果建立路徑過程出錯
4244
		if($createFolderAfterCheck["status"]==="false"){
4245
 
4246
			#設置執行失敗
4247
			$result["status"]="false";
4248
 
4249
			#設置執行錯誤訊息
4250
			$result["error"]=$createFolderAfterCheck;
4251
 
4252
			#回傳結果
4253
			return $result;
4254
 
4255
			}#if end
4256
 
4257
		#如果有警告訊息
4258
		if(count($createFolderAfterCheck["warning"])>0){
4259
 
4260
			#取得警告訊息
4261
			$result["error"]=$createFolderAfterCheck["warning"];
4262
 
4263
			#設置執行失敗
4264
			$result["status"]="false";
4265
 
4266
			#回傳結果
4267
			return $result;
4268
 
4269
			}#if end
4270
 
4271
		#執行到這邊代表成功
4272
		$result["status"]="true";
4273
 
4274
		#回傳結果
4275
		return $result;
4276
 
4277
		}#function validatePath end
4278
 
4279
	/*
4280
	#函式說明:
4281
	#解析路徑的每個層級.
4282
	#回傳結果:
4283
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4284
	#$result["error"],錯誤訊息陣列.
4285
	#$resutl["function"],當前執行的涵式名稱.
4286
	#$result["argu"],使用的參數.
4287
	#$result["content"],解析出來的路徑階層.
4288
	#必填參數:
4289
	#$conf["path"],要檢查的路徑
4290
	$conf["path"]="";
4291
	#可省略參數:
4292
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4293
	#$conf["haveFileName"]="false";
4294
	#參考資料:
4295
	#無.
4296
	#備註:
4297
	#無.
4298
	*/
4299
	public static function parsePath(&$conf){
4300
 
4301
		#初始化要回傳的內容
4302
		$result=array();
4303
 
4304
		#取得當前執行的函數名稱
4305
		$result["function"]=__FUNCTION__;
4306
 
4307
		#如果 $conf 不為陣列
4308
		if(gettype($conf)!="array"){
4309
 
4310
			#設置執行失敗
4311
			$result["status"]="false";
4312
 
4313
			#設置執行錯誤訊息
4314
			$result["error"][]="\$conf變數須為陣列形態";
4315
 
4316
			#如果傳入的參數為 null
4317
			if($conf==null){
4318
 
4319
				#設置執行錯誤訊息
4320
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4321
 
4322
				}#if end
4323
 
4324
			#回傳結果
4325
			return $result;
4326
 
4327
			}#if end
4328
 
4329
		#記錄使用的參數
4330
		$result["argu"]=$conf;
4331
 
4332
		#檢查參數
4333
		#函式說明:
4334
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4335
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4336
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4337
		#$result["function"],當前執行的函式名稱.
4338
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4339
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4340
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4341
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4342
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4343
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4344
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4345
		#必填寫的參數:
4346
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4347
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4348
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4349
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
4350
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4351
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4352
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4353
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4354
		#可以省略的參數:
4355
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4356
		#$conf["canBeEmptyString"]="false";
4357
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4358
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4359
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4360
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4361
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4362
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4363
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4364
		#$conf["arrayCountEqualCheck"][]=array();
4365
		#參考資料來源:
4366
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4367
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4368
		unset($conf["variableCheck::checkArguments"]);
4369
 
4370
		#如果檢查有誤
4371
		if($checkResult["status"]=="false"){
4372
 
4373
			#設置錯誤識別
4374
			$result["status"]="false";
4375
 
4376
			#設置錯誤訊息
4377
			$result["error"]=$checkResult;
4378
 
4379
			#回傳結果
4380
			return $result;
4381
 
4382
			}#if end
4383
 
4384
		#如果檢查不通過
4385
		if($checkResult["passed"]=="false"){
4386
 
4387
			#設置錯誤識別
4388
			$result["status"]="false";
4389
 
4390
			#設置錯誤訊息
4391
			$result["error"]=$checkResult;
4392
 
4393
			#回傳結果
4394
			return $result;
4395
 
4396
			}#if end
4397
 
4398
		#函式說明:
4399
		#將固定格式的字串分開,並回傳分開的結果.
4400
		#回傳結果:
4401
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4402
		#$result["error"],錯誤訊息陣列
4403
		#$result["function"],當前執行的函數名稱.
4404
		#$result["argu"],使用的參數.
4405
		#$result["oriStr"],要分割的原始字串內容
4406
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4407
		#$result["dataCounts"],爲總共分成幾段
4408
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4409
		#必填參數:
4410
		#$conf["stringIn"],字串,要處理的字串.
4411
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];
4412
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4413
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4414
		#可省略參數:
4415
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4416
		#$conf["allowEmptyStr"]="false";
4417
		#參考資料:
4418
		#無.
4419
		#備註:
4420
		#無.
4421
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4422
		unset($conf["stringProcess::spiltString"]);
4423
 
4424
		#如果檢查有誤
4425
		if($spiltString["status"]==="false"){
4426
 
4427
			#設置錯誤識別
4428
			$result["status"]="false";
4429
 
4430
			#設置錯誤訊息
4431
			$result["error"]=$spiltString;
4432
 
4433
			#回傳結果
4434
			return $result;
4435
 
4436
			}#if end
4437
 
4438
		#確認是否為絕對路徑
4439
		#函式說明:
4440
		#取得符合特定字首與字尾的字串
4441
		#回傳結果:
4442
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4443
		#$result["function"],當前執行的函數名稱.
4444
		#$result["error"],錯誤訊息陣列.
4445
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4446
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4447
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4448
		#$result["argu"],使用的參數.
4449
		#必填參數:
4450
		#$conf["checkString"],字串,要檢查的字串.
4451
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
4452
		#可省略參數:
4453
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4454
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
4455
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4456
		#$conf["search::getMeetConditionsString"]["tailWord"]="";
4457
		#參考資料:
4458
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4459
		#備註:
4460
		#無.
4461
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4462
		unset($conf["search::getMeetConditionsString"]);
4463
 
4464
		#如果檢查有誤
4465
		if($getMeetConditionsString["status"]==="false"){
4466
 
4467
			#設置錯誤識別
4468
			$result["status"]="false";
4469
 
4470
			#設置錯誤訊息
4471
			$result["error"]=$getMeetConditionsString;
4472
 
4473
			#回傳結果
4474
			return $result;
4475
 
4476
			}#if end
4477
 
4478
		#如果是絕對路徑
4479
		if($getMeetConditionsString["founded"]==="true"){
4480
 
4481
			#初始化路徑為 "/"
4482
			$result["content"][]="/";
4483
 
4484
			}#if end
4485
 
4486
		#針對每個切割出來的路徑階層
4487
		foreach($spiltString["dataArray"] as $index => $dir){
4488
 
4489
			#如果路徑結尾含有檔案名稱
4490
			if($conf["haveFileName"]==="true"){
4491
 
4492
				#如果是最後一段
4493
				if($index===$spiltString["dataCounts"]-1){
4494
 
4495
					#忽略
4496
					continue;
4497
 
4498
					}#if end
4499
 
4500
				}#if end
4501
 
4502
			#後面加上 資料夾名稱 跟 "/"
4503
			$newPath=$dir."/";
4504
 
4505
			#如果有 content
4506
			if(isset($result["content"])){
4507
 
4508
				#如果有上個資料夾
4509
				if(isset($result["content"][count($result["content"])-1])){
4510
 
4511
					#後面加上 上個資料夾名稱 加上資料夾名稱 跟 "/"
4512
					$newPath=$result["content"][count($result["content"])-1].$dir."/";
4513
 
4514
					}#if end
4515
 
4516
				}#if end
4517
 
4518
			#並新增置結果
4519
			$result["content"][]=$newPath;
4520
 
4521
			}#foreach end
4522
 
4523
		#var_dump($result["content"]);
4524
 
4525
		#設置執行正常
4526
		$result["status"]="true";
4527
 
4528
		#回傳結果
4529
		return $result;
4530
 
4531
		}#function parsePath end
4532
 
4533
	/*
4534
	#函式說明:
4535
	#檢查路徑是否存在.
4536
	#回傳結果:
4537
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4538
	#$result["error"],錯誤訊息陣列.
4539
	#$resutl["function"],當前執行的涵式名稱.
4540
	#$result["argu"],使用的參數.
4541
	#$result["found"],路徑是否存在,"true"代表存在,"false"代表不存在.
4542
	#$result["content"],每個階層路徑的檢查結果,每個元素有檢查的路徑"path"跟是否有存在或可存取的識別"found".
4543
	#必填參數:
4544
	#$conf["path"],要檢查的路徑
4545
	$conf["path"]="";
4546
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4547
	$conf["fileArgu"]=__FILE__;
4548
	#可省略參數:
4549
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4550
	#$conf["haveFileName"]="false";
4551
	#參考資料:
4552
	#無.
4553
	#備註:
4554
	#無.
4555
	*/
4556
	public static function checkPathExist(&$conf){
4557
 
4558
		#初始化要回傳的內容
4559
		$result=array();
4560
 
4561
		#取得當前執行的函數名稱
4562
		$result["function"]=__FUNCTION__;
4563
 
4564
		#如果 $conf 不為陣列
4565
		if(gettype($conf)!="array"){
4566
 
4567
			#設置執行失敗
4568
			$result["status"]="false";
4569
 
4570
			#設置執行錯誤訊息
4571
			$result["error"][]="\$conf變數須為陣列形態";
4572
 
4573
			#如果傳入的參數為 null
4574
			if($conf==null){
4575
 
4576
				#設置執行錯誤訊息
4577
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4578
 
4579
				}#if end
4580
 
4581
			#回傳結果
4582
			return $result;
4583
 
4584
			}#if end
4585
 
4586
		#記錄使用的參數
4587
		$result["argu"]=$conf;
4588
 
4589
		#檢查參數
4590
		#函式說明:
4591
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4592
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4593
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4594
		#$result["function"],當前執行的函式名稱.
4595
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4596
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4597
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4598
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4599
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4600
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4601
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4602
		#必填寫的參數:
4603
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4604
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4605
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4606
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
4607
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4608
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
4609
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4610
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4611
		#可以省略的參數:
4612
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4613
		#$conf["canBeEmptyString"]="false";
4614
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4615
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4616
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4617
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4618
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4619
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4620
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4621
		#$conf["arrayCountEqualCheck"][]=array();
4622
		#參考資料來源:
4623
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4624
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4625
		unset($conf["variableCheck::checkArguments"]);
4626
 
4627
		#如果檢查有誤
4628
		if($checkResult["status"]=="false"){
4629
 
4630
			#設置錯誤識別
4631
			$result["status"]="false";
4632
 
4633
			#設置錯誤訊息
4634
			$result["error"]=$checkResult;
4635
 
4636
			#回傳結果
4637
			return $result;
4638
 
4639
			}#if end
4640
 
4641
		#如果檢查不通過
4642
		if($checkResult["passed"]=="false"){
4643
 
4644
			#設置錯誤識別
4645
			$result["status"]="false";
4646
 
4647
			#設置錯誤訊息
4648
			$result["error"]=$checkResult;
4649
 
4650
			#回傳結果
4651
			return $result;
4652
 
4653
			}#if end
4654
 
4655
		#函式說明:
4656
		#解析路徑的每個層級.
4657
		#回傳結果:
4658
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4659
		#$result["error"],錯誤訊息陣列.
4660
		#$resutl["function"],當前執行的涵式名稱.
4661
		#$result["argu"],使用的參數.
4662
		#$result["content"],解析出來的路徑階層.
4663
		#必填參數:
4664
		#$conf["path"],要檢查的路徑
4665
		$conf["fileAccess::parsePath"]["path"]=$conf["path"];
4666
		#可省略參數:
4667
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4668
		$conf["fileAccess::parsePath"]["haveFileName"]=$conf["haveFileName"];
4669
		#參考資料:
4670
		#無.
4671
		#備註:
4672
		#無.
4673
		$parsePath=fileAccess::parsePath($conf["fileAccess::parsePath"]);
4674
		unset($conf["fileAccess::parsePath"]);
4675
 
4676
		#如果檢查有誤
4677
		if($parsePath["status"]==="false"){
4678
 
4679
			#設置錯誤識別
4680
			$result["status"]="false";
4681
 
4682
			#設置錯誤訊息
4683
			$result["error"]=$parsePath;
4684
 
4685
			#回傳結果
4686
			return $result;
4687
 
4688
			}#if end
4689
 
4690
		#函式說明:
4691
		#檢查多個檔案與資料夾是否存在.
4692
		#回傳的結果:
4693
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4694
		#$result["error"],錯誤訊息陣列.
4695
		#$resutl["function"],當前執行的涵式名稱.
4696
		#$result["argu"],使用的參數.
4697
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
4698
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
4699
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
4700
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
4701
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
4702
		#必填參數:
4703
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
4704
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$parsePath["content"];
4705
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4706
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
4707
		#可省略參數:
4708
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
4709
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="true";
4710
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
4711
		$conf["fileAccess::checkMultiFileExist"]["userDir"]="false";
4712
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
4713
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
4714
		#參考資料:
4715
		#http://php.net/manual/en/function.file-exists.php
4716
		#http://php.net/manual/en/control-structures.foreach.php
4717
		#備註:
4718
		#函數file_exists檢查的路徑為檔案系統的路徑
4719
		#$result["varName"][$i]結果未實作
4720
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
4721
		unset($conf["fileAccess::checkMultiFileExist"]);
4722
 
4723
		#如果執行異常
4724
		if($checkMultiFileExist["status"]==="false"){
4725
 
4726
			#設置錯誤識別
4727
			$result["status"]="false";
4728
 
4729
			#設置錯誤訊息
4730
			$result["error"]=$checkMultiFileExist;
4731
 
4732
			#回傳結果
4733
			return $result;
4734
 
4735
			}#if end
4736
 
4737
		#如果有路徑無法存取
4738
		if($checkMultiFileExist["allExist"]==="false"){
4739
 
4740
			#設置執行正常識別
4741
			$result["status"]="true";
4742
 
4743
			#設置路徑找不到
4744
			$result["found"]="false";
4745
 
4746
			#針對每個路徑的搜尋結果
4747
			foreach($checkMultiFileExist["varExist"] as $index => $found){
4748
 
4749
				#設置路徑尋找結果
4750
				$result["content"][]=array("found"=>$found,"path"=>$checkMultiFileExist["varNameFullPath"][$index]);
4751
 
4752
				}#foreach end
4753
 
4754
			#回傳結果
4755
			return $result;
4756
 
4757
			}#if end
4758
 
4759
		#設置路徑有找到
4760
		$result["found"]="true";
4761
 
4762
		#設置執行正常識別
4763
		$result["status"]="true";
4764
 
4765
		#回傳結果
4766
		return $result;
4767
 
4768
		}#function checkPathExist end
4769
 
4770
	/*	
4771
	#函式說明:
4772
	#demo建立pdf檔
4773
	#必填參數:
4774
	#無
4775
	#可省略參數:
4776
	#無
4777
	#參考資料:
4778
	#tcpdf=>http://www.tcpdf.org/examples.php
4779
	#備註:
4780
	#開發中,需要安裝 php-tcpdf 套件.
4781
	*/
4782
	public static function demoCreateTcPdfFile(){
4783
 
4784
		#避免 TCPDF ERROR: Some data has already been output, can't send PDF file 錯誤產生
4785
		ob_end_clean();
4786
 
4787
		#create new PDF document
4788
		$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
4789
 
4790
		#set document information
4791
		$pdf->SetCreator(PDF_CREATOR);
4792
		$pdf->SetAuthor('qbpwc');
4793
		$pdf->SetTitle('pdf sample title');
4794
		$pdf->SetSubject('pdf sample subject');
4795
		$pdf->SetKeywords('pdf, sample, tcpdf, qbpwc');
4796
 
4797
		#set default header data
4798
		$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
4799
		$pdf->setFooterData(array(0,64,0), array(0,64,128));
4800
 
4801
		#set header and footer fonts
4802
		$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
4803
		$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
4804
 
4805
		#set default monospaced font
4806
		$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
4807
 
4808
		#set margins
4809
		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
4810
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
4811
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
4812
 
4813
		#set auto page breaks
4814
		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
4815
 
4816
		#set image scale factor
4817
		$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
4818
 
4819
		#set some language-dependent strings (optional)
4820
		if (@file_exists(dirname(__FILE__).'/lang/eng.php')){
4821
 
4822
			require_once(dirname(__FILE__).'/lang/eng.php');
4823
 
4824
			$pdf->setLanguageArray($l);
4825
 
4826
			}#if end
4827
 
4828
		#set default font subsetting mode
4829
		$pdf->setFontSubsetting(true);
4830
 
4831
		#Set font
4832
		#dejavusans is a UTF-8 Unicode font, if you only need to
4833
		#print standard ASCII chars, you can use core fonts like
4834
		#helvetica or times to reduce file size.
4835
		$pdf->SetFont('dejavusans', '', 14, '', true);
4836
 
4837
		#Add a page
4838
		#This method has several options, check the source code documentation for more information.
4839
		$pdf->AddPage();
4840
 
4841
		#set text shadow effect
4842
		$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));
4843
 
4844
		#Set some content to print
4845
		$html="<h5>Hello World!</h5>";
4846
 
4847
		// Print text using writeHTMLCell()
4848
		$pdf->writeHTMLCell(0,0,'','',$html,0,1,0,true,'',true);
4849
 
4850
		// Close and output PDF document
4851
		// This method has several options, check the source code documentation for more information.
4852
		$pdf->Output('fileAccessT/example_001.pdf','I');
4853
 
4854
		}#function demoCreateTcPdfFile end
4855
 
4856
	/*
4857
	#函式說明:
4858
	#取得檔案路徑字串的路徑與檔案的名稱與檔案副檔名
4859
	#回傳的結果:
4860
	#$result["status"],執行是否正常,"true"正常,"false"代表不正常.
4861
	#$result["error"],錯誤訊息.
4862
	#$result["function"],當前執行的函式名稱.
4863
	#$result["filePath"],路徑字串.
4864
	#$result["fileName"],檔案名稱字串.
4865
	#$result["fileExtention"],檔案的副檔名.
4866
	#$result["fullFileName"],含副檔名的檔案名稱.
4867
	#$result["fullFilePathAndName"],完整的檔案路徑(含副檔名).
4868
	#必填參數:
4869
	#$conf["fileAddressAndName"],字串,檔案名稱與其路徑.
4870
	$conf["fileAddressAndName"]="";
4871
	#可省略參數:
4872
	#無.
4873
	#參考資料:
4874
	#無.
4875
	#備註:
4876
	#無.
4877
	*/
4878
	public static function getFileAddressAndNameAndFileExtention(&$conf){
4879
 
4880
		#初始化要回傳的參數
4881
		$result=array();
4882
 
4883
		#取得當前執行函數名稱
4884
		$result["function"]=__FUNCTION__;
4885
 
4886
		#如果 $conf 不為陣列
4887
		if(gettype($conf)!="array"){
4888
 
4889
			#設置執行失敗
4890
			$result["status"]="false";
4891
 
4892
			#設置執行錯誤訊息
4893
			$result["error"][]="\$conf變數須為陣列形態";
4894
 
4895
			#如果傳入的參數為 null
4896
			if($conf==null){
4897
 
4898
				#設置執行錯誤訊息
4899
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4900
 
4901
				}#if end
4902
 
4903
			#回傳結果
4904
			return $result;
4905
 
4906
			}#if end
4907
 
4908
		#檢查參數
4909
		#函式說明:
4910
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4911
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4912
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4913
		#$result["function"],當前執行的函式名稱.
4914
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4915
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4916
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4917
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4918
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4919
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4920
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4921
		#必填寫的參數:
4922
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4923
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4924
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4925
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileAddressAndName");
4926
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
4927
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4928
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4929
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4930
		#可以省略的參數:
4931
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4932
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4933
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4934
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("outputAddress","noDownload");
4935
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4936
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4937
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4938
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".bin/".$conf["cppAddress"].".bin","true");
4939
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4940
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
4941
		#參考資料來源:
4942
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4943
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4944
		unset($conf["variableCheck::checkArguments"]);
4945
 
4946
		#如果 $checkArguments["status"] 等於 "false"
4947
		if($checkArguments["status"]=="false"){
4948
 
4949
			#設置 $result["status"] 為 "false"
4950
			$result["status"]="false";
4951
 
4952
			#設置 $result["error"]
4953
			$result["error"]=$checkArguments;
4954
 
4955
			#回傳結果
4956
			return $result;
4957
 
4958
			}#if end
4959
 
4960
		#如果 $checkArguments["passed"] 等於 "false"
4961
		if($checkArguments["passed"]=="false"){
4962
 
4963
			#設置 $result["status"] 為 "false"
4964
			$result["status"]="false";
4965
 
4966
			#設置 $result["error"]
4967
			$result["error"]=$checkArguments;
4968
 
4969
			#回傳結果
4970
			return $result;
4971
 
4972
			}#if end
4973
 
4974
		#確認路徑是否為絕對路徑
4975
		#函式說明:
4976
		#取得符合特定字首與字尾的字串
4977
		#回傳結果:
4978
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4979
		#$result["function"],當前執行的函數名稱.
4980
		#$result["error"],錯誤訊息陣列.
4981
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4982
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4983
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4984
		#$result["argu"],使用的參數.
4985
		#必填參數:
4986
		#$conf["checkString"],字串,要檢查的字串.
4987
		$conf["fileAccess::getMeetConditionsString"]["checkString"]=$conf["fileAddressAndName"];
4988
		#可省略參數:
4989
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4990
		$conf["fileAccess::getMeetConditionsString"]["frontWord"]="/";
4991
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4992
		#$conf["tailWord"]="";
4993
		#參考資料:
4994
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4995
		#備註:
4996
		#無.
4997
		$getMeetConditionsString=search::getMeetConditionsString($conf["fileAccess::getMeetConditionsString"]);
4998
		unset($conf["fileAccess::getMeetConditionsString"]);
4999
 
5000
		#如果執行出錯
5001
		if($getMeetConditionsString["status"]==="false"){
5002
 
5003
			#設置錯誤識別
5004
			$result["status"]="false";
5005
 
5006
			#設置錯誤訊息
5007
			$result["error"]=$getMeetConditionsString;
5008
 
5009
			#回傳結果
5010
			return $result;
5011
 
5012
			}#if end
5013
 
5014
		#預設參數 $conf["fileAddressAndName"] 不為 "/" 開始
5015
		$fileAddressAndNameStarFromRoot="true";
5016
 
5017
		#如果是 "/" 開頭
5018
		if($getMeetConditionsString["founded"]==="false"){
5019
 
5020
			#設置參數 $conf["fileAddressAndName"] 為 "/" 開始
5021
			$fileAddressAndNameStarFromRoot="true";
5022
 
5023
			}#if end
5024
 
5025
		#檢查是否有路徑資訊 
5026
		#函式說明:
5027
		#將固定格式的字串分開,並回傳分開的結果。
5028
		#回傳的參數:
5029
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5030
		#$result["error"],錯誤訊息陣列
5031
		#$result["oriStr"],要分割的原始字串內容
5032
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5033
		#$result["dataCounts"],爲總共分成幾段
5034
		#必填參數:
5035
		$conf["stringProcess"]["spiltString"]["stringIn"]=$conf["fileAddressAndName"];#要處理的字串。
5036
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
5037
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5038
		unset($conf["stringProcess"]["spiltString"]);
5039
 
5040
		#如果 $spiledResult["status"] 等於 "false"
5041
		if($spiledResult["status"]==="false"){
5042
 
5043
			#設置錯誤識別
5044
			$result["status"]="false";
5045
 
5046
			#設置錯誤訊息
5047
			$result["error"]=$spiledResult;
5048
 
5049
			#回傳結果
5050
			return $result;
5051
 
5052
			}#if end
5053
 
5054
		#如果 $spiledResult["dataCounts"] 大於 1
5055
		if($spiledResult["dataCounts"]>1){
5056
 
5057
			#代表有路徑字串
5058
 
5059
			#初始化路徑字串暫存變數
5060
			$tempPathStr="";
5061
 
5062
			#如果是絕對路徑
5063
			if($fileAddressAndNameStarFromRoot==="true"){
5064
 
5065
				#加上根目錄
5066
				$tempPathStr=$tempPathStr."/";
5067
 
5068
				}#if end
5069
 
5070
			#取得路徑字串
5071
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5072
 
5073
				#串連片段路徑字串
5074
				$tempPathStr=$tempPathStr.$spiledResult["dataArray"][$i]."/";
5075
 
5076
				}#for end
5077
 
5078
			#取得檔案的路徑
5079
			$result["filePath"]=$tempPathStr;
5080
 
5081
			}#if end
5082
 
5083
		#反之 $spiledResult["dataCounts"] 等於 1
5084
		else{
5085
 
5086
			#檔案的路徑設為""
5087
			$result["filePath"]="";
5088
 
5089
			}#else end
5090
 
5091
		#取得檔案名稱(含副檔名)
5092
		$result["fullFileName"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5093
 
5094
		#取得副檔名
5095
		#函式說明:
5096
		#將固定格式的字串分開,並回傳分開的結果。
5097
		#回傳的參數:
5098
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5099
		#$result["error"],錯誤訊息陣列
5100
		#$result["oriStr"],要分割的原始字串內容
5101
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5102
		#$result["dataCounts"],爲總共分成幾段
5103
		#必填參數:
5104
		$conf["stringProcess"]["spiltString"]["stringIn"]=$result["fullFileName"];#要處理的字串。
5105
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
5106
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5107
		unset($conf["stringProcess"]["spiltString"]);
5108
 
5109
		#如果 $spiledResult["status"] 等於 "false"
5110
		if($spiledResult["status"]=="false"){
5111
 
5112
			#設置錯誤識別
5113
			$result["status"]="false";
5114
 
5115
			#設置錯誤訊息
5116
			$result["error"]=$spiledResult;
5117
 
5118
			#回傳結果
5119
			return $result;
5120
 
5121
			}#if end
5122
 
5123
		#如果 $spiledResult["dataCounts"] 大於 1
5124
		if($spiledResult["dataCounts"]>1){
5125
 
5126
			#代表有副檔名
5127
 
5128
			#初始化檔名字串暫存變數
5129
			$tempFileNameStr="";
5130
 
5131
			#取得路徑字串
5132
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5133
 
5134
				#如果是最後一個小黑點前面的字串片段
5135
				if($i==$spiledResult["dataCounts"]-2){
5136
 
5137
					#串連片段路徑字串
5138
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i];
5139
 
5140
					}#if end
5141
 
5142
				#反之不是最後一個小黑點前面的字串片段
5143
				else{
5144
 
5145
					#串連片段路徑字串(含小黑點)
5146
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i].".";
5147
 
5148
					}#else end
5149
 
5150
				}#for end
5151
 
5152
			#取得檔名
5153
			$result["fileName"]=$tempFileNameStr;
5154
 
5155
			#取得副檔名
5156
			$result["fileExtention"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5157
 
5158
			}#if end
5159
 
5160
		#反之 $spiledResult["dataCounts"] 等於 1
5161
		else{
5162
 
5163
			#檔案的副檔名設為""
5164
			$result["fileExtention"]="";
5165
 
5166
			#取得檔案的名稱
5167
			$result["fileName"]=$spiledResult["dataArray"][0];
5168
 
5169
			}#else end
5170
 
5171
		#如果 $result["fileExtention"] 不等於 ""
5172
		if($result["fileExtention"]!=""){
5173
 
5174
			#將副檔名用小黑點跟檔案名稱連在一塊
5175
			$result["fullFileName"]=$result["fileName"].".".$result["fileExtention"];
5176
 
5177
			}#if end
5178
 
5179
		#反之代表沒有副檔名
5180
		else{
5181
 
5182
			#取得含副檔名的檔案名稱
5183
			$result["fullFileName"]=$result["fileName"].$result["fileExtention"];
5184
 
5185
			}#else end
5186
 
5187
		#完整的檔案路徑(含副檔名).
5188
		$result["fullFilePathAndName"]=$result["filePath"].$result["fullFileName"];
5189
 
5190
		#設置執行正常的識別
5191
		$result["status"]="true";
5192
 
5193
		#回傳結果
5194
		return $result;
5195
 
5196
		}#funciton getFileAddressAndNameAndFileExtention end
5197
 
5198
	/*
5199
	#函式說明:
5200
	#將資料夾或檔案打包成tar檔案
5201
	#回傳結果:
5202
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5203
	#$result["function"],當前執行的函數名稱
5204
	#$result["error"],錯誤訊息.
5205
	#$result["content"],檔案輸出後的位置與名稱.
5206
	#必填參數:
5207
	#$conf["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5208
	$conf["packetTarget"]=array("");
5209
	#$conf["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5210
	$conf["createdTarFile"]="";
5211
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5212
	$conf["fileArgu"]=__FILE__;
5213
	#可省略參數:
5214
	#無.
5215
	#參考資料:
5216
	#無.
5217
	#備註:
5218
	#無.
5219
	*/
5220
	public static function makeTarFile(&$conf){
5221
 
5222
		#初始化要回傳的內容
5223
		$result=array();
5224
 
5225
		#記錄當前執行的函數名稱
5226
		$result["function"]=__FUNCTION__;
5227
 
5228
		#如果 $conf 不為陣列
5229
		if(gettype($conf)!="array"){
5230
 
5231
			#設置執行失敗
5232
			$result["status"]="false";
5233
 
5234
			#設置執行錯誤訊息
5235
			$result["error"][]="\$conf變數須為陣列形態";
5236
 
5237
			#如果傳入的參數為 null
5238
			if($conf==null){
5239
 
5240
				#設置執行錯誤訊息
5241
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5242
 
5243
				}#if end
5244
 
5245
			#回傳結果
5246
			return $result;
5247
 
5248
			}#if end
5249
 
5250
		#檢查參數
5251
		#函式說明:
5252
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5253
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5254
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5255
		#$result["function"],當前執行的函式名稱.
5256
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5257
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5258
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5259
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5260
		#必填寫的參數:
5261
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5262
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5263
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5264
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","packetTarget","createdTarFile");
5265
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5266
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5267
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5268
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5269
		#可以省略的參數:
5270
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5271
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5272
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5273
		#$conf["skipableVariableName"]=array();
5274
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5275
		#$conf["skipableVariableType"]=array();
5276
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5277
		#$conf["skipableVarDefaultValue"]=array("");
5278
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5279
		#$conf["arrayCountEqualCheck"][]=array();
5280
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5281
		unset($conf["variableCheck::checkArguments"]);
5282
 
5283
		#若檢查失敗
5284
		if($checkResult["status"]=="false"){
5285
 
5286
			#設置執行失敗
5287
			$result["status"]="false";
5288
 
5289
			#設置執行錯誤訊息
5290
			$result["error"]=$checkResult;
5291
 
5292
			#回傳結果
5293
			return $result;
5294
 
5295
			}#if end
5296
 
5297
		#若檢查不通過
5298
		if($checkResult["passed"]=="false"){
5299
 
5300
			#設置執行失敗
5301
			$result["status"]="false";
5302
 
5303
			#設置執行錯誤訊息
5304
			$result["error"]=$checkResult;
5305
 
5306
			#回傳結果
5307
			return $result;
5308
 
5309
			}#if end
5310
 
5311
		#初始化打包要用的tar指令參數
5312
		$paramsArray=array("-cvf",$conf["createdTarFile"].".tar");
5313
 
5314
		#檢查要打包的檔案是否存在
5315
		#函式說明:
5316
		#檢查多個檔案與資料夾是否存在.
5317
		#回傳的結果:
5318
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5319
		#$result["error"],錯誤訊息陣列.
5320
		#$resutl["function"],當前執行的涵式名稱.
5321
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5322
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5323
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5324
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5325
		#必填參數:
5326
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5327
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$conf["packetTarget"];
5328
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5329
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5330
		#可省略參數
5331
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5332
		#$conf["disableWebSearch"]="false";
5333
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5334
		#$conf["userDir"]="true";
5335
		#參考資料來源:
5336
		#http://php.net/manual/en/function.file-exists.php
5337
		#http://php.net/manual/en/control-structures.foreach.php
5338
		#備註:
5339
		#函數file_exists檢查的路徑為檔案系統的路徑
5340
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5341
		unset($conf["fileAccess::checkMultiFileExist"]);
5342
 
5343
		#如果檢查要打包的檔案失敗
5344
		if($checkMultiFileExist["status"]=="false"){
5345
 
5346
			#設置執行失敗
5347
			$result["status"]="false";
5348
 
5349
			#設置執行錯誤訊息
5350
			$result["error"]=$checkMultiFileExist;
5351
 
5352
			#回傳結果
5353
			return $result;
5354
 
5355
			}#if end
5356
 
5357
		#如果要打包的檔案有缺
5358
		if($checkMultiFileExist["allExist"]=="false"){
5359
 
5360
			#設置執行失敗
5361
			$result["status"]="false";
5362
 
5363
			#設置執行錯誤訊息
5364
			$result["error"]=$checkMultiFileExist;
5365
 
5366
			#回傳結果
5367
			return $result;
5368
 
5369
			}#if end
5370
 
5371
		#有幾個要打包的目標就執行幾次
5372
		for($i=0;$i<count($conf["packetTarget"]);$i++){
5373
 
5374
			#串接上要打包的檔案或資料夾
5375
			$paramsArray[]=$conf["packetTarget"][$i];
5376
 
5377
			}#for end
5378
 
5379
		#函式說明:
5380
		#呼叫shell執行系統命令,並取得回傳的內容.
5381
		#回傳結果:
5382
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5383
		#$result["error"],錯誤訊息陣列.
5384
		#$result["function"],當前執行的函數名稱.
5385
		#$result["argu"],使用的參數.
5386
		#$result["cmd"],執行的指令內容.
5387
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
5388
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
5389
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
5390
		#$result["running"],是否還在執行.
5391
		#$result["pid"],pid.
5392
		#$result["statusCode"],執行結束後的代碼.
5393
		#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
5394
		#必填參數:
5395
		#$conf["command"],字串,要執行的指令.
5396
		$conf["external::callShell"]["command"]="tar";
5397
		#$conf["fileArgu"],字串,變數__FILE__的內容.
5398
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5399
		#可省略參數:
5400
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5401
		$conf["external::callShell"]["argu"]=$paramsArray;
5402
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
5403
		#$conf["arguIsAddr"]=array();
5404
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
5405
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
5406
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
5407
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5408
		#$conf["enablePrintDescription"]="true";
5409
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
5410
		#$conf["printDescription"]="";
5411
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
5412
		$conf["external::callShell"]["escapeshellarg"]="true";
5413
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
5414
		#$conf["thereIsShellVar"]=array();
5415
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
5416
		#$conf["username"]="";
5417
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
5418
		#$conf["password"]="";
5419
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
5420
		#$conf["useScript"]="";
5421
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
5422
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
5423
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
5424
		#$conf["inBackGround"]="";
5425
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
5426
		#$conf["getErr"]="false";
5427
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
5428
		#$conf["doNotRun"]="false";
5429
		#參考資料:
5430
		#exec=>http://php.net/manual/en/function.exec.php
5431
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
5432
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
5433
		#備註:
5434
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
5435
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
5436
		$conf["external::callShell"]=external::callShell($conf["external::callShell"]);
5437
		unset($conf["external::callShell"]);
5438
 
5439
		#如果執行shell失敗
5440
		if($callShell["status"]=="false"){
5441
 
5442
			#設置執行失敗
5443
			$result["status"]="false";
5444
 
5445
			#設置執行錯誤訊息
5446
			$result["error"]=$callShell;
5447
 
5448
			#回傳結果
5449
			return $result;
5450
 
5451
			}#if end
5452
 
5453
		#打包好的檔案位置與名稱
5454
		$result["content"]=$conf["createdTarFile"].".tar";
5455
 
5456
		#執行到這邊代表執行正常
5457
		$result["status"]="true";
5458
 
5459
		#回傳結果
5460
		return $result;
5461
 
5462
		}#function makeTarFile end
5463
 
5464
	/*
5465
	#函式說明:
5466
	#將一個檔案壓縮成xz檔案
5467
	#回傳結果:
5468
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5469
	#$result["function"],當前執行的函數名稱
5470
	#$result["error"],錯誤訊息.
5471
	#$result["content"],檔案輸出後的位置與名稱.
5472
	#必填參數:
5473
	#$conf["compressTarget"],字串,要打包的每個資料夾與檔案位置
5474
	$conf["compressTarget"]="";
5475
	#$conf["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5476
	$conf["createdXzFile"]="";
5477
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5478
	$conf["fileArgu"]=__FILE__;
5479
	#可省略參數:
5480
	#無.
5481
	#參考資料:
5482
	#無.
5483
	#備註:
5484
	#無.
5485
	*/
5486
	public static function makeXzFile(&$conf){
5487
 
5488
		#初始化要回傳的內容
5489
		$result=array();
5490
 
5491
		#記錄當前執行的函數名稱
5492
		$result["function"]=__FUNCTION__;
5493
 
5494
		#如果 $conf 不為陣列
5495
		if(gettype($conf)!="array"){
5496
 
5497
			#設置執行失敗
5498
			$result["status"]="false";
5499
 
5500
			#設置執行錯誤訊息
5501
			$result["error"][]="\$conf變數須為陣列形態";
5502
 
5503
			#如果傳入的參數為 null
5504
			if($conf==null){
5505
 
5506
				#設置執行錯誤訊息
5507
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5508
 
5509
				}#if end
5510
 
5511
			#回傳結果
5512
			return $result;
5513
 
5514
			}#if end
5515
 
5516
		#檢查參數
5517
		#函式說明:
5518
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5519
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5520
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5521
		#$result["function"],當前執行的函式名稱.
5522
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5523
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5524
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5525
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5526
		#必填寫的參數:
5527
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5528
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5529
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5530
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdXzFile");
5531
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5532
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
5533
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5534
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5535
		#可以省略的參數:
5536
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5537
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5538
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5539
		#$conf["skipableVariableName"]=array();
5540
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5541
		#$conf["skipableVariableType"]=array();
5542
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5543
		#$conf["skipableVarDefaultValue"]=array("");
5544
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5545
		#$conf["arrayCountEqualCheck"][]=array();
5546
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5547
		unset($conf["variableCheck::checkArguments"]);
5548
 
5549
		#若檢查失敗
5550
		if($checkResult["status"]=="false"){
5551
 
5552
			#設置執行失敗
5553
			$result["status"]="false";
5554
 
5555
			#設置執行錯誤訊息
5556
			$result["error"]=$checkResult;
5557
 
5558
			#回傳結果
5559
			return $result;
5560
 
5561
			}#if end
5562
 
5563
		#若檢查不通過
5564
		if($checkResult["passed"]=="false"){
5565
 
5566
			#設置執行失敗
5567
			$result["status"]="false";
5568
 
5569
			#設置執行錯誤訊息
5570
			$result["error"]=$checkResult;
5571
 
5572
			#回傳結果
5573
			return $result;
5574
 
5575
			}#if end
5576
 
5577
		#檢查要用xz壓縮的檔案是否存在
5578
		#函式說明:
5579
		#檢查多個檔案與資料夾是否存在.
5580
		#回傳的結果:
5581
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5582
		#$result["error"],錯誤訊息陣列.
5583
		#$resutl["function"],當前執行的涵式名稱.
5584
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5585
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5586
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5587
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5588
		#必填參數:
5589
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5590
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["compressTarget"]);
5591
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5592
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5593
		#可省略參數
5594
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5595
		#$conf["disableWebSearch"]="false";
5596
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5597
		#$conf["userDir"]="true";
5598
		#參考資料來源:
5599
		#http://php.net/manual/en/function.file-exists.php
5600
		#http://php.net/manual/en/control-structures.foreach.php
5601
		#備註:
5602
		#函數file_exists檢查的路徑為檔案系統的路徑
5603
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5604
		unset($conf["fileAccess::checkMultiFileExist"]);
5605
 
5606
		#如果檢查要用xz壓縮的檔案失敗
5607
		if($checkMultiFileExist["status"]=="false"){
5608
 
5609
			#設置執行失敗
5610
			$result["status"]="false";
5611
 
5612
			#設置執行錯誤訊息
5613
			$result["error"]=$checkMultiFileExist;
5614
 
5615
			#回傳結果
5616
			return $result;
5617
 
5618
			}#if end
5619
 
5620
		#如果要用xz壓縮的檔案有缺
5621
		if($checkMultiFileExist["allExist"]=="false"){
5622
 
5623
			#設置執行失敗
5624
			$result["status"]="false";
5625
 
5626
			#設置執行錯誤訊息
5627
			$result["error"]=$checkMultiFileExist;
5628
 
5629
			#回傳結果
5630
			return $result;
5631
 
5632
			}#if end
5633
 
5634
		#壓縮要用的xz語法
5635
		#函式說明:
5636
		#呼叫shell執行系統命令,並取得回傳的內容.
5637
		#回傳的結果:
5638
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5639
		#$result["error"],錯誤訊息陣列
5640
		#$result["output"],爲執行完二元碼後的輸出陣列
5641
		#必填的參數
5642
		$conf["external::callShell"]["command"]="xz";#要執行的指令與參數
5643
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5644
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5645
		#可省略參數:
5646
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5647
		$conf["external::callShell"]["argu"]=array("-v","-v","-z","-c",$conf["compressTarget"],">",$conf["createdXzFile"].".xz ");
5648
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5649
		#$conf["enablePrintDescription"]="true";
5650
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
5651
		#$conf["printDescription"]="";
5652
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
5653
		$conf["external::callShell"]["escapeshellarg"]="true";
5654
		#參考資料:
5655
		#http://php.net/manual/en/function.exec.php
5656
		$callShell=external::callShell($conf["external::callShell"]);
5657
		unset($conf["external::callShell"]);
5658
 
5659
		#如果執行shell失敗
5660
		if($callShell["status"]=="false"){
5661
 
5662
			#設置執行失敗
5663
			$result["status"]="false";
5664
 
5665
			#設置執行錯誤訊息
5666
			$result["error"]=$callShell;
5667
 
5668
			#回傳結果
5669
			return $result;
5670
 
5671
			}#if end
5672
 
5673
		#壓縮好的檔案位置與名稱
5674
		$result["content"]=$conf["createdXzFile"].".xz";
5675
 
5676
		#執行到這邊代表執行正常
5677
		$result["status"]="status";
5678
 
5679
		#回傳結果
5680
		return $result;
5681
 
5682
		}#function makeXzFile end
5683
 
5684
	/*
5685
	#函式說明:
5686
	#將資料夾或檔案打包壓縮成tar.xz檔案
5687
	#回傳結果:
5688
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5689
	#$result["function"],當前執行的函數名稱
5690
	#$result["error"],錯誤訊息.
5691
	#$result["content"],檔案輸出後的位置與名稱.
5692
	#必填參數:
5693
	#$conf["compressTarget"],陣列,要打包壓縮的每個資料夾與檔案位置
5694
	$conf["compressTarget"]=array();
5695
	#$conf["createdTarXzFile"],字串,打包壓縮好的檔案要放在哪裡,副檔名.tar.xz會自動加上.
5696
	$conf["createdTarXzFile"]="";
5697
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5698
	$conf["fileArgu"]=__FILE__;
5699
	#可省略參數:
5700
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
5701
	#$conf["commentsArray"]=array("");
5702
	#$conf["includeDotStart"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「.」開頭的檔案目錄,預設為"false",不包含,"true"為要包含.
5703
	#$conf["includeDotStart"]="false";
5704
	#$conf["includeWaveEnd"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「~」結尾的檔案.預設為"false",不包含,"true"為要包含.
5705
	#$conf["includeWaveEnd"]="false";
5706
	#參考資料:
5707
	#無.
5708
	#備註:
5709
	#建議加上 --exclude-backups, --exclude-caches-all 	
5710
	*/
5711
	public static function makeTarXzFile(&$conf){
5712
 
5713
		#初始化要回傳的內容
5714
		$result=array();
5715
 
5716
		#記錄當前執行的函數名稱
5717
		$result["function"]=__FUNCTION__;
5718
 
5719
		#如果 $conf 不為陣列
5720
		if(gettype($conf)!="array"){
5721
 
5722
			#設置執行失敗
5723
			$result["status"]="false";
5724
 
5725
			#設置執行錯誤訊息
5726
			$result["error"][]="\$conf變數須為陣列形態";
5727
 
5728
			#如果傳入的參數為 null
5729
			if($conf==null){
5730
 
5731
				#設置執行錯誤訊息
5732
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5733
 
5734
				}#if end
5735
 
5736
			#回傳結果
5737
			return $result;
5738
 
5739
			}#if end
5740
 
5741
		#檢查參數
5742
		#函式說明:
5743
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5744
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5745
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5746
		#$result["function"],當前執行的函式名稱.
5747
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5748
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5749
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5750
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5751
		#必填寫的參數:
5752
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5753
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5754
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5755
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdTarXzFile");
5756
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5757
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5758
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5759
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5760
		#可以省略的參數:
5761
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5762
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5763
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5764
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","includeDotStart","includeWaveEnd");
5765
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5766
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
5767
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5768
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
5769
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5770
		#$conf["arrayCountEqualCheck"][]=array();
5771
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5772
		unset($conf["variableCheck::checkArguments"]);
5773
 
5774
		#若檢查失敗
5775
		if($checkResult["status"]=="false"){
5776
 
5777
			#設置執行失敗
5778
			$result["status"]="false";
5779
 
5780
			#設置執行錯誤訊息
5781
			$result["error"]=$checkResult;
5782
 
5783
			#回傳結果
5784
			return $result;
5785
 
5786
			}#if end
5787
 
5788
		#若檢查不通過
5789
		if($checkResult["passed"]=="false"){
5790
 
5791
			#設置執行失敗
5792
			$result["status"]="false";
5793
 
5794
			#設置執行錯誤訊息
5795
			$result["error"]=$checkResult;
5796
 
5797
			#回傳結果
5798
			return $result;
5799
 
5800
			}#if end
5801
 
5802
		#如果 $conf["commentsArray"] 有設定
5803
		if(isset($conf["commentsArray"])){
5804
 
5805
			#印出提示文字
5806
			#函式說明:
5807
			#印出多行文字,結尾自動換行.
5808
			#回傳的結果:
5809
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
5810
			#$result["function"],當前執行的函數名稱.
5811
			#$result["error"],錯誤訊息陣列.
5812
			#必填參數:
5813
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
5814
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
5815
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
5816
			unset($conf["cmd::echoMultiLine"]);
5817
 
5818
			#如果印出提示文字失敗
5819
			if($echoMultiLine["status"]=="false"){
5820
 
5821
				#設置執行失敗
5822
				$result["status"]="false";
5823
 
5824
				#設置執行錯誤訊息
5825
				$result["error"]=$echoMultiLine;
5826
 
5827
				#回傳結果
5828
				return $result;
5829
 
5830
				}#if end
5831
 
5832
			}#if end	
5833
 
5834
		#解析要處理的檔案路徑
5835
		#函式說明:
5836
		#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
5837
		#回傳結果:
5838
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5839
		#$result["error"],錯誤訊息陣列.
5840
		#$result["function"],函數名稱. 
5841
		#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
5842
		#$result["pathCount"],整數,有幾個路徑.
5843
		#必填參數:
5844
		#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
5845
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["path"]=$conf["compressTarget"];
5846
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5847
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
5848
		#可省略參數:
5849
		#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
5850
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["includeDotStart"]==="true"?"false":"true";
5851
		#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
5852
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["includeWaveEnd"]==="true"?"false":"true";
5853
		$realPathArray=fileAccess::resolveMultiPostionStringWhichContainStarSymbol($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5854
		unset($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5855
 
5856
		#如果解析路徑失敗
5857
		if($realPathArray["status"]=="false"){
5858
 
5859
			#設置執行失敗
5860
			$result["status"]="false";
5861
 
5862
			#設置執行錯誤訊息
5863
			$result["error"]=$realPathArray;
5864
 
5865
			#回傳結果
5866
			return $result;
5867
 
5868
			}#if end
5869
 
5870
		#取得解析好的檔案路徑陣列
5871
		$conf["compressTarget"]=$realPathArray["content"];	
5872
 
5873
		#將路徑轉換成相對路徑
5874
		#函式說明:
5875
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
5876
		#回傳結果:
5877
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5878
		#$result["error"],錯誤訊息陣列.
5879
		#$result["function"],函數名稱. 
5880
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
5881
		#必填參數:
5882
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
5883
		$conf["fileAccess::getRelativePath"]["path"]=$conf["compressTarget"];
5884
		#$conf["fileArgu"],字串,當前路徑.
5885
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
5886
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
5887
		unset($conf["fileAccess::getRelativePath"]);
5888
 
5889
		#如果轉換失敗
5890
		if($getRelativePath["status"]=="false"){
5891
 
5892
			#設置執行失敗
5893
			$result["status"]="false";
5894
 
5895
			#設置執行錯誤訊息
5896
			$result["error"]=$getRelativePat;
5897
 
5898
			#回傳結果
5899
			return $result;
5900
 
5901
			}#if end	
5902
 
5903
		#打包成tar檔
5904
		#函式說明:
5905
		#將資料夾或檔案打包成tar檔案
5906
		#回傳的結果:
5907
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5908
		#$result["function"],當前執行的函數名稱
5909
		#$result["error"],錯誤訊息.
5910
		#$result["content"],檔案輸出後的位置與名稱.
5911
		#必填參數:
5912
		#$conf["fileAccess::makeTarFile"]["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5913
		$conf["fileAccess::makeTarFile"]["packetTarget"]=$getRelativePath["content"];
5914
		#$conf["fileAccess::makeTarFile"]["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5915
		$conf["fileAccess::makeTarFile"]["createdTarFile"]=$conf["createdTarXzFile"];
5916
		#$conf["fileAccess::makeTarFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5917
		$conf["fileAccess::makeTarFile"]["fileArgu"]=$conf["fileArgu"];
5918
		$makeTarFile=fileAccess::makeTarFile($conf["fileAccess::makeTarFile"]);
5919
		unset($conf["fileAccess::makeTarFile"]);
5920
 
5921
		#如果打包失敗
5922
		if($makeTarFile["status"]=="false"){
5923
 
5924
			#設置執行不正常
5925
			$result["status"]="false";
5926
 
5927
			#設置錯誤訊息
5928
			$result["error"]=$makeTarFile;
5929
 
5930
			#回傳結果
5931
			return $result;
5932
 
5933
			}#if end
5934
 
5935
		#壓縮成xz檔
5936
		#函式說明:
5937
		#將一個檔案壓縮成xz檔案
5938
		#回傳的結果:
5939
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5940
		#$result["function"],當前執行的函數名稱
5941
		#$result["error"],錯誤訊息.
5942
		#$result["content"],檔案輸出後的位置與名稱.
5943
		#必填參數:
5944
		#$conf["fileAccess::makeXzFile"]["compressTarget"],字串,要打包的每個資料夾與檔案位置
5945
		$conf["fileAccess::makeXzFile"]["compressTarget"]=$makeTarFile["content"];
5946
		#$conf["fileAccess::makeXzFile"]["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5947
		$conf["fileAccess::makeXzFile"]["createdXzFile"]=$makeTarFile["content"];
5948
		#$conf["fileAccess::makeXzFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5949
		$conf["fileAccess::makeXzFile"]["fileArgu"]=$conf["fileArgu"];
5950
		$makeXzFile=fileAccess::makeXzFile($conf["fileAccess::makeXzFile"]);
5951
		unset($conf["fileAccess::makeXzFile"]);
5952
 
5953
		#如果壓縮失敗
5954
		if($makeXzFile["status"]=="false"){
5955
 
5956
			#設置執行不正常
5957
			$result["status"]="false";
5958
 
5959
			#設置錯誤訊息
5960
			$result["error"]=$makeXzFile;
5961
 
5962
			#回傳結果
5963
			return $result;
5964
 
5965
			}#if end
5966
 
5967
		#移除tar檔案
5968
		#函式說明:
5969
		#移除檔案
5970
		#回傳結果:
5971
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
5972
		#$result["error"],錯誤訊息陣列
5973
		#$result["warning"],警告訊息陣列
5974
		#$result["function"],當前執行的函數名稱
5975
		#必填參數:
5976
		$conf["fileAccess::delFile"]["fileAddress"]=$makeTarFile["content"];#要移除檔案的位置
5977
		#$conf["fileAccess::delFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5978
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
5979
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
5980
		unset($conf["fileAccess::delFile"]);
5981
 
5982
		#如果移除tar檔案失敗
5983
		if($delFile["status"]=="false"){
5984
 
5985
			#設置執行不正常
5986
			$result["status"]="false";
5987
 
5988
			#設置錯誤訊息
5989
			$result["error"]=$delFile;
5990
 
5991
			#回傳結果
5992
			return $result;
5993
 
5994
			}#if end
5995
 
5996
		#取得壓縮好的檔案位置與名稱
5997
		$result["content"]=$makeXzFile["content"];
5998
 
5999
		#執行到這邊代表執行正常
6000
		$result["status"]="true";
6001
 
6002
		#回傳結果
6003
		return $result;
6004
 
6005
		}#function makeTarXzFile end
6006
 
6007
	/*
6008
	#函式說明:
6009
	#移動檔案
6010
	#回傳結果:
6011
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6012
	#$result["function"],當前執行的函數名稱
6013
	#$result["error"],錯誤訊息.
6014
	#$result["content"],檔案輸出後的位置與名稱.
6015
	#必填參數:
6016
	#$conf["from"],字串,要移動的檔案名稱與位置.
6017
	$conf["from"]="";
6018
	#$conf["to"],字串,要移動到的位置與名稱
6019
	$conf["to"]="";
6020
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6021
	$conf["fileArgu"]=__FILE__;
6022
	#可省略參數:
6023
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
6024
	#$conf["commentsArray"]=array("");
6025
	#參考資料:
6026
	#無.
6027
	#備註:
6028
	#無.
6029
	*/
6030
	public static function mv(&$conf){
6031
 
6032
		#初始化要回傳的結果
6033
		$result=array();
6034
 
6035
		#取得當前執行的函數名稱
6036
		$result["function"]=__FUNCTION__;
6037
 
6038
		#如果 $conf 不為陣列
6039
		if(gettype($conf)!="array"){
6040
 
6041
			#設置執行失敗
6042
			$result["status"]="false";
6043
 
6044
			#設置執行錯誤訊息
6045
			$result["error"][]="\$conf變數須為陣列形態";
6046
 
6047
			#如果傳入的參數為 null
6048
			if($conf==null){
6049
 
6050
				#設置執行錯誤訊息
6051
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6052
 
6053
				}#if end
6054
 
6055
			#回傳結果
6056
			return $result;
6057
 
6058
			}#if end
6059
 
6060
		#檢查參數
6061
		#函式說明:
6062
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6063
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6064
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6065
		#$result["function"],當前執行的函式名稱.
6066
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6067
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6068
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6069
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6070
		#必填寫的參數:
6071
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6072
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
6073
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6074
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("from","to","fileArgu");
6075
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
6076
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
6077
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6078
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
6079
		#可以省略的參數:
6080
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
6081
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
6082
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
6083
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
6084
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
6085
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
6086
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6087
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
6088
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
6089
		#$conf["arrayCountEqualCheck"][]=array();
6090
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
6091
		unset($conf["variableCheck::checkArguments"]);
6092
 
6093
		#若檢查失敗
6094
		if($checkResult["status"]=="false"){
6095
 
6096
			#設置執行失敗
6097
			$result["status"]="false";
6098
 
6099
			#設置執行錯誤訊息
6100
			$result["error"]=$checkResult;
6101
 
6102
			#回傳結果
6103
			return $result;
6104
 
6105
			}#if end
6106
 
6107
		#若檢查不通過
6108
		if($checkResult["passed"]=="false"){
6109
 
6110
			#設置執行失敗
6111
			$result["status"]="false";
6112
 
6113
			#設置執行錯誤訊息
6114
			$result["error"]=$checkResult;
6115
 
6116
			#回傳結果
6117
			return $result;
6118
 
6119
			}#if end
6120
 
6121
		#如果 $conf["commentsArray"] 有設定
6122
		if(isset($conf["commentsArray"])){
6123
 
6124
			#印出提示文字
6125
			#函式說明:
6126
			#印出多行文字,結尾自動換行.
6127
			#回傳的結果:
6128
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
6129
			#$result["function"],當前執行的函數名稱.
6130
			#$result["error"],錯誤訊息陣列.
6131
			#必填參數:
6132
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
6133
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
6134
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
6135
			unset($conf["cmd::echoMultiLine"]);
6136
 
6137
			#如果印出提示文字失敗
6138
			if($echoMultiLine["status"]=="false"){
6139
 
6140
				#設置執行失敗
6141
				$result["status"]="false";
6142
 
6143
				#設置執行錯誤訊息
6144
				$result["error"]=$echoMultiLine;
6145
 
6146
				#回傳結果
6147
				return $result;
6148
 
6149
				}#if end
6150
 
6151
			}#if end	
6152
 
6153
		#檢查要移動的檔案是否存在
6154
		#函式說明:
6155
		#檢查多個檔案與資料夾是否存在.
6156
		#回傳的結果:
6157
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6158
		#$result["error"],錯誤訊息陣列.
6159
		#$resutl["function"],當前執行的涵式名稱.
6160
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6161
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6162
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
6163
		#必填參數:
6164
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["from"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6165
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6166
		#參考資料來源:
6167
		#http://php.net/manual/en/function.file-exists.php
6168
		#http://php.net/manual/en/control-structures.foreach.php
6169
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6170
		unset($conf["fileAccess::checkMultiFileExist"]);
6171
 
6172
		#如果檢查失敗
6173
		if($checkMultiFileExist["status"]=="false"){
6174
 
6175
			#設置執行失敗
6176
			$result["status"]="false";
6177
 
6178
			#設置執行錯誤訊息
6179
			$result["error"]=$checkMultiFileExist;
6180
 
6181
			#回傳結果
6182
			return $result;
6183
 
6184
			}#if end	
6185
 
6186
		#如果來源檔案不存在
6187
		if($checkMultiFileExist["allExist"]=="false"){
6188
 
6189
			#設置執行失敗
6190
			$result["status"]="false";
6191
 
6192
			#設置執行錯誤訊息
6193
			$result["error"][]="檔案「".$conf["from"]."」不存在";
6194
 
6195
			#回傳結果
6196
			return $result;
6197
 
6198
			}#if end
6199
 
6200
		#函式說明:
6201
		#呼叫shell執行系統命令,並取得回傳的內容.
6202
		#回傳的結果:
6203
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6204
		#$result["error"],錯誤訊息陣列
6205
		#$result["output"],爲執行完二元碼後的輸出陣列
6206
		#必填的參數
6207
		$conf["external::callShell"]["command"]="mv";#要執行的指令與參數
6208
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"]; #__FILE__的內容
6209
		#可省略參數:
6210
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
6211
		$conf["external::callShell"]["argu"]=array("-v",$conf["from"],$conf["to"]);
6212
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
6213
		#$conf["external::callShell"]["enablePrintDescription"]="true";
6214
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
6215
		#$conf["printDescription"]="";
6216
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
6217
		$conf["external::callShell"]["escapeshellarg"]="true";
6218
		#參考資料:
6219
		#http://php.net/manual/en/function.exec.php
6220
		$callShell=external::callShell($conf["external::callShell"]);
6221
		unset($conf["external::callShell"]);
6222
 
6223
		#如果移動檔案失敗
6224
		if($callShell["status"]=="false"){
6225
 
6226
			#設置執行失敗
6227
			$result["status"]="false";
6228
 
6229
			#設置執行錯誤訊息
6230
			$result["error"]=$callShell;
6231
 
6232
			#回傳結果
6233
			return $result;
6234
 
6235
			}#if end
6236
 
6237
		#執行到這邊代表正常
6238
		$result["status"]="true";
6239
 
6240
		#儲存移動後的位置與名稱
6241
		$result["content"]=$conf["to"];
6242
 
6243
		#回傳結果
6244
		return $result;
6245
 
6246
		}#function mv end
6247
 
6248
	/*
6249
	#函式說明:
6250
	#取得目錄底下所有目錄與檔案的樹狀結構.
6251
	#回傳結果:
6252
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6253
	#$result["error"],錯誤訊息陣列.
6254
	#$result["function"],函數名稱.
6255
	#$result["position"],根目錄位置.
6256
	#$result["content"],陣列,檔案目錄的樹狀結構.
6257
	#$result["content"][$i]["name"],根目錄底下第$i+1個檔案或目錄的名稱
6258
	#$result["content"][$i]["folder"],根目錄底下第$i+1個名稱是目錄("true")還是檔案("false").
6259
	#$result["content"][$i]["position"],根目錄底下第$i+1個名稱或目錄的位置.
6260
	#$result["content"][$i]["ownerPerm"],根目錄底下第$i+1個使用者的權限.
6261
	#$result["content"][$i]["groupPerm"],根目錄底下第$i+1個群組使用者的權限.
6262
	#$result["content"][$i]["otherPerm"],根目錄底下第$i+1個其他使用者的權限.
6263
	#$result["content"][$i]["ownerName"],根目錄底下第$i+1個擁有者賬戶.
6264
	#$result["content"][$i]["groupName"],根目錄底下第$i+1個群組擁有者賬戶.
6265
	#$result["content"][$i]["next"][$j]["name"],第$i+1個為目錄的名稱的目錄底下第$j+1個檔案或目錄的名稱
6266
	#$result["content"][$i]["next"][$j]["folder"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱是目錄("true")還是檔案("false").
6267
	#$result["content"][$i]["next"][$j]["position"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱或目錄的位置.
6268
	#$result["content"][$i]["next"][$j]["ownerPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個使用者的權限.
6269
	#$result["content"][$i]["next"][$j]["groupPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組使用者的權限.
6270
	#$result["content"][$i]["next"][$j]["otherPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個其他使用者的權限.
6271
	#$result["content"][$i]["next"][$j]["ownerName"],第$i+1個為目錄的名稱的目錄底下第$j+1個擁有者賬戶.
6272
	#$result["content"][$i]["next"][$j]["groupName"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組擁有者賬戶.
6273
	#以此類推...		
6274
	#必填參數:
6275
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6276
	$conf["position"]="";
6277
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6278
	$conf["fileArgu"]=__FILE__;
6279
	#可省略參數:
6280
	#無.
6281
	#參考資料:
6282
	#無.
6283
	#備註:
6284
	#無.
6285
	*/
6286
	public static function getListTree(&$conf){
6287
 
6288
		#初始化要回傳的結果
6289
		$result=array();
6290
 
6291
		#設置當其函數名稱
6292
		$result["function"]=__FUNCTION__;
6293
 
6294
		#如果 $conf 不為陣列
6295
		if(gettype($conf)!="array"){
6296
 
6297
			#設置執行失敗
6298
			$result["status"]="false";
6299
 
6300
			#設置執行錯誤訊息
6301
			$result["error"][]="\$conf變數須為陣列形態";
6302
 
6303
			#如果傳入的參數為 null
6304
			if($conf==null){
6305
 
6306
				#設置執行錯誤訊息
6307
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6308
 
6309
				}#if end
6310
 
6311
			#回傳結果
6312
			return $result;
6313
 
6314
			}#if end
6315
 
6316
		#檢查必填參數
6317
		#函式說明:
6318
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6319
		#回傳的結果:
6320
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6321
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6322
		#$result["function"],當前執行的函式名稱.
6323
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6324
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6325
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6326
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6327
		#必填寫的參數:
6328
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6329
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6330
		#可以省略的參數:
6331
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6332
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6333
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6334
		unset($conf["variableCheck.isexistMulti"]);
6335
 
6336
		#如果檢查失敗
6337
		if($checkResult["status"]=="false"){
6338
 
6339
			#設置錯誤識別
6340
			$result["status"]="false";
6341
 
6342
			#設置錯誤訊息
6343
			$result["error"]=$checkResult;
6344
 
6345
			#回傳結果
6346
			return $result;
6347
 
6348
			}#if end
6349
 
6350
		#如果檢查不通過
6351
		if($checkResult["passed"]=="false"){
6352
 
6353
			#設置錯誤識別
6354
			$result["status"]="false";
6355
 
6356
			#設置錯誤訊息
6357
			$result["error"]=$checkResult;
6358
 
6359
			#回傳結果
6360
			return $result;
6361
 
6362
			}#if end
6363
 
6364
		#如果目錄不為 . 與 ..
6365
		if(basename($conf["position"])!="." && basename($conf["position"])!=".."){
6366
 
6367
			#檢查目錄是否存在
6368
			#函式說明:
6369
			#檢查多個檔案與資料夾是否存在.
6370
			#回傳的結果:
6371
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6372
			#$result["error"],錯誤訊息陣列.
6373
			#$resutl["function"],當前執行的涵式名稱.
6374
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6375
			#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6376
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
6377
			#必填參數:
6378
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["position"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6379
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6380
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6381
			#參考資料來源:
6382
			#http://php.net/manual/en/function.file-exists.php
6383
			#http://php.net/manual/en/control-structures.foreach.php
6384
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6385
			unset($conf["fileAccess::checkMultiFileExist"]);
6386
 
6387
			#如果檢查目錄失敗
6388
			if($checkMultiFileExist["status"]=="false"){
6389
 
6390
				#設置錯誤識別
6391
				$result["status"]="false";
6392
 
6393
				#設置錯誤訊息
6394
				$result["error"]=$checkMultiFileExist;
6395
 
6396
				#回傳結果
6397
				return $result;
6398
 
6399
				}#if end	
6400
 
6401
			#如果目錄不存在
6402
			if($checkMultiFileExist["varExist"][0]=="false"){
6403
 
6404
				#設置錯誤識別
6405
				$result["status"]="false";
6406
 
6407
				#設置錯誤訊息
6408
				$result["error"]=$checkMultiFileExist;
6409
 
6410
				#回傳結果
6411
				return $result;
6412
 
6413
				}#if end	
6414
 
6415
			}#if end
6416
 
6417
		#取得根目錄的樹狀結構
6418
		#函式說明:
6419
		#取得目錄底下所有目錄與檔案清單.
6420
		#回傳結果:
6421
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6422
		#$result["error"],錯誤訊息陣列.
6423
		#$result["function"],函數名稱.
6424
		#$result["content"],陣列,目錄底下的檔案與子目錄.
6425
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6426
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6427
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6428
		#$result["position"],目前的位置.
6429
		#必填參數:
6430
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6431
		$conf["fileAccess::getList"]["position"]=$conf["position"];
6432
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6433
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
6434
		#可省略參數:
6435
		#無
6436
		#參考資料來源:
6437
		#opendir=>http://php.net/manual/en/function.opendir.php
6438
		#is_dir=>http://php.net/manual/en/function.is-dir.php
6439
		$rootList=fileAccess::getList($conf["fileAccess::getList"]);
6440
		unset($conf["fileAccess::getList"]);	
6441
 
6442
		#如果取得根目錄底下的資料失敗
6443
		if($rootList["status"]=="false"){
6444
 
6445
			#設置錯誤識別
6446
			$result["status"]="false";
6447
 
6448
			#設置錯誤訊息
6449
			$result["error"]=$rootList;
6450
 
6451
			#回傳結果
6452
			return $result;
6453
 
6454
			}#if end
6455
 
6456
		#取得當前目錄	
6457
		$result["position"]=$rootList["position"];	
6458
 
6459
		#取得根目錄層級可以看到的檔案與目錄
6460
		$result["content"]=$rootList["content"];
6461
 
6462
		#如果當前目錄有檔案與子目錄
6463
		if(isset($result["content"])){
6464
 
6465
			#當前層級有幾個檔案目錄就執行幾次
6466
			for($i=0;$i<count($result["content"]);$i++){
6467
 
6468
				#如果該單位是目錄
6469
				if($result["content"][$i]["folder"]=="true"){
6470
 
6471
					#呼叫當前函數,取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6472
					#函式說明:
6473
					#取得目錄底下所有目錄與檔案的樹狀結構.
6474
					#回傳結果:
6475
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6476
					#$result["error"],錯誤訊息陣列.
6477
					#$result["function"],函數名稱.
6478
					#$result["content"],陣列,檔案目錄的樹狀結構.
6479
					#$result["total"],根目錄底下有多少目錄與檔案
6480
					#必填參數:
6481
					#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6482
					$conf["fileAccess::getListTree"]["position"]=$conf["position"]."/".$result["content"][$i]["name"];
6483
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6484
					$conf["fileAccess::getListTree"]["fileArgu"]=$conf["fileArgu"];
6485
					#可省略參數:
6486
					#無
6487
					$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6488
					unset($conf["fileAccess::getListTree"]);
6489
 
6490
					#如果取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊失敗
6491
					if($getListTree["status"]=="false"){
6492
 
6493
						#設置錯誤識別
6494
						$result["status"]="false";
6495
 
6496
						#設置錯誤訊息
6497
						$result["error"]=$getListTree;
6498
 
6499
						#回傳結果
6500
						return $result;
6501
 
6502
						}#if end
6503
 
6504
					#如果 $conf["position"]."/".$result["content"][$i]["name"] 目錄有檔案與子目錄
6505
					if(isset($getListTree["content"])){	
6506
 
6507
						#取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6508
						$result["content"][$i]["next"]=$getListTree["content"];
6509
 
6510
						}#if end
6511
 
6512
					#取得當前目錄	
6513
					$result["content"][$i]["position"]=$rootList["position"];	
6514
 
6515
					}#if end
6516
 
6517
				}#for end
6518
 
6519
			}#if end
6520
 
6521
		#執行到這邊代表執行正常
6522
		$result["status"]="true";
6523
 
6524
		#回傳結果
6525
		return $result;
6526
 
6527
		}#function getListTree end
6528
 
6529
	/*
6530
	#函式說明:
6531
	#取得目錄底下所有目錄與檔案清單.
6532
	#回傳結果:
6533
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6534
	#$result["error"],錯誤訊息陣列.
6535
	#$result["function"],函數名稱.
6536
	#$result["content"],陣列,目錄底下的檔案與子目錄.
6537
	#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6538
	#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6539
	#$result["content"][$i]["ownerPerm"],字串,使用者的權限.
6540
	#$result["content"][$i]["groupPerm"],字串,群組使用者的權限.
6541
	#$result["content"][$i]["otherPerm"],字串,其他使用者的權限.
6542
	#$result["content"][$i]["ownerName"],字串,擁有者賬戶.
6543
	#$result["content"][$i]["groupName"],字串,群組擁有者賬戶.
6544
	#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6545
	#$result["position"],目前的位置.
6546
	#必填參數:
6547
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6548
	$conf["position"]="";
6549
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6550
	$conf["fileArgu"]=__FILE__;
6551
	#可省略參數:
6552
	#無
6553
	#參考資料:
6554
	#opendir=>http://php.net/manual/en/function.opendir.php
6555
	#is_dir=>http://php.net/manual/en/function.is-dir.php
6556
	#備註:
6557
	#無.
6558
	*/
6559
	public static function getList(&$conf){
6560
 
6561
		#初始化要回傳的結果
6562
		$result=array();
6563
 
6564
		#設置當其函數名稱
6565
		$result["function"]=__FUNCTION__;
6566
 
6567
		#初始化記載檔案目錄名單的陣列
6568
		$result["content"]=array();
6569
 
6570
		#如果 $conf 不為陣列
6571
		if(gettype($conf)!="array"){
6572
 
6573
			#設置執行失敗
6574
			$result["status"]="false";
6575
 
6576
			#設置執行錯誤訊息
6577
			$result["error"][]="\$conf變數須為陣列形態";
6578
 
6579
			#如果傳入的參數為 null
6580
			if($conf==null){
6581
 
6582
				#設置執行錯誤訊息
6583
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6584
 
6585
				}#if end
6586
 
6587
			#回傳結果
6588
			return $result;
6589
 
6590
			}#if end
6591
 
6592
		#檢查必填參數
6593
		#函式說明:
6594
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6595
		#回傳的結果:
6596
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6597
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6598
		#$result["function"],當前執行的函式名稱.
6599
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6600
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6601
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6602
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6603
		#必填寫的參數:
6604
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6605
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6606
		#可以省略的參數:
6607
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6608
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6609
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6610
		unset($conf["variableCheck.isexistMulti"]);
6611
 
6612
		#如果檢查失敗
6613
		if($checkResult["status"]=="false"){
6614
 
6615
			#設置錯誤識別
6616
			$result["status"]="false";
6617
 
6618
			#設置錯誤訊息
6619
			$result["error"]=$checkResult;
6620
 
6621
			#回傳結果
6622
			return $result;
6623
 
6624
			}#if end
6625
 
6626
		#如果檢查不通過
6627
		if($checkResult["passed"]==="false"){
6628
 
6629
			#設置錯誤識別
6630
			$result["status"]="false";
6631
 
6632
			#設置錯誤訊息
6633
			$result["error"]=$checkResult;
6634
 
6635
			#回傳結果
6636
			return $result;
6637
 
6638
			}#if end
6639
 
6640
		#檢查目標路徑是否為「/」開頭的路徑
6641
		#函式說明:
6642
		#取得符合特定字首與字尾的字串
6643
		#回傳結果:
6644
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
6645
		#$result["function"],當前執行的函數名稱.
6646
		#$result["error"],錯誤訊息陣列.
6647
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
6648
		#$result["returnString"],爲符合字首條件的字串內容。
6649
		#必填參數:
6650
		#$conf["checkString"],字串,要檢查的字串.
6651
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["position"];
6652
		#可省略參數:
6653
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
6654
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
6655
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
6656
		#$conf["tailWord"]="";
6657
		#參考資料:
6658
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
6659
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
6660
		unset($conf["search::getMeetConditionsString"]);
6661
 
6662
		#如果檢查關鍵字失敗
6663
		if($getMeetConditionsString["status"]=="false"){
6664
 
6665
			#設置錯誤識別
6666
			$result["status"]="false";
6667
 
6668
			#設置錯誤訊息
6669
			$result["error"]=$getMeetConditionsString;
6670
 
6671
			#回傳結果
6672
			return $result;
6673
 
6674
			}#if end					
6675
 
6676
		#如果目標路徑不為「/」開頭的路徑,則為相對路徑
6677
		if($getMeetConditionsString["founded"]=="false"){
6678
 
6679
			#取得目標位置的路徑
6680
			#函式說明:
6681
			#將檔案的位置名稱變成網址
6682
			#回傳結果:
6683
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6684
			#$result["error"],錯誤訊息陣列.
6685
			#$result["function"],函數名稱. 
6686
			#$result["content"],網址.
6687
			#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
6688
			#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
6689
			#必填參數:
6690
			#$conf["address"],字串,檔案的相對位置.
6691
			$conf["fileAccess::getInternetAddress"]["address"]=$conf["position"];
6692
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
6693
			$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
6694
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
6695
			#$conf["fileAccess::getInternetAddress"]["userDir"]="true";
6696
			$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
6697
			unset($conf["fileAccess::getInternetAddress"]);	
6698
 
6699
			#如果將檔案的位置名稱變成網址失敗
6700
			if($getInternetAddress["status"]=="false"){
6701
 
6702
				#設置錯誤識別
6703
				$result["status"]="false";
6704
 
6705
				#設置錯誤訊息
6706
				$result["error"]=$getInternetAddress;
6707
 
6708
				#回傳結果
6709
				return $result;
6710
 
6711
				}#if end	
6712
 
6713
			#置換目標位置為檔案系統路徑的絕對位置
6714
			$conf["position"]=$getInternetAddress["fileSystemAbsoulutePosition"];
6715
 
6716
			}#if end						
6717
 
6718
		#如果目標是資料夾	
6719
		if(is_dir($conf["position"])) {
6720
 
6721
			#設置為資料夾
6722
			$result["folder"]="true";
6723
 
6724
			#如果開啟資料夾成功
6725
			if($dh=opendir($conf["position"])){
6726
 
6727
				#初始化計數變數
6728
				$count=0;
6729
 
6730
				#如果資料夾裡面有檔案
6731
				while(($fileName=readdir($dh))!==false){
6732
 
6733
					#debug
6734
					#echo "有檔案";
6735
 
6736
					#如果名稱是「.」或「..」
6737
					if($fileName=="." || $fileName==".."){
6738
 
6739
						#則跳過
6740
						continue;
6741
 
6742
						}#if end
6743
 
6744
					#取得檔案或子目錄名稱
6745
					$result["content"][$count]["name"]=$fileName;					
6746
 
6747
					#取得詳細資訊
6748
					#函式說明:
6749
					#取得節點的資訊.
6750
					#回傳結果:
6751
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6752
					#$result["error"],錯誤訊息陣列.
6753
					#$result["function"],函數名稱. 
6754
					#$result["content"],檔案資訊陣列.
6755
					#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
6756
					#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
6757
					#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
6758
					#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
6759
					#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
6760
					#$result["content"]["ownerName"],檔案擁有着資訊.
6761
					#$result["content"]["groupName"],檔案所屬擁有着資訊.
6762
					#$result["content"]["size"],檔案大小.
6763
					#$result["content"]["modifyDate"],檔案變更年月日.
6764
					#$result["content"]["modifyTime"],檔案變更時分秒.
6765
					#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
6766
					#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
6767
					#必填參數:
6768
					#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
6769
					$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];
6770
					#$conf["file"],字串,要查看擁有者資訊的檔案.
6771
					$conf["fileAccess::fileInfo"]["file"]=$conf["position"]."/".$fileName;
6772
					#可省略參數:
6773
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
6774
					$conf["fileAccess::fileInfo"]["web"]="false";
6775
					#參考資料:
6776
					#fileowner=>http://php.net/manual/en/function.fileowner.php
6777
					#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
6778
					#備註:
6779
					#無.
6780
					$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);
6781
					unset($conf["fileAccess::fileInfo"]);
6782
 
6783
					#如果執行失敗
6784
					if($fileInfo["status"]=="false"){
6785
 
6786
						#設置錯誤識別
6787
						$result["status"]="false";
6788
 
6789
						#設置錯誤訊息
6790
						$result["error"]=$fileInfo;
6791
 
6792
						#回傳結果
6793
						return $result;
6794
 
6795
						}#if end
6796
 
6797
					#設置是否為資料夾
6798
					$result["content"][$count]["folder"]=$fileInfo["content"]["is_folder"];
6799
 
6800
					#設置使用者的權限
6801
					$result["content"][$count]["ownerPerm"]=$fileInfo["content"]["ownerPerm"];
6802
 
6803
					#設置群組的權限
6804
					$result["content"][$count]["groupPerm"]=$fileInfo["content"]["groupPerm"];
6805
 
6806
					#設置其他使用者的權限
6807
					$result["content"][$count]["otherPerm"]=$fileInfo["content"]["otherPerm"];
6808
 
6809
					#設置其擁有者賬戶
6810
					$result["content"][$count]["ownerName"]=$fileInfo["content"]["ownerName"];
6811
 
6812
					#設置其群組擁有者賬戶
6813
					$result["content"][$count]["groupName"]=$fileInfo["content"]["groupName"];
6814
 
6815
					#計數加1
6816
					$count++;
6817
 
6818
					}#while
6819
 
6820
				#關閉資料夾
6821
				closedir($dh);
6822
 
6823
				}#if end
6824
 
6825
			#開啟資料夾失敗	
6826
			else{
6827
 
6828
				#設置執行失敗
6829
				$result["status"]="false";
6830
 
6831
				#設置執行錯誤訊息
6832
				$result["error"][]="開啟資料夾「".$conf["position"]."」失敗";
6833
 
6834
				#回傳結果
6835
				return $result;
6836
 
6837
				}#else end
6838
 
6839
			}#if end
6840
 
6841
		#反之是檔案
6842
		else{
6843
 
6844
			#設置不為目錄
6845
			$result["folder"]="false";
6846
 
6847
			}#else end
6848
 
6849
		#取得目前位置
6850
		$result["position"]=$conf["position"];	
6851
 
6852
		#執行到這邊代表執行正常
6853
		$result["status"]="true";
6854
 
6855
		#回傳結果
6856
		return $result;	
6857
 
6858
		}#function getList end
6859
 
6860
	/*
6861
	#函式說明:
6862
	#取得目錄底下所有目錄與檔案的樹狀結構.
6863
	#回傳結果:
6864
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6865
	#$result["error"],錯誤訊息陣列.
6866
	#$result["function"],函數名稱.
6867
	#$result["content"],陣列,檔案目錄的樹狀結構.
6868
	#必填參數:
6869
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6870
	$conf["position"]="";
6871
	#可省略參數:
6872
	#無.
6873
	#參考資料:
6874
	#無.
6875
	#備註:
6876
	#無.
6877
	*/
6878
	public static function exportListTree(&$conf){
6879
 
6880
		#初始化要回傳的結果
6881
		$result=array();
6882
 
6883
		#設置當其函數名稱
6884
		$result["function"]=__FUNCTION__;
6885
 
6886
		#如果 $conf 不為陣列
6887
		if(gettype($conf)!="array"){
6888
 
6889
			#設置執行失敗
6890
			$result["status"]="false";
6891
 
6892
			#設置執行錯誤訊息
6893
			$result["error"][]="\$conf變數須為陣列形態";
6894
 
6895
			#如果傳入的參數為 null
6896
			if($conf==null){
6897
 
6898
				#設置執行錯誤訊息
6899
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6900
 
6901
				}#if end
6902
 
6903
			#回傳結果
6904
			return $result;
6905
 
6906
			}#if end
6907
 
6908
		#檢查必填參數
6909
		#函式說明:
6910
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6911
		#回傳的結果:
6912
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6913
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6914
		#$result["function"],當前執行的函式名稱.
6915
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6916
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6917
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6918
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6919
		#必填寫的參數:
6920
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6921
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6922
		#可以省略的參數:
6923
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6924
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6925
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6926
		unset($conf["variableCheck.isexistMulti"]);
6927
 
6928
		#如果檢查失敗
6929
		if($checkResult["status"]=="false"){
6930
 
6931
			#設置錯誤識別
6932
			$result["status"]="false";
6933
 
6934
			#設置錯誤訊息
6935
			$result["error"]=$checkResult;
6936
 
6937
			#回傳結果
6938
			return $result;
6939
 
6940
			}#if end
6941
 
6942
		#如果檢查不通過
6943
		if($checkResult["passed"]=="false"){
6944
 
6945
			#設置錯誤識別
6946
			$result["status"]="false";
6947
 
6948
			#設置錯誤訊息
6949
			$result["error"]=$checkResult;
6950
 
6951
			#回傳結果
6952
			return $result;
6953
 
6954
			}#if end
6955
 
6956
		#函式說明:
6957
		#取得目錄底下所有目錄與檔案的樹狀結構.
6958
		#回傳結果:
6959
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6960
		#$result["error"],錯誤訊息陣列.
6961
		#$result["function"],函數名稱.
6962
		#$result["content"],陣列,檔案目錄的樹狀結構.
6963
		#必填參數:
6964
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6965
		$conf["fileAccess::getListTree"]["position"]=$conf["position"];
6966
		#可省略參數:
6967
		#無
6968
		#備註:
6969
		#若檔案與目錄的名稱含有「[」與「]」與「(」與「)」將會無法取得其目錄底下的內容	
6970
		#若檔案與目錄的名稱含有「 」將會無法檢查檔案是否存在
6971
		#改用opendir()函數應該可以解決大部分的bug.
6972
		$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6973
		unset($conf["fileAccess::getListTree"]);
6974
 
6975
		#如果取得 目標目錄底下所有目錄與檔案的樹狀結構 失敗
6976
		if($getListTree["status"]==="false"){
6977
 
6978
			#設置錯誤識別
6979
			$result["status"]="false";
6980
 
6981
			#設置錯誤訊息
6982
			$result["error"]=$getListTree;
6983
 
6984
			#回傳結果
6985
			return $result;
6986
 
6987
			}#if end
6988
 
6989
		#目標目錄底下有幾個
6990
 
6991
		}#function exportListTree end
6992
 
6993
	/*
6994
	#函式說明:
6995
	#解壓縮tar.xz檔案,解壓縮完畢後,tar.xz檔案會被移除.
6996
	#回傳結果:
6997
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6998
	#$result["error"],錯誤訊息陣列.
6999
	#$result["function"],函數名稱. 
7000
	#必填參數:
7001
	#$conf["tarXzFile"],字串變數,壓縮檔的位置與名稱,副檔名".tar.xz"會自動補上.
7002
	$conf["tarXzFile"]="";
7003
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
7004
	$conf["fileArgu"]=__FILE__;
7005
	#可省略參數:
7006
	#$conf["extractTo"],字串,要解壓縮到哪邊,預設為當前路徑"."
7007
	#$conf["extractTo"]=".";
7008
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
7009
	#$conf["commentsArray"]=array("");
7010
	#參考資料:
7011
	#無.
7012
	#備註:
7013
	#無.
7014
	*/
7015
	public static function unpackTarXzFile(&$conf){
7016
 
7017
		#初始化要回傳的內容
7018
		$result=array();
7019
 
7020
		#記錄當前執行的函數名稱
7021
		$result["function"]=__FUNCTION__;
7022
 
7023
		#如果 $conf 不為陣列
7024
		if(gettype($conf)!="array"){
7025
 
7026
			#設置執行失敗
7027
			$result["status"]="false";
7028
 
7029
			#設置執行錯誤訊息
7030
			$result["error"][]="\$conf變數須為陣列形態";
7031
 
7032
			#如果傳入的參數為 null
7033
			if($conf==null){
7034
 
7035
				#設置執行錯誤訊息
7036
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7037
 
7038
				}#if end
7039
 
7040
			#回傳結果
7041
			return $result;
7042
 
7043
			}#if end
7044
 
7045
		#檢查參數
7046
		#函式說明:
7047
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7048
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7049
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7050
		#$result["function"],當前執行的函式名稱.
7051
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7052
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7053
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7054
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7055
		#必填寫的參數:
7056
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7057
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7058
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7059
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","tarXzFile");
7060
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7061
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7062
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7063
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7064
		#可以省略的參數:
7065
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7066
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7067
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7068
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","extractTo");
7069
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7070
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");
7071
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7072
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,".");
7073
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7074
		#$conf["arrayCountEqualCheck"][]=array();
7075
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7076
		unset($conf["variableCheck::checkArguments"]);
7077
 
7078
		#若檢查失敗
7079
		if($checkResult["status"]=="false"){
7080
 
7081
			#設置執行失敗
7082
			$result["status"]="false";
7083
 
7084
			#設置執行錯誤訊息
7085
			$result["error"]=$checkResult;
7086
 
7087
			#回傳結果
7088
			return $result;
7089
 
7090
			}#if end
7091
 
7092
		#若檢查不通過
7093
		if($checkResult["passed"]=="false"){
7094
 
7095
			#設置執行失敗
7096
			$result["status"]="false";
7097
 
7098
			#設置執行錯誤訊息
7099
			$result["error"]=$checkResult;
7100
 
7101
			#回傳結果
7102
			return $result;
7103
 
7104
			}#if end
7105
 
7106
		#如果 $conf["commentsArray"] 有設定
7107
		if(isset($conf["commentsArray"])){
7108
 
7109
			#印出提示文字
7110
			#函式說明:
7111
			#印出多行文字,結尾自動換行.
7112
			#回傳的結果:
7113
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
7114
			#$result["function"],當前執行的函數名稱.
7115
			#$result["error"],錯誤訊息陣列.
7116
			#必填參數:
7117
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
7118
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
7119
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
7120
			unset($conf["cmd::echoMultiLine"]);
7121
 
7122
			#如果印出提示文字失敗
7123
			if($echoMultiLine["status"]=="false"){
7124
 
7125
				#設置執行失敗
7126
				$result["status"]="false";
7127
 
7128
				#設置執行錯誤訊息
7129
				$result["error"]=$echoMultiLine;
7130
 
7131
				#回傳結果
7132
				return $result;
7133
 
7134
				}#if end
7135
 
7136
			}#if end
7137
 
7138
		#檢查要移動的檔案是否存在
7139
		#函式說明:
7140
		#檢查多個檔案與資料夾是否存在.
7141
		#回傳的結果:
7142
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
7143
		#$result["error"],錯誤訊息陣列.
7144
		#$resutl["function"],當前執行的涵式名稱.
7145
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
7146
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
7147
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
7148
		#必填參數:
7149
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["tarXzFile"].".tar.xz");#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
7150
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
7151
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
7152
		#參考資料來源:
7153
		#http://php.net/manual/en/function.file-exists.php
7154
		#http://php.net/manual/en/control-structures.foreach.php
7155
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
7156
		unset($conf["fileAccess::checkMultiFileExist"]);
7157
 
7158
		#如果檢查失敗
7159
		if($checkMultiFileExist["status"]=="false"){
7160
 
7161
			#設置執行失敗
7162
			$result["status"]="false";
7163
 
7164
			#設置執行錯誤訊息
7165
			$result["error"]=$checkMultiFileExist;
7166
 
7167
			#回傳結果
7168
			return $result;
7169
 
7170
			}#if end	
7171
 
7172
		#如果來源檔案不存在
7173
		if($checkMultiFileExist["allExist"]=="false"){
7174
 
7175
			#設置執行失敗
7176
			$result["status"]="false";
7177
 
7178
			#設置執行錯誤訊息
7179
			$result["error"][]="檔案「".$conf["tarXzFile"].".tar.xz」不存在";
7180
 
7181
			#回傳結果
7182
			return $result;
7183
 
7184
			}#if end
7185
 
7186
		#進行解壓縮xz檔
7187
		#函式說明:
7188
		#呼叫shell執行系統命令,並取得回傳的內容.
7189
		#回傳的結果:
7190
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7191
		#$result["error"],錯誤訊息陣列.
7192
		#$result["function"],當前執行的函數名稱.
7193
		#$result["cmd"],執行的指令內容.
7194
		#$result["output"],爲執行完二元碼後的輸出陣列.
7195
		#必填的參數
7196
		#$conf["command"],字串,要執行的指令與.
7197
		$conf["fileAccess::callShell"]["command"]="xz -v -v -d -f ".$conf["tarXzFile"].".tar.xz";
7198
		#可省略參數:
7199
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7200
		#$conf["fileAccess::callShell"]["argu"]=array();
7201
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7202
		#$conf["enablePrintDescription"]="true";
7203
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7204
		#$conf["printDescription"]="";
7205
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7206
		#$conf["escapeshellarg"]="true";
7207
		#備註:
7208
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7209
		#參考資料:
7210
		#exec=>http://php.net/manual/en/function.exec.php
7211
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7212
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7213
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7214
		unset($conf["fileAccess::callShell"]);
7215
 
7216
		#如果解壓縮xz檔案失敗
7217
		if($callShell["status"]=="false"){
7218
 
7219
			#設置執行失敗
7220
			$result["status"]="false";
7221
 
7222
			#設置執行錯誤訊息
7223
			$result["error"]=$callShell;
7224
 
7225
			#回傳結果
7226
			return $result;
7227
 
7228
			}#if end
7229
 
7230
		#解壓縮tar檔
7231
		#函式說明:
7232
		#呼叫shell執行系統命令,並取得回傳的內容.
7233
		#回傳的結果:
7234
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7235
		#$result["error"],錯誤訊息陣列.
7236
		#$result["function"],當前執行的函數名稱.
7237
		#$result["cmd"],執行的指令內容.
7238
		#$result["output"],爲執行完二元碼後的輸出陣列.
7239
		#必填的參數
7240
		#$conf["command"],字串,要執行的指令與.
7241
		$conf["fileAccess::callShell"]["command"]="tar";
7242
		#可省略參數:
7243
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7244
		$conf["fileAccess::callShell"]["argu"]=array("-xvf",$conf["tarXzFile"]."tar",$conf["extractTo"]);
7245
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7246
		#$conf["enablePrintDescription"]="true";
7247
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7248
		#$conf["printDescription"]="";
7249
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7250
		$conf["fileAccess::callShell"]["escapeshellarg"]="true";
7251
		#備註:
7252
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7253
		#參考資料:
7254
		#exec=>http://php.net/manual/en/function.exec.php
7255
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7256
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7257
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7258
		unset($conf["fileAccess::callShell"]);
7259
 
7260
		#如果解壓縮xz檔案失敗
7261
		if($callShell["status"]=="false"){
7262
 
7263
			#設置執行失敗
7264
			$result["status"]="false";
7265
 
7266
			#設置執行錯誤訊息
7267
			$result["error"]=$callShell;
7268
 
7269
			#回傳結果
7270
			return $result;
7271
 
7272
			}#if end
7273
 
7274
		#移除tar檔
7275
		#函式說明:
7276
		#移除檔案
7277
		#回傳結果:
7278
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7279
		#$result["error"],錯誤訊息陣列
7280
		#$result["warning"],警告訊息陣列
7281
		#$result["function"],當前執行的函數名稱
7282
		#必填參數:
7283
		$conf["fileAccess::delFile"]["fileAddress"]=$conf["tarXzFile"].".tar";#要移除檔案的位置
7284
		#可省略參數:
7285
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7286
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
7287
		#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
7288
		#$conf["commentsArray"]=array("");
7289
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
7290
		unset($conf["fileAccess::delFile"]);	
7291
 
7292
		#如果移除檔案失敗
7293
		if($delFile["status"]=="false"){
7294
 
7295
			#設置執行失敗
7296
			$result["status"]="false";
7297
 
7298
			#設置執行錯誤訊息
7299
			$result["error"]=$delFile;
7300
 
7301
			#回傳結果
7302
			return $result;
7303
 
7304
			}#if end	
7305
 
7306
		#執行到這邊代表執行正常
7307
		$result["status"]="true";
7308
 
7309
		#回傳結果
7310
		return $result;
7311
 
7312
		}#function unpackTarXzFile end
7313
 
7314
	/*
7315
	#函式說明:
7316
	#用data:mimeType;base64,fileVar的形式來提供檔案的連結,亦即檔案儲存在變數裡面.
7317
	#回傳結果:
7318
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7319
	#$result["error"],錯誤訊息
7320
	#$result["content"],檔案變數的內容
7321
	#$result["fileTypeName"],副檔名,ex:「.tar.xz」.
7322
	#$result["function"],當前執行的函數名稱 
7323
	#必填參數:
7324
	#$conf["filePosition"],要轉存成2元碼的檔案位置與名稱
7325
	$conf["filePosition"]="";
7326
	#$conf["mimeType"],2元碼的內容是什麼
7327
	$conf["mimeType"]="";
7328
	#可省略參數:
7329
	#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
7330
	#$conf["compressType"]="base64";
7331
	#$conf["delFile"],讀取完檔案後,要移除檔案嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
7332
	#$conf["delFile"]="false";
7333
	#參考資料:
7334
	#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
7335
	#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
7336
	#備註:
7337
	#無.
7338
	*/
7339
	public static function data(&$conf){
7340
 
7341
		#初始化要回傳的內容
7342
		$result=array();
7343
 
7344
		#取得當前執行的函數名稱
7345
		$result["function"]=__FUNCTION__;
7346
 
7347
		#如果 $conf 不為陣列
7348
		if(gettype($conf)!="array"){
7349
 
7350
			#設置執行失敗
7351
			$result["status"]="false";
7352
 
7353
			#設置執行錯誤訊息
7354
			$result["error"][]="\$conf變數須為陣列形態";
7355
 
7356
			#如果傳入的參數為 null
7357
			if($conf==null){
7358
 
7359
				#設置執行錯誤訊息
7360
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7361
 
7362
				}#if end
7363
 
7364
			#回傳結果
7365
			return $result;
7366
 
7367
			}#if end
7368
 
7369
		#檢查參數
7370
		#函式說明:
7371
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7372
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7373
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7374
		#$result["function"],當前執行的函式名稱.
7375
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7376
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7377
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7378
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7379
		#必填寫的參數:
7380
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7381
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7382
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7383
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePosition");
7384
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7385
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
7386
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7387
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7388
		#可以省略的參數:
7389
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7390
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7391
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7392
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
7393
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7394
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
7395
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7396
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
7397
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7398
		#$conf["arrayCountEqualCheck"][]=array();
7399
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7400
		unset($conf["variableCheck::checkArguments"]);
7401
 
7402
		#如果檢查參數失敗
7403
		if($checkResult["status"]=="false"){
7404
 
7405
			#設置執行失敗
7406
			$result["status"]="false";
7407
 
7408
			#設置錯誤訊息
7409
			$result["error"]=$checkResult;
7410
 
7411
			#回傳結果
7412
			return $result;
7413
 
7414
			}#if end
7415
 
7416
		#如果檢查參數不通過
7417
		if($checkResult["passed"]=="false"){
7418
 
7419
			#設置執行失敗
7420
			$result["status"]="false";
7421
 
7422
			#設置錯誤訊息
7423
			$result["error"]=$checkResult;
7424
 
7425
			#回傳結果
7426
			return $result;
7427
 
7428
			}#if end
7429
 
7430
		#依據檔案名稱取得副檔名 $result["fileTypeName"]
7431
		#函式說明:
7432
		#將固定格式的字串分開,並回傳分開的結果。
7433
		#回傳的參數:
7434
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7435
		#$result["error"],錯誤訊息陣列
7436
		#$result["function"],當前執行的函數名稱.
7437
		#$result["oriStr"],要分割的原始字串內容
7438
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7439
		#$result["dataCounts"],爲總共分成幾段
7440
		#必填參數:
7441
		$conf["stringProcess::spiltString"]["stringIn"]=basename($conf["filePosition"]);#要處理的字串。
7442
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
7443
		#備註:
7444
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
7445
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7446
		unset($conf["stringProcess::spiltString"]);
7447
 
7448
		#如果分割字串失敗
7449
		if($spiltString["status"]=="false"){
7450
 
7451
			#設置執行失敗
7452
			$result["status"]="false";
7453
 
7454
			#設置錯誤訊息
7455
			$result["error"]=$spiltString;
7456
 
7457
			#回傳結果
7458
			return $result;
7459
 
7460
			}#if end
7461
 
7462
		#初始化副檔名
7463
		$result["fileTypeName"]="";	
7464
 
7465
		#如果只有一段代表沒有副檔名
7466
		if($spiltString["dataCounts"]==1){
7467
 
7468
			#副檔名設置為 "unknow"
7469
			$result["fileTypeName"]="unknow";
7470
 
7471
			}#if end
7472
 
7473
		#不符合以上條件,但至少有兩段
7474
		else if($spiltString["dataCounts"]>=2){
7475
 
7476
			#執行 $spiltString["dataCounts"] 減一次的迴圈
7477
			for($i=1;$i<$spiltString["dataCounts"];$i++){
7478
 
7479
				#串接副檔名
7480
				$result["fileTypeName"]=$result["fileTypeName"].".".$spiltString["dataArray"][$i];
7481
 
7482
				}#for end
7483
 
7484
			}#if end
7485
 
7486
		#讀取檔案內容
7487
		$fileBin=file_get_contents($conf["filePosition"],"rb");
7488
 
7489
		#編碼檔案
7490
		$base64fileBin=base64_encode($fileBin);
7491
 
7492
		#如果 $conf["delFile"] 等於 "true"
7493
		if($conf["delFile"]=="true"){
7494
 
7495
			#移除檔案
7496
			#函式說明:
7497
			#移除檔案
7498
			#回傳結果:
7499
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7500
			#$result["error"],錯誤訊息陣列
7501
			#$result["warning"],警告訊息陣列
7502
			#$result["function"],當前執行的函數名稱
7503
			#必填參數:
7504
			$conf["fileAccess::delFile"]["fileAddress"]=$conf["filePosition"];#要移除檔案的位置
7505
			$del=fileAccess::delFile($conf["fileAccess::delFile"]);
7506
			unset($conf["fileAccess::delFile"]);
7507
 
7508
			#如果移除圖片失敗
7509
			if($del["status"]=="false"){
7510
 
7511
				#設置執行失敗
7512
				$result["status"]="false";
7513
 
7514
				#設置錯誤訊息
7515
				$result["error"]=$del;
7516
 
7517
				#回傳結果
7518
				return $result;
7519
 
7520
				}#if end
7521
 
7522
			}#if end
7523
 
7524
		#放置檔案的語法
7525
		$result["content"]="data:".$conf["mimeType"].";".$conf["compressType"].",".$base64fileBin;
7526
 
7527
		#執行到這邊代表執行正常
7528
		$result["status"]="true";
7529
 
7530
		#回傳結果
7531
		return $result;
7532
 
7533
		}#function data end
7534
 
7535
	/*
7536
	#函式說明:
7537
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7538
	#回傳結果:
7539
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7540
	#$result["error"],錯誤訊息陣列.
7541
	#$result["function"],函數名稱. 
7542
	#$result["argu"],使用的參數.
7543
	#$result["content"],網址,若是在命令列執行,則為"null".
7544
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7545
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
7546
	#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
7547
	#必填參數:
7548
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7549
	$conf["address"]="";
7550
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7551
	$conf["fileArgu"]=__FILE__;
7552
	#可省略參數:
7553
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
7554
	#$conf["userDir"]="true";
7555
	#參考資料:
7556
	#無.
7557
	#備註:
7558
	#無.
7559
	*/
7560
	public static function getInternetAddress(&$conf){
66 liveuser 7561
 
3 liveuser 7562
		#初始化要回傳的變數
7563
		$result=array();
7564
 
7565
		#記錄當前執行的函數名稱
7566
		$result["function"]=__FUNCTION__;
7567
 
7568
		#如果 $conf 不為陣列
7569
		if(gettype($conf)!="array"){
7570
 
7571
			#設置執行失敗
7572
			$result["status"]="false";
7573
 
7574
			#設置執行錯誤訊息
7575
			$result["error"][]="\$conf變數須為陣列形態";
7576
 
7577
			#如果傳入的參數為 null
7578
			if($conf==null){
7579
 
7580
				#設置執行錯誤訊息
7581
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7582
 
7583
				}#if end
7584
 
7585
			#回傳結果
7586
			return $result;
7587
 
7588
			}#if end
7589
 
7590
		#取得使用的參數
7591
		$result["argu"]=$conf;
7592
 
7593
		#檢查參數
7594
		#函式說明:
7595
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7596
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7597
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7598
		#$result["function"],當前執行的函式名稱.
7599
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7600
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7601
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7602
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7603
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7604
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7605
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
7606
		#必填寫的參數:
7607
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7608
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7609
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7610
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
7611
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7612
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7613
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7614
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7615
		#可以省略的參數:
7616
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7617
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7618
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7619
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("userDir");
7620
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7621
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
7622
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7623
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
7624
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7625
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
7626
		#參考資料來源:
7627
		#array_keys=>http://php.net/manual/en/function.array-keys.php
7628
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7629
		unset($conf["variableCheck::checkArguments"]);
7630
 
7631
		#如果檢查失敗
7632
		if($checkResult["status"]==="false"){
7633
 
7634
			#設置錯誤狀態
7635
			$result["status"]="false";
7636
 
7637
			#設置錯誤提示
7638
			$result["error"]=$checkResult;
7639
 
7640
			#回傳結果
7641
			return $result;
7642
 
7643
			}#if end
7644
 
7645
		#如果檢查不通過
7646
		if($checkResult["passed"]==="false"){
7647
 
7648
			#設置錯誤狀態
7649
			$result["status"]="false";
7650
 
7651
			#設置錯誤提示
7652
			$result["error"]=$checkResult;
7653
 
7654
			#回傳結果
7655
			return $result;
7656
 
7657
			}#if end
7658
 
7659
		#如果是本來就是網址了
7660
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
7661
 
7662
			#設置執行正常
7663
			$result["status"]="true";
7664
 
7665
			#取得網址
7666
			$result["content"]=$conf["address"];
7667
 
7668
			#回傳結果
7669
			return $result;			
7670
 
7671
			}#if end	
7672
 
7673
		#解析 $conf["fileArgu"]
7674
		#函式說明:
7675
		#將固定格式的字串分開,並回傳分開的結果。
7676
		#回傳的參數:
7677
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7678
		#$result["error"],錯誤訊息陣列
7679
		#$result["function"],當前執行的函數名稱.
7680
		#$result["oriStr"],要分割的原始字串內容
7681
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7682
		#$result["dataCounts"],爲總共分成幾段
7683
		#必填參數:
7684
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7685
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7686
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7687
		unset($conf["stringProcess::spiltString"]); 
7688
 
7689
		#如果分割字串失敗
7690
		if($spiltString["status"]==="false"){
7691
 
7692
			#設置錯誤狀態
7693
			$result["status"]="false";
7694
 
7695
			#設置錯誤提示
7696
			$result["error"]=$spiltString;
7697
 
7698
			#回傳結果
7699
			return $result;
7700
 
7701
			}#if end
7702
 
7703
		#函式說明:
7704
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
7705
		#回傳結果:
7706
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7707
		#$result["error"],錯誤訊息陣列.
7708
		#$result["function"],函數名稱. 
7709
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
7710
		#必填參數:
7711
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
7712
		$conf["fileAccess::getRelativePath"]["path"]=array($conf["address"]);
7713
		#$conf["fileArgu"],字串,當前路徑.
7714
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
7715
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
7716
		unset($conf["fileAccess::getRelativePath"]);
7717
 
7718
		#如果取得相對位置失敗
7719
		if($getRelativePath["status"]==="false"){
7720
 
7721
			#設置錯誤狀態
7722
			$result["status"]="false";
7723
 
7724
			#設置錯誤提示
7725
			$result["error"]=$getRelativePath;
7726
 
7727
			#回傳結果
7728
			return $result;
7729
 
7730
			}#if end			
7731
 
7732
		#取得轉換成相對路徑的位置
7733
		$result["fileSystemRelativePosition"]=$getRelativePath["content"][0];
7734
 
7735
		#解析 $conf["fileArgu"]
7736
		#函式說明:
7737
		#將固定格式的字串分開,並回傳分開的結果。
7738
		#回傳的參數:
7739
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7740
		#$result["error"],錯誤訊息陣列
7741
		#$result["function"],當前執行的函數名稱.
7742
		#$result["oriStr"],要分割的原始字串內容
7743
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7744
		#$result["dataCounts"],爲總共分成幾段
7745
		#必填參數:
7746
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7747
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7748
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7749
		unset($conf["stringProcess::spiltString"]); 
7750
 
7751
		#如果分割字串失敗
7752
		if($spiltString["status"]==="false"){
7753
 
7754
			#設置錯誤狀態
7755
			$result["status"]="false";
7756
 
7757
			#設置錯誤提示
7758
			$result["error"]=$spiltString;
7759
 
7760
			#回傳結果
7761
			return $result;
7762
 
7763
			}#if end
7764
 
7765
		#debug
7766
		#var_dump($spiltString);
7767
		#var_dump($_SERVER);
7768
 
7769
		#初始化檔案在伺服器上的檔案系統位置
7770
		$result["fileSystemAbsoulutePosition"]="/";
7771
 
7772
		#將最後一段捨棄
7773
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7774
 
7775
			$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$spiltString["dataArray"][$i]."/";
7776
 
7777
			}#for end				
7778
 
7779
		#取得非直觀的絕對位置
7780
		$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$result["fileSystemRelativePosition"];
7781
 
7782
		#將檔案的相對路徑進行整理,變成可以直接讀的路徑.
7783
		#函式說明:
7784
		#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
7785
		#回傳的結果:
7786
		#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
7787
		#$result["function"],當前執行的函數.
7788
		#$result["error"],錯誤訊息陣列.
7789
		#$result["changedPath"],處理完後回傳的目錄字串.
7790
		#$result["oriPath"],原始的路徑字串
7791
		#必填參數:
7792
		#$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"],字串,要處理的檔案目錄字串.
7793
		$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$result["fileSystemAbsoulutePosition"];
7794
		$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
7795
		unset($conf["stringProcess::changeDirByDotDotSolidus"]);
7796
 
7797
		#如果處理失敗
7798
		if($changeDirByDotDotSolidus["status"]==="false"){
7799
 
7800
			#設置錯誤狀態
7801
			$result["status"]="false";
7802
 
7803
			#設置錯誤提示
7804
			$result["error"]=$changeDirByDotDotSolidus;
7805
 
7806
			#回傳結果
7807
			return $result;
7808
 
7809
			}#if end
7810
 
7811
		#改變為易讀的絕對路徑
7812
		$result["fileSystemAbsoulutePosition"]=$changeDirByDotDotSolidus["changedPath"];	
7813
 
7814
		#如果 $conf["userDir"] 為 "true"
7815
		if($conf["userDir"]==="true"){
7816
 
7817
			#重設為 絕對路徑 [/~家目錄名稱」
7818
			$result["webPathFromRoot"]="/~".$spiltString["dataArray"][1];
7819
 
7820
			#從第四段到倒數第二段,將其內容合併
7821
			for($i=3;$i<$spiltString["dataCounts"]-1;$i++){
7822
 
7823
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7824
 
7825
				}#for end
7826
 
7827
			}#if end
7828
 
7829
		#反之 $conf["userDir"] 為 "false",
7830
		else{
7831
 
7832
			#重設為 ""
7833
			$result["webPathFromRoot"]="";
7834
 
7835
			#可能的根目錄層級 - start 
7836
 
7837
			#解析 $conf["fileArgu"]
7838
			#函式說明:
7839
			#將固定格式的字串分開,並回傳分開的結果。
7840
			#回傳的參數:
7841
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7842
			#$result["error"],錯誤訊息陣列
7843
			#$result["function"],當前執行的函數名稱.
7844
			#$result["oriStr"],要分割的原始字串內容
7845
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7846
			#$result["dataCounts"],爲總共分成幾段
7847
			#必填參數:
7848
			$conf["stringProcess::spiltString"]["stringIn"]=$_SERVER["PHP_SELF"];#要處理的字串。
7849
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7850
			$keyWord=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7851
			unset($conf["stringProcess::spiltString"]); 
7852
 
7853
			#如果處理失敗
7854
			if($keyWord["status"]==="false"){
7855
 
7856
				#設置錯誤狀態
7857
				$result["status"]="false";
7858
 
7859
				#設置錯誤提示
7860
				$result["error"]=$keyWord;
7861
 
7862
				#回傳結果
7863
				return $result;
7864
 
7865
				}#if end
7866
 
7867
			#取得關鍵字
7868
			$keyWord=$keyWord["dataArray"][0];
7869
 
7870
			#預設層級為4層
7871
			$layer=4;
7872
 
7873
			#檢查每個絕對路徑片段
7874
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7875
 
7876
				#如果路徑片段等於 $keyWord
7877
				if($spiltString["dataArray"][$i]===$keyWord){
7878
 
7879
					#取得層級
7880
					$layer=$i;
7881
 
7882
					#跳出迴圈
7883
					break;
7884
 
7885
					}#if end
7886
 
7887
				}#for end
7888
 
7889
			#可能的根目錄層級 - end
7890
 
7891
			#網頁於檔案系統中的存放路徑可能為「/var/www/html」,從第四段到倒數第二段,將其內容合併
7892
			for($i=$layer;$i<$spiltString["dataCounts"]-1;$i++){
7893
 
7894
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7895
 
7896
				}#for end
7897
 
7898
			}#else end
7899
 
7900
		#加上檔案的路徑
7901
		$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$conf["address"];			
7902
 
7903
		#取得檔案位於網頁伺服器的絕對位置
7904
		#函式說明:
7905
		#取得用戶端的資訊,並依據需要寫入到資料表裡面
7906
		#回傳結果:
7907
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
7908
		#$result["error"],錯誤訊息.
7909
		#$result["function"],檔前執行的函數名稱.
7910
		#$result["userBrowserType"],爲使用者的瀏覽器資訊
7911
		#$result["userIp"],爲使用者的IP
7912
		#$result["serverIp"],為伺服器的IP
7913
		#$result["scheme"],通訊協定
7914
		#$result["serverPort"],伺服器給對外下載網頁的port
7915
		#$result["requestUri"],爲使用者要求的網址
7916
		#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
7917
		#$result["clientRequestIP"],用戶端要求的ip與port
7918
		#必填參數:
7919
		$conf["csInformation::getConnectionInfo"]["getAccount"]="false";#是否要取得帳號
7920
		#可省略參數:
7921
		#$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]
7922
		#$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存
7923
		#$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。
7924
		#$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。
7925
		#$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7926
		#$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7927
		#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,
7928
			#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
7929
			#寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間
7930
			#$conf["saveToDb"]設為"true",則該參數為必填。
7931
		#$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7932
		$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
7933
		unset($conf["csInformation::getConnectionInfo"]);	
7934
 
7935
		#如果取得連線資訊失敗
7936
		if($getConnectionInfo["status"]==="false"){
7937
 
7938
			#設置錯誤狀態
7939
			$result["status"]="false";
7940
 
7941
			#設置錯誤提示
7942
			$result["error"]=$getConnectionInfo;
7943
 
7944
			#回傳結果
7945
			return $result;
7946
 
7947
			}#if end
7948
 
7949
		#如果運行環境為 "web"
7950
		if($getConnectionInfo["mode"]=="web"){
7951
 
7952
			#為絕對路徑加上通訊協定與ip與port
7953
			#$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["serverIp"].":".$getConnectionInfo["serverPort"].$result["webPathFromRoot"];	
7954
 
7955
			#為絕對路徑加上用戶端通訊協定與ip與port	
7956
			$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["clientRequestIP"].$result["webPathFromRoot"];
7957
 
7958
			}#if end
7959
 
7960
		#反之如果為 "cmd" 環境
7961
		else{
7962
 
7963
			$result["content"]="null";
7964
 
7965
			}#else end
7966
 
7967
		#設置執行正常
7968
		$result["status"]="true";
7969
 
7970
		#回傳結果
7971
		return $result;
7972
 
7973
		}#function getInternetAddress end
7974
 
7975
	/*
7976
	#函式說明:
7977
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7978
	#回傳結果:
7979
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7980
	#$result["error"],錯誤訊息陣列.
7981
	#$result["function"],函數名稱. 
7982
	#$result["argu"],使用的參數.
7983
	#$result["content"],網址,若是在命令列執行,則為"null".
7984
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7985
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
7986
	#必填參數:
7987
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7988
	$conf["address"]="";
7989
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7990
	$conf["fileArgu"]=__FILE__;
7991
	#可省略參數:
7992
	#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
7993
	#$conf["web"]="true";
7994
	#參考資料:
7995
	#無.
7996
	#備註:
7997
	#無.
7998
	*/
7999
	public static function getInternetAddressV2(&$conf){
8000
 
8001
		#初始化要回傳的變數
8002
		$result=array();
8003
 
8004
		#記錄當前執行的函數名稱
8005
		$result["function"]=__FUNCTION__;
8006
 
8007
		#取得參數
8008
		$result["argu"]=$conf;
8009
 
8010
		#檢查參數
8011
		#函式說明:
8012
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8013
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8014
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8015
		#$result["function"],當前執行的函式名稱.
8016
		#$result["argu"],設置給予的參數.
8017
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8018
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8019
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8020
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
8021
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
8022
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8023
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8024
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8025
		#必填寫的參數:
8026
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8027
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8028
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8029
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8030
		#可以省略的參數:
8031
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8032
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
8033
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
8034
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8035
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
8036
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8037
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
8038
		#$conf["canNotBeEmpty"]=array();
8039
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
8040
		#$conf["canBeEmpty"]=array();
8041
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
8042
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
8043
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8044
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
8045
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
8046
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
8047
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8048
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
8049
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
8050
		#$conf["disallowAllSkipableVarIsEmpty"]="";
8051
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
8052
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
8053
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8054
		#$conf["arrayCountEqualCheck"][]=array();
8055
		#參考資料來源:
8056
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8057
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8058
		unset($conf["variableCheck::checkArguments"]);
8059
 
8060
		#如果檢查失敗
8061
		if($checkArguments["status"]==="false"){
8062
 
8063
			#設置錯誤狀態
8064
			$result["status"]="false";
8065
 
8066
			#設置錯誤提示
8067
			$result["error"]=$checkArguments;
8068
 
8069
			#回傳結果
8070
			return $result;
8071
 
8072
			}#if end
8073
 
8074
		#如果檢查不通過
8075
		if($checkArguments["passed"]==="false"){
8076
 
8077
			#設置錯誤狀態
8078
			$result["status"]="false";
8079
 
8080
			#設置錯誤提示
8081
			$result["error"]=$checkArguments;
8082
 
8083
			#回傳結果
8084
			return $result;
8085
 
8086
			}#if end
8087
 
8088
		#如果是本來就是網址了
8089
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
8090
 
8091
			#取得網址
8092
			$result["content"]=$conf["address"];
8093
 
8094
			}#if end
8095
 
8096
		#反之是絕對或相對路徑
8097
		else{
8098
 
8099
			#確認 $conf["address"] 是否為 escaped 後的內容
8100
			#函式說明:
8101
			#判斷字串是否一定需要經過escapeshellarg才能為單一shell參數,並回傳可以成為單一shell參數的結果.
8102
			#回傳結果:
8103
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8104
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
8105
			#$result["function"],當前執行的函式名稱.
8106
			#$result["argu"],使用的參數.
8107
			#$result["content"],字串,單一shell參數.
8108
			#$result["escaped"],字串,"true"代表content為 escape後的結果;反之為"false".
8109
			#$result["urlEncodeStr"],字串,未被escape過的單一shell參數被url encode後的結果.
8110
			#必填參數:
8111
			#$conf["str"],字串,認為要為單一 shell參數的字串.
8112
			$conf["stringProcess::toSingleShellArg"]["str"]=$conf["address"];
8113
			#可省略參數:
8114
			#無.
8115
			#參考資料:
8116
			#無.
8117
			#備註:
8118
			#無.
8119
			$toSingleShellArg=stringProcess::toSingleShellArg($conf["stringProcess::toSingleShellArg"]);
8120
			unset($conf["stringProcess::toSingleShellArg"]);
8121
 
8122
			#如果執行失敗
8123
			if($toSingleShellArg["status"]==="false"){
8124
 
8125
				#設置錯誤狀態
8126
				$result["status"]="false";
8127
 
8128
				#設置錯誤提示
8129
				$result["error"]=$toSingleShellArg;
8130
 
8131
				#回傳結果
8132
				return $result;
8133
 
8134
				}#if end
8135
 
8136
			#取得不含escape字元的address參數
8137
			$conf["address"]=urldecode($toSingleShellArg["urlEncodeStr"]);
8138
 
8139
			#不是絕對位置
8140
			if(strpos($conf["address"],"/")!==0){
8141
 
8142
				#如果有這些參數
8143
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8144
 
8145
					#網址
8146
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8147
 
8148
					}#if end
8149
 
8150
				#反之
8151
				else{
8152
 
8153
					#網址設置為 null
8154
					$result["content"]=null;
8155
 
8156
					}#else
8157
 
8158
				}#if end
8159
 
8160
			#反之是絕對位置
8161
			else{
8162
 
8163
				#移除開頭的 "/"
8164
				$conf["address"]=substr($conf["address"],1);
8165
 
8166
				#如果有這些參數
8167
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8168
 
8169
					#網址
8170
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8171
 
8172
					}#if end
8173
 
8174
				#反之
8175
				else{
8176
 
8177
					#網址設置為 null
8178
					$result["content"]=null;
8179
 
8180
					}#else
8181
 
8182
				}#else end
8183
 
8184
			#取得 doc root;
8185
			$docRoot=$_SERVER['DOCUMENT_ROOT'];
8186
 
8187
			#如果不是網路環境
8188
			if($conf["web"]==="false"){
8189
 
8190
				#不採用 docRoot
8191
				$docRoot="";
8192
 
8193
				}#if end
8194
 
8195
			#如果不存在 DOCUMENT_ROOT 變數或 web 參數為 "false" 且為相對位置.
8196
			if( ($_SERVER['DOCUMENT_ROOT']==="" || $conf["web"]==="false") && (strpos($result["argu"]["address"],"/")!==0) ){
8197
 
8198
				#執行 "pwd" 取得當前位置
8199
				exec("pwd",$output,$status);
8200
 
8201
				#預設為`pwd`的結果加"/"
8202
				$docRoot=$output[0]."/";
8203
 
8204
				}#if end	
8205
 
8206
			#如果是絕對位置
8207
			else if(strpos($result["argu"]["address"],"/")===0){
8208
 
8209
				#補回 "/" 
8210
				$conf["address"]="/".$conf["address"];
8211
 
8212
				}#if end
8213
 
8214
			#針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
8215
			$result["fileSystemAbsoulutePosition"]=$docRoot.$conf["address"];
8216
 
8217
			}#else end
8218
 
8219
		#設置執行正常
8220
		$result["status"]="true";	
8221
 
8222
		#回傳結果
8223
		return $result;
8224
 
8225
		}#function getInternetAddressV2 end
8226
 
8227
	/*
8228
	#函式說明:
8229
	#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
8230
	#回傳結果:
8231
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8232
	#$result["error"],錯誤訊息陣列.
8233
	#$result["function"],函數名稱. 
8234
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
8235
	#必填參數:
8236
	#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
8237
	$conf["path"]="";
8238
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8239
	$conf["fileArgu"]=__FILE__;
8240
	#可省略參數:
8241
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
8242
	#$conf["noDotStart"]="true";
8243
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
8244
	#$conf["noWaveEnd"]="true";
8245
	#參考資料:
8246
	#無.
8247
	#備註:
8248
	#無.
8249
	*/
8250
	public static function resolvePostionStringWhichContainStarSymbol(&$conf){
8251
 
8252
		#初始化要回傳的結果
8253
		$result=array();
8254
 
8255
		#設置當其函數名稱
8256
		$result["function"]=__FUNCTION__;
8257
 
8258
		#如果 $conf 不為陣列
8259
		if(gettype($conf)!="array"){
8260
 
8261
			#設置執行失敗
8262
			$result["status"]="false";
8263
 
8264
			#設置執行錯誤訊息
8265
			$result["error"][]="\$conf變數須為陣列形態";
8266
 
8267
			#如果傳入的參數為 null
8268
			if($conf==null){
8269
 
8270
				#設置執行錯誤訊息
8271
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8272
 
8273
				}#if end
8274
 
8275
			#回傳結果
8276
			return $result;
8277
 
8278
			}#if end
8279
 
8280
		#檢查參數
8281
		#函式說明:
8282
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8283
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8284
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8285
		#$result["function"],當前執行的函式名稱.
8286
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8287
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8288
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8289
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
8290
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8291
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8292
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8293
		#必填寫的參數:
8294
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8295
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8296
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8297
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
8298
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
8299
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8300
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8301
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8302
		#可以省略的參數:
8303
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
8304
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8305
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8306
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
8307
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
8308
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
8309
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8310
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
8311
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8312
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
8313
		#參考資料來源:
8314
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8315
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8316
		unset($conf["variableCheck::checkArguments"]);
8317
 
8318
		#如果 $checkResult["status"] 等於 "fasle"
8319
		if($checkResult["status"]==="false"){
8320
 
8321
			#設置錯誤識別
8322
			$result["status"]="false";
8323
 
8324
			#設置錯誤訊息
8325
			$result["error"]=$checkResult;
8326
 
8327
			#回傳結果
8328
			return $result;
8329
 
8330
			}#if end
8331
 
8332
		#如果 $checkResult["passed"] 等於 "fasle"
8333
		if($checkResult["passed"]==="false"){
8334
 
8335
			#設置錯誤識別
8336
			$result["status"]="false";
8337
 
8338
			#設置錯誤訊息
8339
			$result["error"]=$checkResult;
8340
 
8341
			#回傳結果
8342
			return $result;
8343
 
8344
			}#if end
8345
 
8346
		#轉換檔案路徑為相對於伺服器檔案系統的絕對路徑
8347
		#函式說明:
8348
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
8349
		#回傳結果:
8350
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8351
		#$result["error"],錯誤訊息陣列.
8352
		#$result["function"],函數名稱. 
8353
		#$result["content"],網址.
8354
		#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
8355
		#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
8356
		#必填參數:
8357
		#$conf["address"],字串,檔案的相對位置.
8358
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["path"];
8359
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8360
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
8361
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
8362
		$conf["fileAccess::getInternetAddress"]["userDir"]="true";
8363
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
8364
		unset($conf["fileAccess::getInternetAddress"]);
8365
 
8366
		#如果轉換路徑失敗
8367
		if($getInternetAddress["status"]=="false"){
8368
 
8369
			#設置錯誤識別
8370
			$result["status"]="false";
8371
 
8372
			#設置錯誤訊息
8373
			$result["error"]=$checkResult;
8374
 
8375
			#回傳結果
8376
			return $result;
8377
 
8378
			}#if end
8379
 
8380
		#取得轉換好的路徑
8381
		$conf["path"]=$getInternetAddress["fileSystemAbsoulutePosition"];
8382
 
8383
		#檢查檔案路徑字串是否含有「*」
8384
		#函式說明:
8385
		#檢查字串裡面有無指定的關鍵字
8386
		#回傳結果:
8387
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8388
		#$result["error"],錯誤訊息
8389
		#$result["function"],當前執行的函數名稱.
8390
		#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8391
		#$result["keyWordCount"],找到的關鍵字數量.
8392
		#必填參數:
8393
		$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8394
		$conf["search::findKeyWord"]["string"]=$conf["path"];#要被搜尋的字串內容
8395
		#可省略參數:
8396
		#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8397
		$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8398
		unset($conf["search::findKeyWord"]);
8399
 
8400
		#如果尋找關鍵字出錯
8401
		if($findKeyWord["status"]=="false"){
8402
 
8403
			#設置錯誤識別
8404
			$result["status"]="false";
8405
 
8406
			#設置錯誤訊息
8407
			$result["error"]=$findKeyWord;
8408
 
8409
			#回傳結果
8410
			return $result;
8411
 
8412
			}#if end
8413
 
8414
		#如果含有「*」
8415
		if($findKeyWord["founded"]=="true"){
8416
 
8417
			#透過「/」分割路徑字串
8418
			#函式說明:
8419
			#將固定格式的字串分開,並回傳分開的結果。
8420
			#回傳的參數:
8421
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8422
			#$result["error"],錯誤訊息陣列
8423
			#$result["function"],當前執行的函數名稱.
8424
			#$result["oriStr"],要分割的原始字串內容
8425
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8426
			#$result["dataCounts"],爲總共分成幾段
8427
			#必填參數:
8428
			$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];#要處理的字串。
8429
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8430
			$spiltPathStr=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8431
			unset($conf["stringProcess::spiltString"]);
8432
 
8433
			#如果分割字串失敗
8434
			if($spiltPathStr["status"]=="false"){
8435
 
8436
				#設置錯誤識別
8437
				$result["status"]="false";
8438
 
8439
				#設置錯誤訊息
8440
				$result["error"]=$spiltPathStr;
8441
 
8442
				#回傳結果
8443
				return $result;
8444
 
8445
				}#if end
8446
 
8447
			#初始化暫存展開後的檔案路徑字串
8448
			$extendPath=array("");			
8449
 
8450
			#要解析的路徑分成幾段就執行幾次
8451
			foreach($spiltPathStr["dataArray"] as $pathPart){
8452
 
8453
				#檢查該段名稱是否有「*」
8454
				#函式說明:
8455
				#檢查字串裡面有無指定的關鍵字
8456
				#回傳結果:
8457
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8458
				#$result["error"],錯誤訊息
8459
				#$result["function"],當前執行的函數名稱.
8460
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8461
				#$result["keyWordCount"],找到的關鍵字數量.
8462
				#必填參數:
8463
				$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8464
				$conf["search::findKeyWord"]["string"]=$pathPart;#要被搜尋的字串內容
8465
				#可省略參數:
8466
				#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8467
				$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8468
				unset($conf["search::findKeyWord"]);
8469
 
8470
				#如果尋找關鍵字出錯
8471
				if($findKeyWord["status"]=="false"){
8472
 
8473
					#設置錯誤識別
8474
					$result["status"]="false";
8475
 
8476
					#設置錯誤訊息
8477
					$result["error"]=$findKeyWord;
8478
 
8479
					#回傳結果
8480
					return $result;
8481
 
8482
					}#if end									
8483
 
8484
				#如果不含「*」
8485
				if($findKeyWord["founded"]=="false"){
8486
 
8487
					#針對每個既有的路徑
8488
					for($i=0;$i<count($extendPath);$i++){
8489
 
8490
						#加上切割好的路徑
8491
						$extendPath[$i]=$extendPath[$i]."/".$pathPart;
8492
 
8493
						}#for end
8494
 
8495
					}#if end
8496
 
8497
				#反之該段含有「*」	
8498
				else{
8499
 
8500
					#用「*」分割該段
8501
					#函式說明:
8502
					#將固定格式的字串分開,並回傳分開的結果。
8503
					#回傳的參數:
8504
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8505
					#$result["error"],錯誤訊息陣列
8506
					#$result["function"],當前執行的函數名稱.
8507
					#$result["oriStr"],要分割的原始字串內容
8508
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8509
					#$result["dataCounts"],爲總共分成幾段
8510
					#必填參數:
8511
					$conf["stringProcess::spiltString"]["stringIn"]=$pathPart;#要處理的字串。
8512
					$conf["stringProcess::spiltString"]["spiltSymbol"]="*";#爲以哪個符號作爲分割
8513
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8514
					unset($conf["stringProcess::spiltString"]);
8515
 
8516
					#如果分字串失敗
8517
					if($spiltString["status"]=="false"){
8518
 
8519
						#設置錯誤識別
8520
						$result["status"]="false";
8521
 
8522
						#設置錯誤訊息
8523
						$result["error"]=$spiltStringByStar;
8524
 
8525
						#回傳結果
8526
						return $result;
8527
 
8528
						}#if end
8529
 
8530
					#如果用「*」分割後的段數為0
8531
					if($spiltString["dataCounts"]==0){
8532
 
8533
						#初始化儲存符合條件的路徑
8534
						$newExtendPath=array();
8535
 
8536
						#代表沒有塞選條件
8537
						#當前有幾個符合條件的路徑就執行幾次
8538
						for($i=0;$i<count($extendPath);$i++){
8539
 
8540
							#取得該目錄下所有的東西
8541
							#取得該目錄底下的檔案目錄清單
8542
							#函式說明:
8543
							#取得目錄底下所有目錄與檔案清單.
8544
							#回傳結果:
8545
							#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8546
							#$result["error"],錯誤訊息陣列.
8547
							#$result["function"],函數名稱.
8548
							#$result["content"],陣列,目錄底下的檔案與子目錄.
8549
							#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8550
							#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8551
							#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8552
							#$result["position"],目前的位置.
8553
							#必填參數:
8554
							#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8555
							$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8556
							#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8557
							$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
8558
							#可省略參數:
8559
							#無
8560
							#參考資料來源:
8561
							#opendir=>http://php.net/manual/en/function.opendir.php
8562
							#is_dir=>http://php.net/manual/en/function.is-dir.php
8563
							$getList=fileAccess::getList($conf["fileAccess::getList"]);
8564
							unset($conf["fileAccess::getList"]);										
8565
 
8566
							#如果取得目標目錄底下的檔案目錄清單失敗
8567
							if($getList["status"]=="false"){
8568
 
8569
								#設置錯誤識別
8570
								$result["status"]="false";
8571
 
8572
								#設置錯誤訊息
8573
								$result["error"]=$getList;																				
8574
 
8575
								#回傳結果
8576
								return $result;
8577
 
8578
								}#if end
8579
 
8580
							#如果底下有東西
8581
							if(count($getList["content"])>0){
8582
 
8583
								#初始化儲存要檢查的檔案或資料夾名稱陣列
8584
								$list=array();
8585
 
8586
								#針對每個檔案或資料夾
8587
								foreach($getList["content"] as $num=>$array){
8588
 
8589
									#儲存該名稱
8590
									$list[]=$array["name"];
8591
 
8592
									}#foreach end
8593
 
8594
								#初始化儲存符合新條件字串的陣列
8595
								$tempExtendPath=array();
8596
 
8597
								#針對每個現有的路徑字串
8598
								for($j=0;$j<count($extendPath);$j++){
8599
 
8600
									#附加每個符合條件的名稱到路徑字串裡面
8601
									for($k=0;$k<count($list);$k++){
8602
 
8603
										#如果 $conf["noDotStart"] 為 "true"
8604
										if($conf["noDotStart"]==="true"){
8605
 
8606
											#將 $list[$k] 用 "/" 分割
8607
											#函式說明:
8608
											#將固定格式的字串分開,並回傳分開的結果。
8609
											#回傳結果:
8610
											#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8611
											#$result["error"],錯誤訊息陣列
8612
											#$result["function"],當前執行的函數名稱.
8613
											#$result["oriStr"],要分割的原始字串內容
8614
											#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8615
											#$result["dataCounts"],爲總共分成幾段
8616
											#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
8617
											#必填參數:
8618
											$conf["stringProcess::spiltString"]["stringIn"]=$list[$k];#要處理的字串。
8619
											$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8620
											#可省略參數:
8621
											#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
8622
											$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
8623
											$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8624
											unset($conf["stringProcess::spiltString"]);
8625
 
8626
											#如果分割路徑失敗
8627
											if($spiltString["status"]==="false"){
8628
 
8629
												#設置執行錯誤識別
8630
												$result["status"]="false";
8631
 
8632
												#取得錯誤訊息
8633
												$result["error"]=$spiltString;
8634
 
8635
												#回傳結果
8636
												return $result;
8637
 
8638
												}#if end
8639
 
8640
											#如果有關鍵字「/」存在
8641
											if($spiltString["found"]==="true"){
8642
 
8643
												#針對每個段落
8644
												foreach($spiltString["dataArray"] as $pp){
8645
 
8646
													#看該符合的名稱開頭是否包含「.」
8647
													#函式說明:
8648
													#取得符合特定字首與字尾的字串
8649
													#回傳結果:
8650
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8651
													#$result["function"],當前執行的函數名稱.
8652
													#$result["error"],錯誤訊息陣列.
8653
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8654
													#$result["returnString"],爲符合字首條件的字串內容。
8655
													#必填參數:
8656
													#$conf["checkString"],字串,要檢查的字串.
8657
													$conf["search::getMeetConditionsString"]["checkString"]=$pp;
8658
													#可省略參數:
8659
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8660
													$conf["search::getMeetConditionsString"]["frontWord"]=".";
8661
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8662
													#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8663
													#參考資料:
8664
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8665
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8666
													unset($conf["search::getMeetConditionsString"]);
8667
 
8668
													#如果 取得符合特定字首的字串 出錯
8669
													if($getMeetConditionsString["status"]=="false"){
8670
 
8671
														#設置執行錯誤識別
8672
														$result["status"]="false";
8673
 
8674
														#設置錯誤訊息
8675
														$result["error"]=$getMeetConditionsString;
8676
 
8677
														#回傳結果
8678
														return $result;
8679
 
8680
														}#if end
8681
 
8682
													#如果有「.」在開頭
8683
													if($getMeetConditionsString["founded"]=="true"){
8684
 
8685
														#忽略這個名稱 
8686
														continue 2;
8687
 
8688
														}#if end
8689
 
8690
													}#foreach end
8691
 
8692
												}#if end
8693
 
8694
											#反之沒有關鍵字「/」存在
8695
											else{
8696
 
8697
												#看該符合的名稱開頭是否包含「.」
8698
												#函式說明:
8699
												#取得符合特定字首與字尾的字串
8700
												#回傳結果:
8701
												#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8702
												#$result["function"],當前執行的函數名稱.
8703
												#$result["error"],錯誤訊息陣列.
8704
												#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8705
												#$result["returnString"],爲符合字首條件的字串內容。
8706
												#必填參數:
8707
												#$conf["checkString"],字串,要檢查的字串.
8708
												$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8709
												#可省略參數:
8710
												#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8711
												$conf["search::getMeetConditionsString"]["frontWord"]=".";
8712
												#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8713
												#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8714
												#參考資料:
8715
												#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8716
												$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8717
												unset($conf["search::getMeetConditionsString"]);
8718
 
8719
												#如果 取得符合特定字首的字串 出錯
8720
												if($getMeetConditionsString["status"]=="false"){
8721
 
8722
													#設置執行錯誤識別
8723
													$result["status"]="false";
8724
 
8725
													#設置錯誤訊息
8726
													$result["error"]=$getMeetConditionsString;
8727
 
8728
													#回傳結果
8729
													return $result;
8730
 
8731
													}#if end
8732
 
8733
												#如果有「.」在開頭
8734
												if($getMeetConditionsString["founded"]=="true"){
8735
 
8736
													#忽略這個名稱 
8737
													continue;
8738
 
8739
													}#if end
8740
 
8741
												}#else end
8742
 
8743
											}#if end
8744
 
8745
										#如果 $conf["noWaveEnd"] 為 "true"
8746
										if($conf["noWaveEnd"]==="true"){
8747
 
8748
											#看該符合的名稱結尾是否包含「~」
8749
											#函式說明:
8750
											#取得符合特定字首與字尾的字串
8751
											#回傳結果:
8752
											#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8753
											#$result["function"],當前執行的函數名稱.
8754
											#$result["error"],錯誤訊息陣列.
8755
											#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8756
											#$result["returnString"],爲符合字首條件的字串內容。
8757
											#必填參數:
8758
											#$conf["checkString"],字串,要檢查的字串.
8759
											$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8760
											#可省略參數:
8761
											#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8762
											#$conf["search::getMeetConditionsString"]["frontWord"]=".";
8763
											#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8764
											$conf["search::getMeetConditionsString"]["tailWord"]="~";
8765
											#參考資料:
8766
											#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8767
											$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8768
											unset($conf["search::getMeetConditionsString"]);
8769
 
8770
											#如果 取得符合特定字首的字串 出錯
8771
											if($getMeetConditionsString["status"]=="false"){
8772
 
8773
												#設置執行錯誤識別
8774
												$result["status"]="false";
8775
 
8776
												#設置錯誤訊息
8777
												$result["error"]=$getMeetConditionsString;
8778
 
8779
												#回傳結果
8780
												return $result;
8781
 
8782
												}#if end
8783
 
8784
											#如果有「~」在結尾
8785
											if($getMeetConditionsString["founded"]=="true"){
8786
 
8787
												#忽略這個名稱
8788
												continue;
8789
 
8790
												}#if end
8791
 
8792
											}#if end
8793
 
8794
										#暫存該符合的路徑
8795
										$tempExtendPath[]=$extendPath[$j]."/".$list[$k];
8796
 
8797
										}#for end
8798
 
8799
									}#for end	
8800
 
8801
								#該次有幾個符合的路徑就執行幾次
8802
								foreach($tempExtendPath as $path){
8803
 
8804
									#暫存符合的路徑
8805
									$newExtendPath[]=$path;
8806
 
8807
									}#for end	
8808
 
8809
								}#if end
8810
 
8811
							#反之該目錄底下沒有東西
8812
							else{
8813
 
8814
								#移除該 $extendPath[$i]
8815
								unset($extendPath[$i]);
8816
 
8817
								}#else end					
8818
 
8819
							}#for end
8820
 
8821
						#置換原始符合條件字串的路徑字串陣列
8822
						$extendPath=$newExtendPath;
8823
 
8824
						}#if end
8825
 
8826
						#反之用「*」分割後有分段
8827
						else{
8828
 
8829
							#初始化暫存符合條件的新路徑陣列變數
8830
							$newExtendPath=array();
8831
 
8832
							#當前有幾個符合條件的路徑就執行幾次
8833
							for($i=0;$i<count($extendPath);$i++){
8834
 
8835
								#取得該目錄下所有的東西
8836
								#函式說明:
8837
								#取得目錄底下所有目錄與檔案清單.
8838
								#回傳結果:
8839
								#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8840
								#$result["error"],錯誤訊息陣列.
8841
								#$result["function"],函數名稱.
8842
								#$result["content"],陣列,目錄底下的檔案與子目錄.
8843
								#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8844
								#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8845
								#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8846
								#$result["position"],目前的位置.
8847
								#必填參數:
8848
								#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8849
								$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8850
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8851
								$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
8852
								#可省略參數:
8853
								#無
8854
								#參考資料來源:
8855
								#opendir=>http://php.net/manual/en/function.opendir.php
8856
								#is_dir=>http://php.net/manual/en/function.is-dir.php
8857
								$getList=fileAccess::getList($conf["fileAccess::getList"]);
8858
								unset($conf["fileAccess::getList"]);										
8859
 
8860
								#如果取得目標目錄底下的檔案目錄清單失敗
8861
								if($getList["status"]=="false"){
8862
 
8863
									#設置錯誤識別
8864
									$result["status"]="false";
8865
 
8866
									#設置錯誤訊息
8867
									$result["error"]=$getList;																				
8868
 
8869
									#回傳結果
8870
									return $result;
8871
 
8872
									}#if end
8873
 
8874
								#如果底下有東西
8875
								if(count($getList["content"])>0){
8876
 
8877
									#初始化儲存要檢查的檔案或資料夾名稱陣列
8878
									$list=array();
8879
 
8880
									#針對每個檔案或資料夾
8881
									foreach($getList["content"] as $num=>$array){
8882
 
8883
										#儲存該名稱
8884
										$list[]=$array["name"];
8885
 
8886
										}#foreach end
8887
 
8888
									#初始化儲存符合的名稱
8889
									$passedName=array();
8890
 
8891
									#依據每個檔案目錄名稱,檢查有無符合篩選條件
8892
									foreach($list as $filteredName){
8893
 
8894
										#初始化儲存被檢查的片段檔案資料夾名稱
8895
										$partName=$filteredName;
8896
 
8897
										#依據 $pathPart 分割成幾段(關鍵字數量)就執行幾次
8898
										for($i=0;$i<$spiltString["dataCounts"];$i++){
8899
 
8900
											#尋找關鍵字 $spiltString["dataArray"][$i]
8901
											#函式說明:
8902
											#檢查字串裡面有無指定的關鍵字
8903
											#回傳結果:
8904
											#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8905
											#$result["error"],錯誤訊息
8906
											#$result["function"],當前執行的函數名稱.
8907
											#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8908
											#$result["keyWordCount"],找到的關鍵字數量.
8909
											#必填參數:
8910
											$conf["search::findKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#想要搜尋的關鍵字
8911
											$conf["search::findKeyWord"]["string"]=$partName;#要被搜尋的字串內容
8912
											#可省略參數:
8913
											#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8914
											$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8915
											unset($conf["search::findKeyWord"]);
8916
 
8917
											#如果尋找關鍵字失敗
8918
											if($findKeyWord["status"]=="false"){
8919
 
8920
												#設置執行錯誤識別
8921
												$result["status"]="false";
8922
 
8923
												#設置錯誤訊息
8924
												$result["error"]=$findKeyWord;
8925
 
8926
												#回傳結果
8927
												return $result;
8928
 
8929
												}#if end
8930
 
8931
											#如果有找到關鍵字
8932
											if($findKeyWord["founded"]=="true"){
8933
 
8934
												#如果是最後一段要檢查的關鍵字
8935
												if($i==$spiltString["dataCounts"]-1){
8936
 
8937
													#判斷該關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的開頭
8938
													#函式說明:
8939
													#取得符合特定字首與字尾的字串
8940
													#回傳結果:
8941
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8942
													#$result["function"],當前執行的函數名稱.
8943
													#$result["error"],錯誤訊息陣列.
8944
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8945
													#$result["returnString"],爲符合字首條件的字串內容。
8946
													#必填參數:
8947
													#$conf["checkString"],字串,要檢查的字串.
8948
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
8949
													#可省略參數:
8950
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8951
													$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8952
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8953
													#$conf["tailWord"]="";
8954
													#參考資料:
8955
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8956
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8957
													unset($conf["search::getMeetConditionsString"]);
8958
 
8959
													#如果 取得符合特定字首的字串 出錯
8960
													if($getMeetConditionsString["status"]=="false"){
8961
 
8962
														#設置執行錯誤識別
8963
														$result["status"]="false";
8964
 
8965
														#設置錯誤訊息
8966
														$result["error"]=$getMeetConditionsString;
8967
 
8968
														#回傳結果
8969
														return $result;
8970
 
8971
														}#if end
8972
 
8973
													#如果關鍵字是在開頭
8974
													if($getMeetConditionsString["founded"]=="true"){
8975
 
8976
														#判斷關鍵字是否在該檔案目錄名稱的開頭
8977
														#函式說明:
8978
														#取得符合特定字首與字尾的字串
8979
														#回傳結果:
8980
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8981
														#$result["function"],當前執行的函數名稱.
8982
														#$result["error"],錯誤訊息陣列.
8983
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8984
														#$result["returnString"],爲符合字首條件的字串內容。
8985
														#必填參數:
8986
														#$conf["checkString"],字串,要檢查的字串.
8987
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
8988
														#可省略參數:
8989
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8990
														$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8991
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8992
														#$conf["tailWord"]="";
8993
														#參考資料:
8994
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8995
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8996
														unset($conf["search::getMeetConditionsString"]);
8997
 
8998
														#如果 取得符合特定字首的字串 出錯
8999
														if($getMeetConditionsString["status"]=="false"){
9000
 
9001
															#設置執行錯誤識別
9002
															$result["status"]="false";
9003
 
9004
															#設置錯誤訊息
9005
															$result["error"]=$getMeetConditionsString;
9006
 
9007
															#回傳結果
9008
															return $result;
9009
 
9010
															}#if end
9011
 
9012
														#如果關鍵字不在開頭
9013
														if($getMeetConditionsString["founded"]=="false"){
9014
 
9015
															#不符合條件,跳過該檔案目錄名稱
9016
															break;
9017
 
9018
															}#if end
9019
 
9020
														}#if end
9021
 
9022
													#判斷最後一個關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的結尾
9023
													#函式說明:
9024
													#取得符合特定字首與字尾的字串
9025
													#回傳結果:
9026
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9027
													#$result["function"],當前執行的函數名稱.
9028
													#$result["error"],錯誤訊息陣列.
9029
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9030
													#$result["returnString"],爲符合字首條件的字串內容。
9031
													#必填參數:
9032
													#$conf["checkString"],字串,要檢查的字串.
9033
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
9034
													#可省略參數:
9035
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9036
													#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
9037
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9038
													$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9039
													#參考資料:
9040
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9041
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9042
													unset($conf["search::getMeetConditionsString"]);
9043
 
9044
													#如果 取得符合特定字尾的字串 出錯
9045
													if($getMeetConditionsString["status"]=="false"){
9046
 
9047
														#設置執行錯誤識別
9048
														$result["status"]="false";
9049
 
9050
														#設置錯誤訊息
9051
														$result["error"]=$getMeetConditionsString;
9052
 
9053
														#回傳結果
9054
														return $result;
9055
 
9056
														}#if end
9057
 
9058
													#如果關鍵字是在字尾
9059
													if($getMeetConditionsString["founded"]=="true"){
9060
 
9061
														#判斷關鍵字是否在該片段的開頭
9062
														#函式說明:
9063
														#取得符合特定字首與字尾的字串
9064
														#回傳結果:
9065
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9066
														#$result["function"],當前執行的函數名稱.
9067
														#$result["error"],錯誤訊息陣列.
9068
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9069
														#$result["returnString"],爲符合字首條件的字串內容。
9070
														#必填參數:
9071
														#$conf["checkString"],字串,要檢查的字串.
9072
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9073
														#可省略參數:
9074
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9075
														#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
9076
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9077
														$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9078
														#參考資料:
9079
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9080
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9081
														unset($conf["search::getMeetConditionsString"]);
9082
 
9083
														#如果 取得符合特定字首的字串 出錯
9084
														if($getMeetConditionsString["status"]=="false"){
9085
 
9086
															#設置執行錯誤識別
9087
															$result["status"]="false";
9088
 
9089
															#設置錯誤訊息
9090
															$result["error"]=$getMeetConditionsString;
9091
 
9092
															#回傳結果
9093
															return $result;
9094
 
9095
															}#if end
9096
 
9097
														#如果關鍵字不在結尾
9098
														if($getMeetConditionsString["founded"]=="false"){
9099
 
9100
															#不符合條件,跳過該檔案目錄名稱
9101
															break;
9102
 
9103
															}#if end
9104
 
9105
														}#if end
9106
 
9107
													#如果 $conf["noDotStart"] 為 "true"
9108
													if($conf["noDotStart"]==="true"){
9109
 
9110
														#看該符合的名稱開頭是否包含「.」
9111
														#函式說明:
9112
														#取得符合特定字首與字尾的字串
9113
														#回傳結果:
9114
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9115
														#$result["function"],當前執行的函數名稱.
9116
														#$result["error"],錯誤訊息陣列.
9117
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9118
														#$result["returnString"],爲符合字首條件的字串內容。
9119
														#必填參數:
9120
														#$conf["checkString"],字串,要檢查的字串.
9121
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9122
														#可省略參數:
9123
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9124
														$conf["search::getMeetConditionsString"]["frontWord"]=".";
9125
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9126
														#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9127
														#參考資料:
9128
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9129
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9130
														unset($conf["search::getMeetConditionsString"]);
9131
 
9132
														#如果 取得符合特定字首的字串 出錯
9133
														if($getMeetConditionsString["status"]=="false"){
9134
 
9135
															#設置執行錯誤識別
9136
															$result["status"]="false";
9137
 
9138
															#設置錯誤訊息
9139
															$result["error"]=$getMeetConditionsString;
9140
 
9141
															#回傳結果
9142
															return $result;
9143
 
9144
															}#if end
9145
 
9146
														#如果有「.」在開頭
9147
														if($getMeetConditionsString["founded"]=="true"){
9148
 
9149
															#中斷迴圈
9150
															break;
9151
 
9152
															}#if end
9153
 
9154
														}#if end
9155
 
9156
													#如果 $conf["noWaveEnd"] 為 "true"
9157
													if($conf["noWaveEnd"]==="true"){
9158
 
9159
														#看該符合的名稱結尾是否包含「~」
9160
														#函式說明:
9161
														#取得符合特定字首與字尾的字串
9162
														#回傳結果:
9163
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9164
														#$result["function"],當前執行的函數名稱.
9165
														#$result["error"],錯誤訊息陣列.
9166
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9167
														#$result["returnString"],爲符合字首條件的字串內容。
9168
														#必填參數:
9169
														#$conf["checkString"],字串,要檢查的字串.
9170
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9171
														#可省略參數:
9172
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9173
														#$conf["search::getMeetConditionsString"]["frontWord"]=".";
9174
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9175
														$conf["search::getMeetConditionsString"]["tailWord"]="~";
9176
														#參考資料:
9177
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9178
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9179
														unset($conf["search::getMeetConditionsString"]);
9180
 
9181
														#如果 取得符合特定字首的字串 出錯
9182
														if($getMeetConditionsString["status"]=="false"){
9183
 
9184
															#設置執行錯誤識別
9185
															$result["status"]="false";
9186
 
9187
															#設置錯誤訊息
9188
															$result["error"]=$getMeetConditionsString;
9189
 
9190
															#回傳結果
9191
															return $result;
9192
 
9193
															}#if end
9194
 
9195
														#如果有「~」在結尾
9196
														if($getMeetConditionsString["founded"]=="true"){
9197
 
9198
															#中斷迴圈
9199
															break;
9200
 
9201
															}#if end
9202
 
9203
														}#if end
9204
 
9205
													#取得該符合的名稱
9206
													$passedName[]=$filteredName;
9207
 
9208
													#中斷迴圈
9209
													break;
9210
 
9211
													}#if end
9212
 
9213
												#將 $partName 從左到關鍵字結束的部份剔除
9214
												#函式說明:
9215
												#將特定字串前面的內容剔除
9216
												#回傳結果:
9217
												#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9218
												#$result["error"],錯誤訊息陣列.
9219
												#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
9220
												#$result["function"],當前執行的函數名稱.
9221
												#$result["oriStr"],要處理的原始字串內容.
9222
												#$result["content"],處理好的的字串內容.
9223
												#必填參數:
9224
												$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$partName;#要處理的字串.
9225
												$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#特定字串.
9226
												$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
9227
												unset($conf["stringProcess::delStrBeforeKeyWord"]);
9228
 
9229
												#如果將 $partName 從左到關鍵字結束的部份剔除失敗
9230
												if($delStrBeforeKeyWord["status"]=="false"){
9231
 
9232
													#設置執行錯誤識別
9233
													$result["status"]="false";
9234
 
9235
													#設置錯誤訊息
9236
													$result["error"]=$delStrBeforeKeyWord;
9237
 
9238
													#回傳結果
9239
													return $result;
9240
 
9241
													}#if end
9242
 
9243
												#如果沒有找到特定關鍵字字串
9244
												if($delStrBeforeKeyWord["founded"]=="false"){
9245
 
9246
													#設置執行錯誤識別
9247
													$result["status"]="false";
9248
 
9249
													#設置錯誤訊息
9250
													$result["error"]=$delStrBeforeKeyWord;
9251
 
9252
													#回傳結果
9253
													return $result;
9254
 
9255
													}#if end
9256
 
9257
												#取得剔除過關鍵字前字串的字串	
9258
												$partName=$delStrBeforeKeyWord["content"];
9259
 
9260
												}#if end
9261
 
9262
											#反之關鍵字不存在	
9263
											else{
9264
 
9265
												#儲存被拋棄的片段
9266
												#$result["dismissLog"][]="片段「".$partName."」沒有關鍵字「".$spiltString["dataArray"][$i]."」";
9267
 
9268
												#該名稱不符合條件
9269
												break;
9270
 
9271
												}#else end
9272
 
9273
											}#for end
9274
 
9275
										}#foreach end
9276
 
9277
									#初始化儲存符合的暫存路徑
9278
									$tempExtendPath=array();
9279
 
9280
									#針對每個現有的路徑字串
9281
									for($j=0;$j<count($extendPath);$j++){
9282
 
9283
										#附加每個符合條件的名稱到路徑字串裡面
9284
										for($k=0;$k<count($passedName);$k++){
9285
 
9286
											#暫存該符合的路徑
9287
											$tempExtendPath[]=$extendPath[$j]."/".$passedName[$k];
9288
 
9289
											}#for end
9290
 
9291
										}#for end	
9292
 
9293
									#該次有幾個符合的路徑就執行幾次
9294
									foreach($tempExtendPath as $path){
9295
 
9296
										#暫存符合的路徑
9297
										$newExtendPath[]=$path;
9298
 
9299
										}#foreach end	
9300
 
9301
									}#if end
9302
 
9303
								#反之該目錄底下沒有東西
9304
								else{
9305
 
9306
									#移除該 $extendPath[$i]
9307
									unset($extendPath[$i]);
9308
 
9309
									}#else end					
9310
 
9311
								}#for end
9312
 
9313
							#如果有新的路徑產生
9314
							if(count($newExtendPath)>0){
9315
 
9316
								#置換原始符合條件字串的路徑字串陣列
9317
								$extendPath=$newExtendPath;
9318
 
9319
								}#if end
9320
 
9321
							#反之找不到後續符合的路徑
9322
							else{
9323
 
9324
								$extendPath=array();
9325
 
9326
								}#else end
9327
 
9328
							}#else end
9329
 
9330
					}#else end
9331
 
9332
				}#foreach end
9333
 
9334
			}#if end
9335
 
9336
		#反之沒有含有「*」
9337
		else{
9338
 
9339
			#判斷 $conf["path"] 是否存在
9340
			#函式說明:
9341
			#檢查多個檔案與資料夾是否存在.
9342
			#回傳的結果:
9343
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
9344
			#$result["error"],錯誤訊息陣列.
9345
			#$resutl["function"],當前執行的涵式名稱.
9346
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
9347
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
9348
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
9349
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
9350
			#必填參數:
9351
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
9352
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["path"]);
9353
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
9354
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
9355
			#可省略參數
9356
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
9357
			#$conf["disableWebSearch"]="false";
9358
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
9359
			#$conf["userDir"]="true";
9360
			#參考資料來源:
9361
			#http://php.net/manual/en/function.file-exists.php
9362
			#http://php.net/manual/en/control-structures.foreach.php
9363
			#備註:
9364
			#函數file_exists檢查的路徑為檔案系統的路徑
9365
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
9366
			unset($conf["fileAccess::checkMultiFileExist"]);
9367
 
9368
			#如果檢查失敗
9369
			if($checkMultiFileExist["status"]=="false"){
9370
 
9371
				#設置錯誤識別
9372
				$result["status"]="false";
9373
 
9374
				#設置錯誤訊息
9375
				$result["error"]=$checkMultiFileExist;
9376
 
9377
				#回傳結果
9378
				return $result;
9379
 
9380
				}#if end
9381
 
9382
			#如果存在
9383
			if($checkMultiFileExist["varExist"][0]=="true"){
9384
 
9385
				#初始化暫存展開後的檔案路徑字串
9386
				$extendPath=array($conf["path"]);
9387
 
9388
				}#if end
9389
 
9390
			#反之不存在
9391
			else{
9392
 
9393
				#置換符合的路徑為空字串
9394
				$extendPath=array();
9395
 
9396
				}#else end
9397
 
9398
			#初始化暫存展開後的檔案路徑字串
9399
			$extendPath=array($conf["path"]);
9400
 
9401
			}#else end
9402
 
9403
		#取得解析完「*」的檔案路徑字串
9404
		$result["content"]=$extendPath;
9405
 
9406
		#取得有幾個檔案路徑
9407
		$result["pathCount"]=count($result["content"]);
9408
 
9409
		#設置執行正常
9410
		$result["status"]="true";
9411
 
9412
		#回傳結果
9413
		return $result;
9414
 
9415
		}#function resolvePostionStringWhichContainStarSymbol end
9416
 
9417
	/*
9418
	#函式說明:
9419
	#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
9420
	#回傳結果:
9421
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9422
	#$result["error"],錯誤訊息陣列.
9423
	#$result["function"],函數名稱. 
9424
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9425
	#$result["pathCount"],整數,有幾個路徑.
9426
	#必填參數:
9427
	#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
9428
	$conf["path"]=array();
9429
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9430
	$conf["fileArgu"]=__FILE__;
9431
	#可省略參數:
9432
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9433
	#$conf["noDotStart"]="true";
9434
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9435
	#$conf["noWaveEnd"]="true";
9436
	#參考資料:
9437
	#無.
9438
	#備註:
9439
	#無.
9440
	*/
9441
	public static function resolveMultiPostionStringWhichContainStarSymbol(&$conf){
66 liveuser 9442
 
3 liveuser 9443
		#初始化要回傳的結果
9444
		$result=array();
9445
 
9446
		#設置當其函數名稱
9447
		$result["function"]=__FUNCTION__;
9448
 
9449
		#如果 $conf 不為陣列
9450
		if(gettype($conf)!="array"){
9451
 
9452
			#設置執行失敗
9453
			$result["status"]="false";
9454
 
9455
			#設置執行錯誤訊息
9456
			$result["error"][]="\$conf變數須為陣列形態";
9457
 
9458
			#如果傳入的參數為 null
9459
			if($conf==null){
9460
 
9461
				#設置執行錯誤訊息
9462
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9463
 
9464
				}#if end
9465
 
9466
			#回傳結果
9467
			return $result;
9468
 
9469
			}#if end
9470
 
9471
		#檢查參數
9472
		#函式說明:
9473
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9474
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9475
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9476
		#$result["function"],當前執行的函式名稱.
9477
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9478
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9479
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9480
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9481
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9482
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9483
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9484
		#必填寫的參數:
9485
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9486
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9487
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9488
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9489
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9490
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9491
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9492
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9493
		#可以省略的參數:
9494
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9495
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9496
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9497
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
9498
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9499
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9500
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9501
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
9502
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9503
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9504
		#參考資料來源:
9505
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9506
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9507
		unset($conf["variableCheck::checkArguments"]);
9508
 
9509
		#如果 $checkResult["status"] 等於 "fasle"
9510
		if($checkResult["status"]=="false"){
9511
 
9512
			#設置錯誤識別
9513
			$result["status"]="false";
9514
 
9515
			#設置錯誤訊息
9516
			$result["error"]=$checkResult;
9517
 
9518
			#回傳結果
9519
			return $result;
9520
 
9521
			}#if end
9522
 
9523
		#如果 $checkResult["passed"] 等於 "fasle"
9524
		if($checkResult["passed"]=="false"){
9525
 
9526
			#設置錯誤識別
9527
			$result["status"]="false";
9528
 
9529
			#設置錯誤訊息
9530
			$result["error"]=$checkResult;
9531
 
9532
			#回傳結果
9533
			return $result;
9534
 
9535
			}#if end
9536
 
9537
		#針對每個要解析的路徑字串
9538
		foreach($conf["path"] as $path){
9539
 
9540
			#函式說明:
9541
			#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
9542
			#回傳結果:
9543
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9544
			#$result["error"],錯誤訊息陣列.
9545
			#$result["function"],函數名稱. 
9546
			#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9547
			#必填參數:
9548
			#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
9549
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["path"]=$path;
9550
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9551
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
9552
			#可省略參數:
9553
			#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9554
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["noDotStart"];
9555
			#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9556
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["noWaveEnd"];
9557
			$resolvePostionStringWhichContainStarSymbol=fileAccess::resolvePostionStringWhichContainStarSymbol($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9558
			unset($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9559
 
9560
			#如果解析失敗
9561
			if($resolvePostionStringWhichContainStarSymbol["status"]=="false"){
9562
 
9563
				#設置錯誤識別
9564
				$result["status"]="false";
9565
 
9566
				#設置錯誤訊息
9567
				$result["error"]=$resolvePostionStringWhichContainStarSymbol;
9568
 
9569
				#回傳結果
9570
				return $result;
9571
 
9572
				}#if end
9573
 
9574
			#針對每個解析出來的路徑
9575
			foreach($resolvePostionStringWhichContainStarSymbol["content"] as $filteredPath){
9576
 
9577
				#儲存符合條件的路徑
9578
				$result["content"][]=$filteredPath;
9579
 
9580
				}#foreach end
9581
 
9582
			}#foreach end
9583
 
9584
		#如果有路徑存在
9585
		if(isset($result["content"])){
9586
 
9587
			#取得有幾個路徑
9588
			$result["pathCount"]=count($result["content"]);
9589
 
9590
			}#if end
9591
 
9592
		#反之 
9593
		else{
9594
 
9595
			#設置空的路徑結果
9596
			$result["content"]=array();
9597
 
9598
			#取得有幾個路徑
9599
			$result["pathCount"]=count($result["content"]);
9600
 
9601
			}#else end
9602
 
9603
		#設置執行正常
9604
		$result["status"]="true";
9605
 
9606
		#回傳結果
9607
		return $result;
9608
 
9609
		}#function resolveMultiPostionStringWhichContainStarSymbol end
9610
 
9611
	/*
9612
	#函式說明:
9613
	#將多個路徑字串變成相對於當前路徑的相對路徑字串
9614
	#回傳結果:
9615
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9616
	#$result["error"],錯誤訊息陣列.
9617
	#$result["function"],函數名稱. 
9618
	#$result["argu"],使用的參數.
9619
	#$result["content"],字串陣列,多個轉換好的相對路徑字串.
9620
	#$result["cmd"],使用的指令.
9621
	#必填參數:
9622
	#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
9623
	$conf["path"]=array();
9624
	#$conf["fileArgu"],字串,當前路徑.
9625
	$conf["fileArgu"]=__FILE__;
9626
	#可省略參數:
9627
	#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
9628
	#$conf["baseFrom"]="";
9629
	#參考資料:
9630
	#無.
9631
	#備註:
9632
	#無.
9633
	*/
9634
	public static function getRelativePath(&$conf){
9635
 
9636
		#初始化要回傳的結果
9637
		$result=array();
9638
 
9639
		#設置當其函數名稱
9640
		$result["function"]=__FUNCTION__;
9641
 
9642
		#如果 $conf 不為陣列
9643
		if(gettype($conf)!="array"){
9644
 
9645
			#設置執行失敗
9646
			$result["status"]="false";
9647
 
9648
			#設置執行錯誤訊息
9649
			$result["error"][]="\$conf變數須為陣列形態";
9650
 
9651
			#如果傳入的參數為 null
9652
			if($conf==null){
9653
 
9654
				#設置執行錯誤訊息
9655
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9656
 
9657
				}#if end
9658
 
9659
			#回傳結果
9660
			return $result;
9661
 
9662
			}#if end
9663
 
9664
		#檢查參數
9665
		#函式說明:
9666
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9667
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9668
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9669
		#$result["function"],當前執行的函式名稱.
9670
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9671
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9672
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9673
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9674
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9675
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9676
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9677
		#必填寫的參數:
9678
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9679
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9680
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9681
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9682
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9683
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9684
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9685
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9686
		#可以省略的參數:
9687
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9688
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9689
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9690
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("baseFrom");
9691
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9692
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
9693
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9694
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
9695
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9696
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9697
		#參考資料來源:
9698
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9699
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9700
		unset($conf["variableCheck::checkArguments"]);
9701
 
9702
		#如果 $checkResult["status"] 等於 "false"
9703
		if($checkResult["status"]=="false"){
9704
 
9705
			#設置錯誤識別
9706
			$result["status"]="false";
9707
 
9708
			#設置錯誤訊息
9709
			$result["error"]=$checkResult;
9710
 
9711
			#回傳結果
9712
			return $result;
9713
 
9714
			}#if end
9715
 
9716
		#如果 $checkResult["passed"] 等於 "fasle"
9717
		if($checkResult["passed"]=="false"){
9718
 
9719
			#設置錯誤識別
9720
			$result["status"]="false";
9721
 
9722
			#設置錯誤訊息
9723
			$result["error"]=$checkResult;
9724
 
9725
			#回傳結果
9726
			return $result;
9727
 
9728
			}#if end
9729
 
9730
		#取得參數
9731
		$result["argu"]=$conf;
9732
 
9733
		#函式說明:
9734
		#將固定格式的字串分開,並回傳分開的結果.
9735
		#回傳結果:
9736
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9737
		#$result["error"],錯誤訊息陣列
9738
		#$result["function"],當前執行的函數名稱.
9739
		#$result["argu"],使用的參數.
9740
		#$result["oriStr"],要分割的原始字串內容
9741
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9742
		#$result["dataCounts"],爲總共分成幾段
9743
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9744
		#必填參數:
9745
		#$conf["stringIn"],字串,要處理的字串.
9746
		$conf["fileAccess::spiltString"]["stringIn"]=$conf["fileArgu"];
9747
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9748
		$conf["fileAccess::spiltString"]["spiltSymbol"]="/";
9749
		#可省略參數:
9750
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9751
		$conf["fileAccess::spiltString"]["allowEmptyStr"]="false";
9752
		#參考資料:
9753
		#無.
9754
		#備註:
9755
		#無.
9756
		$spiltString=stringProcess::spiltString($conf["fileAccess::spiltString"]);
9757
		unset($conf["fileAccess::spiltString"]);
9758
 
9759
		#如果執行失敗
9760
		if($spiltString["status"]==="false"){
9761
 
9762
			#設置錯誤識別
9763
			$result["status"]="false";
9764
 
9765
			#設置錯誤訊息
9766
			$result["error"]=$spiltString;
9767
 
9768
			#回傳結果
9769
			return $result;
9770
 
9771
			}#if end
9772
 
9773
		#如果沒有關鍵字
9774
		if($spiltString["found"]==="false"){
9775
 
9776
			#設置錯誤識別
9777
			$result["status"]="false";
9778
 
9779
			#設置錯誤訊息
9780
			$result["error"]=$spiltString;
9781
 
9782
			#回傳結果
9783
			return $result;
9784
 
9785
			}#if end
9786
 
9787
		#取得 $conf["fileArgu"] 的路徑
9788
		#函式說明:
9789
		#將固定格式的字串分開,並回傳分開的結果.
9790
		#回傳結果:
9791
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9792
		#$result["error"],錯誤訊息陣列
9793
		#$result["function"],當前執行的函數名稱.
9794
		#$result["argu"],使用的參數.
9795
		#$result["oriStr"],要分割的原始字串內容
9796
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9797
		#$result["dataCounts"],爲總共分成幾段
9798
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9799
		#必填參數:
9800
		#$conf["stringIn"],字串,要處理的字串.
9801
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];
9802
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9803
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
9804
		#可省略參數:
9805
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9806
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
9807
		#參考資料:
9808
		#無.
9809
		#備註:
9810
		#無.
9811
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
9812
		unset($conf["stringProcess::spiltString"]);
9813
 
9814
		#如果執行失敗
9815
		if($spiltString["status"]==="false"){
9816
 
9817
			#設置錯誤識別
9818
			$result["status"]="false";
9819
 
9820
			#設置錯誤訊息
9821
			$result["error"]=$spiltString;
9822
 
9823
			#回傳結果
9824
			return $result;
9825
 
9826
			}#if end
9827
 
9828
		/*
9829
		#break point
9830
		var_dump($spiltString);
9831
		exit;
9832
		*/
9833
 
9834
		#預設 fileArgu 的路徑為 ""
9835
		$fileArguPath="";
9836
 
9837
		#針對每個目錄
9838
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
9839
 
9840
			#串接路徑
9841
			$fileArguPath=$fileArguPath."/".$spiltString["dataArray"][$i];
9842
 
9843
			}#for end
9844
 
9845
		#取得相對於目標的當前位置
9846
		#函式說明:
9847
		#呼叫shell執行系統命令,並取得回傳的內容.
9848
		#回傳結果:
9849
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9850
		#$result["error"],錯誤訊息陣列.
9851
		#$result["function"],當前執行的函數名稱.
9852
		#$result["argu"],使用的參數.
9853
		#$result["cmd"],執行的指令內容.
9854
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9855
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9856
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9857
		#$result["running"],是否還在執行.
9858
		#$result["pid"],pid.
9859
		#$result["statusCode"],執行結束後的代碼.
9860
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
9861
		#必填參數:
9862
		#$conf["command"],字串,要執行的指令.
9863
		$conf["external::callShell"]["command"]="cd";
9864
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9865
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9866
		#可省略參數:
9867
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9868
		$conf["external::callShell"]["argu"]=array($fileArguPath,";","pwd");
9869
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9870
		#$conf["arguIsAddr"]=array();
9871
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9872
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9873
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9874
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9875
		#$conf["enablePrintDescription"]="true";
9876
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9877
		#$conf["printDescription"]="";
9878
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
9879
		$conf["external::callShell"]["escapeshellarg"]="true";
9880
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
9881
		#$conf["thereIsShellVar"]=array();
9882
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9883
		#$conf["username"]="";
9884
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9885
		#$conf["password"]="";
9886
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9887
		#$conf["useScript"]="";
9888
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9889
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9890
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9891
		#$conf["inBackGround"]="";
9892
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9893
		#$conf["getErr"]="false";
9894
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
9895
		#$conf["doNotRun"]="false";
9896
		#參考資料:
9897
		#exec=>http://php.net/manual/en/function.exec.php
9898
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9899
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9900
		#備註:
9901
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9902
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
9903
		$callShell=external::callShell($conf["external::callShell"]);
9904
		unset($conf["external::callShell"]);
9905
 
9906
		#如果執行失敗
9907
		if($callShell["status"]==="false"){
9908
 
9909
			#設置錯誤識別
9910
			$result["status"]="false";
9911
 
9912
			#設置錯誤訊息
9913
			$result["error"]=$callShell;
9914
 
9915
			#回傳結果
9916
			return $result;
9917
 
9918
			}#if end
9919
 
9920
		#如果執行失敗
9921
		if(!isset($callShell["output"][0])){
9922
 
9923
			#設置錯誤識別
9924
			$result["status"]="false";
9925
 
9926
			#設置錯誤訊息
9927
			$result["error"]=$callShell;
9928
 
9929
			#回傳結果
9930
			return $result;
9931
 
9932
			}#if end	
9933
 
9934
		/*
9935
		#break point
9936
		var_dump($callShell);
9937
		exit;
9938
		*/
9939
 
9940
		#記錄執行的指令
9941
		$result["cmd"][]=$callShell["cmd"];
9942
 
9943
		#保存相對於目標的當前位置
9944
		$pwd=$callShell["output"][0];
9945
 
9946
		#更新 fileArgu
9947
		$conf["fileArgu"]=$pwd."/".$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9948
 
9949
		#針對每個 $conf["path"]
9950
		foreach($conf["path"] as $path){
9951
 
9952
			#將 $path 變成易讀的格式
9953
			#函式說明:
9954
			#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
9955
			#回傳的結果:
9956
			#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
9957
			#$result["function"],當前執行的函數.
9958
			#$result["error"],錯誤訊息陣列.
9959
			#$result["changedPath"],處理完後回傳的目錄字串.
9960
			#$result["oriPath"],原始的路徑字串
9961
			#必填參數:
9962
			#$conf["dirStr"],字串,要處理的檔案目錄字串.
9963
			$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$path;
9964
			$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
9965
			unset($conf["stringProcess::changeDirByDotDotSolidus"]);
9966
 
9967
			#如果處理失敗
9968
			if($changeDirByDotDotSolidus["status"]==="false"){
9969
 
9970
				#設置錯誤識別
9971
				$result["status"]="false";
9972
 
9973
				#設置錯誤訊息
9974
				$result["error"]=$changeDirByDotDotSolidus;
9975
 
9976
				#回傳結果
9977
				return $result;
9978
 
9979
				}#if end
9980
 
9981
			#取得易讀的路徑
9982
			$path=$changeDirByDotDotSolidus["changedPath"];
9983
 
9984
			#判斷 $path 是否為絕對路徑
9985
			#函式說明:
9986
			#取得符合特定字首與字尾的字串
9987
			#回傳結果:
9988
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9989
			#$result["function"],當前執行的函數名稱.
9990
			#$result["error"],錯誤訊息陣列.
9991
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9992
			#$result["returnString"],爲符合字首條件的字串內容。
9993
			#必填參數:
9994
			#$conf["checkString"],字串,要檢查的字串.
9995
			$conf["search::getMeetConditionsString"]["checkString"]=$path;
9996
			#可省略參數:
9997
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9998
			$conf["search::getMeetConditionsString"]["frontWord"]="/";
9999
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10000
			#$conf["tailWord"]="";
10001
			#參考資料:
10002
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10003
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
10004
			unset($conf["search::getMeetConditionsString"]);			
10005
 
10006
			#如果檢查失敗
10007
			if($getMeetConditionsString["status"]=="false"){
10008
 
10009
				#設置錯誤識別
10010
				$result["status"]="false";
10011
 
10012
				#設置錯誤訊息
10013
				$result["error"]=$getMeetConditionsString;
10014
 
10015
				#回傳結果
10016
				return $result;
10017
 
10018
				}#if end
10019
 
10020
			#如果沒有「/」開頭
10021
			if($getMeetConditionsString["founded"]==="false"){
10022
 
10023
				#將 $conf["fileArgu"] 最後面的檔案或目錄名稱剔除
10024
				#函式說明:
10025
				#將固定格式的字串分開,並回傳分開的結果。
10026
				#回傳結果:
10027
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10028
				#$result["error"],錯誤訊息陣列
10029
				#$result["function"],當前執行的函數名稱.
10030
				#$result["oriStr"],要分割的原始字串內容
10031
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
10032
				#$result["dataCounts"],爲總共分成幾段
10033
				#必填參數:
10034
				$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
10035
				$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
10036
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
10037
				unset($conf["stringProcess::spiltString"]);
10038
 
10039
				#如果分割字串失敗
10040
				if($spiltString["status"]=="false"){
10041
 
10042
					#設置錯誤識別
10043
					$result["status"]="false";
10044
 
10045
					#設置錯誤訊息
10046
					$result["error"]=$spiltString;
10047
 
10048
					#回傳結果
10049
					return $result;
10050
 
10051
					}#if end
10052
 
10053
				#初始化相對路徑為開頭片段""
10054
				$relativePathPart="/";
10055
 
10056
				#剔除最後一段
10057
				for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
10058
 
10059
					#串接起來
10060
					$relativePathPart=$relativePathPart.$spiltString["dataArray"][$i]."/";
10061
 
10062
					}#for end
10063
 
10064
				#如果有設定 baseFrom
10065
				if(isset($conf["baseFrom"])){
10066
 
10067
					#函式說明:
10068
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10069
					#回傳結果:
10070
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10071
					#$result["error"],錯誤訊息陣列.
10072
					#$result["function"],函數名稱. 
10073
					#$result["argu"],使用的參數.
10074
					#$result["content"],網址,若是在命令列執行,則為"null".
10075
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10076
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10077
					#必填參數:
10078
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10079
					$conf["fileAccess::getInternetAddressV2"]["address"]=$path;
10080
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10081
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10082
					#可省略參數:
10083
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10084
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10085
					#參考資料:
10086
					#無.
10087
					#備註:
10088
					#無.
10089
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10090
					unset($conf["fileAccess::getInternetAddressV2"]);
10091
 
10092
					##var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10093
 
10094
					#如果執行失敗
10095
					if($getInternetAddressV2["status"]==="false"){
10096
 
10097
						#設置錯誤識別
10098
						$result["status"]="false";
10099
 
10100
						#設置錯誤訊息
10101
						$result["error"]=$getInternetAddressV2;
10102
 
10103
						#回傳結果
10104
						return $result;
10105
 
10106
						}#if end
10107
 
10108
					#取得絕對位置
10109
					$path=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10110
 
10111
					#函式說明:
10112
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10113
					#回傳結果:
10114
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10115
					#$result["error"],錯誤訊息陣列.
10116
					#$result["function"],函數名稱. 
10117
					#$result["argu"],使用的參數.
10118
					#$result["content"],網址,若是在命令列執行,則為"null".
10119
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10120
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10121
					#必填參數:
10122
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10123
					$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["baseFrom"];
10124
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10125
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10126
					#可省略參數:
10127
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10128
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10129
					#參考資料:
10130
					#無.
10131
					#備註:
10132
					#無.
10133
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10134
					unset($conf["fileAccess::getInternetAddressV2"]);
10135
 
10136
					#var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10137
 
10138
					#如果執行失敗
10139
					if($getInternetAddressV2["status"]==="false"){
10140
 
10141
						#設置錯誤識別
10142
						$result["status"]="false";
10143
 
10144
						#設置錯誤訊息
10145
						$result["error"]=$getInternetAddressV2;
10146
 
10147
						#回傳結果
10148
						return $result;
10149
 
10150
						}#if end
10151
 
10152
					#取得絕對位置
10153
					$conf["baseFrom"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10154
 
10155
					#函式說明:
10156
					#將多個路徑字串變成相對於當前路徑的相對路徑字串
10157
					#回傳結果:
10158
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10159
					#$result["error"],錯誤訊息陣列.
10160
					#$result["function"],函數名稱. 
10161
					#$result["argu"],使用的參數.
10162
					#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10163
					#必填參數:
10164
					#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10165
					$conf["fileAccess::getRelativePath"]["path"]=array($path);
10166
					#$conf["fileArgu"],字串,當前路徑.
10167
					$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["baseFrom"]."/name";
10168
					#可省略參數:
10169
					#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
10170
					#$conf["baseFrom"]="";
10171
					#參考資料:
10172
					#無.
10173
					#備註:
10174
					#無.
10175
					$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10176
					unset($conf["fileAccess::getRelativePath"]);
10177
 
10178
					#var_dump(__LINE__." ".print_r($getRelativePath,true));
10179
 
10180
					#如果執行失敗
10181
					if($getRelativePath["status"]==="false"){
10182
 
10183
						#設置錯誤識別
10184
						$result["status"]="false";
10185
 
10186
						#設置錯誤訊息
10187
						$result["error"]=$getRelativePath;
10188
 
10189
						#回傳結果
10190
						return $result;
10191
 
10192
						}#if end
10193
 
10194
					#取得轉換好的絕對路徑
10195
					$relativePathPart=$getRelativePath["content"][0]."/";
10196
 
10197
					#清空path,避免出錯
10198
					$path="";
10199
 
10200
					}#if end
10201
 
10202
				#轉換成易讀的相對路徑
10203
				#函式說明:
10204
				#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
10205
				#回傳的結果:
10206
				#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
10207
				#$result["function"],當前執行的函數.
10208
				#$result["error"],錯誤訊息陣列.
10209
				#$result["changedPath"],處理完後回傳的目錄字串.
10210
				#$result["oriPath"],原始的路徑字串
10211
				#必填參數:
10212
				#$conf["dirStr"],字串,要處理的檔案目錄字串.
10213
				$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$relativePathPart.$path;
10214
				$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
10215
				unset($conf["stringProcess::changeDirByDotDotSolidus"]);
10216
 
10217
				#var_dump($changeDirByDotDotSolidus);	
10218
 
10219
				#如果轉換失敗
10220
				if($changeDirByDotDotSolidus["status"]=="false"){
10221
 
10222
					#設置錯誤識別
10223
					$result["status"]="false";
10224
 
10225
					#設置錯誤訊息
10226
					$result["error"]=$changeDirByDotDotSolidus;
10227
 
10228
					#回傳結果
10229
					return $result;
10230
 
10231
					}#if end
10232
 
10233
				#轉換為相對路徑
10234
				#函式說明:
10235
				#將多個路徑字串變成相對於當前路徑的相對路徑字串
10236
				#回傳結果:
10237
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10238
				#$result["error"],錯誤訊息陣列.
10239
				#$result["function"],函數名稱. 
10240
				#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10241
				#必填參數:
10242
				#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10243
				$conf["fileAccess::getRelativePath"]["path"]=array($changeDirByDotDotSolidus["changedPath"]);
10244
				#$conf["fileArgu"],字串,當前路徑.
10245
				$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
10246
				$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10247
				unset($conf["fileAccess::getRelativePath"]);
10248
 
10249
				#var_dump($getRelativePath);	
10250
 
10251
				#如果轉換路徑失敗
10252
				if($getRelativePath["status"]==="false"){
10253
 
10254
					#設置錯誤識別
10255
					$result["status"]="false";
10256
 
10257
					#設置錯誤訊息
10258
					$result["error"]=$changeDirByDotDotSolidus;
10259
 
10260
					#回傳結果
10261
					return $result;
10262
 
10263
					}#if end
10264
 
10265
				#取得相對路徑
10266
				$result["content"][]=$getRelativePath["content"][0];
10267
 
10268
				}#if end
10269
 
10270
			#反之有「/」開頭
10271
			else{
10272
				#函式說明:
10273
				#移除多個絕對路徑字串開頭相同的部分
10274
				#回傳結果:
10275
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10276
				#$result["error"],錯誤訊息陣列.
10277
				#$result["function"],當前執行的函數名稱.
10278
				#$result["content"],處理好的的字串內容.
10279
				#必填參數:
10280
				#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10281
				$conf["fileAccess::delSamePathHead"]["pathIn"]=array($path,$conf["fileArgu"]);		
10282
				$delSamePathHead=fileAccess::delSamePathHead($conf["fileAccess::delSamePathHead"]);
10283
				unset($conf["fileAccess::delSamePathHead"]);
10284
 
10285
				#var_dump($delSamePathHead);
10286
 
10287
				#如果移除多個絕對路徑字串開頭相同的部分失敗
10288
				if($delSamePathHead["status"]==="false"){
10289
 
10290
					#設置錯誤識別
10291
					$result["status"]="false";
10292
 
10293
					#設置錯誤訊息
10294
					$result["error"]=$delSameHead;
10295
 
10296
					#回傳結果
10297
					return $result;
10298
 
10299
					}#if end
10300
 
10301
				#如果 $conf["fileArgu"] 剩下空
10302
				if($delSamePathHead["content"][1]===""){
10303
 
10304
					#檢查 $delSamePathHead[0] 開頭是否為「/」
10305
					#函式說明:
10306
					#取得符合特定字首與字尾的字串
10307
					#回傳結果:
10308
					#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10309
					#$result["function"],當前執行的函數名稱.
10310
					#$result["error"],錯誤訊息陣列.
10311
					#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10312
					#$result["returnString"],爲符合字首條件的字串內容。
10313
					#必填參數:
10314
					#$conf["checkString"],字串,要檢查的字串.
10315
					$conf["search::getMeetConditionsString"]["checkString"]=$delSamePathHead["content"][0];
10316
					#可省略參數:
10317
					#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10318
					$conf["search::getMeetConditionsString"]["frontWord"]="/";
10319
					#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10320
					#$conf["tailWord"]="";
10321
					#參考資料:
10322
					#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10323
					$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
10324
					unset($conf["search::getMeetConditionsString"]);
10325
 
10326
					#如果檢查失敗
10327
					if($getMeetConditionsString["status"]=="false"){
10328
 
10329
						#設置錯誤識別
10330
						$result["status"]="false";
10331
 
10332
						#設置錯誤訊息
10333
						$result["error"]=$getMeetConditionsString;
10334
 
10335
						#回傳結果
10336
						return $result;
10337
 
10338
						}#if end
10339
 
10340
					#如果有開頭有「/」
10341
					if($getMeetConditionsString["founded"]==="true"){
10342
 
10343
						#函式說明:
10344
						#將字串特定關鍵字與其前面的內容剔除
10345
						#回傳結果:
10346
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10347
						#$result["error"],錯誤訊息陣列.
10348
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10349
						#$result["function"],當前執行的函數名稱.
10350
						#$result["oriStr"],要處理的原始字串內容.
10351
						#$result["content"],處理好的的字串內容.
10352
						#必填參數:
10353
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delSamePathHead["content"][0];#要處理的字串.
10354
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";#特定字串.
10355
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
10356
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
10357
 
10358
						#如果 將字串特定關鍵字與其前面的內容剔除 失敗
10359
						if($delStrBeforeKeyWord["status"]=="false"){
10360
 
10361
							#設置錯誤識別
10362
							$result["status"]="false";
10363
 
10364
							#設置錯誤訊息
10365
							$result["error"]=$delStrBeforeKeyWord;
10366
 
10367
							#回傳結果
10368
							return $result;
10369
 
10370
							}#if end
10371
 
10372
						#取得相對位置
10373
						$result["content"][]=$delStrBeforeKeyWord["content"];
10374
 
10375
						}#if end
10376
 
10377
					#反之
10378
					else{
10379
 
10380
						#取得相對位置
10381
						$result["content"][]=$delSamePathHead["content"][0];
10382
 
10383
						}#else end	
10384
 
10385
					}#if end
10386
 
10387
				#反之剩下的 $conf["fileArgu"] 不為空
10388
				else{
10389
 
10390
					#檢查 $delSamePathHead["content"][1] 有幾個「/」
10391
					#函式說明:
10392
					#檢查字串裡面有無指定的關鍵字
10393
					#回傳結果:
10394
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
10395
					#$result["error"],錯誤訊息
10396
					#$result["function"],當前執行的函數名稱.
10397
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
10398
					#$result["keyWordCount"],找到的關鍵字數量.
10399
					#必填參數:
10400
					$conf["search::findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字
10401
					$conf["search::findKeyWord"]["string"]=$delSamePathHead["content"][1];#要被搜尋的字串內容
10402
					#可省略參數:
10403
					#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
10404
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
10405
					unset($conf["search::findKeyWord"]);
10406
 
10407
					#如果 檢查字串裡面有無指定的關鍵字 失敗
10408
					if($findKeyWord["status"]==="false"){
10409
 
10410
						#設置錯誤識別
10411
						$result["status"]="false";
10412
 
10413
						#設置錯誤訊息
10414
						$result["error"]=$findKeyWord;
10415
 
10416
						#回傳結果
10417
						return $result;
10418
 
10419
						}#if end
10420
 
10421
					#有幾個「/」就執行幾次
10422
					for($i=0;$i<$findKeyWord["keyWordCount"];$i++){
10423
 
10424
						#在前面加上 "../"
10425
						$delSamePathHead["content"][0]="../".$delSamePathHead["content"][0];
10426
 
10427
						}#for end
10428
 
10429
					#取得相對位置
10430
					$result["content"][]=$delSamePathHead["content"][0];
10431
 
10432
					}#else end
10433
 
10434
				}#else end
10435
 
10436
			}#foreach end
10437
 
10438
		#設置執行正常
10439
		$result["status"]="true";
10440
 
10441
		#回傳結果
10442
		return $result;
10443
 
10444
		}#function getRelativeParh end
10445
 
10446
	/*
10447
	#函式說明:
10448
	#移除多個絕對路徑字串開頭相同的部分
10449
	#回傳結果:
10450
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10451
	#$result["error"],錯誤訊息陣列.
10452
	#$result["function"],當前執行的函數名稱.
10453
	#$result["argu"],參數.
10454
	#$result["content"],處理好的的字串內容.
10455
	#必填參數:
10456
	#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10457
	$conf["pathIn"]=array();		
10458
	#可省略參數:
10459
	#無
10460
	#參考資料:
10461
	#無.
10462
	#備註:
10463
	#無.
10464
	*/
10465
	public static function delSamePathHead(&$conf){
10466
 
10467
		#初始化要回傳的結果
10468
		$result=array();
10469
 
10470
		#取得當前執行的函數名稱
10471
		$result["function"]=__FUNCTION__;
10472
 
10473
		#如果沒有參數
10474
		if(func_num_args()==0){
10475
 
10476
			#設置執行失敗
10477
			$result["status"]="false";
10478
 
10479
			#設置執行錯誤訊息
10480
			$result["error"]="函數".$result["function"]."需要參數";
10481
 
10482
			#回傳結果
10483
			return $result;
10484
 
10485
			}#if end
10486
 
10487
		#如果 $conf 不為陣列
10488
		if(gettype($conf)!="array"){
10489
 
10490
			#設置執行失敗
10491
			$result["status"]="false";
10492
 
10493
			#設置執行錯誤訊息
10494
			$result["error"][]="\$conf變數須為陣列形態";
10495
 
10496
			#如果傳入的參數為 null
10497
			if($conf==null){
10498
 
10499
				#設置執行錯誤訊息
10500
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10501
 
10502
				}#if end
10503
 
10504
			#回傳結果
10505
			return $result;
10506
 
10507
			}#if end
10508
 
10509
		#取得參數
10510
		$result["argv"]=$conf;	
10511
 
10512
		#檢查參數
10513
		#函式說明:
10514
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10515
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10516
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10517
		#$result["function"],當前執行的函式名稱.
10518
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10519
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10520
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10521
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10522
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10523
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10524
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10525
		#必填寫的參數:
10526
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10527
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10528
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10529
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("pathIn");
10530
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
10531
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
10532
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10533
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10534
		#可以省略的參數:
10535
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
10536
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
10537
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10538
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
10539
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10540
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10541
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10542
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
10543
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10544
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
10545
		#參考資料來源:
10546
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10547
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10548
		unset($conf["variableCheck::checkArguments"]);
10549
 
10550
		#如果 $checkResult["status"] 等於 "fasle"
10551
		if($checkResult["status"]=="false"){
10552
 
10553
			#設置錯誤識別
10554
			$result["status"]="false";
10555
 
10556
			#設置錯誤訊息
10557
			$result["error"]=$checkResult;
10558
 
10559
			#回傳結果
10560
			return $result;
10561
 
10562
			}#if end
10563
 
10564
		#如果 $checkResult["passed"] 等於 "fasle"
10565
		if($checkResult["passed"]=="false"){
10566
 
10567
			#設置錯誤識別
10568
			$result["status"]="false";
10569
 
10570
			#設置錯誤訊息
10571
			$result["error"]=$checkResult;
10572
 
10573
			#回傳結果
10574
			return $result;
10575
 
10576
			}#if end
10577
 
10578
		#檢查是否都為絕對路徑
10579
		#函式說明:
10580
		#取得多個符合特定字首與字尾的字串.
10581
		#回傳結果:
10582
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10583
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10584
		#$result["function"],當前執行的函數名稱.
10585
		#$result["returnString"],爲符合字首條件的字串陣列內容。
10586
		#必填參數:
10587
		#$conf["checkString"],陣列字串,要檢查的字串們.
10588
		$conf["search::getMeetConditionsStringMulti"]["checkString"]=$conf["pathIn"];#要檢查的字串陣列
10589
		#可省略參數:
10590
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10591
		$conf["search::getMeetConditionsStringMulti"]["frontWord"]="/";
10592
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10593
		#$conf["tailWord"]="";
10594
		#參考資料:
10595
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10596
		$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
10597
		unset($conf["search::getMeetConditionsStringMulti"]);
10598
 
10599
		#如果檢測是否為絕對路徑失敗
10600
		if($getMeetConditionsStringMulti["status"]=="false"){
10601
 
10602
			#設置錯誤識別
10603
			$result["status"]="false";
10604
 
10605
			#設置錯誤訊息
10606
			$result["error"]=$getMeetConditionsStringMulti;
10607
 
10608
			#增加額外的錯誤訊息
10609
			$result["error"][]="僅接受絕對路徑字串";
10610
 
10611
			#回傳結果
10612
			return $result;
10613
 
10614
			}#if end
10615
 
10616
		#函式說明:
10617
		#將多個固定格式的字串分開,並回傳分開的結果
10618
		#回傳的參數:
10619
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
10620
		#$result["error"],錯誤訊息陣列.
10621
		#$result["function"],當前執行的函數名稱.
10622
		#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
10623
		#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
10624
		#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
10625
		#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
10626
		#必填參數:
10627
		#$conf["stringIn"],字串陣列,要處理的字串陣列.
10628
		$conf["stringProcess::spiltMutiString"]["stringIn"]=$conf["pathIn"];
10629
		#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
10630
		$conf["stringProcess::spiltMutiString"]["spiltSymbol"]="/";
10631
		$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
10632
 
10633
		#如果分割所有路徑字串失敗
10634
		if($spiltMutiString["status"]=="false"){
10635
 
10636
			#設置錯誤識別
10637
			$result["status"]="false";
10638
 
10639
			#設置錯誤訊息
10640
			$result["error"]=$spiltMutiString;				
10641
 
10642
			#回傳結果
10643
			return $result;
10644
 
10645
			}#if end
10646
 
10647
		#初始化暫存每個路徑分割成的段數
10648
		$spiltedPathCount=array();					
10649
 
10650
		#取得每個路徑分割成的段數
10651
		#針對每個 $spiltMutiString["spiltString"]
10652
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10653
 
10654
			$spiltedPathCount[]=$spiltMutiString["spiltString"][$i]["dataCounts"];
10655
 
10656
			}#for end
10657
 
10658
		#取得所有路徑字串分割後的最小數量
10659
		#涵式說明
10660
		#找最小值,結果會回傳最小值
10661
		#回傳的內容
10662
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
10663
		#$result["error"],錯誤訊息陣列.
10664
		#$result["function"],當前執行的函數名稱.
10665
		#$result["key"],最大值原先的key.
10666
		#$result["value"],陣列裏面最小的數值.
10667
		#必填參數:
10668
		$conf["math::getMinValue"]["rawDataArray"]=$spiltedPathCount;#爲原始數據
10669
		$getMinValue=math::getMinValue($conf["math::getMinValue"]);
10670
		unset($conf["math::getMinValue"]);
10671
 
10672
		#如果取得最小數值失敗
10673
		if($getMinValue["status"]=="false"){
10674
 
10675
			#設置錯誤識別
10676
			$result["status"]="false";
10677
 
10678
			#設置錯誤訊息
10679
			$result["error"]=$getMinValue;				
10680
 
10681
			#回傳結果
10682
			return $result;
10683
 
10684
			}#if end	
10685
 
10686
		#初始化暫存每個路徑字串的前面幾個片段是相同的
10687
		$samePartCount=0;
10688
 
10689
		#var_dump($getMinValue["value"]);	
10690
 
10691
		#依據所有路徑字串分割後的最小數量
10692
		for($j=0;$j<$getMinValue["value"];$j++){
10693
 
10694
			#初始化暫存第一個路徑的片段字串
10695
			$firstPathPart="";
10696
 
10697
			#針對每個 $spiltMutiString["spiltString"]
10698
			for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10699
 
10700
				#暫存分割的字串
10701
				$spiltedPath=$spiltMutiString["spiltString"][$i];
10702
 
10703
				#如果是第一個路徑
10704
				if($i==0){
10705
 
10706
					#取得第一個路徑的片段字串
10707
					$firstPathPart=$spiltedPath["dataArray"][$j];
10708
 
10709
					}#if end									
10710
 
10711
				#如果第$i+1個路徑片段不跟第1個路徑的片段字串一樣
10712
				if($spiltedPath["dataArray"][$j]!=$firstPathPart){
10713
 
10714
					#讓最外層迴圈中止
10715
					$getMinValue["value"]=-1;
10716
 
10717
					#跳出迴圈
10718
					break;
10719
 
10720
					}#if end			
10721
 
10722
				}#for end
10723
 
10724
			#代表每個路徑字串的第$j段是一樣的.
10725
			$samePartCount=$j;
10726
 
10727
			}#for end
10728
 
10729
		#var_dump($samePartCount);
10730
 
10731
		#依據每個路徑
10732
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){			
10733
 
10734
			#初始化儲存第$i+1個處理好的路徑字串
10735
			$result["content"][$i]="";			
10736
 
10737
			#依據 $samePartCount 與 路徑的段數
10738
			for($j=$samePartCount;$j<$spiltMutiString["spiltString"][$i]["dataCounts"];$j++){
10739
 
10740
				#如果不是第一段
10741
				if($j!=$samePartCount){
10742
 
10743
					#組裝每個路徑片段
10744
					$result["content"][$i]=$result["content"][$i]."/".$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10745
 
10746
					}#if end
10747
 
10748
				#反之為第一段
10749
				else{
10750
 
10751
					#組裝每個路徑片段
10752
					$result["content"][$i]=$result["content"][$i].$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10753
 
10754
					}#else end
10755
 
10756
				}#for end
10757
 
10758
			}#for end
10759
 
10760
		#設置執行正常
10761
		$result["status"]="true";
10762
 
10763
		#回傳結果
10764
		return $result;
10765
 
10766
		}#function delSamePathHead end
10767
 
10768
	/*
10769
	#函式說明:
10770
	#於本套件位置底下的tmp資料夾下建立與回傳暫存檔案名稱路徑 
10771
	#回傳結果:
10772
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10773
	#$result["error"],錯誤訊息.
10774
	#$result["function"],當前執行的函數名稱.
10775
	#$result["content"],暫存檔案的路徑與名稱.
10776
	#$result["fileName"],暫存檔案的名稱.
10777
	#$result["path"],暫存檔案的路徑.
10778
	#必填參數:
10779
	#無.
10780
	#可省略參數:
36 liveuser 10781
	#$conf["content"],陣列,每行檔案的內容,預設為空陣列,不寫入任何資料.
10782
	#$conf["contant"]=array();
3 liveuser 10783
	#參考資料:
10784
	#無.
10785
	#備註:
10786
	#無.
10787
	*/
36 liveuser 10788
	public static function createTempFile(&$conf){
3 liveuser 10789
 
10790
		#初始化要回傳的結果
10791
		$result=array();
10792
 
10793
		#取得當前執行的函數名稱
10794
		$result["function"]=__FUNCTION__;
36 liveuser 10795
 
10796
		#取得參數
10797
		$result["argu"]=$conf;
10798
 
10799
		#如果 $conf 不為陣列
10800
		if(gettype($conf)!="array"){
10801
 
10802
			#設置執行失敗
10803
			$result["status"]="false";
10804
 
10805
			#設置執行錯誤訊息
10806
			$result["error"][]="\$conf變數須為陣列形態";
10807
 
10808
			#如果傳入的參數為 null
10809
			if(is_null($conf)){
10810
 
10811
				#設置執行錯誤訊息
10812
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10813
 
10814
				}#if end
10815
 
10816
			#回傳結果
10817
			return $result;
10818
 
10819
			}#if end
10820
 
10821
		#檢查參數
10822
		#函式說明:
10823
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
10824
		#回傳結果:
10825
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10826
		#$result["error"],執行不正常結束的錯訊息陣列.
10827
		#$result["simpleError"],簡單表示的錯誤訊息.
10828
		#$result["function"],當前執行的函式名稱.
10829
		#$result["argu"],設置給予的參數.
10830
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10831
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10832
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10833
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10834
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10835
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10836
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10837
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10838
		#必填參數:
10839
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10840
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10841
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10842
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10843
		#可省略參數:
10844
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10845
		#$conf["mustBeFilledVariableName"]=array();
10846
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
10847
		#$conf["mustBeFilledVariableType"]=array();
10848
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10849
		#$conf["canBeEmptyString"]="false";
10850
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10851
		#$conf["canNotBeEmpty"]=array();
10852
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10853
		#$conf["canBeEmpty"]=array();
10854
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10855
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10856
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10857
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("content");
10858
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
10859
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
10860
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10861
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array());
10862
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
10863
		#$conf["disallowAllSkipableVarIsEmpty"]="";
10864
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
10865
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
10866
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
10867
		#$conf["disallowAllSkipableVarNotExist"]="";
10868
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10869
		#$conf["arrayCountEqualCheck"][]=array();
10870
		#參考資料:
10871
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10872
		#備註:
10873
		#無.
10874
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10875
		unset($conf["variableCheck::checkArguments"]);
10876
 
10877
		#如果執行失敗
10878
		if($checkArguments["status"]==="false"){
10879
 
10880
			#設置執行異常
10881
			$result["status"]="false";
3 liveuser 10882
 
36 liveuser 10883
			#設置錯誤訊息
10884
			$result["error"]=$checkArguments;
10885
 
10886
			#回傳結果
10887
			return $result;
10888
 
10889
			}#if end
10890
 
10891
		#如果檢查不通過
10892
		if($checkArguments["passed"]==="false"){
10893
 
10894
			#設置執行異常
10895
			$result["status"]="false";
10896
 
10897
			#設置錯誤訊息
10898
			$result["error"]=$checkArguments;
10899
 
10900
			#回傳結果
10901
			return $result;
10902
 
10903
			}#if end
10904
 
3 liveuser 10905
		#取得相對於當前路徑的  tmp 目錄.
10906
		exec("cd ".pathinfo(__FILE__)["dirname"]."/../../../var/qbpwcf/tmp;pwd;",$output,$status);
10907
 
10908
		#如果執行失敗
10909
		if($status!==0){
10910
 
10911
			#設置執行失敗
10912
			$result["status"]="false";
10913
 
10914
			#設置執行錯誤訊息
10915
			$result["error"][]="取得暫存目錄失敗";
10916
 
10917
			#回傳結果
10918
			return $result;
10919
 
10920
			}#if end	
10921
 
10922
		#設置預設的暫存目錄
10923
		$defaultTmpDir=$output[0];	
10924
 
10925
		#取得暫存檔案的路徑與名稱
10926
		$result["content"]=tempnam($defaultTmpDir,"qbpwcf_tmpfile_");
10927
 
42 liveuser 10928
		#如果產生的暫存檔案位置異常
10929
		#參考資料:
10930
		#https://www.php.net/manual/en/function.tempnam.php
10931
		if(strpos("/tmp/",$result["content"])===0){
10932
 
10933
			#設置執行失敗
10934
			$result["status"]="false";
10935
 
10936
			#設置執行錯誤訊息
10937
			$result["error"][]="於暫存目錄建立檔案失敗";
10938
 
10939
			#回傳結果
10940
			return $result;
10941
 
10942
			}#if end
10943
 
3 liveuser 10944
		#函式說明:
10945
		#將字串特定關鍵字與其前面的內容剔除
10946
		#回傳結果:
10947
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10948
		#$result["error"],錯誤訊息陣列.
10949
		#$result["warning"],警告訊息鎮列.
10950
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10951
		#$result["function"],當前執行的函數名稱.
10952
		#$result["argu"],使用的參數.
10953
		#$result["oriStr"],要處理的原始字串內容.
10954
		#$result["content"],處理好的的字串內容.	
10955
		#必填參數:
10956
		#$conf["stringIn"],字串,要處理的字串.
10957
		$conf["stringPorcess::delStrBeforeKeyWord"]["stringIn"]=$result["content"];
10958
		#$conf["keyWord"],字串,特定字串.
42 liveuser 10959
		$conf["stringPorcess::delStrBeforeKeyWord"]["keyWord"]=$defaultTmpDir."/";
3 liveuser 10960
		#可省略參數:
10961
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
42 liveuser 10962
		$conf["stringPorcess::delStrBeforeKeyWord"]["recursive"]="true";
3 liveuser 10963
		#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
10964
		#$conf["lastResult"]=$delStrBeforeKeyWord;
10965
		#參考資料:
10966
		#無.
10967
		#備註:
10968
		#無.
10969
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringPorcess::delStrBeforeKeyWord"]);
10970
		unset($conf["stringPorcess::delStrBeforeKeyWord"]);
10971
 
10972
		#如果執行失敗
10973
		if($delStrBeforeKeyWord["status"]==="false"){
10974
 
10975
			#設置執行失敗
10976
			$result["status"]="false";
10977
 
10978
			#設置執行錯誤訊息
10979
			$result["error"]=$delStrBeforeKeyWord;
10980
 
10981
			#回傳結果
10982
			return $result;
10983
 
10984
			}#if end
10985
 
10986
		#如果應該要存在的路徑關鍵字不在
10987
		if($delStrBeforeKeyWord["founded"]==="false"){
10988
 
10989
			#設置執行失敗
10990
			$result["status"]="false";
10991
 
10992
			#設置執行錯誤訊息
10993
			$result["error"]=$delStrBeforeKeyWord;
10994
 
10995
			#回傳結果
10996
			return $result;
10997
 
10998
			}#if end
10999
 
11000
		#取得檔案名稱
11001
		$result["fileName"]=$delStrBeforeKeyWord["content"];
11002
 
11003
		#函式說明:
11004
		#將字串特定關鍵字與其後面的內容剔除
11005
		#回傳結果:
11006
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11007
		#$result["error"],錯誤訊息陣列.
11008
		#$result["warning"],警告訊息鎮列.
11009
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
11010
		#$result["function"],當前執行的函數名稱.
11011
		#$result["oriStr"],要處理的原始字串內容.
11012
		#$result["content"],處理好的的字串內容.
11013
		#$result["argu"],使用的參數.
11014
		#必填參數:
11015
		#$conf["stringIn"],字串,要處理的字串.
11016
		$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$result["content"];
11017
		#$conf["keyWord"],字串,特定字串.
11018
		$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$result["fileName"];
11019
		#可省略參數:
11020
		#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
11021
		#$conf["deleteLastRepeatedOne"]="";
11022
		#參考資料:
11023
		#無.
11024
		#備註:
11025
		#無.
11026
		$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
11027
		unset($conf["stringProcess::delStrAfterKeyWord"]);
11028
 
11029
		#如果執行失敗
11030
		if($delStrAfterKeyWord["status"]==="false"){
11031
 
11032
			#設置執行失敗
11033
			$result["status"]="false";
11034
 
11035
			#設置執行錯誤訊息
11036
			$result["error"]=$delStrAfterKeyWord;
11037
 
11038
			#回傳結果
11039
			return $result;
11040
 
11041
			}#if end
11042
 
11043
		#如果應該要存在的檔案名稱關鍵字不在
11044
		if($delStrAfterKeyWord["founded"]==="false"){
11045
 
11046
			#設置執行失敗
11047
			$result["status"]="false";
11048
 
11049
			#設置執行錯誤訊息
11050
			$result["error"]=$delStrAfterKeyWord;
11051
 
11052
			#回傳結果
11053
			return $result;
11054
 
11055
			}#if end
11056
 
11057
		#取得路徑
11058
		$result["path"]=$delStrAfterKeyWord["content"];
11059
 
36 liveuser 11060
		#如果有內容要寫入
11061
		if(!empty($conf["content"])){
11062
 
11063
			#函式說明:
11064
			#將多行字串寫入到檔案
11065
			#回傳結果:
11066
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
11067
			#$result["error"],錯誤訊息陣列.
11068
			#$result["function"],當前執行函數的名稱.
11069
			#必填參數:
11070
			#$conf["fileName"],字串,爲要編輯的檔案名稱
11071
			$conf["fileAccess::writeMultiLine"]["fileName"]=$result["content"];
11072
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
11073
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["content"];
11074
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11075
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=__FILE__;
11076
			#可省略參數:
11077
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
11078
			#參考資料:
11079
			#無.
11080
			#備註:
11081
			#無.
11082
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
11083
			unset($conf["fileAccess::writeMultiLine"]);
11084
 
11085
			#如果執行失敗
11086
			if($writeMultiLine["status"]==="false"){
11087
 
11088
				#設置執行失敗
11089
				$result["status"]="false";
11090
 
11091
				#設置執行錯誤訊息
11092
				$result["error"]=$writeMultiLine;
11093
 
11094
				#回傳結果
11095
				return $result;
11096
 
11097
				}#if end
11098
 
11099
			}#if end
11100
 
3 liveuser 11101
		#設置執行正常
11102
		$result["status"]="true";
11103
 
11104
		#回傳結果
11105
		return $result;
11106
 
11107
		}#function createTempFile end
11108
 
11109
	/*
11110
	#函式說明:
11111
	#分割檔案,分割出來的檔案名稱編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11112
	#回傳結果:
11113
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11114
	#$result["error"],錯誤訊息陣列.
11115
	#$result["function"],當前執行的函數名稱.
11116
	#$result["cmd"],執行的指令.
11117
	#$result["content"],執行指令回傳的結果.
11118
	#必填參數:
11119
	#$conf["file"],字串,要分割的檔案名稱.
11120
	$conf["file"]="";	
11121
	#可省略參數:
11122
	#$conf["splitNameHead"],字串,分割成檔案的名稱開頭,預設為 $conf["file"]."-" .
11123
	#$conf["splitNameHead"]="";	
11124
	#$conf["partSize"],字串,分割檔的大小為多少?可以為XMB,XGB,XKB,可參見split指令的說明,預設為50MB.
11125
	#$conf["partSize"]="";
11126
	#參考資料:
11127
	#無.
11128
	#備註:
11129
	#需要有split指令
11130
	*/
11131
	public static function split(&$conf=array()){
11132
 
11133
		#初始化要回傳的結果
11134
		$result=array();
11135
 
11136
		#取得當前執行的函數名稱
11137
		$result["function"]=__FUNCTION__;
11138
 
11139
		#如果沒有參數
11140
		if(func_num_args()==0){
11141
 
11142
			#設置執行失敗
11143
			$result["status"]="false";
11144
 
11145
			#設置執行錯誤訊息
11146
			$result["error"]="函數".$result["function"]."需要參數";
11147
 
11148
			#回傳結果
11149
			return $result;
11150
 
11151
			}#if end
11152
 
11153
		#函式說明:
11154
		#判斷當前環境為web還是cmd
11155
		#回傳結果:
11156
		#$result,"web"或"cmd"
11157
		if(csInformation::getEnv()==="web"){
11158
 
11159
			#設置執行失敗
11160
			$result["status"]="false";
11161
 
11162
			#設置執行錯誤訊息
11163
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11164
 
11165
			#回傳結果
11166
			return $result;
11167
 
11168
			}#if end
11169
 
11170
		#取得參數
11171
		$result["argu"]=$conf;
11172
 
11173
		#如果 $conf 不為陣列
11174
		if(gettype($conf)!=="array"){
11175
 
11176
			#設置執行失敗
11177
			$result["status"]="false";
11178
 
11179
			#設置執行錯誤訊息
11180
			$result["error"][]="\$conf變數須為陣列形態";
11181
 
11182
			#如果傳入的參數為 null
11183
			if($conf===null){
11184
 
11185
				#設置執行錯誤訊息
11186
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11187
 
11188
				}#if end
11189
 
11190
			#回傳結果
11191
			return $result;
11192
 
11193
			}#if end
11194
 
11195
		#檢查參數
11196
		#函式說明:
11197
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11198
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11199
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11200
		#$result["function"],當前執行的函式名稱.
11201
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11202
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11203
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11204
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11205
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11206
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11207
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11208
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11209
		#必填寫的參數:
11210
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11211
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11212
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11213
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file");
11214
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11215
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
11216
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11217
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11218
		#可以省略的參數:
11219
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11220
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11221
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11222
		#$conf["canNotBeEmpty"]=array();
11223
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11224
		#$conf["canBeEmpty"]=array();
11225
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11226
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11227
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11228
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("splitNameHead","partSize");
11229
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11230
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
11231
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]",若後面需要加上內容,則可以再補上\",後面再補上要串接的內容.
11232
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"file\"]\"-","50MB");
11233
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11234
		#$conf["arrayCountEqualCheck"][]=array();
11235
		#參考資料來源:
11236
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11237
		#建議:
11238
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11239
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11240
		unset($conf["variableCheck::checkArguments"]);
11241
 
11242
		#如果檢查參數失敗
11243
		if($checkArguments["status"]==="false"){
11244
 
11245
			#設置執行失敗
11246
			$result["status"]="false";
11247
 
11248
			#設置錯誤訊息
11249
			$result["error"]=$checkArguments;
11250
 
11251
			#回傳結果
11252
			return $result;
11253
 
11254
			}#if end
11255
 
11256
		#如果要分割的檔案存在
11257
		if(file_exists($conf["file"])){
11258
 
11259
			#取得執行的指令
11260
			$result["cmd"]="split -b ".$conf["partSize"]." '".$conf["file"]."' '".$conf["splitNameHead"]."'";
11261
 
11262
			#執行還原的指令
11263
			exec($result["cmd"],$output,$status);
11264
 
11265
			#取得執行後的輸出
11266
			$result["content"]=$output;
11267
 
11268
			}#if end
11269
 
11270
		#反之
11271
		else{
11272
 
11273
			#設置執行失敗
11274
			$result["status"]="false";
11275
 
11276
			#設置執行錯誤訊息
11277
			$result["error"][]="要分割的檔案「".$conf["file"]."」不存在";
11278
 
11279
			#回傳結果
11280
			return $result;
11281
 
11282
			}#else end
11283
 
11284
		#設置執行正常
11285
		$result["status"]="true";
11286
 
11287
		#回傳結果
11288
		return $result;
11289
 
11290
		}#function split end
11291
 
11292
	/*
11293
	#函式說明:
11294
	#合併檔案,檔案編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11295
	#回傳結果:
11296
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11297
	#$result["error"],錯誤訊息陣列.
11298
	#$result["function"],當前執行的函數名稱.
11299
	#$result["cmd"],執行的指令.
11300
	#$result["content"],執行指令回傳的結果.
11301
	#必填參數:
11302
	#$conf["filePartHead"],字串,分割檔案的名稱開頭.
11303
	$conf["filePartHead"]="";
11304
	#$conf["oriFileName"],字串,合併後的檔案名稱.
11305
	$conf["oriFileName"]="";
11306
	#可省略參數:
11307
	#無
11308
	#參考資料:
11309
	#無.
11310
	#備註:
11311
	#需要有cat指令.
11312
	#僅能在命令列執行.
11313
	*/
11314
	public static function merge(&$conf=array()){
11315
 
11316
		#初始化要回傳的結果
11317
		$result=array();
11318
 
11319
		#取得當前執行的函數名稱
11320
		$result["function"]=__FUNCTION__;
11321
 
11322
		#如果沒有參數
11323
		if(func_num_args()==0){
11324
 
11325
			#設置執行失敗
11326
			$result["status"]="false";
11327
 
11328
			#設置執行錯誤訊息
11329
			$result["error"]="函數".$result["function"]."需要參數";
11330
 
11331
			#回傳結果
11332
			return $result;
11333
 
11334
			}#if end
11335
 
11336
		#函式說明:
11337
		#判斷當前環境為web還是cmd
11338
		#回傳結果:
11339
		#$result,"web"或"cmd"
11340
		if(csInformation::getEnv()==="web"){
11341
 
11342
			#設置執行失敗
11343
			$result["status"]="false";
11344
 
11345
			#設置執行錯誤訊息
11346
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11347
 
11348
			#回傳結果
11349
			return $result;
11350
 
11351
			}#if end
11352
 
11353
		#取得參數
11354
		$result["argu"]=$conf;
11355
 
11356
		#如果 $conf 不為陣列
11357
		if(gettype($conf)!=="array"){
11358
 
11359
			#設置執行失敗
11360
			$result["status"]="false";
11361
 
11362
			#設置執行錯誤訊息
11363
			$result["error"][]="\$conf變數須為陣列形態";
11364
 
11365
			#如果傳入的參數為 null
11366
			if($conf===null){
11367
 
11368
				#設置執行錯誤訊息
11369
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11370
 
11371
				}#if end
11372
 
11373
			#回傳結果
11374
			return $result;
11375
 
11376
			}#if end
11377
 
11378
		#檢查參數
11379
		#函式說明:
11380
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11381
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11382
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11383
		#$result["function"],當前執行的函式名稱.
11384
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11385
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11386
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11387
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11388
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11389
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11390
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11391
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11392
		#必填寫的參數:
11393
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11394
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11395
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11396
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePartHead","oriFileName");
11397
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11398
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11399
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11400
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11401
		#可以省略的參數:
11402
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11403
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11404
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11405
		#$conf["canNotBeEmpty"]=array();
11406
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11407
		#$conf["canBeEmpty"]=array();
11408
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11409
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11410
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11411
		#$conf["skipableVariableName"]=array();
11412
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11413
		#$conf["skipableVariableType"]=array();
11414
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11415
		#$conf["skipableVarDefaultValue"]=array("");
11416
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11417
		#$conf["arrayCountEqualCheck"][]=array();
11418
		#參考資料來源:
11419
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11420
		#建議:
11421
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11422
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11423
		unset($conf["variableCheck::checkArguments"]);
11424
 
11425
		#如果檢查參數失敗
11426
		if($checkArguments["status"]==="false"){
11427
 
11428
			#設置執行失敗
11429
			$result["status"]="false";
11430
 
11431
			#設置錯誤訊息
11432
			$result["error"]=$checkArguments;
11433
 
11434
			#回傳結果
11435
			return $result;
11436
 
11437
			}#if end
11438
 
11439
		#定義編號
11440
		$charArray=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","v","u","w","x","y","z");
11441
 
11442
		#定義分割檔案的前置字串
11443
		$filePartHead=$conf["filePartHead"];
11444
 
11445
		#要合併成的檔案名稱
11446
		$oriFileName=$conf["oriFileName"];
11447
 
11448
		#初始化要執行合併的語法
11449
		$restoreCmd="cat ";
11450
 
11451
		#有幾個編號就執行幾次
11452
		for($i=0;$i<count($charArray);$i++){
11453
 
11454
			#有幾個編號就執行幾次
11455
			for($j=0;$j<count($charArray);$j++){
11456
 
11457
				#如果該分割檔存在
11458
				if(file_exists($filePartHead.$charArray[$i].$charArray[$j])){
11459
 
11460
					#串接要還原的分割檔
11461
					$restoreCmd=$restoreCmd." '".$filePartHead.$charArray[$i].$charArray[$j]."'";
11462
 
11463
					}#if end
11464
 
11465
				#反之
11466
				else{
11467
 
11468
					#如果是第一個分割檔就找不到
11469
					if($i===0 && $j===0){
11470
 
11471
						#設置執行失敗
11472
						$result["status"]="false";
11473
 
11474
						#設置錯誤訊息
11475
						$result["error"][]="找不到第一個分割檔「".$filePartHead.$charArray[$i].$charArray[$j]."」";
11476
 
11477
						#回傳結果
11478
						return $result;
11479
 
11480
						}#if end
11481
 
11482
					#串接要還原成的檔案名稱
11483
					$restoreCmd=$restoreCmd." > '".$oriFileName."'";
11484
 
11485
					#取得執行的指令
11486
					$result["cmd"]=$restoreCmd;
11487
 
11488
					#執行還原的指令
11489
					exec($restoreCmd,$output,$status);
11490
 
11491
					#取得執行後的輸出
11492
					$result["content"]=$output;
11493
 
11494
					#結束回圈
11495
					break 2;
11496
 
11497
					}#else end
11498
 
11499
				}#for end
11500
 
11501
			}#for end
11502
 
11503
		#設置執行正常
11504
		$result["status"]="true";
11505
 
11506
		#回傳結果
11507
		return $result;
11508
 
11509
		}#function merge end
11510
 
11511
	/*
11512
	#函式說明:
11513
	#取得檔案的部分內容
11514
	#回傳結果:
11515
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11516
	#$result["error"],錯誤訊息陣列.
11517
	#$result["function"],當前執行的函數名稱.
11518
	#$result["cmd"],執行的指令.
11519
	#$result["content"],取得的檔案內容.
11520
	#$result["length"],取得的內容長度.
11521
	#$result["EOF"],識別是否已經到檔案結尾,"true"代表是,"false"代表不是.
11522
	#$result["mimeType"],檔案的 mime type.
11523
	#必填參數:
11524
	#$conf["file"],字串,檔案的路徑與名稱.
11525
	$conf["file"]="";
11526
	#$conf["fileArgu"],字串,__FILE__的內容.
11527
	$conf["fileArgu"]=__FILE__;
11528
	#$conf["bytes"],整數字串,要讀取多少bytes.
11529
	$conf["bytes"]="";
11530
	#$conf["startIndex"],要從哪個bytes位置開始,起始點為0.
11531
	$conf["startIndex"]="";
11532
	#可省略參數:
11533
	#無
11534
	#參考資料:
11535
	#無.
11536
	#備註:
11537
	#無
11538
	*/
11539
	public static function getFilePart(&$conf){
11540
 
11541
		#初始化要回傳的結果
11542
		$result=array();
11543
 
11544
		#取得當前執行的函數名稱
11545
		$result["function"]=__FUNCTION__;
11546
 
11547
		#如果沒有參數
11548
		if(func_num_args()==0){
11549
 
11550
			#設置執行失敗
11551
			$result["status"]="false";
11552
 
11553
			#設置執行錯誤訊息
11554
			$result["error"]="函數".$result["function"]."需要參數";
11555
 
11556
			#回傳結果
11557
			return $result;
11558
 
11559
			}#if end
11560
 
11561
		#取得參數
11562
		$result["argu"]=$conf;
11563
 
11564
		#如果 $conf 不為陣列
11565
		if(gettype($conf)!=="array"){
11566
 
11567
			#設置執行失敗
11568
			$result["status"]="false";
11569
 
11570
			#設置執行錯誤訊息
11571
			$result["error"][]="\$conf變數須為陣列形態";
11572
 
11573
			#如果傳入的參數為 null
11574
			if(is_null($conf)){
11575
 
11576
				#設置執行錯誤訊息
11577
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11578
 
11579
				}#if end
11580
 
11581
			#回傳結果
11582
			return $result;
11583
 
11584
			}#if end
11585
 
11586
		#函式說明:
11587
		#檢查多個檔案與資料夾是否存在.
11588
		#回傳的結果:
11589
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11590
		#$result["error"],錯誤訊息陣列.
11591
		#$resutl["function"],當前執行的涵式名稱.
11592
		#$result["argu"],使用的參數.
11593
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11594
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11595
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
11596
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
11597
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11598
		#必填參數:
11599
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11600
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
11601
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11602
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=__FILE__;
11603
		#可省略參數:
11604
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11605
		#$conf["disableWebSearch"]="false";
11606
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11607
		#$conf["userDir"]="true";
11608
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
11609
		#$conf["web"]="true";
11610
		#參考資料:
11611
		#http://php.net/manual/en/function.file-exists.php
11612
		#http://php.net/manual/en/control-structures.foreach.php
11613
		#備註:
11614
		#函數file_exists檢查的路徑為檔案系統的路徑
11615
		#$result["varName"][$i]結果未實作
11616
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11617
		unset($conf["fileAccess::checkMultiFileExist"]);
11618
 
11619
		#如果執行失敗
11620
		if($checkMultiFileExist["status"]==="false"){
11621
 
11622
			#設置執行失敗
11623
			$result["status"]="false";
11624
 
11625
			#設置執行錯誤訊息
11626
			$result["error"]=$checkMultiFileExist;
11627
 
11628
			#回傳結果
11629
			return $result;
11630
 
11631
			}#if end
11632
 
11633
		#如果檔案不存在
11634
		if($checkMultiFileExist["allExist"]==="false"){
11635
 
11636
			#設置執行失敗
11637
			$result["status"]="false";
11638
 
11639
			#設置執行錯誤訊息
11640
			$result["error"]=$checkMultiFileExist;
11641
 
11642
			#回傳結果
11643
			return $result;
11644
 
11645
			}#if end
11646
 
11647
		#取得mimetype
11648
		$mimetype=mime_content_type($conf["file"]);
11649
 
11650
		#取得檔案的 mime type
11651
		$result["mimeType"]=$mimetype;
11652
 
11653
		#透過 dd 指令,取得部分內容.
11654
		#函式說明:
11655
		#呼叫shell執行系統命令,並取得回傳的內容.
11656
		#回傳結果:
11657
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11658
		#$result["error"],錯誤訊息陣列.
11659
		#$result["function"],當前執行的函數名稱.
11660
		#$result["argu"],使用的參數.
11661
		#$result["cmd"],執行的指令內容.
11662
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
11663
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
11664
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
11665
		#$result["running"],是否還在執行.
11666
		#$result["pid"],pid.
11667
		#$result["statusCode"],執行結束後的代碼.
11668
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
11669
		#必填參數:
11670
		#$conf["command"],字串,要執行的指令.
11671
		$conf["external::callShell"]["command"]="dd";
11672
		#$conf["fileArgu"],字串,變數__FILE__的內容.
11673
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
11674
		#可省略參數:
11675
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
11676
		$conf["external::callShell"]["argu"]=array("if=".$conf["file"],"bs=".$conf["bytes"],"count=1","status=none");
11677
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
11678
		#$conf["arguIsAddr"]=array();
11679
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
11680
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
11681
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
11682
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
11683
		#$conf["enablePrintDescription"]="true";
11684
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
11685
		#$conf["printDescription"]="";
11686
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
11687
		#$conf["escapeshellarg"]="false";
11688
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
11689
		#$conf["thereIsShellVar"]=array();
11690
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
11691
		#$conf["username"]="";
11692
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
11693
		#$conf["password"]="";
11694
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
11695
		#$conf["useScript"]="";
11696
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
11697
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
11698
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
11699
		#$conf["inBackGround"]="";
11700
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
11701
		#$conf["getErr"]="false";
11702
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
11703
		#$conf["doNotRun"]="false";
11704
		#參考資料:
11705
		#exec=>http://php.net/manual/en/function.exec.php
11706
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
11707
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
11708
		#備註:
11709
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
11710
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
11711
		$callShell=external::callShell($conf["external::callShell"]);
11712
		unset($conf["external::callShell"]);
11713
 
11714
		#如果執行失敗
11715
		if($callShell["status"]==="false"){
11716
 
11717
			#設置執行失敗
11718
			$result["status"]="false";
11719
 
11720
			#設置執行錯誤訊息
11721
			$result["error"]=$callShell;
11722
 
11723
			#回傳結果
11724
			return $result;
11725
 
11726
			}#if end
11727
 
11728
		#取得結果
11729
		$result["content"]=$callShell["output"][0];
11730
 
11731
		#取得內容長度
11732
		$result["length"]=strlen($result["content"]);
11733
 
11734
		#預設尚未到檔案結尾 
11735
		$result["EOF"]="false";
11736
 
11737
		#如果取得的內容長度小於預期
11738
		if($result["length"]<$conf["bytes"]){
11739
 
11740
			#設置已經到檔案結尾了
11741
			$result["EOF"]="true";
11742
 
11743
			}#if end
11744
 
11745
		#設置執行正常
11746
		$result["status"]="true";
11747
 
11748
		#回傳結果
11749
		return $result;
11750
 
11751
		}#function getFilePart end
11752
 
11753
	/*
11754
	#函式說明:
11755
	#取得節點的資訊.
11756
	#回傳結果:
11757
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11758
	#$result["error"],錯誤訊息陣列.
11759
	#$result["function"],函數名稱. 
11760
	#$result["content"],檔案資訊陣列.
11761
	#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
11762
	#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
11763
	#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
11764
	#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
11765
	#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
11766
	#$result["content"]["ownerName"],檔案擁有着資訊.
11767
	#$result["content"]["groupName"],檔案所屬擁有着資訊.
11768
	#$result["content"]["size"],檔案大小.
11769
	#$result["content"]["modifyDate"],檔案變更年月日.
11770
	#$result["content"]["modifyTime"],檔案變更時分秒.
11771
	#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
11772
	#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
11773
	#必填參數:
11774
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
11775
	$conf["fileArgu"]=__FILE__;
11776
	#$conf["file"],字串,要查看擁有者資訊的檔案.
11777
	$conf["file"]="";
11778
	#可省略參數:
11779
	#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11780
	#$conf["web"]="true";
11781
	#參考資料:
11782
	#fileowner=>http://php.net/manual/en/function.fileowner.php
11783
	#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
11784
	#備註:
11785
	#無.
11786
	*/
11787
	public static function fileInfo(&$conf=array()){
11788
 
11789
		#初始化要回傳的結果
11790
		$result=array();
11791
 
11792
		#取得當前執行的函數名稱
11793
		$result["function"]=__FUNCTION__;
11794
 
11795
		#如果沒有參數
11796
		if(func_num_args()==0){
11797
 
11798
			#設置執行失敗
11799
			$result["status"]="false";
11800
 
11801
			#設置執行錯誤訊息
11802
			$result["error"]="函數".$result["function"]."需要參數";
11803
 
11804
			#回傳結果
11805
			return $result;
11806
 
11807
			}#if end
11808
 
11809
		#取得參數
11810
		$result["argu"]=$conf;
11811
 
11812
		#如果 $conf 不為陣列
11813
		if(gettype($conf)!=="array"){
11814
 
11815
			#設置執行失敗
11816
			$result["status"]="false";
11817
 
11818
			#設置執行錯誤訊息
11819
			$result["error"][]="\$conf變數須為陣列形態";
11820
 
11821
			#如果傳入的參數為 null
11822
			if($conf===null){
11823
 
11824
				#設置執行錯誤訊息
11825
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11826
 
11827
				}#if end
11828
 
11829
			#回傳結果
11830
			return $result;
11831
 
11832
			}#if end
11833
 
11834
		#檢查參數
11835
		#函式說明:
11836
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11837
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11838
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11839
		#$result["function"],當前執行的函式名稱.
11840
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11841
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11842
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11843
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11844
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11845
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11846
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11847
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11848
		#必填寫的參數:
11849
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11850
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
11851
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11852
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11853
		#可以省略的參數:
11854
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11855
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
11856
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11857
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11858
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11859
		#$conf["canBeEmptyString"]="false";
11860
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11861
		#$conf["ileAccess::checkArguments"]["canNotBeEmpty"]=array();
11862
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11863
		#$conf["canBeEmpty"]=array();
11864
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11865
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11866
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11867
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
11868
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11869
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
11870
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11871
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
11872
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
11873
		#$conf["disallowAllSkipableVarIsEmpty"]="";
11874
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
11875
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
11876
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11877
		#$conf["arrayCountEqualCheck"][]=array();
11878
		#參考資料來源:
11879
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11880
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11881
		unset($conf["variableCheck::checkArguments"]);
11882
 
11883
		#如果檢查參數失敗
11884
		if($checkArguments["status"]==="false"){
11885
 
11886
			#設置執行失敗
11887
			$result["status"]="false";
11888
 
11889
			#設置執行錯誤訊息
11890
			$result["error"]=$checkArguments;
11891
 
11892
			#回傳結果
11893
			return $result;
11894
 
11895
			}#if end
11896
 
11897
		#如果檢查參數不通過
11898
		if($checkArguments["passed"]==="false"){
11899
 
11900
			#設置執行失敗
11901
			$result["status"]="false";
11902
 
11903
			#設置執行錯誤訊息
11904
			$result["error"]=$checkArguments;
11905
 
11906
			#回傳結果
11907
			return $result;
11908
 
11909
			}#if end
11910
 
11911
		#函式說明:
11912
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
11913
		#回傳結果:
11914
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11915
		#$result["error"],錯誤訊息陣列.
11916
		#$result["function"],函數名稱. 
11917
		#$result["argu"],使用的參數.
11918
		#$result["content"],網址,若是在命令列執行,則為"null".
11919
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
11920
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
11921
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
11922
		#必填參數:
11923
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
11924
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["file"];
11925
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
11926
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
11927
		#可省略參數:
11928
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
11929
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
11930
		#備註:
11931
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
11932
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
11933
		unset($conf["fileAccess::getInternetAddressV2"]);
11934
 
11935
		#如果取得位置失敗
11936
		if($getInternetAddressV2["status"]==="false"){
11937
 
11938
			#設置執行失敗
11939
			$result["status"]="false";
11940
 
11941
			#設置執行錯誤訊息
11942
			$result["error"]=$getInternetAddressV2;
11943
 
11944
			#回傳結果
11945
			return $result;
11946
 
11947
			}#if end
11948
 
11949
		#函式說明:
11950
		#檢查多個檔案與資料夾是否存在.
11951
		#回傳的結果:
11952
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11953
		#$result["error"],錯誤訊息陣列.
11954
		#$resutl["function"],當前執行的涵式名稱.
11955
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11956
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11957
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
11958
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
11959
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11960
		#必填參數:
11961
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11962
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($getInternetAddressV2["fileSystemAbsoulutePosition"]);
11963
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11964
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
11965
		#可省略參數
11966
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11967
		#$conf["disableWebSearch"]="false";
11968
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11969
		#$conf["userDir"]="true";
11970
		#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11971
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
11972
		#參考資料來源:
11973
		#http://php.net/manual/en/function.file-exists.php
11974
		#http://php.net/manual/en/control-structures.foreach.php
11975
		#備註:
11976
		#函數file_exists檢查的路徑為檔案系統的路徑
11977
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11978
		unset($conf["fileAccess::checkMultiFileExist"]);
11979
 
11980
		#如果檢查檔案存在失敗
11981
		if($checkMultiFileExist["status"]==="false"){
11982
 
11983
			#設置執行失敗
11984
			$result["status"]="false";
11985
 
11986
			#設置執行錯誤訊息
11987
			$result["error"]=$checkMultiFileExist;
11988
 
11989
			#回傳結果
11990
			return $result;
11991
 
11992
			}#if end
11993
 
11994
		#如果檔案不存在
11995
		if($checkMultiFileExist["allExist"]==="false"){
11996
 
11997
			#設置執行失敗
11998
			$result["status"]="false";
11999
 
12000
			#設置執行錯誤訊息
12001
			$result["error"]=$checkMultiFileExist;
12002
 
12003
			#回傳結果
12004
			return $result;
12005
 
12006
			}#if end
12007
 
12008
		#透過ls指令取得檔案的資訊
12009
		#函式說明:
12010
		#呼叫shell執行系統命令,並取得回傳的內容.
12011
		#回傳的結果:
12012
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12013
		#$result["error"],錯誤訊息陣列.
12014
		#$result["function"],當前執行的函數名稱.
12015
		#$result["cmd"],執行的指令內容.
12016
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12017
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12018
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12019
		#$result["running"],是否還在執行.
12020
		#$result["pid"],pid
12021
		#必填的參數
12022
		#$conf["command"],字串,要執行的指令
12023
		$conf["external::callShell"]["command"]="ls";
12024
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12025
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
12026
		#可省略參數:
12027
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12028
		$conf["external::callShell"]["argu"]=array("-l","--full-time","-d",$conf["file"]);
12029
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12030
		$conf["external::callShell"]["arguIsAddr"]=array("false","false","false","false");
12031
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12032
		#$conf["enablePrintDescription"]="true";
12033
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12034
		#$conf["printDescription"]="";
12035
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12036
		$conf["external::callShell"]["escapeshellarg"]="true";
12037
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12038
		#$conf["username"]="";
12039
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12040
		#$conf["password"]="";
12041
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12042
		#$conf["useScript"]="";
12043
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12044
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12045
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12046
		#$conf["inBackGround"]="";
12047
		#備註:
12048
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12049
		#參考資料:
12050
		#exec=>http://php.net/manual/en/function.exec.php
12051
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12052
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12053
		$callShell=external::callShell($conf["external::callShell"]);
12054
		unset($conf["external::callShell"]);
12055
 
12056
		#如果執行失敗
12057
		if($callShell["status"]==="false"){
12058
 
12059
			#設置執行失敗
12060
			$result["status"]="false";
12061
 
12062
			#設置執行錯誤訊息
12063
			$result["error"]=$callShell;
12064
 
12065
			#回傳結果
12066
			return $result;
12067
 
12068
			}#if end	
12069
 
12070
		#解析檔案資訊
12071
		#-rwxrwx--x. 1 apache apache 65K 2017-04-16 22:53:19.044545806 +0800 fileAccessT.php
12072
 
12073
		#取得權限資訊 -rwxrwx--x
12074
		$perm=substr($callShell["output"][0],0,strpos($callShell["output"][0],'.'));
12075
 
12076
		#如果是目錄
12077
		if(substr($perm,0,1)==="d"){
12078
 
12079
			#設定為目錄
12080
			$result["content"]["is_folder"]="true";
12081
 
12082
			}#if end
12083
 
12084
		#反之
12085
		else{
12086
 
12087
			#設定不為目錄
12088
			$result["content"]["is_folder"]="false";
12089
 
12090
			}#else end
12091
 
12092
		#解析檔案擁有者權限資訊
12093
		$result["content"]["ownerPerm"]=substr($perm,1,3);
12094
 
12095
		#如果檔案擁有者名稱為空
12096
		if(empty($result["content"]["ownerPerm"])){
12097
 
12098
			#設置執行失敗
12099
			$result["status"]="false";
12100
 
12101
			#設置執行錯誤訊息
12102
			$result["error"]=$callShell;
12103
 
12104
			#回傳結果
12105
			return $result;
12106
 
12107
			}#if end
12108
 
12109
		#解析檔案歸屬群組權限資訊
12110
		$result["content"]["groupPerm"]=substr($perm,4,3);
12111
 
12112
		#解析檔案對於其他身份使用者的權限資訊
12113
		$result["content"]["otherPerm"]=substr($perm,7,3);
12114
 
12115
		#取得目錄底下的檔案目錄數量起始點
12116
		$subElementStartPos=strpos($callShell["output"][0],' ');
12117
 
12118
		#取得目錄底下的檔案目錄數量結束點
12119
		$subElementEndPos=strpos($callShell["output"][0],' ',$subElementStartPos+1);
12120
 
12121
		#取得目錄底下的檔案目錄數量
12122
		$result["content"]["subElementCount"]=substr($callShell["output"][0],$subElementStartPos,$subElementEndPos-$subElementStartPos);
12123
 
12124
		#取得檔案擁有着資訊的起點
12125
		$ownerNameStrPos=strpos($callShell["output"][0],' ',$subElementEndPos)+1;
12126
 
12127
		#取得檔案擁有着資訊的結束點
12128
		$ownerNameEndPos=strpos($callShell["output"][0],' ',$ownerNameStrPos+1);
12129
 
12130
		#取得檔案擁有着資訊
12131
		$result["content"]["ownerName"]=substr($callShell["output"][0],$ownerNameStrPos,$ownerNameEndPos-$ownerNameStrPos);
12132
 
12133
		#取取得檔案群組擁有者資訊的起點
12134
		$groupNameStrPos=strpos($callShell["output"][0],' ',$ownerNameEndPos)+1;
12135
 
12136
		#取得檔案群組擁有者資訊的結束點
12137
		$groupNameEndPos=strpos($callShell["output"][0],' ',$groupNameStrPos);
12138
 
12139
		#取得檔案群組擁有者資訊
12140
		$result["content"]["groupName"]=substr($callShell["output"][0],$groupNameStrPos,$groupNameEndPos-$groupNameStrPos);
12141
 
12142
		#取得檔案大小的起點
12143
		$sizeStrPos=strpos($callShell["output"][0],' ',$groupNameEndPos)+1;
12144
 
12145
		#取得檔案大小的結束點
12146
		$sizeEndPos=strpos($callShell["output"][0],' ',$sizeStrPos);
12147
 
12148
		#取得檔案大小
12149
		$result["content"]["size"]=substr($callShell["output"][0],$sizeStrPos,$sizeEndPos-$sizeStrPos);
12150
 
12151
		#取得檔案變更年月日的起點
12152
		$modifyDateStrPos=strpos($callShell["output"][0],' ',$sizeEndPos)+1;
12153
 
12154
		#取得檔案變更年月日的結束點
12155
		$modifyDateEndPos=strpos($callShell["output"][0],' ',$modifyDateStrPos);
12156
 
12157
		#取得檔案變更年月日		
12158
		$result["content"]["modifyDate"]=substr($callShell["output"][0],$modifyDateStrPos,$modifyDateEndPos-$modifyDateStrPos);
12159
 
12160
		#取得檔案變更時分秒的起點
12161
		$modifyTimeStrPos=strpos($callShell["output"][0],' ',$modifyDateEndPos)+1;
12162
 
12163
		#取得檔案變更時分秒的結束點
12164
		$modifyTimeEndPos=strpos($callShell["output"][0],'.',$modifyTimeStrPos);
12165
 
12166
		#取得檔案變更時分秒
12167
		$result["content"]["modifyTime"]=substr($callShell["output"][0],$modifyTimeStrPos,$modifyTimeEndPos-$modifyTimeStrPos);
12168
 
12169
		#取得檔版變更時間秒的float數值起點
12170
		$modifyTimeFloatStrPos=strpos($callShell["output"][0],'.',$modifyTimeEndPos)+1;
12171
 
12172
		#取得檔版變更時間秒的float數值結束點
12173
		$modifyTimeFloatEndPos=strpos($callShell["output"][0],' ',$modifyTimeFloatStrPos);
12174
 
12175
		#取得檔版變更時間秒的float數值	
12176
		$result["content"]["modifyTimeFloat"]=substr($callShell["output"][0],$modifyTimeFloatStrPos,$modifyTimeFloatEndPos-$modifyTimeFloatStrPos);
12177
 
12178
		#取得時區起始點
12179
		$timezoneStrPos=strpos($callShell["output"][0],' ',$modifyTimeFloatEndPos)+1;
12180
 
12181
		#取得時區結束點
12182
		$timezoneEndPos=strpos($callShell["output"][0],' ',$timezoneStrPos)+1;	
12183
 
12184
		#取得檔案變更時間的時區與UTC的差距.
12185
		$result["content"]["timezone"]=substr($callShell["output"][0],$timezoneStrPos,$timezoneEndPos-$timezoneStrPos);			
12186
 
12187
		#設置執行正常
12188
		$result["status"]="true";
12189
 
12190
		#回傳結果
12191
		return $result;
12192
 
12193
		}#function fileInfo end
12194
 
12195
	/*
12196
	#函式說明:
12197
	#依據函數getListTree執行的結果,將其底下與其子目錄底下的特定檔案內容依據目錄層級輸出成html檔案 
12198
	#回傳結果:
12199
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12200
	#$result["error"],錯誤訊息陣列.
12201
	#$result["function"],函數名稱. 
12202
	#$result["content"],html檔案輸出的位置與名稱.
12203
	#必填參數:
12204
	#$conf["getListTree"],陣列變數,函數getListTree執行的結果.
12205
	$conf["getListTree"]=$getListTree;
12206
	#可省略參數:
12207
	#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".
12208
	#$conf["fileToRead"]="help";
12209
	#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".
12210
	#$conf["output"]="help.html"; 
12211
	#參考資料:
12212
	#無.
12213
	#備註:
12214
	#建構中...
12215
	*/
12216
	public static function createHelpFile($conf){
12217
 
12218
		#初始化要回傳的結果
12219
		$result=array();
12220
 
12221
		#設置當其函數名稱
12222
		$result["function"]=__FUNCTION__;
12223
 
12224
		#如果 $conf 不為陣列
12225
		if(gettype($conf)!="array"){
12226
 
12227
			#設置執行失敗
12228
			$result["status"]="false";
12229
 
12230
			#設置執行錯誤訊息
12231
			$result["error"][]="\$conf變數須為陣列形態";
12232
 
12233
			#如果傳入的參數為 null
12234
			if($conf==null){
12235
 
12236
				#設置執行錯誤訊息
12237
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12238
 
12239
				}#if end
12240
 
12241
			#回傳結果
12242
			return $result;
12243
 
12244
			}#if end
12245
 
12246
		#檢查參數
12247
		#函式說明:
12248
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12249
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12250
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12251
		#$result["function"],當前執行的函式名稱.
12252
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12253
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12254
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12255
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12256
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12257
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12258
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12259
		#必填寫的參數:
12260
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12261
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12262
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12263
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("getListTree");
12264
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12265
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
12266
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12267
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12268
		#可以省略的參數:
12269
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12270
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12271
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12272
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
12273
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12274
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
12275
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12276
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
12277
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12278
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
12279
		#參考資料來源:
12280
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12281
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12282
		unset($conf["variableCheck::checkArguments"]);
12283
 
12284
		#如果 $checkResult["status"] 等於 "fasle"
12285
		if($checkResult["status"]=="false"){
12286
 
12287
			#設置錯誤識別
12288
			$result["status"]="false";
12289
 
12290
			#設置錯誤訊息
12291
			$result["error"]=$checkResult;
12292
 
12293
			#回傳結果
12294
			return $result;
12295
 
12296
			}#if end
12297
 
12298
		#如果 $checkResult["passed"] 等於 "fasle"
12299
		if($checkResult["passed"]=="false"){
12300
 
12301
			#設置錯誤識別
12302
			$result["status"]="false";
12303
 
12304
			#設置錯誤訊息
12305
			$result["error"]=$checkResult;
12306
 
12307
			#回傳結果
12308
			return $result;
12309
 
12310
			}#if end
12311
 
12312
		#如果 $conf["getListTree"]["status"] 不存在
12313
		if(!isset($conf["getListTree"]["status"])){
12314
 
12315
			#設置錯誤識別
12316
			$result["status"]="false";
12317
 
12318
			#設置錯誤訊息
12319
			$result["error"][]="getListTree參數必須為getListTree函數執行後的結果";
12320
 
12321
			#回傳結果
12322
			return $result;
12323
 
12324
			}#if end
12325
 
12326
		#如果 $conf["getListTree"] 執行失敗
12327
		if($conf["getListTree"]["status"]=="false"){
12328
 
12329
			#設置錯誤識別
12330
			$result["status"]="false";
12331
 
12332
			#設置錯誤訊息
12333
			$result["error"]=$conf["getListTree"];
12334
 
12335
			#回傳結果
12336
			return $result;
12337
 
12338
			}#if end
12339
 
12340
		#如果有目錄檔案
12341
		if(isset($conf["getListTree"]["content"])){
12342
 
12343
 
12344
 
12345
			}#if end
12346
 
12347
		}#function createHelpFile end
12348
 
12349
	/*
12350
	#函式說明:
12351
	#嵌入pdf檔案到網頁上面
12352
	#回傳結果:
12353
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12354
	#$result["error"],錯誤訊息陣列.
12355
	#$result["function"],函數名稱. 
12356
	#$result["content"],嵌入pdf檔案的語法
12357
	#必填參數:
12358
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
12359
	$conf["fileArgu"]=__FILE__;
12360
	#$conf["file"],字串,pdf檔案位置.
12361
	$conf["file"]="";
12362
	#可省略參數:
12363
	#$conf["type"],字串,要用"iframe"還是"object"的方式嵌入pdf檔案,預設為"iframe".
12364
	#$conf["type"]="iframe";
12365
	#參考資料:
12366
	#嵌入pdf到網頁=>https://stackoverflow.com/questions/14690000/embed-a-pdf-in-html5
12367
	#備註:
12368
	#如果是網址就會出錯.
12369
	*/
12370
	public static function embedPdf(&$conf=array()){
12371
 
12372
		#初始化要回傳的結果
12373
		$result=array();
12374
 
12375
		#取得當前執行的函數名稱
12376
		$result["function"]=__FUNCTION__;
12377
 
12378
		#如果沒有參數
12379
		if(func_num_args()==0){
12380
 
12381
			#設置執行失敗
12382
			$result["status"]="false";
12383
 
12384
			#設置執行錯誤訊息
12385
			$result["error"]="函數".$result["function"]."需要參數";
12386
 
12387
			#回傳結果
12388
			return $result;
12389
 
12390
			}#if end
12391
 
12392
		#取得參數
12393
		$result["argu"]=$conf;
12394
 
12395
		#如果 $conf 不為陣列
12396
		if(gettype($conf)!=="array"){
12397
 
12398
			#設置執行失敗
12399
			$result["status"]="false";
12400
 
12401
			#設置執行錯誤訊息
12402
			$result["error"][]="\$conf變數須為陣列形態";
12403
 
12404
			#如果傳入的參數為 null
12405
			if($conf===null){
12406
 
12407
				#設置執行錯誤訊息
12408
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12409
 
12410
				}#if end
12411
 
12412
			#回傳結果
12413
			return $result;
12414
 
12415
			}#if end
12416
 
12417
		#檢查參數
12418
		#函式說明:
12419
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12420
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12421
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12422
		#$result["function"],當前執行的函式名稱.
12423
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12424
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12425
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12426
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12427
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12428
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12429
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12430
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12431
		#必填寫的參數:
12432
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12433
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12434
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12435
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
12436
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12437
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12438
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12439
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12440
		#可以省略的參數:
12441
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12442
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
12443
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12444
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("function");
12445
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12446
		#$conf["canBeEmpty"]=array();
12447
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12448
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("width","height");
12449
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12450
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("type");
12451
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12452
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12453
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12454
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("iframe");
12455
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12456
		#$conf["arrayCountEqualCheck"][]=array();
12457
		#參考資料來源:
12458
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12459
		#建議:
12460
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
12461
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12462
		unset($conf["variableCheck::checkArguments"]);		
12463
 
12464
		#如果檢查參數失敗
12465
		if($checkArguments["status"]==="false"){
12466
 
12467
			#設置執行失敗
12468
			$result["status"]="false";
12469
 
12470
			#設置執行錯誤訊息
12471
			$result["error"]=$checkArguments;
12472
 
12473
			#回傳結果
12474
			return $result;
12475
 
12476
			}#if end
12477
 
12478
		#如果參數檢查不通過
12479
		if($checkArguments["passed"]==="false"){
12480
 
12481
			#設置執行失敗
12482
			$result["status"]="false";
12483
 
12484
			#設置執行錯誤訊息
12485
			$result["error"]=$checkArguments;
12486
 
12487
			#回傳結果
12488
			return $result;
12489
 
12490
			}#if end
12491
 
12492
		#檢查檔案是否存在
12493
		#函式說明:
12494
		#檢查多個檔案與資料夾是否存在.
12495
		#回傳的結果:
12496
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12497
		#$result["error"],錯誤訊息陣列.
12498
		#$resutl["function"],當前執行的涵式名稱.
12499
		#$result["argu"],使用的參數.
12500
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12501
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12502
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
12503
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12504
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12505
		#必填參數:
12506
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12507
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
12508
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12509
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12510
		#可省略參數
12511
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12512
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="false";
12513
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12514
		#$conf["userDir"]="true";
12515
		#參考資料來源:
12516
		#http://php.net/manual/en/function.file-exists.php
12517
		#http://php.net/manual/en/control-structures.foreach.php
12518
		#備註:
12519
		#函數file_exists檢查的路徑為檔案系統的路徑
12520
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12521
		unset($conf["fileAccess::checkMultiFileExist"]);
12522
 
12523
		#如果檢查檔案是否存在失敗
12524
		if($checkMultiFileExist["status"]==="false"){
12525
 
12526
			#設置執行失敗
12527
			$result["status"]="false";
12528
 
12529
			#設置執行錯誤訊息
12530
			$result["error"]=$checkMultiFileExist;
12531
 
12532
			#回傳結果
12533
			return $result;
12534
 
12535
			}#if end
12536
 
12537
		#如果檔案不存在
12538
		if($checkMultiFileExist["allExist"]==="false"){
12539
 
12540
			#設置執行失敗
12541
			$result["status"]="false";
12542
 
12543
			#設置執行錯誤訊息
12544
			$result["error"]=$checkMultiFileExist;
12545
 
12546
			#回傳結果
12547
			return $result;
12548
 
12549
			}#if end
12550
 
12551
		#產生 base64 的 pdf 編碼字串
12552
		$base64pdf=base64_encode(file_get_contents($conf["file"]));
12553
 
12554
		#產生 base64 的 pdf 編碼字串 data
12555
		$base64pdfData="data:application/pdf;base64,".$base64pdf;
12556
 
12557
		#判斷要用哪種方式嵌入pdf
12558
		switch($conf["type"]){
12559
 
12560
			#如果是用 object 方式
12561
			case "object":
12562
 
12563
				#產生嵌入的語法
12564
				$embedSyntax="<object style=\"width:100%;height:100%;\" data=\"".$base64pdfData."\"></object>";
12565
 
12566
				#取得語法
12567
				$result["content"]=&$embedSyntax;
12568
 
12569
				#跳出 switch
12570
				break;
12571
 
12572
			#預設
12573
			default:
12574
 
12575
				#產生嵌入的語法
12576
				$embedSyntax="<iframe style=\"width:100%;height:100%;\" src=\"".$base64pdfData."\"></iframe>";
12577
 
12578
				#取得語法
12579
				$result["content"]=&$embedSyntax;
12580
 
12581
			}#switch end
12582
 
12583
		#設置執行正常
12584
		$result["status"]="true";
12585
 
12586
		#回傳結果
12587
		return $result;
12588
 
12589
		}#function embedPdf end
12590
 
12591
	/*
12592
	#函式說明:
12593
	#用linux unzip去解壓縮zip檔案 
12594
	#回傳結果:
12595
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12596
	#$result["error"],錯誤訊息.
12597
	#$result["function"],當前執行的函數名稱.
12598
	#$result["content"]["each"],每個檔案的資訊.
12599
	#$result["content"]["each"]["Length"][$i],各別檔案目錄的原始長度.
12600
	#$result["content"]["each"]["Method"][$i],各別檔案目錄的壓縮方法.
12601
	#$result["content"]["each"]["Size"][$i],各別檔案目錄的壓縮後長度.
12602
	#$result["content"]["each"]["Cmpr"][$i],各別檔案目錄的壓縮率.
12603
	#$result["content"]["each"]["Date"][$i],各別檔案目錄的最後修改日期.
12604
	#$result["content"]["each"]["Time"][$i],各別檔案目錄的最後修改時間.
12605
	#$result["content"]["each"]["CRC-32"][$i],各別檔案目錄的CRC-32檢查碼.
12606
	#$result["content"]["each"]["Name"][$i],各別檔案目錄的路徑與名稱.
12607
	#$result["content"]["total"],統整的資訊.
12608
	#$result["content"]["Length"],總共的檔案長度.
12609
	#$result["content"]["Size"],壓縮後的檔案長度.
12610
	#$result["content"]["Cmpr"],平均壓縮率.
12611
	#$result["content"]["count"],壓縮檔裡面總共的檔案跟目錄數目.
12612
	#必填參數;
12613
	#$conf["zip"],字串,要解壓縮的zip檔案.
12614
	$conf["zip"]="";
12615
	#$conf["fileArgu"],字串,__FILE__的內容.
12616
	$conf["fileArgu"]=__FILE__;
12617
	#可省略參數:
12618
	#$conf["extract"],字串,要解壓縮到那個路徑,預設為當前位置"./".
12619
	#$conf["extract"]="";
12620
	#備註:
12621
	#建議加上特定邊碼的支援例如、單
12622
	*/
12623
	public static function unzip(&$conf=array()){
12624
 
12625
		#初始化要回傳的結果
12626
		$result=array();
12627
 
12628
		#取得當前執行的函數名稱
12629
		$result["function"]=__FUNCTION__;
12630
 
12631
		#如果沒有參數
12632
		if(func_num_args()==0){
12633
 
12634
			#設置執行失敗
12635
			$result["status"]="false";
12636
 
12637
			#設置執行錯誤訊息
12638
			$result["error"]="函數".$result["function"]."需要參數";
12639
 
12640
			#回傳結果
12641
			return $result;
12642
 
12643
			}#if end
12644
 
12645
		#取得參數
12646
		$result["argu"]=$conf;
12647
 
12648
		#如果 $conf 不為陣列
12649
		if(gettype($conf)!=="array"){
12650
 
12651
			#設置執行失敗
12652
			$result["status"]="false";
12653
 
12654
			#設置執行錯誤訊息
12655
			$result["error"][]="\$conf變數須為陣列形態";
12656
 
12657
			#如果傳入的參數為 null
12658
			if($conf===null){
12659
 
12660
				#設置執行錯誤訊息
12661
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12662
 
12663
				}#if end
12664
 
12665
			#回傳結果
12666
			return $result;
12667
 
12668
			}#if end
12669
 
12670
		#檢查參數
12671
		#函式說明:
12672
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12673
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12674
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12675
		#$result["function"],當前執行的函式名稱.
12676
		#$result["argu"],設置給予的參數.
12677
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12678
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12679
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12680
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12681
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12682
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12683
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12684
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12685
		#必填寫的參數:
12686
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12687
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
12688
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12689
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12690
		#可以省略的參數:
12691
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12692
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("zip","fileArgu");
12693
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12694
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12695
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12696
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12697
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12698
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("zip","fileArgu");
12699
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12700
		#$conf["canBeEmpty"]=array();
12701
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12702
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("extract");
12703
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12704
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("extract");
12705
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12706
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12707
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12708
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("./");
12709
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
12710
		#$conf["disallowAllSkipableVarIsEmpty"]="";
12711
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
12712
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
12713
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12714
		#$conf["arrayCountEqualCheck"][]=array();
12715
		#參考資料來源:
12716
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12717
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12718
		unset($conf["variableCheck::checkArguments"]);
12719
 
12720
		#如果檢查參數失敗
12721
		if($checkArguments["status"]==="false"){
12722
 
12723
			#設置執行不正常
12724
			$result["status"]="false";
12725
 
12726
			#設置錯誤訊息
12727
			$result["error"]=$checkArguments;
12728
 
12729
			#回傳結果
12730
			return $result;
12731
 
12732
			}#if end
12733
 
12734
		#如果檢查參數不通過
12735
		if($checkArguments["passed"]==="false"){
12736
 
12737
			#設置執行不正常
12738
			$result["status"]="false";
12739
 
12740
			#設置錯誤訊息
12741
			$result["error"]=$checkArguments;
12742
 
12743
			#回傳結果
12744
			return $result;
12745
 
12746
			}#if end
12747
 
12748
		#檢查要解壓縮的檔案是否存在
12749
		#函式說明:
12750
		#檢查多個檔案與資料夾是否存在.
12751
		#回傳的結果:
12752
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12753
		#$result["error"],錯誤訊息陣列.
12754
		#$resutl["function"],當前執行的涵式名稱.
12755
		#$result["argu"],使用的參數.
12756
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12757
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12758
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
12759
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12760
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12761
		#必填參數:
12762
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12763
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["zip"]);
12764
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12765
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12766
		#可省略參數
12767
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12768
		#$conf["disableWebSearch"]="false";
12769
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12770
		#$conf["userDir"]="true";
12771
		#參考資料來源:
12772
		#http://php.net/manual/en/function.file-exists.php
12773
		#http://php.net/manual/en/control-structures.foreach.php
12774
		#備註:
12775
		#函數file_exists檢查的路徑為檔案系統的路徑
12776
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12777
		unset($conf["fileAccess::checkMultiFileExist"]);
12778
 
12779
		#如果檢查檔案是否存在失敗
12780
		if($checkMultiFileExist["status"]==="false"){
12781
 
12782
			#設置執行不正常
12783
			$result["status"]="false";
12784
 
12785
			#設置錯誤訊息
12786
			$result["error"]=$checkMultiFileExist;
12787
 
12788
			#回傳結果
12789
			return $result;
12790
 
12791
			}#if end
12792
 
12793
		#如果要解壓縮的檔案不存在
12794
		if($checkMultiFileExist["allExist"]==="false"){
12795
 
12796
			#設置執行不正常
12797
			$result["status"]="false";
12798
 
12799
			#設置錯誤訊息
12800
			$result["error"]=$checkMultiFileExist;
12801
 
12802
			#回傳結果
12803
			return $result;
12804
 
12805
			}#if end
12806
 
12807
		#函式說明:
12808
		#呼叫shell執行系統命令,並取得回傳的內容.
12809
		#回傳結果:
12810
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12811
		#$result["error"],錯誤訊息陣列.
12812
		#$result["function"],當前執行的函數名稱.
12813
		#$result["argu"],使用的參數.
12814
		#$result["cmd"],執行的指令內容.
12815
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12816
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12817
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12818
		#$result["running"],是否還在執行.
12819
		#$result["pid"],pid
12820
		#必填參數:
12821
		#$conf["command"],字串,要執行的指令與.
12822
		$conf["external::callShell"]["command"]="unzip";
12823
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12824
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12825
		#可省略參數:
12826
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12827
		$conf["external::callShell"]["argu"]=array("-d",$conf["extract"],"-o","-q",$conf["zip"]);
12828
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12829
		#$conf["arguIsAddr"]=array();
12830
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12831
		#$conf["enablePrintDescription"]="true";
12832
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12833
		#$conf["printDescription"]="";
12834
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12835
		$conf["external::callShell"]["escapeshellarg"]="true";
12836
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12837
		#$conf["username"]="";
12838
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12839
		#$conf["password"]="";
12840
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12841
		#$conf["useScript"]="";
12842
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12843
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12844
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12845
		#$conf["inBackGround"]="";
12846
		#備註:
12847
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12848
		#參考資料:
12849
		#exec=>http://php.net/manual/en/function.exec.php
12850
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12851
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12852
		$callShell=external::callShell($conf["external::callShell"]);
12853
		unset($conf["external::callShell"]);
12854
 
12855
		#如果執行cmd失敗
12856
		if($callShell["status"]==="false"){
12857
 
12858
			#設置執行不正常
12859
			$result["status"]="false";
12860
 
12861
			#設置錯誤訊息
12862
			$result["error"]=$callShell;
12863
 
12864
			#回傳結果
12865
			return $result;
12866
 
12867
			}#if end
12868
 
12869
		#函式說明:
12870
		#呼叫shell執行系統命令,並取得回傳的內容.
12871
		#回傳的結果:
12872
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12873
		#$result["error"],錯誤訊息陣列.
12874
		#$result["function"],當前執行的函數名稱.
12875
		#$result["argu"],使用的參數.
12876
		#$result["cmd"],執行的指令內容.
12877
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12878
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12879
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12880
		#$result["running"],是否還在執行.
12881
		#$result["pid"],pid
12882
		#必填的參數
12883
		#$conf["command"],字串,要執行的指令與.
12884
		$conf["external::callShell"]["command"]="unzip";
12885
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12886
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12887
		#可省略參數:
12888
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12889
		$conf["external::callShell"]["argu"]=array("-v",$conf["zip"]);
12890
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12891
		#$conf["arguIsAddr"]=array();
12892
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12893
		#$conf["enablePrintDescription"]="true";
12894
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12895
		#$conf["printDescription"]="";
12896
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12897
		$conf["external::callShell"]["escapeshellarg"]="true";
12898
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12899
		#$conf["username"]="";
12900
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12901
		#$conf["password"]="";
12902
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12903
		#$conf["useScript"]="";
12904
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12905
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12906
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12907
		#$conf["inBackGround"]="";
12908
		#備註:
12909
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12910
		#參考資料:
12911
		#exec=>http://php.net/manual/en/function.exec.php
12912
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12913
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12914
		$callShell=external::callShell($conf["external::callShell"]);
12915
		unset($conf["external::callShell"]);
12916
 
12917
		#如果執行cmd失敗
12918
		if($callShell["status"]==="false"){
12919
 
12920
			#設置執行不正常
12921
			$result["status"]="false";
12922
 
12923
			#設置錯誤訊息
12924
			$result["error"]=$callShell;
12925
 
12926
			#回傳結果
12927
			return $result;
12928
 
12929
			}#if end	
12930
 
12931
		#取得輸出的內容陣列
12932
		$unzipInfo=$callShell["output"];
12933
 
12934
		/*
12935
 
12936
		 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
12937
		--------  ------  ------- ---- ---------- ----- --------  ----
12938
		 4194304  Defl:X  2507269  40% 05-04-2002 17:30 9386a740  PS2 Bios 30004R V6 Pal.bin
12939
			   4  Defl:X        6 -50% 05-15-2005 06:45 054a6ec2  PS2 Bios 30004R V6 Pal.MEC
12940
			1024  Defl:X       22  98% 06-25-2005 14:55 3493bb06  PS2 Bios 30004R V6 Pal.NVM
12941
		  199680  Defl:X    70524  65% 06-02-2004 16:50 2c3bcd32  rom1.bin
12942
		 4194304  Defl:X  2637496  37% 02-20-2005 21:12 6f8e3c29  SCPH-70004_BIOS_V12_PAL_200.BIN
12943
		 3145728  Defl:X  3138427   0% 02-20-2005 21:12 bf3cbc65  SCPH-70004_BIOS_V12_PAL_200.EROM
12944
			1024  Defl:X      706  31% 02-20-2005 21:12 a8d51ead  SCPH-70004_BIOS_V12_PAL_200.NVM
12945
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM1
12946
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM2
12947
		 4194304  Defl:X  2213105  47% 10-18-2000 06:06 b7ef81a9  scph10000.bin
12948
			1024  Defl:X       11  99% 01-01-2005 00:42 efb5af2e  scph10000.NVM
12949
		 4194304  Defl:X  2511182  40% 06-27-2003 10:51 a19e0bf5  scph39001.bin
12950
			   4  Defl:X        6 -50% 05-14-2005 16:00 054a6ec2  scph39001.MEC
12951
			1024  Defl:X       20  98% 05-31-2005 16:09 e14a6cd6  scph39001.NVM
12952
		--------          -------  ---                            -------
12953
		21175304         13378622  37%                            14 files
12954
 
12955
		*/
12956
 
12957
		#取得行數
12958
		$lineCount=count($unzipInfo);
12959
 
12960
		#取得標題
12961
		#函式說明:
12962
		#將固定格式的字串分開,並回傳分開的結果。
12963
		#回傳結果:
12964
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12965
		#$result["error"],錯誤訊息陣列
12966
		#$result["function"],當前執行的函數名稱.
12967
		#$result["oriStr"],要分割的原始字串內容
12968
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12969
		#$result["dataCounts"],爲總共分成幾段
12970
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
12971
		#必填參數:
12972
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[1];#要處理的字串。
12973
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12974
		#可省略參數:
12975
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12976
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12977
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12978
		unset($conf["stringProcess::spiltString"]);
12979
 
12980
		#如果分割字串失敗
12981
		if($spiltString["status"]==="false"){
12982
 
12983
			#設置執行不正常
12984
			$result["status"]="false";
12985
 
12986
			#設置錯誤訊息
12987
			$result["error"]=$spiltString;
12988
 
12989
			#回傳結果
12990
			return $result;
12991
 
12992
			}#if end
12993
 
12994
		#如果沒有分割用的關鍵字
12995
		if($spiltString["found"]==="false"){
12996
 
12997
			#設置執行不正常
12998
			$result["status"]="false";
12999
 
13000
			#設置錯誤訊息
13001
			$result["error"]=$spiltString;
13002
 
13003
			#回傳結果
13004
			return $result;
13005
 
13006
			}#if end
13007
 
13008
		#取得標題欄位
13009
		$titles=$spiltString["dataArray"];	
13010
 
13011
		#取得標題欄位數目
13012
		$titleCount=$spiltString["dataCounts"];
13013
 
13014
		#針對每列輸出
13015
		for($i=3;$i<$lineCount-2;$i++){
13016
 
13017
			#取得各欄位的內容
13018
			#函式說明:
13019
			#將固定格式的字串分開,並回傳分開的結果。
13020
			#回傳結果:
13021
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13022
			#$result["error"],錯誤訊息陣列
13023
			#$result["function"],當前執行的函數名稱.
13024
			#$result["oriStr"],要分割的原始字串內容
13025
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13026
			#$result["dataCounts"],爲總共分成幾段
13027
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
13028
			#必填參數:
13029
			$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$i];#要處理的字串。
13030
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
13031
			#可省略參數:
13032
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
13033
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
13034
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13035
			unset($conf["stringProcess::spiltString"]);
13036
 
13037
			#如果分割字串失敗
13038
			if($spiltString["status"]==="false"){
13039
 
13040
				#設置執行不正常
13041
				$result["status"]="false";
13042
 
13043
				#設置錯誤訊息
13044
				$result["error"]=$spiltString;
13045
 
13046
				#回傳結果
13047
				return $result;
13048
 
13049
				}#if end
13050
 
13051
			#如果沒有分割用的關鍵字
13052
			if($spiltString["found"]==="false"){
13053
 
13054
				#設置執行不正常
13055
				$result["status"]="false";
13056
 
13057
				#設置錯誤訊息
13058
				$result["error"]=$spiltString;
13059
 
13060
				#回傳結果
13061
				return $result;
13062
 
13063
				}#if end
13064
 
13065
			#取得各欄位的內容
13066
			$cols=$spiltString["dataArray"];
13067
 
13068
			#取得欄位的數目
13069
			$colsCount=$spiltString["dataCounts"];
13070
 
13071
			#如果實際抓出的內容欄位數量大於標題欄位數量,代表檔案/目錄名稱含有空格
13072
			if($colsCount>$titleCount){
13073
 
13074
				#新的檔案名稱
13075
				$newFileName="";
13076
 
13077
				#針對每個多出的欄位
13078
				for($j=$titleCount;$j<$colsCount;$j++){
13079
 
13080
					#串接屬於檔案名稱的部分
13081
					$newFileName=$newFileName.$cols[$j];
13082
 
13083
					#如果不是最後一個項目
13084
					if($j!==$colsCount-1){
13085
 
13086
						#增加空格
13087
						$newFileName=$newFileName." ";
13088
 
13089
						}#if end
13090
 
13091
					}#for end
13092
 
13093
				#取代成對的檔案名稱
13094
				$cols[$titleCount-1]=$newFileName;
13095
 
13096
				}#if end
13097
 
13098
			#針對每個欄位
13099
			for($j=0;$j<$titleCount;$j++){
13100
 
13101
				#取得欄位內容
13102
				$result["content"]["each"][$titles[$j]][]=$cols[$j];
13103
 
13104
				}#for end
13105
 
13106
			}#for end
13107
 
13108
		#取得 total 的輸出內容
13109
		#函式說明:
13110
		#將固定格式的字串分開,並回傳分開的結果。
13111
		#回傳結果:
13112
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13113
		#$result["error"],錯誤訊息陣列
13114
		#$result["function"],當前執行的函數名稱.
13115
		#$result["oriStr"],要分割的原始字串內容
13116
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13117
		#$result["dataCounts"],爲總共分成幾段
13118
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
13119
		#必填參數:
13120
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$lineCount-1];#要處理的字串。
13121
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
13122
		#可省略參數:
13123
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
13124
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
13125
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13126
		unset($conf["stringProcess::spiltString"]);
13127
 
13128
		#如果分割字串失敗
13129
		if($spiltString["status"]==="false"){
13130
 
13131
			#設置執行不正常
13132
			$result["status"]="false";
13133
 
13134
			#設置錯誤訊息
13135
			$result["error"]=$spiltString;
13136
 
13137
			#回傳結果
13138
			return $result;
13139
 
13140
			}#if end
13141
 
13142
		#如果沒有分割用的關鍵字
13143
		if($spiltString["found"]==="false"){
13144
 
13145
			#設置執行不正常
13146
			$result["status"]="false";
13147
 
13148
			#設置錯誤訊息
13149
			$result["error"]=$spiltString;
13150
 
13151
			#回傳結果
13152
			return $result;
13153
 
13154
			}#if end
13155
 
13156
		#取得各欄位的內容
13157
		$cols=$spiltString["dataArray"];
13158
 
13159
		#取得總共的檔案長度
13160
		$result["content"]["total"][$titles[0]]=$cols[0];
13161
 
13162
		#取得壓縮時的總共檔案長度
13163
		$result["content"]["total"][$titles[2]]=$cols[1];
13164
 
13165
		#取得壓縮時的總共檔案長度
13166
		$result["content"]["total"][$titles[3]]=$cols[2];
13167
 
13168
		#取得解壓縮出了多少檔案跟目錄
13169
		$result["content"]["total"]["count"]=explode(" ",$cols[3])[0];
13170
 
13171
		#設置執行正常
13172
		$result["status"]="true";
13173
 
13174
		#回傳結果
13175
		return $result;
13176
 
13177
		}#function unzip end
13178
 
13179
	/*
13180
	#函式說明:
13181
	#接收Range: bytes=0-499格式的header, 輸出檔案的片段或完整檔案.
13182
	#回傳結果:
13183
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13184
	#$result["error"],錯誤訊息.
13185
	#$result["function"],當前執行的函式名稱.
13186
	#必填參數:
13187
	#$conf["filePath"],字串,檔案的路徑.
13188
	$conf["filePath"]="";
13189
	#可省略參數:
13190
	#$conf["fileName"],字串,顯示的檔案名稱,預設為basename($conf["filePath"]);
13191
	#$conf["fileName"]="";
13192
	#參考資料:
13193
	#https://gdfan1114.wordpress.com/2015/01/14/php-%E5%AF%A6%E4%BD%9C%E6%94%AF%E6%8F%B4-http-%E7%BA%8C%E5%82%B3%E5%8A%9F%E8%83%BD/
13194
	#http://php.net/manual/en/function.filemtime.php
13195
	#http://php.net/manual/en/function.connection-status.php
13196
	#http://php.net/manual/en/function.fread.php
13197
	#備註:
13198
	#請勿在運行該函式前印出任何內容,這是要給用戶端接收的內容.
13199
	*/
13200
	public static function partDownload(&$conf=array()){
13201
 
13202
		#初始化要回傳的結果
13203
		$result=array();
13204
 
13205
		#取得當前執行的函數名稱
13206
		$result["function"]=__FUNCTION__;
13207
 
13208
		#如果沒有參數
13209
		if(func_num_args()==0){
13210
 
13211
			#設置執行失敗
13212
			$result["status"]="false";
13213
 
13214
			#設置執行錯誤訊息
13215
			$result["error"]="函數".$result["function"]."需要參數";
13216
 
13217
			#回傳結果
13218
			return $result;
13219
 
13220
		}#if end
13221
 
13222
		#取得參數
13223
		$result["argu"]=$conf;
13224
 
13225
		#如果 $conf 不為陣列
13226
		if(gettype($conf)!=="array"){
13227
 
13228
			#設置執行失敗
13229
			$result["status"]="false";
13230
 
13231
			#設置執行錯誤訊息
13232
			$result["error"][]="\$conf變數須為陣列形態";
13233
 
13234
			#如果傳入的參數為 null
13235
			if($conf===null){
13236
 
13237
				#設置執行錯誤訊息
13238
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13239
 
13240
				}#if end
13241
 
13242
			#回傳結果
13243
			return $result;
13244
 
13245
			}#if end
13246
 
13247
		#檢查參數
13248
		#函式說明:
13249
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13250
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13251
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13252
		#$result["function"],當前執行的函式名稱.
13253
		#$result["argu"],設置給予的參數.
13254
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13255
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13256
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13257
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13258
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13259
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13260
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13261
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13262
		#必填寫的參數:
13263
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13264
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13265
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13266
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13267
		#可以省略的參數:
13268
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13269
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePath");
13270
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13271
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
13272
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13273
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13274
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13275
		#$conf["canNotBeEmpty"]=array();
13276
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13277
		#$conf["canBeEmpty"]=array();
13278
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13279
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("fileName");
13280
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13281
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName");
13282
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13283
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13284
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13285
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13286
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13287
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13288
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13289
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13290
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13291
		#$conf["arrayCountEqualCheck"][]=array();
13292
		#參考資料來源:
13293
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13294
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13295
		unset($conf["variableCheck::checkArguments"]);
13296
 
13297
		#如果檢查參數失敗
13298
		if($checkArguments["status"]==="false"){
13299
 
13300
			#設置執行失敗
13301
			$result["status"]="false";
13302
 
13303
			#設置執行錯誤
13304
			$result["error"]=$checkArguments;
13305
 
13306
			#回傳結果
13307
			return $result;
13308
 
13309
			}#if end
13310
 
13311
		#如果檢查參數不通過
13312
		if($checkArguments["passed"]==="false"){
13313
 
13314
			#設置執行失敗
13315
			$result["status"]="false";
13316
 
13317
			#設置執行錯誤
13318
			$result["error"]=$checkArguments;
13319
 
13320
			#回傳結果
13321
			return $result;
13322
 
13323
			}#if end
13324
 
13325
		#如果沒有設置 $conf["fileName"]
13326
		if(!isset($conf["fileName"])){
13327
 
13328
			#取得檔案名稱
13329
			$filename=basename($conf["filePath"]);
13330
 
13331
			}#if end
13332
 
13333
		#反之
13334
		else{
13335
 
13336
			#取得設定好的檔案名稱
13337
			$filename=&$conf["fileName"];
13338
 
13339
			}#else end
13340
 
13341
		#取得檔案路徑
13342
		$location=$conf["filePath"];
13343
 
13344
		#取得mimetype
13345
		$mimetype=mime_content_type($location);
13346
 
13347
		#如果檔案不存在
13348
		if(!file_exists($location)){
13349
 
13350
			#提示找不到檔案
13351
			header("HTTP/1.1 404 Not Found");
13352
 
13353
			#設置執行失敗
13354
			$result["status"]="false";
13355
 
13356
			#設置錯誤訊息
13357
			$result["error"][]="檔案 ".$location." 不存在.";
13358
 
13359
			#回傳結果
13360
			return $result;
13361
 
13362
			}#if end
13363
 
13364
		#取得檔案的bytes長度
13365
		$size  = filesize($location);
13366
 
13367
		#取得檔案的最後變更日期
13368
		$time  = date('r', filemtime($location));
13369
 
13370
		#讀取檔案的2元碼內容
13371
		$fm = @fopen($location, 'rb');
13372
 
13373
		#如果開啟檔案失敗
13374
		if(!$fm){
13375
 
13376
			#提示錯誤
13377
			header("HTTP/1.1 505 Internal server error");
13378
 
13379
			#設置執行失敗
13380
			$result["status"]="false";
13381
 
13382
			#設置錯誤訊息
13383
			$result["error"][]="開啟檔案 ".$location." 失敗.";
13384
 
13385
			#回傳結果
13386
			return $result;
13387
 
13388
			}#if end
13389
 
13390
		#初始化要提供的bytes長度起始點
13391
		$begin  = 0;
13392
 
13393
		#初始化要提供的bytes長度結束點
13394
		$end  = $size - 1;
13395
 
13396
		#如果有接收到 'HTTP_RANGE' 的 header 訊息
13397
		if(isset($_SERVER['HTTP_RANGE'])){
13398
 
13399
			#接收到的範例
13400
			#Range: bytes=0-499 
13401
 
13402
			#取得要求的bytes位置範圍
13403
			sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d",$begin,$end);
13404
 
13405
			#如果 $begin 或 $end  有缺
13406
			if(!isset($begin) || !isset($end)){
13407
 
13408
				#設置執行失敗
13409
				$result["status"]="false";
13410
 
13411
				#設置錯誤訊息
13412
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13413
 
13414
				#回傳結果
13415
				return $result;
13416
 
13417
				}#if end
13418
 
13419
			#如果 $begin 沒有小於等於 $end
13420
			if(!($begin<=$end)){
13421
 
13422
				#設置執行失敗
13423
				$result["status"]="false";
13424
 
13425
				#設置錯誤訊息
13426
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13427
 
13428
				#回傳結果
13429
				return $result;
13430
 
13431
				}#if end
13432
 
13433
			}#if end
13434
 
13435
		#提示 200 ok
13436
		header('HTTP/1.1 200 OK');
13437
 
13438
		#提示 mimetype
13439
		header("Content-Type: $mimetype");
13440
 
13441
		#要先驗證cache中的資料,取得的內容放在快取的時間為0
13442
		header('Cache-Control: public, must-revalidate, max-age=0');
13443
 
13444
		#提示不要cache
13445
		header('Pragma: no-cache');  
13446
 
13447
		#提示接收的 Ranges 單位為 bytes
13448
		header('Accept-Ranges: bytes');
13449
 
13450
		#數值傳輸的內容長度為多少
13451
		header('Content-Length:' . (($end - $begin) + 1));
13452
 
13453
		#提示內容為檔案的哪邊到哪邊與總共的長度
13454
		header("Content-Range: bytes $begin-$end/$size");
13455
 
13456
		#提示檔案的名稱
13457
		header("Content-Disposition: inline; filename=$filename");
13458
 
13459
		#提示用2元碼傳輸
13460
		header("Content-Transfer-Encoding: binary");
13461
 
13462
		#提示檔案最後變更日期
13463
		header("Last-Modified: $time");
13464
 
13465
		#初始化當前位置
13466
		$cur  = $begin;
13467
 
13468
		#指定讀取的起始點為 $begin 
13469
		fseek($fm, $begin, 0);
13470
 
13471
		#讀取內容, 若不是檔案結尾, 且當前位置($cur)小於等於 本次要提供的長度結尾($end), 且connection_status為0
13472
		while(!feof($fm) && $cur<=$end && (connection_status()===0)){
13473
 
13474
			#一次最多印出 1024*16bytes 的長度,若剩下長度不足則只印出剩下的長度.
13475
			echo fread($fm, min(1024 * 16, ($end - $cur) + 1));
13476
 
13477
			#更改位置
13478
			$cur += 1024 * 16;
13479
 
13480
			}#while end
13481
 
13482
		}#function partDownload end
13483
 
13484
	/*
13485
	#函式說明:
13486
	#尋找檔案. 
13487
	#回傳結果:
13488
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13489
	#$result["error"],錯誤訊息.
13490
	#$result["warning"],警告訊息陣列.
13491
	#$result["function"],當前執行的函數名稱.
13492
	#$result["argu"],所使用的參數.
13493
	#$result["found"],是否有找到可以轉換的檔案,"true"代表有;"false"代表沒有.
13494
	#$result["content"],找到的檔案陣列.
13495
	#必填參數:
13496
	#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13497
	$conf["keyWord"]="";
13498
	#$conf["path"],字串陣列,虛擬硬碟檔案的搜尋路徑,預設為當前路徑.
13499
	$conf["path"]=array();
13500
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13501
	$conf["fileArgu"]=__FILE__;
13502
	#參考資料:
13503
	#http://php.net/manual/en/function.glob.php
13504
	#備註:
13505
	#無.
13506
	*/
13507
	public static function findFile(&$conf=array()){
13508
 
13509
		#初始化要回傳的結果
13510
		$result=array();
13511
 
13512
		#取得當前執行的函數名稱
13513
		$result["function"]=__FUNCTION__;
13514
 
13515
		#如果沒有參數
13516
		if(func_num_args()==0){
13517
 
13518
			#設置執行失敗
13519
			$result["status"]="false";
13520
 
13521
			#設置執行錯誤訊息
13522
			$result["error"]="函數".$result["function"]."需要參數";
13523
 
13524
			#回傳結果
13525
			return $result;
13526
 
13527
			}#if end		
13528
 
13529
		#取得參數
13530
		$result["argu"]=$conf;
13531
 
13532
		#如果 $conf 不為陣列
13533
		if(gettype($conf)!=="array"){
13534
 
13535
			#設置執行失敗
13536
			$result["status"]="false";
13537
 
13538
			#設置執行錯誤訊息
13539
			$result["error"][]="\$conf變數須為陣列形態";
13540
 
13541
			#如果傳入的參數為 null
13542
			if($conf===null){
13543
 
13544
				#設置執行錯誤訊息
13545
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13546
 
13547
				}#if end
13548
 
13549
			#回傳結果
13550
			return $result;
13551
 
13552
			}#if end
13553
 
13554
		#函式說明:
13555
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13556
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13557
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13558
		#$result["function"],當前執行的函式名稱.
13559
		#$result["argu"],設置給予的參數.
13560
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13561
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13562
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13563
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13564
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13565
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13566
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13567
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13568
		#必填寫的參數:
13569
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13570
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13571
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13572
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13573
		#可以省略的參數:
13574
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13575
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","keyWord","fileArgu");
13576
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13577
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");
13578
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13579
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13580
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13581
		#$conf["canNotBeEmpty"]=array();
13582
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13583
		#$conf["canBeEmpty"]=array();
13584
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13585
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13586
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13587
		#$conf["skipableVariableName"]=array();
13588
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13589
		#$conf["skipableVariableType"]=array();
13590
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13591
		#$conf["skipableVarDefaultValue"]=array("");
13592
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13593
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13594
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13595
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13596
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13597
		#$conf["arrayCountEqualCheck"][]=array();
13598
		#參考資料來源:
13599
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13600
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13601
		unset($conf["variableCheck::checkArguments"]);
13602
 
13603
		#如果檢查參數失敗
13604
		if($checkArguments["status"]==="false"){
13605
 
13606
			#設置執行失敗
13607
			$result["status"]="false";
13608
 
13609
			#設置執行失敗訊息
13610
			$result["error"]=$checkArguments;
13611
 
13612
			#回傳結果
13613
			return $result;
13614
 
13615
			}#if end
13616
 
13617
		#如果檢查參數不通過
13618
		if($checkArguments["passed"]==="false"){
13619
 
13620
			#設置執行失敗
13621
			$result["status"]="false";
13622
 
13623
			#設置執行失敗訊息
13624
			$result["error"]=$checkArguments;
13625
 
13626
			#回傳結果
13627
			return $result;
13628
 
13629
			}#if end
13630
 
13631
		#檢查要搜尋的路徑是否都存在
13632
		#函式說明:
13633
		#s檢查多個檔案與資料夾是否存在.
13634
		#回傳的結果:
13635
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13636
		#$result["error"],錯誤訊息陣列.
13637
		#$resutl["function"],當前執行的涵式名稱.
13638
		#$result["argu"],使用的參數.
13639
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13640
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
13641
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
13642
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
13643
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13644
		#必填參數:
13645
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
13646
		$conf["self::checkMultiFileExist"]["fileArray"]=$conf["path"];
13647
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13648
		$conf["self::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13649
		#可省略參數
13650
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
13651
		#$conf["disableWebSearch"]="false";
13652
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13653
		#$conf["userDir"]="true";
13654
		#參考資料來源:
13655
		#http://php.net/manual/en/function.file-exists.php
13656
		#http://php.net/manual/en/control-structures.foreach.php
13657
		#備註:
13658
		#函數file_exists檢查的路徑為檔案系統的路徑
13659
		$checkMultiFileExist=self::checkMultiFileExist($conf["self::checkMultiFileExist"]);
13660
		unset($conf["self::checkMultiFileExist"]);
13661
 
13662
		#如果檢查目錄存在失敗
13663
		if($checkMultiFileExist["status"]==="false"){
13664
 
13665
			#設置執行失敗
13666
			$result["status"]="false";
13667
 
13668
			#設置執行失敗訊息
13669
			$result["error"]=$checkMultiFileExist;
13670
 
13671
			#回傳結果
13672
			return $result;
13673
 
13674
			}#if end	
13675
 
13676
		#如果目錄不存在
13677
		if($checkMultiFileExist["status"]==="false"){
13678
 
13679
			#設置執行失敗
13680
			$result["status"]="false";
13681
 
13682
			#設置執行失敗訊息
13683
			$result["error"]=$checkMultiFileExist;
13684
 
13685
			#回傳結果
13686
			return $result;
13687
 
13688
			}#if end
13689
 
13690
		#如果有路徑不存在
13691
		if($checkMultiFileExist["allExist"]==="false"){
13692
 
13693
			#設置執行失敗
13694
			$result["status"]="false";
13695
 
13696
			#設置執行失敗訊息
13697
			$result["error"]=$checkMultiFileExist;
13698
 
13699
			#設置提示有路徑不存在的訊息
13700
			$result["warning"][]="參數path的路徑沒有每個都存在";
13701
 
13702
			#回傳結果
13703
			return $result;
13704
 
13705
			}#if end
13706
 
13707
		#預設沒有找到檔案
13708
		$result["found"]="false";	
13709
 
13710
		#針對每個要搜尋的路徑
13711
		foreach($conf["path"] as $path){
13712
 
13713
			#函式說明:
13714
			#用find指令尋找檔案
13715
			#回傳結果:
13716
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13717
			#$result["error"],錯誤訊息.
13718
			#$result["function"],當前執行的函數名稱.
13719
			#$result["argu"],所使用的參數.
13720
			#$result["found"],是否有找到符合的檔案,"true"代表有;"false"代表沒有.
13721
			#$result["content"],找到的檔案陣列.
13722
			#必填參數:
13723
			#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13724
			$conf["cmd::find"]["keyWord"]=$conf["keyWord"];	
13725
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13726
			$conf["cmd::find"]["fileArgu"]=$conf["fileArgu"];
13727
			#可省略參數:
13728
			#$conf["path"],字串,搜尋的路徑,預設為"/".
13729
			$conf["cmd::find"]["path"]=$path;
13730
			#$conf["fileOnly"],字串,"true"代表只要找檔案,"false"代表.
13731
			$conf["cmd::find"]["fileOnly"]="true";
13732
			#參考資料:
13733
			#http://php.net/manual/en/function.glob.php
13734
			$find=cmd::find($conf["cmd::find"]);
13735
			unset($conf["cmd::find"]);
13736
 
13737
			#如果尋找檔案失敗
13738
			if($find["status"]==="false"){
13739
 
13740
				#設置執行失敗
13741
				$result["status"]="false";
13742
 
13743
				#設置執行失敗訊息
13744
				$result["error"]=$find;
13745
 
13746
				#回傳結果
13747
				return $result;
13748
 
13749
				}#if end
13750
 
13751
			#如果有找到符合的檔案
13752
			if($find["found"]==="true"){
13753
 
13754
				#設置有找到檔案
13755
				$result["found"]="true";
13756
 
13757
				#針對每個找到的檔案
13758
				foreach($find["content"] as $filtedFile){
13759
 
13760
					#設置有找到的檔案
13761
					$result["content"][]=$filtedFile;
13762
 
13763
					}#foreach end
13764
 
13765
				}#if end
13766
 
13767
			}#foreach end		
13768
 
13769
		#設置執行正常
13770
		$result["status"]="true";
13771
 
13772
		#回傳結果
13773
		return $result;
13774
 
13775
		}#function findFile end
13776
 
13777
	/*
13778
	#函式說明:
13779
	#判斷檔案位於哪個分割區
13780
	#回傳結果:
13781
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13782
	#$result["error"],錯誤訊息.
13783
	#$result["function"],當前執行的函數名稱.
13784
	#$result["argu"],所使用的參數.
13785
	#$result["content"],找到的檔案所屬分割區資訊.
13786
	#必填參數:
13787
	#$conf["file"],字串,檔案的路徑與名稱.
13788
	$conf["file"]="";
13789
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13790
	$conf["fileArgu"]=__FILE__;
13791
	#可省略參數:
13792
	#無.
13793
	#參考資料:
13794
	#無.
13795
	#備註:
13796
	#無.
13797
	*/
13798
	public static function addrInMountPoint(&$conf=array()){
13799
 
13800
		#初始化要回傳的結果
13801
		$result=array();
13802
 
13803
		#取得當前執行的函數名稱
13804
		$result["function"]=__FUNCTION__;
13805
 
13806
		#如果沒有參數
13807
		if(func_num_args()==0){
13808
 
13809
			#設置執行失敗
13810
			$result["status"]="false";
13811
 
13812
			#設置執行錯誤訊息
13813
			$result["error"]="函數".$result["function"]."需要參數";
13814
 
13815
			#回傳結果
13816
			return $result;
13817
 
13818
			}#if end		
13819
 
13820
		#取得參數
13821
		$result["argu"]=$conf;
13822
 
13823
		#如果 $conf 不為陣列
13824
		if(gettype($conf)!=="array"){
13825
 
13826
			#設置執行失敗
13827
			$result["status"]="false";
13828
 
13829
			#設置執行錯誤訊息
13830
			$result["error"][]="\$conf變數須為陣列形態";
13831
 
13832
			#如果傳入的參數為 null
13833
			if($conf===null){
13834
 
13835
				#設置執行錯誤訊息
13836
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13837
 
13838
				}#if end
13839
 
13840
			#回傳結果
13841
			return $result;
13842
 
13843
			}#if end
13844
 
13845
		#函式說明:
13846
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13847
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13848
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13849
		#$result["function"],當前執行的函式名稱.
13850
		#$result["argu"],設置給予的參數.
13851
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13852
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13853
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13854
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13855
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13856
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13857
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13858
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13859
		#必填寫的參數:
13860
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13861
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13862
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13863
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13864
		#可以省略的參數:
13865
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13866
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
13867
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13868
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13869
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13870
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13871
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13872
		#$conf["canNotBeEmpty"]=array();
13873
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13874
		#$conf["canBeEmpty"]=array();
13875
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13876
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13877
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13878
		#$conf["skipableVariableName"]=array();
13879
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13880
		#$conf["skipableVariableType"]=array();
13881
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13882
		#$conf["skipableVarDefaultValue"]=array("");
13883
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13884
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13885
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13886
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13887
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13888
		#$conf["arrayCountEqualCheck"][]=array();
13889
		#參考資料來源:
13890
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13891
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13892
		unset($conf["variableCheck::checkArguments"]);
13893
 
13894
		#如果檢查參數失敗
13895
		if($checkArguments["status"]==="false"){
13896
 
13897
			#設置執行失敗
13898
			$result["status"]="false";
13899
 
13900
			#設置執行失敗訊息
13901
			$result["error"]=$checkArguments;
13902
 
13903
			#回傳結果
13904
			return $result;
13905
 
13906
			}#if end
13907
 
13908
		#如果檢查參數不通過
13909
		if($checkArguments["passed"]==="false"){
13910
 
13911
			#設置執行失敗
13912
			$result["status"]="false";
13913
 
13914
			#設置執行失敗訊息
13915
			$result["error"]=$checkArguments;
13916
 
13917
			#回傳結果
13918
			return $result;
13919
 
13920
			}#if end
13921
 
13922
		#函式說明:
13923
		#透過lsblk指令的輸出取得已經掛載的blk.
13924
		#回傳結果:
13925
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13926
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13927
		#$result["function"],當前執行的函式名稱.
13928
		#$result["content"],lsblk的輸出內容.
13929
		#必填參數:
13930
		#$conf["fileArgu"],字串,變數__FILE__的內容.
13931
		$conf["cmd::lsblk"]["fileArgu"]=$conf["fileArgu"];
13932
		#可省略參數:
13933
		#無.	
13934
		$lsblk=cmd::lsblk($conf["cmd::lsblk"]);
13935
		unset($conf["cmd::lsblk"]);
13936
 
13937
		#如果執行失敗
13938
		if($lsblk["status"]==="false"){
13939
 
13940
			#設置執行失敗
13941
			$result["status"]="false";
13942
 
13943
			#設置執行失敗訊息
13944
			$result["error"]=$lsblk;
13945
 
13946
			#回傳結果
13947
			return $result;
13948
 
13949
			}#if end
13950
 
13951
		#將 $conf["file"] 轉換成絕對路徑
13952
		#函式說明:
13953
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
13954
		#回傳結果:
13955
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
13956
		#$result["error"],錯誤訊息陣列.
13957
		#$result["function"],函數名稱. 
13958
		#$result["argu"],使用的參數.
13959
		#$result["content"],網址,若是在命令列執行,則為"null".
13960
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
13961
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
13962
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
13963
		#必填參數:
13964
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
13965
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["file"];
13966
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
13967
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
13968
		#可省略參數:
13969
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13970
		#$conf["userDir"]="true";
13971
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
13972
		unset($conf["fileAccess::getInternetAddress"]);
13973
 
13974
		#如果執行失敗
13975
		if($getInternetAddress["status"]==="false"){
13976
 
13977
			#設置執行失敗
13978
			$result["status"]="false";
13979
 
13980
			#設置執行失敗訊息
13981
			$result["error"]=$getInternetAddress;
13982
 
13983
			#回傳結果
13984
			return $result;
13985
 
13986
			}#if end	
13987
 
13988
		#使用絕對位置作為輸入字串
13989
		#函式說明:
13990
		#尋找字串是否存在對應的關鍵字,且符合的最常關鍵字為何?
13991
		#回傳結果:
13992
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13993
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13994
		#$result["function"],當前執行的函式名稱.
13995
		#$result["argu"],所使用的參數.
13996
		#$result["founded"],是否有找到關鍵字,"true"代表有找到,"false"代表沒有找到.
13997
		#$result["content"],最符合的字串完整內容.
13998
		#必填參數:
13999
		#$conf["input"],字串,要比對的字串陣列.
14000
		$conf["search::findLikelyStr"]["input"]=$getInternetAddress["fileSystemAbsoulutePosition"];
14001
		#$conf["keyWord"],字串陣列,要搜尋的關鍵字.
14002
		$conf["search::findLikelyStr"]["keyWord"]=$lsblk["content"]["MOUNTPOINT"];
14003
		$findLikelyStr=search::findLikelyStr($conf["search::findLikelyStr"]);
14004
		unset($conf["search::findLikelyStr"]);
14005
 
14006
		#如果執行失敗
14007
		if($findLikelyStr["status"]==="false"){
14008
 
14009
			#設置執行失敗
14010
			$result["status"]="false";
14011
 
14012
			#設置執行失敗訊息
14013
			$result["error"]=$findLikelyStr;
14014
 
14015
			#回傳結果
14016
			return $result;
14017
 
14018
			}#if end
14019
 
14020
		#如果找不到歸屬的分割區
14021
		if($findLikelyStr["found"]==="false"){
14022
 
14023
			#設置執行失敗
14024
			$result["status"]="false";
14025
 
14026
			#設置執行失敗訊息
14027
			$result["error"]=$findLikelyStr;
14028
 
14029
			#回傳結果
14030
			return $result;
14031
 
14032
			}#if end
14033
 
14034
		#設置歸屬的分割區資訊
14035
		$result["content"]=$findLikelyStr["content"];
14036
 
14037
		#設置執行正常
14038
		$result["status"]="true";
14039
 
14040
		#回傳結果
14041
		return $result;
14042
 
14043
		}#function addrInMountPoint end
14044
 
14045
	/*
14046
	#函式說明:
14047
	#取得檔案的副檔名
14048
	#回傳結果:
14049
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14050
	#$result["error"],錯誤訊息.
14051
	#$result["function"],當前執行的函數名稱.
14052
	#$result["argu"],所使用的參數.	
14053
	#$result["content"],副檔名.
14054
	#$result["name"],不含副檔的名稱.
14055
	#$result["fullName"],含副檔的名稱.
14056
	#$result["path"],檔案所處的路徑.
14057
	#必填參數:
14058
	#$conf["file"],字串,檔案的路徑與名稱.
14059
	$conf["file"]="";
14060
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14061
	$conf["fileArgu"]=__FILE__;
14062
	#可省略參數:
14063
	#無.
14064
	#參考資料:
14065
	#無.
14066
	#備註:
14067
	#無.
14068
	*/
14069
	public static function getExtension(&$conf=array()){
14070
 
14071
		#初始化要回傳的結果
14072
		$result=array();
14073
 
14074
		#取得當前執行的函數名稱
14075
		$result["function"]=__FUNCTION__;
14076
 
14077
		#如果沒有參數
14078
		if(func_num_args()==0){
14079
 
14080
			#設置執行失敗
14081
			$result["status"]="false";
14082
 
14083
			#設置執行錯誤訊息
14084
			$result["error"]="函數".$result["function"]."需要參數";
14085
 
14086
			#回傳結果
14087
			return $result;
14088
 
14089
			}#if end		
14090
 
14091
		#取得參數
14092
		$result["argu"]=$conf;
14093
 
14094
		#如果 $conf 不為陣列
14095
		if(gettype($conf)!=="array"){
14096
 
14097
			#設置執行失敗
14098
			$result["status"]="false";
14099
 
14100
			#設置執行錯誤訊息
14101
			$result["error"][]="\$conf變數須為陣列形態";
14102
 
14103
			#如果傳入的參數為 null
14104
			if($conf===null){
14105
 
14106
				#設置執行錯誤訊息
14107
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14108
 
14109
				}#if end
14110
 
14111
			#回傳結果
14112
			return $result;
14113
 
14114
			}#if end
14115
 
14116
		#函式說明:
14117
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14118
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14119
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14120
		#$result["function"],當前執行的函式名稱.
14121
		#$result["argu"],設置給予的參數.
14122
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14123
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14124
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14125
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14126
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14127
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14128
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14129
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14130
		#必填寫的參數:
14131
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14132
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14133
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14134
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14135
		#可以省略的參數:
14136
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14137
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14138
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14139
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14140
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14141
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14142
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14143
		#$conf["canNotBeEmpty"]=array();
14144
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14145
		#$conf["canBeEmpty"]=array();
14146
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14147
		#$conf["skipableVariableCanNotBeEmpty"]=array();
14148
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14149
		#$conf["skipableVariableName"]=array();
14150
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14151
		#$conf["skipableVariableType"]=array();
14152
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14153
		#$conf["skipableVarDefaultValue"]=array("");
14154
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14155
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14156
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14157
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14158
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14159
		#$conf["arrayCountEqualCheck"][]=array();
14160
		#參考資料來源:
14161
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14162
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14163
		unset($conf["variableCheck::checkArguments"]);
14164
 
14165
		#如果檢查參數失敗
14166
		if($checkArguments["status"]==="false"){
14167
 
14168
			#設置執行失敗
14169
			$result["status"]="false";
14170
 
14171
			#設置執行失敗訊息
14172
			$result["error"]=$checkArguments;
14173
 
14174
			#回傳結果
14175
			return $result;
14176
 
14177
			}#if end
14178
 
14179
		#如果檢查參數不通過
14180
		if($checkArguments["passed"]==="false"){
14181
 
14182
			#設置執行失敗
14183
			$result["status"]="false";
14184
 
14185
			#設置執行失敗訊息
14186
			$result["error"]=$checkArguments;
14187
 
14188
			#回傳結果
14189
			return $result;
14190
 
14191
			}#if end
14192
 
14193
		#初始化檔案的路徑
14194
		$result["path"]="./";
14195
 
14196
		#用 "/" 來分割字串
14197
		#函式說明:
14198
		#將固定格式的字串分開,並回傳分開的結果。
14199
		#回傳結果:
14200
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14201
		#$result["error"],錯誤訊息陣列
14202
		#$result["function"],當前執行的函數名稱.
14203
		#$result["oriStr"],要分割的原始字串內容
14204
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14205
		#$result["dataCounts"],爲總共分成幾段
14206
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
14207
		#必填參數:
14208
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["file"];#要處理的字串。
14209
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
14210
		#可省略參數:
14211
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14212
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14213
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14214
		unset($conf["stringProcess::spiltString"]);
14215
 
14216
		#如果檢查參數失敗
14217
		if($spiltString["status"]==="false"){
14218
 
14219
			#設置執行失敗
14220
			$result["status"]="false";
14221
 
14222
			#設置執行失敗訊息
14223
			$result["error"]=$spiltString;
14224
 
14225
			#回傳結果
14226
			return $result;
14227
 
14228
			}#if end
14229
 
14230
		#初始化含副檔名的檔案名稱
14231
		$result["fullName"]=$conf["file"];
14232
 
14233
		#如果有"/"存在
14234
		if($spiltString["found"]==="true"){
14235
 
14236
			#取得含副檔名的檔案名稱
14237
			$result["fullName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14238
 
14239
			#取得檔案的路徑
14240
			$result["path"]=substr($conf["file"],0,strlen($conf["file"])-strlen($result["fullName"]));
14241
 
14242
			}#if end
14243
 
14244
		#用 "." 來分割字串
14245
		#函式說明:
14246
		#將固定格式的字串分開,並回傳分開的結果。
14247
		#回傳結果:
14248
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14249
		#$result["error"],錯誤訊息陣列
14250
		#$result["function"],當前執行的函數名稱.
14251
		#$result["oriStr"],要分割的原始字串內容
14252
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14253
		#$result["dataCounts"],爲總共分成幾段
14254
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
14255
		#必填參數:
14256
		$conf["stringProcess::spiltString"]["stringIn"]=$result["fullName"];#要處理的字串。
14257
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
14258
		#可省略參數:
14259
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14260
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14261
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14262
		unset($conf["stringProcess::spiltString"]);
14263
 
14264
		#如果檢查參數失敗
14265
		if($spiltString["status"]==="false"){
14266
 
14267
			#設置執行失敗
14268
			$result["status"]="false";
14269
 
14270
			#設置執行失敗訊息
14271
			$result["error"]=$spiltString;
14272
 
14273
			#回傳結果
14274
			return $result;
14275
 
14276
			}#if end
14277
 
14278
		#預設副檔名為 ""
14279
		$result["content"]="";
14280
 
14281
		#預設不含副檔名的檔案名稱
14282
		$result["name"]=$result["fullName"];
14283
 
14284
		#如果有"."存在
14285
		if($spiltString["found"]==="true"){
14286
 
14287
			#取得含副檔名
14288
			$result["content"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14289
 
14290
			#取得不含副檔名的檔案名稱
14291
			$result["name"]=substr($result["fullName"],0,strlen($result["fullName"])-strlen($result["content"])-1);	
14292
 
14293
			}#if end
14294
 
14295
		#設置執行正常
14296
		$result["status"]="true";
14297
 
14298
		#回傳結果
14299
		return $result;
14300
 
14301
		}#function getExtension end
14302
 
14303
	/*
14304
	#函式說明:
14305
	#從檔案尾部開始讀取
14306
	#回傳結果:
14307
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14308
	#$result["error"],錯誤訊息.
14309
	#$result["function"],當前執行的函數名稱.
14310
	#$result["argu"],所使用的參數.	
14311
	#$result["content"],讀取到的內容陣列.
14312
	#$result["totalLineCount"],檔案的總共行數.
14313
	#$result["lines"],取得輸出的行數.
14314
	#$result["lineNum"],取得當前行數.
14315
	#必填參數:
14316
	#$conf["file"],字串,檔案的路徑與名稱.
14317
	$conf["file"]="";
14318
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14319
	$conf["fileArgu"]=__FILE__;
14320
	#可省略參數:
14321
	#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14322
	#$conf["web"]="false";
14323
	#$conf["line2start"],字串,從第幾列開始,預設為總行書減去linesPerTime+1.
14324
	#$conf["line2start"]="";
14325
	#$conf["linesPerTime"],字串,一次最多讀取幾列,預設爲10列.
14326
	#$conf["linesPerTime"]="10";	
14327
	#參考資料:
14328
	#無.
14329
	#備註:
14330
	#無.
14331
	*/
14332
	public static function tail(&$conf){
14333
 
14334
		#初始化要回傳的結果
14335
		$result=array();
14336
 
14337
		#取得當前執行的函數名稱
14338
		$result["function"]=__FUNCTION__;
14339
 
14340
		#如果沒有參數
14341
		if(func_num_args()==0){
14342
 
14343
			#設置執行失敗
14344
			$result["status"]="false";
14345
 
14346
			#設置執行錯誤訊息
14347
			$result["error"]="函數".$result["function"]."需要參數";
14348
 
14349
			#回傳結果
14350
			return $result;
14351
 
14352
			}#if end		
14353
 
14354
		#取得參數
14355
		$result["argu"]=$conf;
14356
 
14357
		#如果 $conf 不為陣列
14358
		if(gettype($conf)!=="array"){
14359
 
14360
			#設置執行失敗
14361
			$result["status"]="false";
14362
 
14363
			#設置執行錯誤訊息
14364
			$result["error"][]="\$conf變數須為陣列形態";
14365
 
14366
			#如果傳入的參數為 null
14367
			if($conf===null){
14368
 
14369
				#設置執行錯誤訊息
14370
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14371
 
14372
				}#if end
14373
 
14374
			#回傳結果
14375
			return $result;
14376
 
14377
			}#if end
14378
 
14379
		#函式說明:
14380
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14381
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14382
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14383
		#$result["function"],當前執行的函式名稱.
14384
		#$result["argu"],設置給予的參數.
14385
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14386
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14387
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14388
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14389
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14390
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14391
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14392
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14393
		#必填寫的參數:
14394
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14395
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14396
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14397
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14398
		#可以省略的參數:
14399
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14400
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14401
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14402
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14403
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14404
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14405
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14406
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu");
14407
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14408
		#$conf["canBeEmpty"]=array();
14409
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14410
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web","line2start","linesPerTime");
14411
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14412
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web","line2start","linesPerTime");
14413
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14414
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
14415
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14416
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,"10");
14417
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14418
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14419
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14420
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14421
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14422
		#$conf["arrayCountEqualCheck"][]=array();
14423
		#參考資料來源:
14424
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14425
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14426
		unset($conf["variableCheck::checkArguments"]);
14427
 
14428
		#如果檢查參數失敗
14429
		if($checkArguments["status"]==="false"){
14430
 
14431
			#設置執行失敗
14432
			$result["status"]="false";
14433
 
14434
			#設置執行失敗訊息
14435
			$result["error"]=$checkArguments;
14436
 
14437
			#回傳結果
14438
			return $result;
14439
 
14440
			}#if end
14441
 
14442
		#如果檢查參數不通過
14443
		if($checkArguments["passed"]==="false"){
14444
 
14445
			#設置執行失敗
14446
			$result["status"]="false";
14447
 
14448
			#設置執行失敗訊息
14449
			$result["error"]=$checkArguments;
14450
 
14451
			#回傳結果
14452
			return $result;
14453
 
14454
			}#if end
14455
 
14456
		#檢查檔案是否存在
14457
		#函式說明:
14458
		#檢查多個檔案與資料夾是否存在.
14459
		#回傳的結果:
14460
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
14461
		#$result["error"],錯誤訊息陣列.
14462
		#$resutl["function"],當前執行的涵式名稱.
14463
		#$result["argu"],使用的參數.
14464
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
14465
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
14466
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
14467
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
14468
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
14469
		#必填參數:
14470
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
14471
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
14472
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14473
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
14474
		#可省略參數
14475
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
14476
		#$conf["disableWebSearch"]="false";
14477
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
14478
		#$conf["userDir"]="true";
14479
		#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14480
		$conf["fileAccess::checkMultiFileExist"]["web"]=$conf["web"];
14481
		#參考資料來源:
14482
		#http://php.net/manual/en/function.file-exists.php
14483
		#http://php.net/manual/en/control-structures.foreach.php
14484
		#備註:
14485
		#函數file_exists檢查的路徑為檔案系統的路徑
14486
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
14487
		unset($conf["fileAccess::checkMultiFileExist"]);
14488
 
14489
		#如果執行失敗
14490
		if($checkMultiFileExist["status"]==="false"){
14491
 
14492
			#設置執行失敗
14493
			$result["status"]="false";
14494
 
14495
			#設置執行失敗訊息
14496
			$result["error"]=$checkMultiFileExist;
14497
 
14498
			#回傳結果
14499
			return $result;
14500
 
14501
			}#if end
14502
 
14503
		#如果檔案無法存取
14504
		if($checkMultiFileExist["allExist"]==="false"){
14505
 
14506
			#設置執行失敗
14507
			$result["status"]="false";
14508
 
14509
			#設置執行失敗訊息
14510
			$result["error"]=$checkMultiFileExist;
14511
 
14512
			#回傳結果
14513
			return $result;
14514
 
14515
			}#if end
14516
 
14517
		#取得檔案的行數
14518
		#函式說明:
14519
		#呼叫shell執行系統命令,並取得回傳的內容.
14520
		#回傳的結果:
14521
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14522
		#$result["error"],錯誤訊息陣列.
14523
		#$result["function"],當前執行的函數名稱.
14524
		#$result["argu"],使用的參數.
14525
		#$result["cmd"],執行的指令內容.
14526
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14527
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14528
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14529
		#$result["running"],是否還在執行.
14530
		#$result["pid"],pid.
14531
		#$result["statusCode"],執行結束後的代碼.
14532
		#必填的參數
14533
		#$conf["command"],字串,要執行的指令與.
14534
		$conf["external::callShell"]["command"]="cat";
14535
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14536
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14537
		#可省略參數:
14538
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14539
		$conf["external::callShell"]["argu"]=array($conf["file"],"|","wc","-l");
14540
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14541
		#$conf["arguIsAddr"]=array();	
14542
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14543
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14544
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14545
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14546
		#$conf["enablePrintDescription"]="true";
14547
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14548
		#$conf["printDescription"]="";
14549
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
14550
		$conf["external::callShell"]["escapeshellarg"]="true";
14551
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14552
		#$conf["username"]="";
14553
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14554
		#$conf["password"]="";
14555
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14556
		#$conf["useScript"]="";
14557
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14558
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14559
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14560
		#$conf["inBackGround"]="";
14561
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14562
		#$conf["getErr"]="false";
14563
		#備註:
14564
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14565
		#參考資料:
14566
		#exec=>http://php.net/manual/en/function.exec.php
14567
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14568
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14569
		$callShell=external::callShell($conf["external::callShell"]);
14570
		unset($conf["external::callShell"]);
14571
 
14572
		#如果檢查參數失敗
14573
		if($callShell["status"]==="false"){
14574
 
14575
			#設置執行失敗
14576
			$result["status"]="false";
14577
 
14578
			#設置執行失敗訊息
14579
			$result["error"]=$callShell;
14580
 
14581
			#回傳結果
14582
			return $result;
14583
 
14584
			}#if end
14585
 
14586
		#取得檔案總行數
14587
		$result["totalLineCount"]=$callShell["output"][0];
14588
 
14589
		#如果未設置 $conf["line2start"]
14590
		if(!isset($conf["line2start"])){
14591
 
14592
			#$conf["line2start"]為總行數減去一次要看的行數減1
14593
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14594
 
14595
			}#if end	
14596
 
14597
		#如果開始行數小於1		
14598
		if($conf["line2start"]<1){
14599
 
14600
			#$conf["line2start"]為總行數減去一次要看的行數減1
14601
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14602
 
14603
			}#if end
14604
 
14605
		#如果開始行數小於1		
14606
		if($conf["line2start"]<1){
14607
 
14608
			#$conf["line2start"]為1
14609
			$conf["line2start"]=1;
14610
 
14611
			}#if end
14612
 
14613
		#取得指定範圍的行數
14614
		#取得檔案的行數
14615
		#函式說明:
14616
		#呼叫shell執行系統命令,並取得回傳的內容.
14617
		#回傳的結果:
14618
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14619
		#$result["error"],錯誤訊息陣列.
14620
		#$result["function"],當前執行的函數名稱.
14621
		#$result["argu"],使用的參數.
14622
		#$result["cmd"],執行的指令內容.
14623
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14624
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14625
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14626
		#$result["running"],是否還在執行.
14627
		#$result["pid"],pid.
14628
		#$result["statusCode"],執行結束後的代碼.
14629
		#必填的參數
14630
		#$conf["command"],字串,要執行的指令與.
14631
		$conf["external::callShell"]["command"]="sed";
14632
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14633
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14634
		#可省略參數:
14635
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14636
		$conf["external::callShell"]["argu"]=array("-n",$conf["line2start"].",".($conf["line2start"]+$conf["linesPerTime"]-1)."p",$conf["file"]);
14637
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14638
		#$conf["arguIsAddr"]=array();	
14639
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14640
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14641
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14642
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14643
		#$conf["enablePrintDescription"]="true";
14644
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14645
		#$conf["printDescription"]="";
14646
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
14647
		$conf["external::callShell"]["escapeshellarg"]="true";
14648
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14649
		#$conf["username"]="";
14650
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14651
		#$conf["password"]="";
14652
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14653
		#$conf["useScript"]="";
14654
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14655
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14656
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14657
		#$conf["inBackGround"]="";
14658
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14659
		#$conf["getErr"]="false";
14660
		#備註:
14661
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14662
		#參考資料:
14663
		#exec=>http://php.net/manual/en/function.exec.php
14664
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14665
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14666
		$callShell=external::callShell($conf["external::callShell"]);
14667
		unset($conf["external::callShell"]);
14668
 
14669
		#如果檢查參數失敗
14670
		if($callShell["status"]==="false"){
14671
 
14672
			#設置執行失敗
14673
			$result["status"]="false";
14674
 
14675
			#設置執行失敗訊息
14676
			$result["error"]=$callShell;
14677
 
14678
			#回傳結果
14679
			return $result;
14680
 
14681
			}#if end
14682
 
14683
		#取得輸出的行數
14684
		$result["lines"]=count($callShell["output"]);
14685
 
14686
		#取得目前的輸出內容
14687
		$result["content"]=$callShell["output"];
14688
 
14689
		#取得當前行數
14690
		$result["lineNum"]=$conf["line2start"]+$result["lines"]-1;
14691
 
14692
		#如果當前行號小於總行數 
14693
		if($result["lineNum"]<$result["totalLineCount"]){
14694
 
14695
			#設置還有剩餘的內容
14696
			$result["left"]="true";
14697
 
14698
			}#if end
14699
 
14700
		#反之 
14701
		else{
14702
 
14703
			#設置無剩餘的內容
14704
			$result["left"]="false";
14705
 
14706
			}#else end
14707
 
14708
		#設置執行正常
14709
		$result["status"]="true";
14710
 
14711
		#回傳結果
14712
		return $result;
14713
 
14714
		}#function tail end
14715
 
14716
	/*
14717
	#函式說明:
14718
	#解析PHP檔案裡面的變數.
14719
	#回傳結果:
14720
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14721
	#$result["error"],錯誤訊息.
14722
	#$result["function"],當前執行的函數名稱.
14723
	#$result["argu"],所使用的參數.	
14724
	#$result["content"],找到的變數內容陣列,若有多個變數則會用array來表示.
14725
	#必填參數:
14726
	#$conf["file"],字串,檔案的路徑與名稱.
14727
	$conf["file"]="";
14728
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14729
	$conf["fileArgu"]=__FILE__;
14730
	#$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".
14731
	$conf["varName"]=array();
14732
	#可省略參數:
14733
	#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".
14734
	#$conf["web"]="true";
14735
	#參考資料:
14736
	#https://www.php.net/manual/en/function.parse-str.php
14737
	#備註:
14738
	#無.
14739
	*/
14740
	public static function parseVaraiableInPHPfile(&$conf){
14741
 
14742
		#初始化要回傳的結果
14743
		$result=array();
14744
 
14745
		#取得當前執行的函數名稱
14746
		$result["function"]=__FUNCTION__;
14747
 
14748
		#如果沒有參數
14749
		if(func_num_args()==0){
14750
 
14751
			#設置執行失敗
14752
			$result["status"]="false";
14753
 
14754
			#設置執行錯誤訊息
14755
			$result["error"]="函數".$result["function"]."需要參數";
14756
 
14757
			#回傳結果
14758
			return $result;
14759
 
14760
			}#if end		
14761
 
14762
		#取得參數
14763
		$result["argu"]=$conf;
14764
 
14765
		#如果 $conf 不為陣列
14766
		if(gettype($conf)!=="array"){
14767
 
14768
			#設置執行失敗
14769
			$result["status"]="false";
14770
 
14771
			#設置執行錯誤訊息
14772
			$result["error"][]="\$conf變數須為陣列形態";
14773
 
14774
			#如果傳入的參數為 null
14775
			if($conf===null){
14776
 
14777
				#設置執行錯誤訊息
14778
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14779
 
14780
				}#if end
14781
 
14782
			#回傳結果
14783
			return $result;
14784
 
14785
			}#if end
14786
 
14787
		#函式說明:
14788
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14789
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14790
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14791
		#$result["function"],當前執行的函式名稱.
14792
		#$result["argu"],設置給予的參數.
14793
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14794
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14795
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14796
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14797
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14798
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14799
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14800
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14801
		#必填寫的參數:
14802
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14803
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14804
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14805
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14806
		#可以省略的參數:
14807
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14808
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu","varName");
14809
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14810
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","array");
14811
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14812
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14813
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14814
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu","varName");
14815
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14816
		#$conf["canBeEmpty"]=array();
14817
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14818
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
14819
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14820
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
14821
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14822
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
14823
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14824
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
14825
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14826
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14827
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14828
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14829
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14830
		#$conf["arrayCountEqualCheck"][]=array();
14831
		#參考資料來源:
14832
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14833
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14834
		unset($conf["variableCheck::checkArguments"]);
14835
 
14836
		#如果檢查參數失敗
14837
		if($checkArguments["status"]==="false"){
14838
 
14839
			#設置執行失敗
14840
			$result["status"]="false";
14841
 
14842
			#設置執行失敗訊息
14843
			$result["error"]=$checkArguments;
14844
 
14845
			#回傳結果
14846
			return $result;
14847
 
14848
			}#if end
14849
 
14850
		#如果檢查參數不通過
14851
		if($checkArguments["passed"]==="false"){
14852
 
14853
			#設置執行失敗
14854
			$result["status"]="false";
14855
 
14856
			#設置執行失敗訊息
14857
			$result["error"]=$checkArguments;
14858
 
14859
			#回傳結果
14860
			return $result;
14861
 
14862
			}#if end
14863
 
14864
		#初始化儲存解析出來的變數內容
14865
		$result["content"]=array();
14866
 
14867
		#讀取檔案
14868
		#函式說明:
14869
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
14870
		#回傳的變數說明:
14871
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
14872
		#$result["error"],錯誤訊息提示.
14873
		#$result["warning"],警告訊息.
14874
		#$result["function"],當前執行的函數名稱.
14875
		#$result["fileContent"],爲檔案的內容陣列.
14876
		#$result["lineCount"],爲檔案內容總共的行數.
14877
		#$result["fullContent"],為檔案的完整內容.
14878
		#$result["base64data"],為檔案的base64內容.
14879
		#$result["mimeType"],為檔案的mime type.
14880
		#必填參數:
14881
		#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
14882
		$conf["ileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
14883
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14884
		$conf["ileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
14885
		#可省略參數:
14886
		#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
14887
		$conf["ileAccess::getFileContent"]["web"]=$conf["web"];
14888
		#參考資料:
14889
		#file(),取得檔案內容的行數.
14890
		#file=>http:#php.net/manual/en/function.file.php
14891
		#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
14892
		#filesize=>http://php.net/manual/en/function.filesize.php
14893
		$getFileContent=fileAccess::getFileContent($conf["ileAccess::getFileContent"]);
14894
		unset($conf["ileAccess::getFileContent"]);
14895
 
14896
		#如果讀取檔案失敗
14897
		if($getFileContent["status"]==="false"){
14898
 
14899
			#設置執行失敗
14900
			$result["status"]="false";
14901
 
14902
			#設置執行失敗訊息
14903
			$result["error"]=$getFileContent;
14904
 
14905
			#回傳結果
14906
			return $result;
14907
 
14908
			}#if end
14909
 
14910
		#針對每列檔案內容
14911
		foreach($getFileContent["fileContent"] as $line){
14912
 
14913
			#針對每個要搜尋的變數
14914
			foreach($conf["varName"] as $keyWord){
14915
 
14916
				#如果關鍵字小於被搜尋的字串長度
14917
				if( strlen($line) < strlen($keyWord)+1 ){
14918
 
14919
					#跳過
14920
					continue;
14921
 
14922
					}#if end
14923
 
14924
				#函式說明:
14925
				#取得符合特定字首與字尾的字串
14926
				#回傳結果:
14927
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
14928
				#$result["function"],當前執行的函數名稱.
14929
				#$result["error"],錯誤訊息陣列.
14930
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
14931
				#$result["returnString"],爲符合字首條件的字串內容。
14932
				#$result["argu"],使用的參數.
14933
				#必填參數:
14934
				#$conf["checkString"],字串,要檢查的字串.
14935
				$conf["search::getMeetConditionsString"]["checkString"]=$line;
14936
				#可省略參數:
14937
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
14938
				$conf["search::getMeetConditionsString"]["frontWord"]="$".$keyWord;
14939
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
14940
				$conf["search::getMeetConditionsString"]["tailWord"]=";";
14941
				#參考資料:
14942
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
14943
				$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
14944
				unset($conf["search::getMeetConditionsString"]);
14945
 
14946
				#如果失敗
14947
				if($getMeetConditionsString["status"]==="false"){
14948
 
14949
					#設置執行失敗
14950
					$result["status"]="false";
14951
 
14952
					#設置執行失敗訊息
14953
					$result["error"]=$getMeetConditionsString;
14954
 
14955
					#回傳結果
14956
					return $result;
14957
 
14958
					}#if end	
14959
 
14960
				#如果有找到關鍵字
14961
				if($getMeetConditionsString["founded"]==="true"){
14962
 
14963
					#剔除變數名稱
14964
					#函式說明:
14965
					#將字串特定關鍵字與其前面的內容剔除
14966
					#回傳結果:
14967
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14968
					#$result["error"],錯誤訊息陣列.
14969
					#$result["warning"],警告訊息鎮列.
14970
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
14971
					#$result["function"],當前執行的函數名稱.
14972
					#$result["oriStr"],要處理的原始字串內容.
14973
					#$result["content"],處理好的的字串內容.	
14974
					#必填參數:
14975
					#$conf["stringIn"],字串,要處理的字串.
14976
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$line;
14977
					#$conf["keyWord"],字串,特定字串.
14978
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="$".$keyWord;
14979
					#可省略參數:
14980
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14981
					#$conf["recursive"]="true";
14982
					#參考資料:
14983
					#無.
14984
					#備註:
14985
					#無.
14986
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
14987
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
14988
 
14989
					#如果執行失敗
14990
					if($delStrBeforeKeyWord["status"]==="false"){
14991
 
14992
						#設置執行失敗
14993
						$result["status"]="false";
14994
 
14995
						#設置執行失敗訊息
14996
						$result["error"]=$delStrBeforeKeyWord;
14997
 
14998
						#回傳結果
14999
						return $result;
15000
 
15001
						}#if end
15002
 
15003
					#如果沒有找到應該存在的php變數
15004
					if($delStrBeforeKeyWord["founded"]==="false"){
15005
 
15006
						#設置執行失敗
15007
						$result["status"]="false";
15008
 
15009
						#設置執行失敗訊息
15010
						$result["error"]=$delStrBeforeKeyWord;
15011
 
15012
						#回傳結果
15013
						return $result;
15014
 
15015
						}#if end
15016
 
15017
					#剔除 "=" 前面的內容
15018
					#函式說明:
15019
					#將字串特定關鍵字與其前面的內容剔除
15020
					#回傳結果:
15021
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15022
					#$result["error"],錯誤訊息陣列.
15023
					#$result["warning"],警告訊息鎮列.
15024
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15025
					#$result["function"],當前執行的函數名稱.
15026
					#$result["oriStr"],要處理的原始字串內容.
15027
					#$result["content"],處理好的的字串內容.	
15028
					#必填參數:
15029
					#$conf["stringIn"],字串,要處理的字串.
15030
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
15031
					#$conf["keyWord"],字串,特定字串.
15032
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="=";
15033
					#可省略參數:
15034
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
15035
					#$conf["recursive"]="true";
15036
					#參考資料:
15037
					#無.
15038
					#備註:
15039
					#無.
15040
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15041
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
15042
 
15043
					#如果執行失敗
15044
					if($delStrBeforeKeyWord["status"]==="false"){
15045
 
15046
						#設置執行失敗
15047
						$result["status"]="false";
15048
 
15049
						#設置執行失敗訊息
15050
						$result["error"]=$delStrBeforeKeyWord;
15051
 
15052
						#回傳結果
15053
						return $result;
15054
 
15055
						}#if end
15056
 
15057
					#如果沒有找“=”關鍵字
15058
					if($delStrBeforeKeyWord["founded"]==="false"){
15059
 
15060
						#跳過
15061
						continue;
15062
 
15063
						}#if end
15064
 
15065
					#剔除 value 前面的空白
15066
					#函式說明:
15067
					#將字串特定關鍵字與其前面的內容剔除
15068
					#回傳結果:
15069
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15070
					#$result["error"],錯誤訊息陣列.
15071
					#$result["warning"],警告訊息鎮列.
15072
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15073
					#$result["function"],當前執行的函數名稱.
15074
					#$result["oriStr"],要處理的原始字串內容.
15075
					#$result["content"],處理好的的字串內容.	
15076
					#必填參數:
15077
					#$conf["stringIn"],字串,要處理的字串.
15078
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
15079
					#$conf["keyWord"],字串,特定字串.
15080
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
15081
					#可省略參數:
15082
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
15083
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15084
					#參考資料:
15085
					#無.
15086
					#備註:
15087
					#無.
15088
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15089
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
15090
 
15091
					#如果執行失敗
15092
					if($delStrBeforeKeyWord["status"]==="false"){
15093
 
15094
						#設置執行失敗
15095
						$result["status"]="false";
15096
 
15097
						#設置執行失敗訊息
15098
						$result["error"]=$delStrBeforeKeyWord;
15099
 
15100
						#回傳結果
15101
						return $result;
15102
 
15103
						}#if end
15104
 
15105
					#取得找到的變數
15106
					eval("\$result[\"content\"][\"".$keyWord."\"][]=".$delStrBeforeKeyWord["content"]);
15107
 
15108
					}#if end
15109
 
15110
				}#foreach end
15111
 
15112
			}#foreach end
15113
 
15114
		#設置執行正常
15115
		$result["status"]="true";
15116
 
15117
		#回傳結果
15118
		return $result;
15119
 
15120
		}#function parseVaraiableInPHPfile end
15121
 
15122
	/*
15123
	#函式說明:
15124
	#開啟特定目錄,取得底下的檔案路徑清單.
15125
	#回傳結果:
15126
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15127
	#$result["error"],錯誤訊息.
15128
	#$result["function"],當前執行的函數名稱.
15129
	#$result["argu"],所使用的參數.
15130
	#$result["content"],讀取到的內容陣列.
15131
	#$result["content"][$i],第$i+1個結果.
15132
	#$result["content"][$i]["name"],第$i+1個名稱.
15133
	#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.
15134
	#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.
15135
	#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).
15136
	#必填參數:
15137
	#$conf["path"],字串,要取得檔案資訊的所屬路徑.
15138
	$conf["path"]="";
15139
	#可省略參數:
15140
	#無.
15141
	#參考資料
15142
	#無.
15143
	#備註:
15144
	#無.
15145
	*/
15146
	public static function listInfo(&$conf){
15147
 
15148
		#初始化要回傳的結果
15149
		$result=array();
15150
 
15151
		#取得當前執行的函數名稱
15152
		$result["function"]=__FUNCTION__;
15153
 
15154
		#如果沒有參數
15155
		if(func_num_args()==0){
15156
 
15157
			#設置執行失敗
15158
			$result["status"]="false";
15159
 
15160
			#設置執行錯誤訊息
15161
			$result["error"]="函數".$result["function"]."需要參數";
15162
 
15163
			#回傳結果
15164
			return $result;
15165
 
15166
			}#if end		
15167
 
15168
		#取得參數
15169
		$result["argu"]=$conf;
15170
 
15171
		#如果 $conf 不為陣列
15172
		if(gettype($conf)!=="array"){
15173
 
15174
			#設置執行失敗
15175
			$result["status"]="false";
15176
 
15177
			#設置執行錯誤訊息
15178
			$result["error"][]="\$conf變數須為陣列形態";
15179
 
15180
			#如果傳入的參數為 null
15181
			if($conf===null){
15182
 
15183
				#設置執行錯誤訊息
15184
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15185
 
15186
				}#if end
15187
 
15188
			#回傳結果
15189
			return $result;
15190
 
15191
			}#if end
15192
 
15193
		#函式說明:
15194
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15195
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15196
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15197
		#$result["function"],當前執行的函式名稱.
15198
		#$result["argu"],設置給予的參數.
15199
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15200
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15201
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15202
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15203
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15204
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15205
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15206
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15207
		#必填寫的參數:
15208
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15209
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
15210
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15211
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15212
		#可以省略的參數:
15213
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15214
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15215
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15216
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15217
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15218
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15219
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15220
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
15221
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15222
		#$conf["canBeEmpty"]=array();
15223
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15224
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
15225
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15226
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
15227
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15228
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
15229
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15230
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
15231
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15232
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15233
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15234
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15235
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15236
		#$conf["arrayCountEqualCheck"][]=array();
15237
		#參考資料來源:
15238
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15239
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15240
		unset($conf["variableCheck::checkArguments"]);
15241
 
15242
		#如果檢查參數失敗
15243
		if($checkArguments["status"]==="false"){
15244
 
15245
			#設置執行失敗
15246
			$result["status"]="false";
15247
 
15248
			#設置執行失敗訊息
15249
			$result["error"]=$checkArguments;
15250
 
15251
			#回傳結果
15252
			return $result;
15253
 
15254
			}#if end
15255
 
15256
		#如果檢查參數不通過
15257
		if($checkArguments["passed"]==="false"){
15258
 
15259
			#設置執行失敗
15260
			$result["status"]="false";
15261
 
15262
			#設置執行失敗訊息
15263
			$result["error"]=$checkArguments;
15264
 
15265
			#回傳結果
15266
			return $result;
15267
 
15268
			}#if end
15269
 
15270
		#初始化儲存解析出來的變數內容
15271
		$result["content"]=array();
15272
 
15273
		#取得特定位置的資訊
15274
		$pathInfo=@dir($conf["path"]);
15275
 
15276
		#如果取得路徑資訊失敗
15277
		if($pathInfo===false){
15278
 
15279
			#設置執行失敗
15280
			$result["status"]="false";
15281
 
15282
			#設置執行失敗訊息
15283
			$result["error"][]="無法存取路徑(".$conf["path"].")";
15284
 
15285
			#回傳結果
15286
			return $result;
15287
 
15288
			}#if end
15289
 
15290
		#讀取底下一個檔案,暫存到 $tmpItem 裡面,且當結果不為 false 時進入迴圈.
15291
		while(false !== $tmpItem = $pathInfo->read()){
15292
 
15293
			#宣告儲存資訊的變數
15294
			$item=array();
15295
 
15296
			#儲存名稱
15297
			$item["name"]=$tmpItem;
15298
 
15299
			#預設不為資料夾
15300
			$item["dir"]="false";
15301
 
15302
			#若為資料夾
15303
			if(is_dir($conf["path"]."/".$tmpItem)){
15304
 
15305
				#設置為"true"
15306
				$item["dir"]="true";
15307
 
15308
				}#if end
15309
 
15310
			#取得檔案識別器
15311
			$finfo = finfo_open(FILEINFO_MIME);
15312
 
15313
			#取得 info
15314
			$item["info"]=@finfo_file($finfo,$conf["path"]."/".$tmpItem);
15315
 
15316
			#取得檔案大小
15317
			$item["size"]=filesize($conf["path"]."/".$tmpItem);
15318
 
15319
			#close connection
15320
			finfo_close($finfo);
15321
 
15322
			#記錄該檔案資訊
15323
			$result["content"][]=$item;
15324
 
15325
			}#while end
15326
 
15327
		#設置執行正常
15328
		$result["status"]="true";
15329
 
15330
		#回傳結果
15331
		return $result;
15332
 
15333
		}#function listInfo end
15334
 
15335
	/*
15336
	#函式說明:
15337
	#取得目錄底下的詳細資訊.
15338
	#回傳結果:
15339
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15340
	#$result["error"],錯誤訊息.
15341
	#$result["function"],當前執行的函數名稱.
15342
	#$result["size"],該清單的大小,單位為bytes.
15343
	#$result["dataCount"],該清單的長度.
15344
	#$result["path"],字串,檢視的路徑,必為"/"結尾.
15345
	#$result["content"],指定目錄底下的所有檔案資訊.
15346
	#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
15347
	#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.
15348
	#$result["content"][$i]["permission"],第$i個節點權限.
15349
	#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
15350
	#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
15351
	#$result["content"][$i]["bytes"],第$i個節點大小.
15352
	#$result["content"][$i]["date"],第$i個節點最後變更日期.
15353
	#$result["content"][$i]["time"],第$i個節點最後異動時間.
15354
	#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
15355
	#$result["content"][$i]["timezone"],第$i個節點的時區.
15356
	#$result["content"][$i]["name"],第$i個節點的名稱.
15357
	#$result["content"][$i]["secondName"],第$i個節點為檔案時,若有附檔名,會記錄在這.
15358
	#$result["content"][$i]["mimeType"],第$i個節點為檔案且可以讀取時,會有 mime type 可取得.
15359
	#必填參數:
15360
	#$conf["path"],字串,要檢視的路徑,若非"/"結尾,會自動補上.
15361
	$conf["path"]="";
15362
	#可省略參數:
15363
	#無.
15364
	#參考資料:
15365
	#https://www.businessweekly.com.tw/careers/Blog/14307
15366
	#備註:
15367
	#無.
15368
	*/
15369
	public static function ls(&$conf){
15370
 
15371
		#初始化要回傳的結果
15372
		$result=array();
15373
 
15374
		#取得當前執行的函數名稱
15375
		$result["function"]=__FUNCTION__;
15376
 
15377
		#如果沒有參數
15378
		if(func_num_args()==0){
15379
 
15380
			#設置執行失敗
15381
			$result["status"]="false";
15382
 
15383
			#設置執行錯誤訊息
15384
			$result["error"]="函數".$result["function"]."需要參數";
15385
 
15386
			#回傳結果
15387
			return $result;
15388
 
15389
			}#if end
15390
 
15391
		#取得參數
15392
		$result["argu"]=$conf;
15393
 
15394
		#如果 $conf 不為陣列
15395
		if(gettype($conf)!=="array"){
15396
 
15397
			#設置執行失敗
15398
			$result["status"]="false";
15399
 
15400
			#設置執行錯誤訊息
15401
			$result["error"][]="\$conf變數須為陣列形態";
15402
 
15403
			#如果傳入的參數為 null
15404
			if(is_null($conf)){
15405
 
15406
				#設置執行錯誤訊息
15407
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15408
 
15409
				}#if end
15410
 
15411
			#回傳結果
15412
			return $result;
15413
 
15414
			}#if end
15415
 
15416
		#函式說明:
15417
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
15418
		#回傳結果:
15419
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15420
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15421
		#$result["simpleError"],簡單表示的錯誤訊息.
15422
		#$result["function"],當前執行的函式名稱.
15423
		#$result["argu"],設置給予的參數.
15424
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15425
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15426
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15427
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15428
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15429
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15430
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15431
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15432
		#必填參數:
15433
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15434
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15435
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15436
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15437
		#可省略參數:
15438
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15439
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15440
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15441
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15442
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15443
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15444
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15445
		#$conf["canNotBeEmpty"]=array();
15446
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15447
		#$conf["canBeEmpty"]=array();
15448
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15449
		#$conf["skipableVariableCanNotBeEmpty"]=array();
15450
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15451
		#$conf["skipableVariableName"]=array();
15452
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15453
		#$conf["skipableVariableType"]=array();
15454
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15455
		#$conf["skipableVarDefaultValue"]=array("");
15456
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15457
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15458
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15459
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15460
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15461
		#$conf["arrayCountEqualCheck"][]=array();
15462
		#參考資料:
15463
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15464
		#備註:
15465
		#無.
15466
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15467
		unset($conf["variableCheck::checkArguments"]);
15468
 
15469
		#如果執行失敗
15470
		if($checkArguments["status"]==="false"){
15471
 
15472
			#設置執行錯誤
15473
			$result["status"]="false";
15474
 
15475
			#設置錯誤訊息
15476
			$result["error"]=$checkArguments;
15477
 
15478
			#回傳結果
15479
			return $result;
15480
 
15481
			}#if end
15482
 
15483
		#如果參數檢查不通過
15484
		if($checkArguments["passed"]==="false"){
15485
 
15486
			#設置執行錯誤
15487
			$result["status"]="false";
15488
 
15489
			#設置錯誤訊息
15490
			$result["error"]=$checkArguments;
15491
 
15492
			#回傳結果
15493
			return $result;
15494
 
15495
			}#if end
15496
 
15497
		#確認 $conf["path"] 是否為 "/" 結尾
15498
		#函式說明:
15499
		#取得符合特定字首與字尾的字串
15500
		#回傳結果:
15501
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
15502
		#$result["function"],當前執行的函數名稱.
15503
		#$result["error"],錯誤訊息陣列.
15504
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
15505
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
15506
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
15507
		#$result["argu"],使用的參數.
15508
		#必填參數:
15509
		#$conf["checkString"],字串,要檢查的字串.
15510
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
15511
		#可省略參數:
15512
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
15513
		#$conf["frontWord"]="";
15514
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
15515
		$conf["search::getMeetConditionsString"]["tailWord"]="/";
15516
		#參考資料:
15517
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
15518
		#備註:
15519
		#無.
15520
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
15521
		unset($conf["search::getMeetConditionsString"]);
15522
 
15523
		#如果執行失敗
15524
		if($getMeetConditionsString["status"]==="false"){
15525
 
15526
			#設置執行錯誤
15527
			$result["status"]="false";
15528
 
15529
			#設置錯誤訊息
15530
			$result["error"]=$getMeetConditionsString;
15531
 
15532
			#回傳結果
15533
			return $result;
15534
 
15535
			}#if end
15536
 
15537
		#如果沒有 "/" 結尾
15538
		if($getMeetConditionsString["founded"]==="false"){
15539
 
15540
			#於結尾加上 "/"
15541
			$conf["path"]=$conf["path"]."/";
15542
 
15543
			}#if end
15544
 
15545
		#記錄真正的路徑
15546
		$result["path"]=$conf["path"];
15547
 
15548
		#函式說明:
15549
		#呼叫shell執行系統命令,並取得回傳的內容.
15550
		#回傳結果:
15551
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15552
		#$result["error"],錯誤訊息陣列.
15553
		#$result["function"],當前執行的函數名稱.
15554
		#$result["argu"],使用的參數.
15555
		#$result["cmd"],執行的指令內容.
15556
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
15557
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
15558
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
15559
		#$result["running"],是否還在執行.
15560
		#$result["pid"],pid.
15561
		#$result["statusCode"],執行結束後的代碼.
15562
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
15563
		#必填參數:
15564
		#$conf["command"],字串,要執行的指令.
15565
		$conf["external::callShell"]["command"]="ls";
15566
		#$conf["fileArgu"],字串,變數__FILE__的內容.
15567
		$conf["external::callShell"]["fileArgu"]=__FILE__;
15568
		#可省略參數:
15569
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
15570
		$conf["external::callShell"]["argu"]=array("-al","--full-time","-t","-B",$conf["path"]);
15571
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
15572
		#$conf["arguIsAddr"]=array();
15573
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
15574
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
15575
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
15576
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
15577
		#$conf["enablePrintDescription"]="true";
15578
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
15579
		#$conf["printDescription"]="";
15580
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
15581
		$conf["external::callShell"]["escapeshellarg"]="true";
15582
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
15583
		#$conf["thereIsShellVar"]=array();
15584
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
15585
		#$conf["username"]="";
15586
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
15587
		#$conf["password"]="";
15588
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
15589
		#$conf["useScript"]="";
15590
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
15591
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
15592
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
15593
		#$conf["inBackGround"]="";
15594
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
15595
		#$conf["getErr"]="false";
15596
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
15597
		#$conf["doNotRun"]="false";
15598
		#參考資料:
15599
		#exec=>http://php.net/manual/en/function.exec.php
15600
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
15601
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
15602
		#備註:
15603
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
15604
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
15605
		$callShell=external::callShell($conf["external::callShell"]);
15606
		unset($conf["external::callShell"]);
15607
 
15608
		#debug
15609
		#var_dump(__FILE__,__LINE__,$callShell);
15610
 
15611
		#如果執行失敗
15612
		if($callShell["status"]==="false"){
15613
 
15614
			#設置執行錯誤
15615
			$result["status"]="false";
15616
 
15617
			#設置錯誤訊息
15618
			$result["error"]=$callShell;
15619
 
15620
			#回傳結果
15621
			return $result;
15622
 
15623
			}#if end
15624
 
15625
		#初始化儲存檔案資訊為空
15626
		$result["content"]=array();
15627
 
15628
		#針對每行輸出
15629
		foreach($callShell["output"] as $index=>$line){
15630
 
15631
			#如果是第一筆
15632
			if($index===0){
15633
 
15634
				#取得資料筆數
15635
				$result["dataCount"]=explode(" ",$line)[0];
15636
 
15637
				#換下一輪
15638
				continue;
15639
 
15640
				}#if end
15641
 
15642
			#函式說明:
15643
			#將固定格式的字串分開,並回傳分開的結果.
15644
			#回傳結果:
15645
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15646
			#$result["error"],錯誤訊息陣列
15647
			#$result["function"],當前執行的函數名稱.
15648
			#$result["argu"],使用的參數.
15649
			#$result["oriStr"],要分割的原始字串內容
15650
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15651
			#$result["dataCounts"],爲總共分成幾段
15652
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15653
			#必填參數:
15654
			#$conf["stringIn"],字串,要處理的字串.
15655
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15656
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15657
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";
15658
			#可省略參數:
15659
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15660
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15661
			#參考資料:
15662
			#無.
15663
			#備註:
15664
			#無.
15665
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15666
			unset($conf["stringProcess::spiltString"]);
15667
 
15668
			#如果執行失敗
15669
			if($spiltString["status"]==="false"){
15670
 
15671
				#設置執行錯誤
15672
				$result["status"]="false";
15673
 
15674
				#設置錯誤訊息
15675
				$result["error"]=$spiltString;
15676
 
15677
				#回傳結果
15678
				return $result;
15679
 
15680
				}#if end
15681
 
15682
			#如果沒有分割用的" "
15683
			if($spiltString["found"]==="false"){
15684
 
15685
				#設置執行錯誤
15686
				$result["status"]="false";
15687
 
15688
				#設置錯誤訊息
15689
				$result["error"]=$spiltString;
15690
 
15691
				#回傳結果
15692
				return $result;
15693
 
15694
				}#if end
15695
 
15696
			#如果分割好的數量小於8
15697
			if($spiltString["dataCounts"]<8){
15698
 
15699
				#設置執行錯誤
15700
				$result["status"]="false";
15701
 
15702
				#設置錯誤訊息
15703
				$result["error"]=$spiltString;
15704
 
15705
				#回傳結果
15706
				return $result;
15707
 
15708
				}#if end
15709
 
15710
			#初始化要儲存的檔案資訊陣列
15711
			$fileInfo=array();
15712
 
15713
			#取得 節點類型、權限
15714
			$fileInfo["nType&permission"]=$spiltString["dataArray"][0];
15715
 
15716
			#剔除結尾的 "."
15717
			$fileInfo["nType&permission"]=substr($fileInfo["nType&permission"],0,strlen($fileInfo["nType&permission"])-1);
15718
 
15719
			#取得節點類型
15720
			$fileInfo["nType"]=$fileInfo["nType&permission"][0];
15721
 
15722
			#取得節點權限
15723
			$fileInfo["permission"]=substr($fileInfo["nType&permission"],1);
15724
 
15725
			#取得擁有者賬號
15726
			$fileInfo["ownByUser"]=$spiltString["dataArray"][2];
15727
 
15728
			#取得群組擁有者群組
15729
			$fileInfo["ownByGroup"]=$spiltString["dataArray"][3];
15730
 
15731
			#取得size
15732
			$fileInfo["bytes"]=$spiltString["dataArray"][4];
15733
 
15734
			#取得最後異動日期 
15735
			$fileInfo["date"]=$spiltString["dataArray"][5];
15736
 
15737
			#取得最後異動時間
15738
			$fileInfo["time"]=explode(".",$spiltString["dataArray"][6])[0];
15739
 
15740
			#取得最後異動的詳細時間
15741
			$fileInfo["timeDetail"]=$spiltString["dataArray"][6];
15742
 
15743
			#取得timezone資訊
15744
			$fileInfo["timezone"]=$spiltString["dataArray"][7];
15745
 
15746
			#函式說明:
15747
			#將固定格式的字串分開,並回傳分開的結果.
15748
			#回傳結果:
15749
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15750
			#$result["error"],錯誤訊息陣列
15751
			#$result["function"],當前執行的函數名稱.
15752
			#$result["argu"],使用的參數.
15753
			#$result["oriStr"],要分割的原始字串內容
15754
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15755
			#$result["dataCounts"],爲總共分成幾段
15756
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15757
			#必填參數:
15758
			#$conf["stringIn"],字串,要處理的字串.
15759
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15760
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15761
			$conf["stringProcess::spiltString"]["spiltSymbol"]=$fileInfo["date"]." ".$fileInfo["timeDetail"]." ".$fileInfo["timezone"];
15762
			#可省略參數:
15763
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15764
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15765
			#參考資料:
15766
			#無.
15767
			#備註:
15768
			#無.
15769
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15770
			unset($conf["stringProcess::spiltString"]);
15771
 
15772
			#如果執行失敗
15773
			if($spiltString["status"]==="false"){
15774
 
15775
				#設置執行錯誤
15776
				$result["status"]="false";
15777
 
15778
				#設置錯誤訊息
15779
				$result["error"]=$spiltString;
15780
 
15781
				#回傳結果
15782
				return $result;
15783
 
15784
				}#if end
15785
 
15786
			#如果沒有分割用的" "
15787
			if($spiltString["found"]==="false"){
15788
 
15789
				#設置執行錯誤
15790
				$result["status"]="false";
15791
 
15792
				#設置錯誤訊息
15793
				$result["error"]=$spiltString;
15794
 
15795
				#回傳結果
15796
				return $result;
15797
 
15798
				}#if end
15799
 
15800
			#如果分割好的數量小於8
15801
			if($spiltString["dataCounts"]<2){
15802
 
15803
				#設置執行錯誤
15804
				$result["status"]="false";
15805
 
15806
				#設置錯誤訊息
15807
				$result["error"]=$spiltString;
15808
 
15809
				#回傳結果
15810
				return $result;
15811
 
15812
				}#if end
15813
 
15814
			#取得節點名稱,剔除開頭的空白.
15815
			$fileInfo["name"]=substr($spiltString["dataArray"][1],1);
15816
 
15817
			#排除 "." 跟 ".."
15818
			if($fileInfo["name"]==="." || $fileInfo["name"]===".."){
15819
 
15820
				#跳過
15821
				continue;
15822
 
15823
				}#if end
15824
 
15825
			#如果是檔案
15826
			if($fileInfo["nType"]==="-"){
15827
 
15828
				#取得mime type
15829
				$fileInfo["mimeType"]=@mime_content_type($conf["path"].$fileInfo["name"]);
15830
 
15831
				#如果讀取失敗
15832
				if($fileInfo["mimeType"]===false){
15833
 
15834
					#通常為沒有權限
15835
 
15836
					#跳過該檔案
15837
					continue;
15838
 
15839
					}#if end
15840
 
15841
				#確認檔案名稱中間含是否有 "."
15842
				#函式說明:
15843
				#取得關鍵字在字串的哪個位置(字首,字尾,中間)
15844
				#回傳結果:
15845
				#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
15846
				#$result["error"],錯誤訊息陣列.
15847
				#$result["function"],當前執行的函數名稱.
15848
				#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".
15849
				#$result["argu"],傳入的參數.
15850
				#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
15851
				#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
15852
				#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
15853
				#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.
15854
				#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.
15855
				#必填參數:
15856
				#$conf["inputStr"],字串,被搜尋的字串.
15857
				$conf["search::findKeyWordPosition"]["inputStr"]=$fileInfo["name"];
15858
				#$conf["keyWord"],字串,關鍵字.
15859
				$conf["search::findKeyWordPosition"]["keyWord"]=".";
15860
				#可省略參數:
15861
				#無.
15862
				#參考資料:
15863
				#http://php.net/manual/en/function.strpos.php
15864
				#備註:
15865
				#無.
15866
				$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
15867
				unset($conf["search::findKeyWordPosition"]);
15868
 
15869
				#如果執行失敗
15870
				if($findKeyWordPosition["status"]==="false"){
15871
 
15872
					#設置執行錯誤
15873
					$result["status"]="false";
15874
 
15875
					#設置錯誤訊息
15876
					$result["error"]=$spiltString;
15877
 
15878
					#回傳結果
15879
					return $result;
15880
 
15881
					}#if end
15882
 
15883
				#如果含有 "." 存在
15884
				if($findKeyWordPosition["found"]==="true"){
15885
 
15886
					#如果 "." 是在中間,不是在尾巴.
15887
					if($findKeyWordPosition["center"]==="true" && $findKeyWordPosition["tail"]==="false"){
15888
 
15889
						#取得 "." 之後的內容
15890
						#函式說明:
15891
						#將字串特定關鍵字與其前面的內容剔除
15892
						#回傳結果:
15893
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15894
						#$result["error"],錯誤訊息陣列.
15895
						#$result["warning"],警告訊息鎮列.
15896
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15897
						#$result["function"],當前執行的函數名稱.
15898
						#$result["argu"],使用的參數.
15899
						#$result["oriStr"],要處理的原始字串內容.
15900
						#$result["content"],處理好的的字串內容.
15901
						#$result["deleted"],被移除的內容.
15902
						#必填參數:
15903
						#$conf["stringIn"],字串,要處理的字串.
15904
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileInfo["name"];
15905
						#$conf["keyWord"],字串,特定字串.
15906
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";
15907
						#可省略參數:
15908
						#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
15909
						$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15910
						#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
15911
						#$conf["lastResult"]=$delStrBeforeKeyWord;
15912
						#參考資料:
15913
						#無.
15914
						#備註:
15915
						#無.
15916
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15917
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
15918
 
15919
						#如果執行失敗
15920
						if($delStrBeforeKeyWord["status"]==="false"){
15921
 
15922
							#設置執行錯誤
15923
							$result["status"]="false";
15924
 
15925
							#設置錯誤訊息
15926
							$result["error"]=$spiltString;
15927
 
15928
							#回傳結果
15929
							return $result;
15930
 
15931
							}#if end
15932
 
15933
						#如果該存在的 "." 不存在
15934
						if($delStrBeforeKeyWord["founded"]==="false"){
15935
 
15936
							#設置執行錯誤
15937
							$result["status"]="false";
15938
 
15939
							#設置錯誤訊息
15940
							$result["error"]=$spiltString;
15941
 
15942
							#回傳結果
15943
							return $result;
15944
 
15945
							}#if end
15946
 
15947
						#取得附檔名
15948
						$fileInfo["secondName"]=$delStrBeforeKeyWord["content"];
15949
 
15950
						}#if end
15951
 
15952
					}#if end
15953
 
15954
				}#if end
15955
 
15956
			#儲存檔案資訊
15957
			$result["content"][]=$fileInfo;
15958
 
15959
			}#foreach end
15960
 
15961
		#設置清單的長度
15962
		$result["dataCount"]=count($result["content"]);
15963
 
15964
		#設置執行正常
15965
		$result["status"]="true";
15966
 
15967
		#回傳結果
15968
		return $result;
15969
 
15970
		}#function ls end
15971
 
15972
	/*
15973
	#函式說明:
15974
	#將 ~ 轉換為家目錄路徑
15975
	#回傳結果:
15976
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15977
	#$result["error"],錯誤訊息.
15978
	#$result["function"],當前執行的函數名稱.
15979
	#$result["content"],轉換好的內容.
15980
	#必填參數:
15981
	#$conf["fileArgu"],字串,變數__FILE__的內容.
15982
	$conf["fileArgu"]=__FILE__;
15983
	#可省略參數:
15984
	#無.
15985
	#參考資料:
15986
	#https://www.businessweekly.com.tw/careers/Blog/14307
15987
	#備註:
15988
	#無.
15989
	*/
15990
	public static function tildeToPath(&$conf){
15991
 
15992
		#初始化要回傳的結果
15993
		$result=array();
15994
 
15995
		#取得當前執行的函數名稱
15996
		$result["function"]=__FUNCTION__;
15997
 
15998
		#如果沒有參數
15999
		if(func_num_args()==0){
16000
 
16001
			#設置執行失敗
16002
			$result["status"]="false";
16003
 
16004
			#設置執行錯誤訊息
16005
			$result["error"]="函數".$result["function"]."需要參數";
16006
 
16007
			#回傳結果
16008
			return $result;
16009
 
16010
			}#if end		
16011
 
16012
		#取得參數
16013
		$result["argu"]=$conf;
16014
 
16015
		#如果 $conf 不為陣列
16016
		if(gettype($conf)!=="array"){
16017
 
16018
			#設置執行失敗
16019
			$result["status"]="false";
16020
 
16021
			#設置執行錯誤訊息
16022
			$result["error"][]="\$conf變數須為陣列形態";
16023
 
16024
			#如果傳入的參數為 null
16025
			if($conf===null){
16026
 
16027
				#設置執行錯誤訊息
16028
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16029
 
16030
				}#if end
16031
 
16032
			#回傳結果
16033
			return $result;
16034
 
16035
			}#if end
16036
 
16037
		#函式說明:
16038
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16039
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16040
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16041
		#$result["function"],當前執行的函式名稱.
16042
		#$result["argu"],設置給予的參數.
16043
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16044
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16045
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16046
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16047
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16048
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16049
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16050
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16051
		#必填寫的參數:
16052
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16053
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16054
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16055
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16056
		#可以省略的參數:
16057
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16058
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
16059
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16060
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
16061
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16062
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16063
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16064
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16065
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16066
		#$conf["canBeEmpty"]=array();
16067
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16068
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
16069
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16070
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
16071
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16072
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
16073
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16074
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
16075
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16076
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16077
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16078
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16079
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16080
		#$conf["arrayCountEqualCheck"][]=array();
16081
		#參考資料來源:
16082
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16083
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16084
		unset($conf["variableCheck::checkArguments"]);
16085
 
16086
		#如果檢查參數失敗
16087
		if($checkArguments["status"]==="false"){
16088
 
16089
			#設置執行失敗
16090
			$result["status"]="false";
16091
 
16092
			#設置執行失敗訊息
16093
			$result["error"]=$checkArguments;
16094
 
16095
			#回傳結果
16096
			return $result;
16097
 
16098
			}#if end
16099
 
16100
		#如果檢查參數不通過
16101
		if($checkArguments["passed"]==="false"){
16102
 
16103
			#設置執行失敗
16104
			$result["status"]="false";
16105
 
16106
			#設置執行失敗訊息
16107
			$result["error"]=$checkArguments;
16108
 
16109
			#回傳結果
16110
			return $result;
16111
 
16112
			}#if end
16113
 
16114
		#函式說明:
16115
		#呼叫shell執行系統命令,並取得回傳的內容.
16116
		#回傳結果:
16117
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16118
		#$result["error"],錯誤訊息陣列.
16119
		#$result["function"],當前執行的函數名稱.
16120
		#$result["argu"],使用的參數.
16121
		#$result["cmd"],執行的指令內容.
16122
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16123
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16124
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16125
		#$result["running"],是否還在執行.
16126
		#$result["pid"],pid.
16127
		#$result["statusCode"],執行結束後的代碼.
16128
		#必填參數:
16129
		#$conf["command"],字串,要執行的指令與.
16130
		$conf["external::callShell"]["command"]="echo";
16131
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16132
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16133
		#可省略參數:
16134
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16135
		$conf["external::callShell"]["argu"]=array("~");
16136
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16137
		#$conf["arguIsAddr"]=array();
16138
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16139
		#$conf["plainArgu"]=array();
16140
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16141
		#$conf["useApostrophe"]=array();
16142
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16143
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16144
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16145
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16146
		#$conf["enablePrintDescription"]="true";
16147
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16148
		#$conf["printDescription"]="";
16149
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16150
		$conf["external::callShell"]["escapeshellarg"]="true";
16151
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16152
		#$conf["thereIsShellVar"]=array();
16153
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16154
		#$conf["username"]="";
16155
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16156
		#$conf["password"]="";
16157
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16158
		#$conf["useScript"]="";
16159
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16160
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16161
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16162
		#$conf["inBackGround"]="";
16163
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16164
		#$conf["getErr"]="false";
16165
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16166
		#$conf["doNotRun"]="false";
16167
		#參考資料:
16168
		#exec=>http://php.net/manual/en/function.exec.php
16169
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16170
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16171
		#備註:
16172
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16173
		$callShell=external::callShell($conf["external::callShell"]);
16174
		unset($conf["external::callShell"]);
16175
 
16176
		#如果執行失敗
16177
		if($callShell["status"]==="false"){
16178
 
16179
			#設置執行失敗
16180
			$result["status"]="false";
16181
 
16182
			#設置執行失敗訊息
16183
			$result["error"]=$callShell;
16184
 
16185
			#回傳結果
16186
			return $result;
16187
 
16188
			}#if end
16189
 
16190
		#如果沒有預期的輸出
16191
		if(!isset($callShell["output"][0])){
16192
 
16193
			#設置執行失敗
16194
			$result["status"]="false";
16195
 
16196
			#設置執行失敗訊息
16197
			$result["error"][]="沒有得到預期的輸出";
16198
 
16199
			#設置執行失敗訊息
16200
			$result["error"][]=$callShell;
16201
 
16202
			#回傳結果
16203
			return $result;
16204
 
16205
			}#if end
16206
 
16207
		#取得輸出
16208
		$result["content"]=$callShell["output"][0];
16209
 
16210
		#設置執行正常
16211
		$result["status"]="true";
16212
 
16213
		#回傳結果
16214
		return $result;
16215
 
16216
		}#function tildeToPath end
16217
 
16218
	/*
16219
	#函式說明:
16220
	#建立軟連結.
16221
	#回傳結果:
16222
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16223
	#$result["error"],錯誤訊息.
16224
	#$result["function"],當前執行的函數名稱.
16225
	#$result["content"],軟連結的資訊.
16226
	#$result["cmd"],執行的指令陣列.
16227
	#必填參數:
16228
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16229
	$conf["fileArgu"]=__FILE__;
16230
	#$conf["linkTo"],字串,軟連結要指向哪邊.
16231
	$conf["linkTo"]="";
16232
	#可省略參數:
16233
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16234
	#$conf["path"]="";
16235
	#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
16236
	#$conf["name"]="";
16237
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16238
	#$conf["overWrite"]="true";
16239
	#參考資料:
16240
	#無.
16241
	#備註:
16242
	#無.
16243
	*/
16244
	public static function createLink(&$conf){
16245
 
16246
		#初始化要回傳的結果
16247
		$result=array();
16248
 
16249
		#取得當前執行的函數名稱
16250
		$result["function"]=__FUNCTION__;
16251
 
16252
		#如果沒有參數
16253
		if(func_num_args()==0){
16254
 
16255
			#設置執行失敗
16256
			$result["status"]="false";
16257
 
16258
			#設置執行錯誤訊息
16259
			$result["error"]="函數".$result["function"]."需要參數";
16260
 
16261
			#回傳結果
16262
			return $result;
16263
 
16264
			}#if end		
16265
 
16266
		#取得參數
16267
		$result["argu"]=$conf;
16268
 
16269
		#如果 $conf 不為陣列
16270
		if(gettype($conf)!=="array"){
16271
 
16272
			#設置執行失敗
16273
			$result["status"]="false";
16274
 
16275
			#設置執行錯誤訊息
16276
			$result["error"][]="\$conf變數須為陣列形態";
16277
 
16278
			#如果傳入的參數為 null
16279
			if($conf===null){
16280
 
16281
				#設置執行錯誤訊息
16282
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16283
 
16284
				}#if end
16285
 
16286
			#回傳結果
16287
			return $result;
16288
 
16289
			}#if end
16290
 
16291
		#函式說明:
16292
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16293
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16294
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16295
		#$result["function"],當前執行的函式名稱.
16296
		#$result["argu"],設置給予的參數.
16297
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16298
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16299
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16300
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16301
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16302
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16303
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16304
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16305
		#必填寫的參數:
16306
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16307
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16308
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16309
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16310
		#可以省略的參數:
16311
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16312
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkTo");
16313
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16314
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16315
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16316
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16317
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16318
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16319
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16320
		#$conf["canBeEmpty"]=array();
16321
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16322
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16323
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16324
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16325
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16326
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
16327
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16328
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false");
16329
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16330
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16331
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16332
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16333
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16334
		#$conf["arrayCountEqualCheck"][]=array();
16335
		#參考資料來源:
16336
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16337
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16338
		unset($conf["variableCheck::checkArguments"]);
16339
 
16340
		#如果檢查參數失敗
16341
		if($checkArguments["status"]==="false"){
16342
 
16343
			#設置執行失敗
16344
			$result["status"]="false";
16345
 
16346
			#設置執行失敗訊息
16347
			$result["error"]=$checkArguments;
16348
 
16349
			#回傳結果
16350
			return $result;
16351
 
16352
			}#if end
16353
 
16354
		#如果檢查參數不通過
16355
		if($checkArguments["passed"]==="false"){
16356
 
16357
			#設置執行失敗
16358
			$result["status"]="false";
16359
 
16360
			#設置執行失敗訊息
16361
			$result["error"]=$checkArguments;
16362
 
16363
			#回傳結果
16364
			return $result;
16365
 
16366
			}#if end
16367
 
16368
		#如果是相對位置
16369
		if(!(strpos($conf["linkTo"],"/")===0)){
16370
 
16371
			#將 $conf["linkTo"] 轉換為針對產生位置的相對位置.
16372
			#函式說明:
16373
			#將多個路徑字串變成相對於當前路徑的相對路徑字串
16374
			#回傳結果:
16375
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16376
			#$result["error"],錯誤訊息陣列.
16377
			#$result["function"],函數名稱. 
16378
			#$result["argu"],使用的參數.
16379
			#$result["content"],字串陣列,多個轉換好的相對路徑字串.
16380
			#必填參數:
16381
			#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
16382
			$conf["fileAccess::getRelativePath"]["path"]=array($conf["linkTo"]);
16383
			#$conf["fileArgu"],字串,當前路徑.
16384
			$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
16385
			#可省略參數:
16386
			#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
16387
			$conf["fileAccess::getRelativePath"]["baseFrom"]=$conf["path"];
16388
			#參考資料:
16389
			#無.
16390
			#備註:
16391
			#無.
16392
			$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
16393
			unset($conf["fileAccess::getRelativePath"]);
16394
 
16395
			#如果執行失敗
16396
			if($getRelativePath["status"]==="false"){
16397
 
16398
				#設置執行失敗
16399
				$result["status"]="false";
16400
 
16401
				#設置執行失敗訊息
16402
				$result["error"]=$getRelativePath;
16403
 
16404
				#回傳結果
16405
				return $result;
16406
 
16407
				}#if end
16408
 
16409
			/*
16410
			#break point
16411
			var_dump($conf);
16412
			var_dump($getRelativePath);
16413
			exit;
16414
			*/
16415
 
16416
			#取得執行的指令
16417
			$result["cmd"][]=$getRelativePath["cmd"];
16418
 
16419
			#取得正確的相對位置
16420
			$conf["linkTo"]=$getRelativePath["content"][0];
16421
 
16422
			}#if end
16423
 
16424
		#初始化給 ln 指令的參數
16425
		$paramsForLn=array("-s",$conf["linkTo"]);
16426
 
16427
		#函式說明:
16428
		#將字串特定關鍵字與其前面的內容剔除
16429
		#回傳結果:
16430
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16431
		#$result["error"],錯誤訊息陣列.
16432
		#$result["warning"],警告訊息鎮列.
16433
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
16434
		#$result["function"],當前執行的函數名稱.
16435
		#$result["oriStr"],要處理的原始字串內容.
16436
		#$result["content"],處理好的的字串內容.	
16437
		#必填參數:
16438
		#$conf["stringIn"],字串,要處理的字串.
16439
		$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$conf["linkTo"];
16440
		#$conf["keyWord"],字串,特定字串.
16441
		$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";
16442
		#可省略參數:
16443
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
16444
		$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
16445
		#參考資料:
16446
		#無.
16447
		#備註:
16448
		#無.
16449
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
16450
		unset($conf["stringProcess::delStrBeforeKeyWord"]);
16451
 
16452
		#var_dump(__LINE__." ".print_r($delStrBeforeKeyWord,true));
16453
 
16454
		#如果執行失敗
16455
		if($delStrBeforeKeyWord["status"]==="false"){
16456
 
16457
			#設置執行失敗
16458
			$result["status"]="false";
16459
 
16460
			#設置執行失敗訊息
16461
			$result["error"]=$delStrBeforeKeyWord;
16462
 
16463
			#回傳結果
16464
			return $result;
16465
 
16466
			}#if end
16467
 
16468
		#如果沒有找到 "/"
16469
		if($delStrBeforeKeyWord["founded"]==="false"){
16470
 
16471
			#設置 預設的 軟連名稱
16472
			$softLink=$conf["linkTo"];
16473
 
16474
			}#if end
16475
 
16476
		#反之有 "/"
16477
		else{
16478
 
16479
			#設置 預設的 軟連結名稱
16480
			$softLink=$delStrBeforeKeyWord["content"];
16481
 
16482
			}#else end
16483
 
16484
		/*
16485
		#break point
16486
		var_dump(__LINE__." ".$softLink);
16487
		exit;
16488
		*/
16489
 
16490
		#預設欲建立的軟連結名稱
16491
		$createdSoftLink=$softLink;
16492
 
16493
		#如果有設置 path
16494
		if(isset($conf["path"])){
16495
 
16496
			#確認 path 存在
16497
			#函式說明:
16498
			#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
16499
			#回傳結果:
16500
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16501
			#$result["error"],錯誤訊息陣列
16502
			#$result["warning"],警告訊息陣列
16503
			#必填參數:
16504
			#$conf["dirPositionAndName"]="";#新建的位置與名稱
16505
			$conf["fileAccess::createNewFolder"]["dirPositionAndName"]=$conf["path"];
16506
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16507
			$conf["fileAccess::createNewFolder"]["fileArgu"]=$conf["fileArgu"];
16508
			#可省略參數:
16509
			#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
16510
			#$conf["dirPermission"]="";
16511
			#參考資料:
16512
			#mkdir=>http://php.net/manual/en/function.mkdir.php
16513
			#chmod=>http://php.net/manual/en/function.chmod.php
16514
			#參考資料:
16515
			#無.
16516
			#備註:
16517
			#同 function createFolderAfterCheck.
16518
			$createNewFolder=fileAccess::createNewFolder($conf["fileAccess::createNewFolder"]);
16519
			unset($conf["fileAccess::createNewFolder"]);
16520
 
16521
			#如果執行失敗
16522
			if($createNewFolder["status"]==="false"){
16523
 
16524
				#設置執行失敗
16525
				$result["status"]="false";
16526
 
16527
				#設置執行失敗訊息
16528
				$result["error"]=$createNewFolder;
16529
 
16530
				#回傳結果
16531
				return $result;
16532
 
16533
				}#if end
16534
 
16535
			#var_dump(__LINE__." ".print_r($conf,true));
16536
 
16537
			#預設要加 slash
16538
			$slash="/";
16539
 
16540
			#如果 path 為 "/" 結尾
16541
			if($conf["path"][strlen($conf["path"])-1]==="/"){
16542
 
16543
				#不用 slash
16544
				$slash="";
16545
 
16546
				}#if end
16547
 
16548
			#如果有設置 name
16549
			if(isset($conf["name"])){
16550
 
16551
				#指定軟連結要放在哪邊
16552
				$paramsForLn[]=$conf["path"].$slash.$conf["name"];
16553
 
16554
				#更新欲建立的軟連結名稱
16555
				$createdSoftLink=$conf["path"].$slash.$conf["name"];
16556
 
16557
				/*
16558
				#break point
16559
				var_dump($conf["path"],$softLink,$createdSoftLink);
16560
				exit;
16561
				*/
16562
 
16563
				}#if end
16564
 
16565
			#反之
16566
			else{
16567
 
16568
				#指定軟連結要放在哪邊
16569
				$paramsForLn[]=$conf["path"];
16570
 
16571
				#更新欲建立的軟連結名稱
16572
				$createdSoftLink=$conf["path"].$slash.$softLink;
16573
 
16574
				/*
16575
				#break point
16576
				var_dump($conf["path"],$softLink,$createdSoftLink);
16577
				exit;
16578
				*/
16579
 
16580
				}#else end
16581
 
16582
			#var_dump($createdSoftLink);
16583
 
16584
			}#if end
16585
 
16586
		#反之如果有設置 name
16587
		else if(isset($conf["name"])){
16588
 
16589
			#指定軟連結的名稱
16590
			$paramsForLn[]=$conf["name"];
16591
 
16592
			#更新欲建立的軟連結名稱
16593
			$createdSoftLink=$conf["name"];
16594
 
16595
			#var_dump(__LINE__." ".$createdSoftLink);
16596
 
16597
			}#if end
16598
 
16599
		/*
16600
		# break point
16601
		var_dump($createdSoftLink);
16602
		exit;
16603
		*/
16604
 
16605
		#如果要覆蓋既有的目標
16606
		if($conf["overWrite"]==="true"){
16607
 
16608
			#函式說明:
16609
			#移除檔案
16610
			#回傳結果:
16611
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
16612
			#$result["error"],錯誤訊息陣列
16613
			#$result["warning"],警告訊息陣列
16614
			#$result["function"],當前執行的函數名稱
16615
			#必填參數:
16616
			#$conf["fileAddress"],字串,要移除檔案的位置.
16617
			$conf["fileAccess::delFile"]["fileAddress"]=$createdSoftLink;
16618
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
16619
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
16620
			#可省略參數:
16621
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
16622
			#$conf["commentsArray"]=array("");
16623
			#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
16624
			$conf["fileAccess::delFile"]["allowDelSymlink"]="true";
16625
			#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
16626
			$conf["fileAccess::delFile"]["allowDelFolder"]="true";
16627
			#參考資料:
16628
			#無.
16629
			#備註:
16630
			#無.
16631
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
16632
			unset($conf["fileAccess::delFile"]);	
16633
 
16634
			/*
16635
			#break point
16636
			var_dump($delFile);
16637
			exit;
16638
			*/
16639
 
16640
			#如果執行失敗
16641
			if($delFile["status"]==="false"){
16642
 
16643
				#設置執行失敗
16644
				$result["status"]="false";
16645
 
16646
				#設置執行失敗訊息
16647
				$result["error"]=$delFile;
16648
 
16649
				#回傳結果
16650
				return $result;
16651
 
16652
				}#if end
16653
 
16654
			}#if end
16655
 
16656
		#函式說明:
16657
		#呼叫shell執行系統命令,並取得回傳的內容.
16658
		#回傳結果:
16659
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16660
		#$result["error"],錯誤訊息陣列.
16661
		#$result["function"],當前執行的函數名稱.
16662
		#$result["argu"],使用的參數.
16663
		#$result["cmd"],執行的指令內容.
16664
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16665
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16666
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16667
		#$result["running"],是否還在執行.
16668
		#$result["pid"],pid.
16669
		#$result["statusCode"],執行結束後的代碼.
16670
		#必填參數:
16671
		#$conf["command"],字串,要執行的指令與.
16672
		$conf["external::callShell"]["command"]="ln";
16673
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16674
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16675
		#可省略參數:
16676
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16677
		$conf["external::callShell"]["argu"]=$paramsForLn;
16678
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16679
		#$conf["arguIsAddr"]=array();
16680
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16681
		#$conf["plainArgu"]=array();
16682
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16683
		#$conf["useApostrophe"]=array();
16684
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16685
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16686
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16687
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16688
		#$conf["enablePrintDescription"]="true";
16689
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16690
		#$conf["printDescription"]="";
16691
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16692
		$conf["external::callShell"]["escapeshellarg"]="true";
16693
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16694
		#$conf["thereIsShellVar"]=array();
16695
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16696
		#$conf["username"]="";
16697
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16698
		#$conf["password"]="";
16699
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16700
		#$conf["useScript"]="";
16701
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16702
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16703
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16704
		#$conf["inBackGround"]="";
16705
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16706
		$conf["external::callShell"]["getErr"]="true";
16707
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16708
		#$conf["doNotRun"]="false";
16709
		#參考資料:
16710
		#exec=>http://php.net/manual/en/function.exec.php
16711
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16712
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16713
		#備註:
16714
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16715
		$callShell=external::callShell($conf["external::callShell"]);
16716
		unset($conf["external::callShell"]);
16717
 
16718
		#如果執行失敗
16719
		if($callShell["status"]==="false"){
16720
 
16721
			#設置執行失敗
16722
			$result["status"]="false";
16723
 
16724
			#設置執行失敗訊息
16725
			$result["error"]=$callShell;
16726
 
16727
			#回傳結果
16728
			return $result;
16729
 
16730
			}#if end
16731
 
16732
		#保存執行的指令
16733
		$result["cmd"][]=$callShell["cmd"];
16734
 
16735
		#初始化給 ls 指令的參數
16736
		$paramsForLs=array("-l",$paramsForLn[count($paramsForLn)-1]);
16737
 
16738
		#取得軟連結的資訊
16739
		#函式說明:
16740
		#呼叫shell執行系統命令,並取得回傳的內容.
16741
		#回傳結果:
16742
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16743
		#$result["error"],錯誤訊息陣列.
16744
		#$result["function"],當前執行的函數名稱.
16745
		#$result["argu"],使用的參數.
16746
		#$result["cmd"],執行的指令內容.
16747
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16748
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16749
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16750
		#$result["running"],是否還在執行.
16751
		#$result["pid"],pid.
16752
		#$result["statusCode"],執行結束後的代碼.
16753
		#必填參數:
16754
		#$conf["command"],字串,要執行的指令與.
16755
		$conf["external::callShell"]["command"]="ls";
16756
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16757
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16758
		#可省略參數:
16759
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16760
		$conf["external::callShell"]["argu"]=$paramsForLs;
16761
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16762
		#$conf["arguIsAddr"]=array();
16763
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16764
		#$conf["plainArgu"]=array();
16765
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16766
		#$conf["useApostrophe"]=array();
16767
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16768
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16769
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16770
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16771
		#$conf["enablePrintDescription"]="true";
16772
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16773
		#$conf["printDescription"]="";
16774
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16775
		$conf["external::callShell"]["escapeshellarg"]="true";
16776
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16777
		#$conf["thereIsShellVar"]=array();
16778
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16779
		#$conf["username"]="";
16780
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16781
		#$conf["password"]="";
16782
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16783
		#$conf["useScript"]="";
16784
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16785
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16786
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16787
		#$conf["inBackGround"]="";
16788
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16789
		$conf["external::callShell"]["getErr"]="true";
16790
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16791
		#$conf["doNotRun"]="false";
16792
		#參考資料:
16793
		#exec=>http://php.net/manual/en/function.exec.php
16794
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16795
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16796
		#備註:
16797
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16798
		$callShell=external::callShell($conf["external::callShell"]);
16799
		unset($conf["external::callShell"]);
16800
 
16801
		#如果執行失敗
16802
		if($callShell["status"]==="false"){
16803
 
16804
			#設置執行失敗
16805
			$result["status"]="false";
16806
 
16807
			#設置執行失敗訊息
16808
			$result["error"]=$callShell;
16809
 
16810
			#回傳結果
16811
			return $result;
16812
 
16813
			}#if end
16814
 
16815
		#保存執行的指令
16816
		$result["cmd"][]=$callShell["cmd"];
16817
 
16818
		#取得軟連結的資訊
16819
		$result["content"]=$callShell["output"];
16820
 
16821
		#設置執行正常
16822
		$result["status"]="true";
16823
 
16824
		#回傳結果
16825
		return $result;
16826
 
16827
		}#function createLink end
16828
 
16829
	/*
16830
	#函式說明:
16831
	#針對特定目錄下的內容建立軟連結.
16832
	#回傳結果:
16833
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16834
	#$result["error"],錯誤訊息.
16835
	#$result["function"],當前執行的函數名稱.
16836
	#$result["content"],字串陣列,每個建立的軟連結資訊.
16837
	#必填參數:
16838
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16839
	$conf["fileArgu"]=__FILE__;
16840
	#$conf["linkToDir"],字串,軟連結要指向哪個目錄底下的內容.
16841
	$conf["linkToDir"]="";
16842
	#可省略參數:
16843
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16844
	#$conf["path"]="";
16845
	#$conf["name"],字串陣列,軟連結的名稱,預設為 "linkToDir" 目錄底下的檔案或目錄名稱.若要指定特定檔案目錄的軟連結名稱,則可以用 $conf["name"][]=array("原始名稱","新的名稱"); 來指定.
16846
	#$conf["name"]=array(array("oriName","newName"));
16847
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16848
	#$conf["overWrite"]="true";
16849
	#參考資料:
16850
	#無.
16851
	#備註:
16852
	#無.
16853
	*/
16854
	public static function createMultiLinkInDir(&$conf){
16855
 
16856
		#初始化要回傳的結果
16857
		$result=array();
16858
 
16859
		#取得當前執行的函數名稱
16860
		$result["function"]=__FUNCTION__;
16861
 
16862
		#如果沒有參數
16863
		if(func_num_args()==0){
16864
 
16865
			#設置執行失敗
16866
			$result["status"]="false";
16867
 
16868
			#設置執行錯誤訊息
16869
			$result["error"]="函數".$result["function"]."需要參數";
16870
 
16871
			#回傳結果
16872
			return $result;
16873
 
16874
			}#if end		
16875
 
16876
		#取得參數
16877
		$result["argu"]=$conf;
16878
 
16879
		#如果 $conf 不為陣列
16880
		if(gettype($conf)!=="array"){
16881
 
16882
			#設置執行失敗
16883
			$result["status"]="false";
16884
 
16885
			#設置執行錯誤訊息
16886
			$result["error"][]="\$conf變數須為陣列形態";
16887
 
16888
			#如果傳入的參數為 null
16889
			if($conf===null){
16890
 
16891
				#設置執行錯誤訊息
16892
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16893
 
16894
				}#if end
16895
 
16896
			#回傳結果
16897
			return $result;
16898
 
16899
			}#if end
16900
 
16901
		#檢查參數
16902
		#函式說明:
16903
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16904
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16905
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16906
		#$result["function"],當前執行的函式名稱.
16907
		#$result["argu"],設置給予的參數.
16908
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16909
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16910
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16911
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16912
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16913
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16914
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16915
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16916
		#必填寫的參數:
16917
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16918
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16919
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16920
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16921
		#可以省略的參數:
16922
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16923
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkToDir");
16924
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16925
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16926
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16927
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16928
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16929
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16930
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16931
		#$conf["canBeEmpty"]=array();
16932
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16933
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16934
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16935
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16936
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16937
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
16938
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16939
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".",null,"false");
16940
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16941
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16942
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16943
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16944
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16945
		#$conf["arrayCountEqualCheck"][]=array();
16946
		#參考資料來源:
16947
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16948
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16949
		unset($conf["variableCheck::checkArguments"]);
16950
 
16951
		#如果檢查參數失敗
16952
		if($checkArguments["status"]==="false"){
16953
 
16954
			#設置執行失敗
16955
			$result["status"]="false";
16956
 
16957
			#設置執行失敗訊息
16958
			$result["error"]=$checkArguments;
16959
 
16960
			#回傳結果
16961
			return $result;
16962
 
16963
			}#if end
16964
 
16965
		#如果檢查參數不通過
16966
		if($checkArguments["passed"]==="false"){
16967
 
16968
			#設置執行失敗
16969
			$result["status"]="false";
16970
 
16971
			#設置執行失敗訊息
16972
			$result["error"]=$checkArguments;
16973
 
16974
			#回傳結果
16975
			return $result;
16976
 
16977
			}#if end
16978
 
16979
		#函式說明:
16980
		#取得目錄底下所有目錄與檔案清單.
16981
		#回傳結果:
16982
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16983
		#$result["error"],錯誤訊息陣列.
16984
		#$result["function"],函數名稱.
16985
		#$result["content"],陣列,目錄底下的檔案與子目錄.
16986
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
16987
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
16988
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
16989
		#$result["position"],目前的位置.
16990
		#必填參數:
16991
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
16992
		$conf["fileAccess::getList"]["position"]=$conf["linkToDir"];
16993
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16994
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
16995
		#可省略參數:
16996
		#無
16997
		#參考資料:
16998
		#opendir=>http://php.net/manual/en/function.opendir.php
16999
		#is_dir=>http://php.net/manual/en/function.is-dir.php
17000
		#備註:
17001
		#無.
17002
		$getList=fileAccess::getList($conf["fileAccess::getList"]);
17003
		unset($conf["fileAccess::getList"]);
17004
 
17005
		#如果檢查參數失敗
17006
		if($getList["status"]==="false"){
17007
 
17008
			#設置執行失敗
17009
			$result["status"]="false";
17010
 
17011
			#設置執行失敗訊息
17012
			$result["error"]=$getList;
17013
 
17014
			#回傳結果
17015
			return $result;
17016
 
17017
			}#if end
17018
 
17019
		#針對目標目錄底下的所有檔案
17020
		foreach($getList["content"] as $oriName){
17021
 
17022
			#如果有設定 $conf["name"]
17023
			if(isset($conf["name"])){
17024
 
17025
				#預設不指定新的軟連結名稱
17026
				unset($newSoftLinkName);
17027
 
17028
				#針對每個原始目標的名稱
17029
				foreach($conf["name"] as $customName){
17030
 
17031
					#如果是指定的目標
17032
					if($oriName["name"]===$customName[0]){
17033
 
17034
						#設置新的軟連結名稱
17035
						$newSoftLinkName=$customName[1];
17036
 
17037
						}#if end
17038
 
17039
					}#foreach end
17040
 
17041
				}#if end
17042
 
17043
			#建立軟連結
17044
			#函式說明:
17045
			#建立軟連結.
17046
			#回傳結果:
17047
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17048
			#$result["error"],錯誤訊息.
17049
			#$result["function"],當前執行的函數名稱.
17050
			#$result["content"],軟連結的資訊.
17051
			#必填參數:
17052
			#$conf["fileArgu"],字串,變數__FILE__的內容.
17053
			$conf["fileAccess::createLink"]["fileArgu"]=$conf["fileArgu"];
17054
			#$conf["linkTo"],字串,軟連結要指向哪邊.
17055
			$conf["fileAccess::createLink"]["linkTo"]=$conf["linkToDir"]."/".$oriName["name"];
17056
			#可省略參數:
17057
			#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
17058
			$conf["fileAccess::createLink"]["path"]=$conf["path"];
17059
 
17060
			#如果有新的軟連結名稱
17061
			if(isset($newSoftLinkName)){
17062
 
17063
				#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
17064
				$conf["fileAccess::createLink"]["name"]=$newSoftLinkName;
17065
 
17066
				}#if end
17067
 
17068
			#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
17069
			$conf["fileAccess::createLink"]["overWrite"]=$conf["overWrite"];
17070
 
17071
			#參考資料:
17072
			#無.
17073
			#備註:
17074
			#無.
17075
			$createLink=fileAccess::createLink($conf["fileAccess::createLink"]);
17076
			unset($conf["fileAccess::createLink"]);
17077
 
17078
			#var_dump(__LINE__." ".print_r($createLink,true));
17079
 
17080
			#如果檢查參數失敗
17081
			if($createLink["status"]==="false"){
17082
 
17083
				#設置執行失敗
17084
				$result["status"]="false";
17085
 
17086
				#設置執行失敗訊息
17087
				$result["error"]=$createLink;
17088
 
17089
				#回傳結果
17090
				return $result;
17091
 
17092
				}#if end
17093
 
17094
			#儲存建立好的軟連結資訊
17095
			$result["content"][]=$createLink["content"];
17096
 
17097
			}#foreach end
17098
 
17099
		#設置執行正常
17100
		$result["status"]="true";
17101
 
17102
		#回傳結果
17103
		return $result;
17104
 
17105
		}#function createMultiLink end
17106
 
17107
	/*
17108
	#函式說明:
17109
	#更新檔案的內容.
17110
	#回傳結果:
17111
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17112
	#$result["error"],錯誤訊息.
17113
	#$result["function"],當前執行的函數名稱.
17114
	#$result["content"],軟連結的資訊.
17115
	#必填參數:
17116
	#$conf["fileArgu"],字串,變數__FILE__的內容.
17117
	$conf["fileArgu"]=__FILE__;
17118
	#$conf["file"],字串,要更新的檔案位置與名稱.
17119
	$conf["file"]="";
17120
	#可省略參數:
17121
	#$conf["overWriteWith"],字串陣列,要置換成什麼樣的內容,每個元素代表一行內容.
17122
	#$conf["overWriteWith"]=array();
17123
	#$conf["replaceWith"],字串陣列,要將什麼內容置換成什麼內容.
17124
	#$conf["replaceWith"]=array(array("ori content","new content"),array("ori content","new content"),...);
17125
	#$conf["replaceLike"],字串,預設為"false",代表要完全符合關鍵字才能進行整行替換;反之為"true".
17126
	#$conf["replaceLike"]="false";
17127
	#$conf["addToTailWhenNoMatch"],字串,預設為"false"不做事;若為"true",則代表若使用 "replaceWith" 參數但沒有符合條件的內容出現,則新增到檔案的尾端.
17128
	#$conf["addToTailWhenNoMatch"]="false";
17129
	#$conf["addToTailBeforeThat"],字串,當 "replaceWith" 參數有使用,且 "addToTailWhenNoMatch" 為 "true" 時,若有使用該參數,則會從尾端尋找符合條件的行內容,然後將 沒有符合 "replaceWith" 條件的內容新增在此之前.
17130
	#$conf["addToTailBeforeThat"]="?\>";
17131
	#參考資料:
17132
	#無.
17133
	#備註:
17134
	#無.
17135
	*/
17136
	public static function updateFile(&$conf){
17137
 
17138
		#初始化要回傳的結果
17139
		$result=array();
17140
 
17141
		#取得當前執行的函數名稱
17142
		$result["function"]=__FUNCTION__;
17143
 
17144
		#如果沒有參數
17145
		if(func_num_args()==0){
17146
 
17147
			#設置執行失敗
17148
			$result["status"]="false";
17149
 
17150
			#設置執行錯誤訊息
17151
			$result["error"]="函數".$result["function"]."需要參數";
17152
 
17153
			#回傳結果
17154
			return $result;
17155
 
17156
			}#if end		
17157
 
17158
		#取得參數
17159
		$result["argu"]=$conf;
17160
 
17161
		#如果 $conf 不為陣列
17162
		if(gettype($conf)!=="array"){
17163
 
17164
			#設置執行失敗
17165
			$result["status"]="false";
17166
 
17167
			#設置執行錯誤訊息
17168
			$result["error"][]="\$conf變數須為陣列形態";
17169
 
17170
			#如果傳入的參數為 null
17171
			if($conf===null){
17172
 
17173
				#設置執行錯誤訊息
17174
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17175
 
17176
				}#if end
17177
 
17178
			#回傳結果
17179
			return $result;
17180
 
17181
			}#if end
17182
 
17183
		#檢查參數
17184
		#函式說明:
17185
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
17186
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17187
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
17188
		#$result["function"],當前執行的函式名稱.
17189
		#$result["argu"],設置給予的參數.
17190
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17191
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17192
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17193
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17194
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17195
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17196
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17197
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17198
		#必填寫的參數:
17199
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
17200
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
17201
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
17202
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
17203
		#可以省略的參數:
17204
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
17205
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","file");
17206
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
17207
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
17208
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17209
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
17210
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17211
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
17212
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17213
		#$conf["canBeEmpty"]=array();
17214
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17215
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
17216
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17217
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
17218
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
17219
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","string","string","string");
17220
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17221
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"false");
17222
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17223
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17224
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17225
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17226
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17227
		#$conf["arrayCountEqualCheck"][]=array();
17228
		#參考資料來源:
17229
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17230
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17231
		unset($conf["variableCheck::checkArguments"]);
17232
 
17233
		#如果檢查參數失敗
17234
		if($checkArguments["status"]==="false"){
17235
 
17236
			#設置執行失敗
17237
			$result["status"]="false";
17238
 
17239
			#設置執行失敗訊息
17240
			$result["error"]=$checkArguments;
17241
 
17242
			#回傳結果
17243
			return $result;
17244
 
17245
			}#if end
17246
 
17247
		#如果檢查參數不通過
17248
		if($checkArguments["passed"]==="false"){
17249
 
17250
			#設置執行失敗
17251
			$result["status"]="false";
17252
 
17253
			#設置執行失敗訊息
17254
			$result["error"]=$checkArguments;
17255
 
17256
			#回傳結果
17257
			return $result;
17258
 
17259
			}#if end
17260
 
17261
		#檢查檔案是否存在
17262
		#函式說明:
17263
		#檢查多個檔案與資料夾是否存在.
17264
		#回傳的結果:
17265
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
17266
		#$result["error"],錯誤訊息陣列.
17267
		#$resutl["function"],當前執行的涵式名稱.
17268
		#$result["argu"],使用的參數.
17269
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
17270
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
17271
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
17272
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
17273
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
17274
		#必填參數:
17275
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
17276
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
17277
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17278
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
17279
		#可省略參數:
17280
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
17281
		$conf["disableWebSearch"]="true";
17282
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
17283
		$conf["userDir"]="false";
17284
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
17285
		$conf["web"]="false";
17286
		#參考資料:
17287
		#http://php.net/manual/en/function.file-exists.php
17288
		#http://php.net/manual/en/control-structures.foreach.php
17289
		#備註:
17290
		#函數file_exists檢查的路徑為檔案系統的路徑
17291
		#$result["varName"][$i]結果未實作
17292
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
17293
		unset($conf["fileAccess::checkMultiFileExist"]);
17294
 
17295
		#如果檢查參數失敗
17296
		if($checkMultiFileExist["status"]==="false"){
17297
 
17298
			#設置執行失敗
17299
			$result["status"]="false";
17300
 
17301
			#設置執行失敗訊息
17302
			$result["error"]=$checkMultiFileExist;
17303
 
17304
			#回傳結果
17305
			return $result;
17306
 
17307
			}#if end
17308
 
17309
		#如果目標檔案不存在
17310
		if($checkMultiFileExist["allExist"]==="false"){
17311
 
17312
			#設置執行失敗
17313
			$result["status"]="false";
17314
 
17315
			#設置執行失敗訊息
17316
			$result["error"]=$checkMultiFileExist;
17317
 
17318
			#回傳結果
17319
			return $result;
17320
 
17321
			}#if end
17322
 
17323
		#如果有設置 overWriteWith
17324
		if(isset($conf["overWriteWith"])){
17325
 
17326
			#函式說明:
17327
			#將多行字串寫入到檔案
17328
			#回傳結果:
17329
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17330
			#$result["error"],錯誤訊息陣列.
17331
			#$result["function"],當前執行函數的名稱.
17332
			#必填參數:
17333
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17334
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17335
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17336
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["overWriteWith"];
17337
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17338
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17339
			#可省略參數:
17340
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17341
			#參考資料:
17342
			#無.
17343
			#備註:
17344
			#無.
17345
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17346
			unset($conf["fileAccess::writeMultiLine"]);
17347
 
17348
			#如果執行失敗
17349
			if($writeMultiLine["status"]==="false"){
17350
 
17351
				#設置執行失敗
17352
				$result["status"]="false";
17353
 
17354
				#設置執行失敗訊息
17355
				$result["error"]=$writeMultiLine;
17356
 
17357
				#回傳結果
17358
				return $result;
17359
 
17360
				}#if end
17361
 
17362
			}#if end
17363
 
17364
		#如果有設置 "replaceWith"
17365
		if(isset($conf["replaceWith"])){
17366
 
17367
			#取得檔案的內容
17368
			#函式說明:
17369
			#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
17370
			#回傳的變數說明:
17371
			#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
17372
			#$result["error"],錯誤訊息提示.
17373
			#$result["warning"],警告訊息.
17374
			#$result["function"],當前執行的函數名稱.
17375
			#$result["fileContent"],爲檔案的內容陣列.
17376
			#$result["lineCount"],爲檔案內容總共的行數.
17377
			#$result["fullContent"],為檔案的完整內容.
17378
			#$result["base64data"],為檔案的base64內容.
17379
			#$result["mimeType"],為檔案的mime type.
17380
			#必填參數:
17381
			#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
17382
			$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
17383
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17384
			$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
17385
			#可省略參數:
17386
			#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
17387
			$conf["fileAccess::getFileContent"]["web"]="false";
17388
			#參考資料:
17389
			#file(),取得檔案內容的行數.
17390
			#file=>http:#php.net/manual/en/function.file.php
17391
			#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
17392
			#filesize=>http://php.net/manual/en/function.filesize.php
17393
			#參考資料:
17394
			#無.
17395
			#備註:
17396
			#無.
17397
			$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
17398
			unset($conf["fileAccess::getFileContent"]);
17399
 
17400
			#如果執行失敗
17401
			if($getFileContent["status"]==="false"){
17402
 
17403
				#設置執行失敗
17404
				$result["status"]="false";
17405
 
17406
				#設置執行失敗訊息
17407
				$result["error"]=$getFileContent;
17408
 
17409
				#回傳結果
17410
				return $result;
17411
 
17412
				}#if end
17413
 
17414
			#取得原始檔案的每行內容
17415
			$oriFileContentByLine=&$getFileContent["fileContent"];
17416
 
17417
			#針對每個 replaceWith 條件
17418
			foreach($conf["replaceWith"] as $replaceInfo){
17419
 
17420
				#預設尚未找到符合的關鍵字
17421
				$foundKeyWord=false;
17422
 
17423
				#取得要替換的目標字串
17424
				$oriStr=$replaceInfo[0];
17425
 
17426
				#取得要替換成的字串內容
17427
				$newStr=$replaceInfo[1];
17428
 
17429
				#針對每行原始內容
17430
				foreach($oriFileContentByLine as $index => $line){
17431
 
17432
					#函式說明:
17433
					#檢查字串裡面有無指定的關鍵字
17434
					#回傳結果:
17435
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
17436
					#$result["error"],錯誤訊息
17437
					#$result["function"],當前執行的函數名稱.
17438
					#$result["argu"],使用的參數.
17439
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
17440
					#$result["keyWordCount"],找到的關鍵字數量.
17441
					#必填參數:
17442
					#$conf["keyWord"],字串,想要搜尋的關鍵字.
17443
					$conf["search::findKeyWord"]["keyWord"]=$oriStr;
17444
					#$conf["string"],字串,要被搜尋的字串內容
17445
					$conf["search::findKeyWord"]["string"]=$line;
17446
					#可省略參數:
17447
 
17448
					#如果要完全符合關鍵字
17449
					if($conf["replaceLike"]==="false"){
17450
 
17451
						#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
17452
						$conf["search::findKeyWord"]["completeEqual"]="true";
17453
 
17454
						}#if end
17455
 
17456
					#參考資料:
17457
					#無.
17458
					#備註:
17459
					#無.
17460
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
17461
					unset($conf["search::findKeyWord"]);
17462
 
17463
					#如果執行失敗
17464
					if($findKeyWord["status"]==="false"){
17465
 
17466
						#設置執行失敗
17467
						$result["status"]="false";
17468
 
17469
						#設置執行失敗訊息
17470
						$result["error"]=$findKeyWord;
17471
 
17472
						#回傳結果
17473
						return $result;
17474
 
17475
						}#if end
17476
 
17477
					#如果有找到關鍵字
17478
					if($findKeyWord["founded"]==="true"){
17479
 
17480
						#更新該行內容
17481
						$oriFileContentByLine[$index]=$newStr;
17482
 
17483
						#設置有找到符合的關鍵字
17484
						$foundKeyWord=true;
17485
 
17486
						}#if end
17487
 
17488
					}#foreach end
17489
 
17490
				#如果沒有找到關鍵字
17491
				if($foundKeyWord===false){
17492
 
17493
					#如果要新增內容
17494
					if($conf["addToTailWhenNoMatch"]==="true"){
17495
 
17496
						#如果有設置 addToTailBeforeThat
17497
						if(isset($conf["addToTailBeforeThat"])){
17498
 
17499
							#預設沒有找到符合的關鍵字
17500
							$foundKeyWord=false;
17501
 
17502
							#初始化要記錄要 append 回去的各行內容.
17503
							$linesToAppend=array();
17504
 
17505
							#倒敘,針對每行內容
17506
							for($i=count($oriFileContentByLine)-1;$i>=0;$i--){
17507
 
17508
								#儲存要 append 回去的行內容
17509
								$linesToAppend[]=$oriFileContentByLine[$i];
17510
 
17511
								#如果找到關鍵字了
17512
								if($oriFileContentByLine[$i]===$conf["addToTailBeforeThat"]){
17513
 
17514
									#設置有找到符合的關鍵字
17515
									$foundKeyWord=true;
17516
 
17517
									#更新該行內容
17518
									$oriFileContentByLine[$i]=$line;
17519
 
17520
									#倒敘陣列
17521
									$linesToAppend=array_reverse($linesToAppend);
17522
 
17523
									#針對每行要 append 回去的內容
17524
									foreach($linesToAppend as $lineToAppend){
17525
 
17526
										#append 行內容
17527
										$oriFileContentByLine[]=$lineToAppend;
17528
 
17529
										}#foreach end
17530
 
17531
									}#if end
17532
 
17533
								}#for end
17534
 
17535
							#如果沒有找到關鍵字
17536
							if($foundKeyWord===false){
17537
 
17538
								#設置執行失敗
17539
								$result["status"]="false";
17540
 
17541
								#設置錯誤訊息
17542
								$result["error"]="can't find \"".$conf["addToTailBeforeThat"]."\" to insert before it.";
17543
 
17544
								#回傳結果
17545
								return $result;
17546
 
17547
								}#if end
17548
 
17549
							}#if end
17550
 
17551
						}#if end
17552
 
17553
					}#if end
17554
 
17555
				}#foreach end
17556
 
17557
			#函式說明:
17558
			#將多行字串寫入到檔案
17559
			#回傳結果:
17560
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17561
			#$result["error"],錯誤訊息陣列.
17562
			#$result["function"],當前執行函數的名稱.
17563
			#必填參數:
17564
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17565
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17566
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17567
			$conf["fileAccess::writeMultiLine"]["inputString"]=$oriFileContentByLine;
17568
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17569
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17570
			#可省略參數:
17571
			#$conf["fileAccess::writeMultiLine"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17572
			#參考資料:
17573
			#無.
17574
			#備註:
17575
			#無.
17576
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17577
			unset($conf["fileAccess::writeMultiLine"]);
17578
 
17579
			#如果執行失敗
17580
			if($writeMultiLine["status"]==="false"){
17581
 
17582
				#設置執行失敗
17583
				$result["status"]="false";
17584
 
17585
				#設置執行失敗訊息
17586
				$result["error"]=$writeMultiLine;
17587
 
17588
				#回傳結果
17589
				return $result;
17590
 
17591
				}#if end
17592
 
17593
			}#if end
17594
 
17595
		#設置執行正常
17596
		$result["status"]="true";
17597
 
17598
		#回傳結果
17599
		return $result;
17600
 
17601
		}#function updateFile end
17602
 
17603
	/*
17604
	#函式說明:
17605
	#輔助使用PHP內建的chmod函式.
17606
	#回傳結果:
17607
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17608
	#$result["error"],錯誤訊息.
17609
	#$result["function"],當前執行的函式名稱.
17610
	#$result["argu"],使用的參數.
17611
	#$result["cmd"],執行的指令.
17612
	#$result["content"],執行的結果陣列,如果參數 "recursive" 跟 "excludeSelf" 都有設定的話,就會回傳該結果.
17613
	#必填參數:
17614
	#$conf["mode"],字串,要變成什麼權限.
17615
	$conf["mode"]="";
17616
	#$conf["target"],字串,需要變更權限的目標.
17617
	$conf["target"]="";
17618
	#可省略參數:
17619
	#無.
17620
	#參考資料:
17621
	#無.
17622
	#備註:
17623
	#無.
17624
	*/
17625
	public static function chmod(&$conf){
17626
 
17627
		#初始化要回傳的結果
17628
		$result=array();
17629
 
17630
		#取得當前執行的函數名稱
17631
		$result["function"]=__FUNCTION__;
17632
 
17633
		#如果沒有參數
17634
		if(func_num_args()==0){
17635
 
17636
			#設置執行失敗
17637
			$result["status"]="false";
17638
 
17639
			#設置執行錯誤訊息
17640
			$result["error"]="函數".$result["function"]."需要參數";
17641
 
17642
			#回傳結果
17643
			return $result;
17644
 
17645
			}#if end
17646
 
17647
		#取得參數
17648
		$result["argu"]=$conf;
17649
 
17650
		#如果 $conf 不為陣列
17651
		if(gettype($conf)!=="array"){
17652
 
17653
			#設置執行失敗
17654
			$result["status"]="false";
17655
 
17656
			#設置執行錯誤訊息
17657
			$result["error"][]="\$conf變數須為陣列形態";
17658
 
17659
			#如果傳入的參數為 null
17660
			if(is_null($conf)){
17661
 
17662
				#設置執行錯誤訊息
17663
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17664
 
17665
				}#if end
17666
 
17667
			#回傳結果
17668
			return $result;
17669
 
17670
			}#if end
17671
 
17672
		#函式說明:
17673
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
17674
		#回傳結果:
17675
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17676
		#$result["error"],執行不正常結束的錯訊息陣列.
17677
		#$result["simpleError"],簡單表示的錯誤訊息.
17678
		#$result["function"],當前執行的函式名稱.
17679
		#$result["argu"],設置給予的參數.
17680
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17681
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17682
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17683
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17684
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17685
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17686
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17687
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17688
		#必填參數:
17689
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
17690
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
17691
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
17692
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
17693
		#可省略參數:
17694
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
17695
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mode","target");
17696
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
17697
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
17698
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17699
		#$conf["canBeEmptyString"]="false";
17700
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17701
		#$conf["canNotBeEmpty"]=array();
17702
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17703
		#$conf["canBeEmpty"]=array();
17704
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17705
		#$conf["skipableVariableCanNotBeEmpty"]=array();
17706
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17707
		#$conf["skipableVariableName"]=array();
17708
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
17709
		#$conf["skipableVariableType"]=array();
17710
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17711
		#$conf["skipableVarDefaultValue"]=array("");
17712
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17713
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17714
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17715
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17716
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17717
		#$conf["arrayCountEqualCheck"][]=array();
17718
		#參考資料:
17719
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17720
		#備註:
17721
		#無.
17722
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17723
		unset($conf["variableCheck::checkArguments"]);
17724
 
17725
		#如果檢查參數失敗
17726
		if($checkArguments["status"]==="false"){
17727
 
17728
			#設置執行失敗
17729
			$result["status"]="false";
17730
 
17731
			#設置錯誤資訊
17732
			$result["error"]=$checkArguments;
17733
 
17734
			#回傳結果
17735
			return $result;
17736
 
17737
			}#if end
17738
 
17739
		#如果檢查參數不通過
17740
		if($checkArguments["passed"]==="false"){
17741
 
17742
			#設置執行失敗
17743
			$result["status"]="false";
17744
 
17745
			#設置錯誤資訊
17746
			$result["error"]=$checkArguments;
17747
 
17748
			#回傳結果
17749
			return $result;
17750
 
17751
			}#if end
17752
 
17753
		#將$conf["mode"]轉換為10進位的整數
17754
		$conf["mode"]=(int)base_convert($conf["mode"],8,10);
17755
 
17756
		#變更 target 的檔案權限為代碼
17757
		$chmod=chmod($conf["target"],$conf["mode"]); 
17758
 
17759
		#如果改變檔案權限失敗
17760
		if($chmod===false){
17761
 
17762
			#設置執行失敗
17763
			$result["status"]="false";
17764
 
17765
			#設置錯誤訊息
17766
			$result["error"][]="改變 ".$conf["target"]." 檔案的權限資訊為 ".$conf["mode"]." 失敗,通常只有系統帳戶才能變更之.";
17767
 
17768
			#回傳結果
17769
			return $result;	
17770
 
17771
			}#if end
17772
 
17773
		#設置執行正常
17774
		$result["status"]="true";
17775
 
17776
		#回傳結果
17777
		return $result;
17778
 
17779
		}#function chmod end
17780
 
17781
	}#class fileAccess end
17782
 
17783
?>