Subversion Repositories php-qbpwcf

Rev

Rev 3 | Rev 42 | 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"],為檔案的完整內容.
1109
	#$result["base64data"],為檔案的base64內容.
1110
	#$result["mimeType"],為檔案的mime type.
1111
	#必填參數:
1112
	#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
1113
	$conf["filePositionAndName"]="";
1114
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1115
	$conf["fileArgu"]=__FILE__;
1116
	#可省略參數:
1117
	#$conf["web"],是要取得網路上的檔案則為"true";反之預設為"false".
1118
	#$conf["web"]="true";
1119
	#$conf["createIfnotExist"],字串,預設為"false"代表檔案不存在也不需要建立;反之為"true".
1120
	#$conf["createIfnotExist"]="false";
1121
	#$conf["autoDeleteSpaceOnEachLineStart"],字串,預設為"false",不做額外處理;反之為"true"
1122
	#$conf["autoDeleteSpaceOnEachLineStart"]="false";
1123
	#參考資料:
1124
	#file(),取得檔案內容的行數.
1125
	#file=>http:#php.net/manual/en/function.file.php
1126
	#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
1127
	#filesize=>http://php.net/manual/en/function.filesize.php
1128
	#參考資料:
1129
	#無.
1130
	#備註:
1131
	#無.
1132
	*/
1133
	public static function getFileContent($conf){
1134
 
1135
		#初始化要回傳的內容
1136
		$result=array();
1137
 
1138
		#取得當前執行函數名稱
1139
		$result["function"]=__FUNCTION__;
1140
 
1141
		#如果 $conf 不為陣列
1142
		if(gettype($conf)!="array"){
1143
 
1144
			#設置執行失敗
1145
			$result["status"]="false";
1146
 
1147
			#設置執行錯誤訊息
1148
			$result["error"][]="\$conf變數須為陣列形態";
1149
 
1150
			#如果傳入的參數為 null
1151
			if($conf==null){
1152
 
1153
				#設置執行錯誤訊息
1154
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1155
 
1156
				}#if end
1157
 
1158
			#回傳結果
1159
			return $result;
1160
 
1161
			}#if end
1162
 
1163
		#檢查參數
1164
		#函式說明:
1165
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
1166
		#回傳結果:
1167
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1168
		#$result["error"],執行不正常結束的錯訊息陣列.
1169
		#$result["simpleError"],簡單表示的錯誤訊息.
1170
		#$result["function"],當前執行的函式名稱.
1171
		#$result["argu"],設置給予的參數.
1172
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1173
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1174
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1175
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1176
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1177
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1178
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1179
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1180
		#必填參數:
1181
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1182
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1183
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1184
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1185
		#可省略參數:
1186
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1187
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePositionAndName","fileArgu");
1188
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1189
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
1190
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1191
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1192
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1193
		#$conf["canNotBeEmpty"]=array();
1194
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1195
		#$conf["canBeEmpty"]=array();
1196
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1197
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");
1198
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1199
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");
1200
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1201
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
1202
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1203
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","false","false");
1204
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
1205
		#$conf["disallowAllSkipableVarIsEmpty"]="";
1206
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
1207
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
1208
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
1209
		#$conf["disallowAllSkipableVarNotExist"]="";
1210
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1211
		#$conf["arrayCountEqualCheck"][]=array();
1212
		#參考資料:
1213
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1214
		#備註:
1215
		#無.
1216
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1217
		unset($conf["variableCheck::checkArguments"]);
1218
 
1219
		#如果檢查出錯
1220
		if($checkArguments["status"]==="false"){
1221
 
1222
			#設置執行錯誤識別
1223
			$result["status"]="false";
1224
 
1225
			#設置執行錯誤訊息
1226
			$result["error"]=$checkArguments;
1227
 
1228
			#回傳結果
1229
			return $result;
1230
 
1231
			}#if end
1232
 
1233
		#如果檢查參數不通過
1234
		if($checkArguments["passed"]==="false"){
1235
 
1236
			#設置執行錯誤識別
1237
			$result["status"]="false";
1238
 
1239
			#設置執行錯誤訊息
1240
			$result["error"]=$checkArguments;
1241
 
1242
			#回傳結果
1243
			return $result;
1244
 
1245
			}#if end
1246
 
1247
		#檢查檔案是否存在
1248
		#函式說明:檢查多個檔案與資料夾是否存在
1249
		#回傳的結果:
1250
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1251
		#$result["error"],錯誤訊息陣列.
1252
		#$resutl["function"],當前執行的涵式名稱.
1253
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
1254
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
1255
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1256
		#必填參數:
1257
		$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($conf["filePositionAndName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
1258
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1259
		$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
1260
		#可省略參數:
1261
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
1262
		$conf["fileAccess"]["checkMutiFileExist"]["disableWebSearch"]="true";
1263
 
1264
		#如果有設置 $conf["web"]
1265
		if(isset($conf["web"])){
1266
 
1267
			#設置 web 參數.
1268
			$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
1269
 
1270
			}#if end
1271
 
1272
		#參考資料來源:
1273
		#http:#php.net/manual/en/function.file-exists.php
1274
		#http:#php.net/manual/en/control-structures.foreach.php
1275
		$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
1276
		unset($conf["fileAccess"]["checkMutiFileExist"]);
1277
 
1278
		#如果檢查檔案是否存在出錯
1279
		if($fileCheckResult["status"]=="false"){
1280
 
1281
			#設置執行錯誤識別
1282
			$result["status"]="false";
1283
 
1284
			#設置執行錯誤訊息
1285
			$result["error"]=$fileCheckResult;
1286
 
1287
			#回傳結果
1288
			return $result;
1289
 
1290
			}#if end
1291
 
1292
		#如果該檔案不存在
1293
		if($fileCheckResult["varExist"][0]=="false"){
1294
 
1295
			#如果也不要自動建立檔案
1296
			if($conf["createIfnotExist"]==="false"){
1297
 
1298
				#設置執行錯誤識別
1299
				$result["status"]="false";
1300
 
1301
				#設置執行錯誤訊息
1302
				$result["error"]=$fileCheckResult;
1303
 
1304
				#設置易讀的錯誤訊息
1305
				$result["error"][]="名為".$fileCheckResult["varName"][0]."的檔案不存在";
1306
 
1307
				#回傳結果
1308
				return $result;
1309
 
1310
				}#if end
1311
 
1312
			#執行到這邊代表需要建立該檔案
1313
			#函式說明:
1314
			#將字串寫入到檔案
1315
			#回傳結果:
1316
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1317
			#$result["error"],錯誤訊息陣列.
1318
			#$result["function"],當前執行的函數名稱.
1319
			#$result["fileInfo"],實際上寫入的檔案資訊陣列.
1320
			#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
1321
			#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
1322
			#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
1323
			#$result["argu"],使用的參數.
1324
			#必填參數:
1325
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1326
			$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
1327
			#可省略參數:
1328
			#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
1329
			$conf["fileAccess::writeTextIntoFile"]["fileName"]=$fileCheckResult["varNameFullPath"][0];
1330
			#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
1331
			$conf["fileAccess::writeTextIntoFile"]["inputString"]="";			
1332
			#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
1333
			#$conf["checkRepeat"]="";
1334
			#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
1335
			#$conf["filenameExtensionStartPoint"]="";
1336
			#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
1337
			#$conf["repeatNameRule"]="";
1338
 
1339
			#如果有設置 $conf["web"]
1340
			if(isset($conf["web"])){
1341
 
1342
				#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1343
				$conf["fileAccess::writeTextIntoFile"]["web"]=$conf["web"];
1344
 
1345
				}#if end			
1346
 
1347
			#參考資料:
1348
			#無.
1349
			#備註:
1350
			#無.
1351
			$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
1352
			unset($conf["fileAccess::writeTextIntoFile"]);
1353
 
1354
			#如果建立檔案失敗
1355
			if($writeTextIntoFile["status"]=="false"){
1356
 
1357
				#設置執行錯誤識別
1358
				$result["status"]="false";
1359
 
1360
				#設置執行錯誤訊息
1361
				$result["error"]=$writeTextIntoFile;
1362
 
1363
				#回傳結果
1364
				return $result;
1365
 
1366
				}#if end
1367
 
1368
			}#if end
1369
 
1370
		#file absolute addr
1371
		$fileAbAddr=$fileCheckResult["varNameFullPath"][0];
1372
 
1373
		#將檔案的內容放進變數裡面(會得到陣列)
1374
		$fileContent=file($fileAbAddr);
1375
 
1376
		#如果 $fileContent 等於
1377
		if($fileContent==FALSE){
1378
 
1379
			#如果檔案大小為0bytes
1380
			if(filesize($fileAbAddr)==0){
1381
 
1382
				#設置錯誤識別
1383
				$result["warning"][]="執行結果沒有輸出內容";
1384
 
1385
				}#if end
1386
 
1387
			#反之檔案有內容
1388
			else{
1389
 
1390
				#設置錯誤識別
1391
				$result["status"]="false";
1392
 
1393
				#設置錯誤訊息
1394
				$result["error"][]="讀取檔案失敗";
1395
 
1396
				#回傳結果
1397
				return $result;
1398
 
1399
				}#else end
1400
 
1401
			}#if end
1402
 
1403
		#針對每行內容
1404
		for($i=0;$i<count($fileContent);$i++){
1405
 
1406
			#剔除字串尾的換行符號
1407
			$fileContent[$i]=rtrim($fileContent[$i]);
1408
 
1409
			#如果要移除開頭的空白
1410
			if($conf["autoDeleteSpaceOnEachLineStart"]==="true"){
1411
 
1412
				#如果開頭是空格
1413
				while(strpos($fileContent[$i]," ")===0){
1414
 
1415
					#函式說明:
1416
					#將字串特定關鍵字與其前面的內容剔除
1417
					#回傳結果:
1418
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1419
					#$result["error"],錯誤訊息陣列.
1420
					#$result["warning"],警告訊息鎮列.
1421
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1422
					#$result["function"],當前執行的函數名稱.
1423
					#$result["argu"],使用的參數.
1424
					#$result["oriStr"],要處理的原始字串內容.
1425
					#$result["content"],處理好的的字串內容.	
1426
					#必填參數:
1427
					#$conf["stringIn"],字串,要處理的字串.
1428
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileContent[$i];
1429
					#$conf["keyWord"],字串,特定字串.
1430
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
1431
					#可省略參數:
1432
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
1433
					#$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
1434
					#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
1435
					#$conf["lastResult"]=$delStrBeforeKeyWord;
1436
					#參考資料:
1437
					#無.
1438
					#備註:
1439
					#無.
1440
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
1441
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
1442
 
1443
					#如果建立檔案失敗
1444
					if($delStrBeforeKeyWord["status"]=="false"){
1445
 
1446
						#設置執行錯誤識別
1447
						$result["status"]="false";
1448
 
1449
						#設置執行錯誤訊息
1450
						$result["error"]=$delStrBeforeKeyWord;
1451
 
1452
						#回傳結果
1453
						return $result;
1454
 
1455
						}#if end
1456
 
1457
					#取得剔除開頭空格後的內容
1458
					$fileContent[$i]=$delStrBeforeKeyWord["content"];
1459
 
1460
					}#while end
1461
 
1462
				}#if end
1463
 
1464
			}#for end
1465
 
1466
		#取得總共有幾行
1467
		$lineCount=count($fileContent);
1468
 
1469
		#將檔案內容的陣列放進 $result 陣列變數裏面
1470
		$result["fileContent"]=$fileContent;
1471
 
1472
		#建立暫存檔案
1473
		$tmpFile=tempnam("/tmp", "qbpwcf");
1474
 
1475
		#讀取要取得的檔案內容
1476
		$content=file_get_contents($fileAbAddr);
1477
 
1478
		#debug
1479
		#var_dump(__FILE__,__LINE__,$content);
1480
 
1481
		#開啟暫存檔案(寫入模式)
1482
		$file=fopen($tmpFile,'w');
1483
 
1484
		#寫入讀取到的內容
1485
		fwrite($file,$content);
1486
 
1487
		#關閉暫存檔案
1488
		fclose($file);
1489
 
1490
		#取得檔案的 mime 類型
1491
		$mimeType=mime_content_type($tmpFile);
1492
 
1493
		#設置檔案的mime類型
1494
		$result["mimeType"]=$mimeType;
1495
 
1496
		#取得檔案的內容為字串
1497
		$result["fullContent"]=file_get_contents($tmpFile);
1498
 
1499
		#debug
1500
		#var_dump(__FILE__,__LINE__,$result["fullContent"]);
1501
 
1502
		#取得檔案的base64data
1503
		$result["base64data"]="data:".$result["mimeType"].";base64,".base64_encode($result["fullContent"]);
1504
 
1505
		#移除暫存檔案
1506
		unlink($tmpFile);
1507
 
1508
		#將檔案內容的行數放進 $result 陣列變數裏面
1509
		$result["lineCount"]=$lineCount;
1510
 
1511
		#執行到這邊代表執行成功
1512
		$result["status"]="true";
1513
 
1514
		#回傳結果
1515
		return $result;
1516
 
1517
		}#function getFileContent end
1518
 
1519
	/*
1520
	#函式說明:
1521
	#依據逗號分隔抓取檔案的內容,結果會回傳一個陣列
1522
	#回傳結果:	
1523
	#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
1524
	#$result["error"],錯誤訊息提示.
1525
	#$result["function"],函數名稱.
1526
	#$result["lineCount"]爲總共有幾行
1527
	#$result["lineContent"][i]["dataCounts"],爲第 i+1 行總共有幾個字串
1528
	#$result["lineContent"][0][i],爲第1行第 i+1 個分割好的字串
1529
	#$result["lineContent"][1][i],爲第2行第 i+1 個分割好的字串
1530
	#必填參數:
1531
	#$conf["filePositionAndName"],字串,要抓取的檔案位置與名稱
1532
	$conf["filePositionAndName"]="";
1533
	#可省略參數:
1534
	#$conf["spiltSign"],字串,爲要用來分割字串的符號,可省略,預設爲「,」
1535
	#$conf["spiltSign"]="";
1536
	#參考資料:
1537
	#無.
1538
	#備註:
1539
	#無.
1540
	*/
1541
	public static function getFileContentSpiltBySomething($conf){
1542
 
1543
		#初始化要回傳的內容
1544
		$result=array();
1545
 
1546
		#取得當前執行函數名稱
1547
		$result["function"]=__FUNCTION__;
1548
 
1549
		#如果 $conf 不為陣列
1550
		if(gettype($conf)!="array"){
1551
 
1552
			#設置執行失敗
1553
			$result["status"]="false";
1554
 
1555
			#設置執行錯誤訊息
1556
			$result["error"][]="\$conf變數須為陣列形態";
1557
 
1558
			#如果傳入的參數為 null
1559
			if($conf==null){
1560
 
1561
				#設置執行錯誤訊息
1562
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1563
 
1564
				}#if end
1565
 
1566
			#回傳結果
1567
			return $result;
1568
 
1569
			}#if end
1570
 
1571
		#如果 $conf["spiltSign"] 爲空,則預設爲","。
1572
		if(!isset($conf["spiltSign"])){
1573
 
1574
			$conf["spiltSign"]=",";
1575
 
1576
			}#if end
1577
 
1578
		#依據行號抓取所有的內容
1579
		#函式說明:
1580
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1581
		#回傳的變數說明:
1582
		#$result["fileContent"],爲檔案的內容陣列
1583
		#$result["lineCount"],爲檔案內容總共的行數
1584
		#必填參數:
1585
		$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["filePositionAndName"];#爲檔案的位置以及名稱
1586
		#參考資料:
1587
		#file():取得檔案內容的行數
1588
		#http:#php.net/manual/en/function.file.php
1589
		$fileContent=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
1590
		unset($conf["fileAccess"]["getFileContent"]);
1591
 
1592
		#如果取得檔案內容失敗
1593
		if($fileContent["status"]=="false"){
1594
 
1595
			#設置執行失敗
1596
			$result["status"]="false";
1597
 
1598
			#設置執行錯誤訊息
1599
			$result["error"]=$fileContent;
1600
 
1601
			#回傳結果
1602
			return $result;
1603
 
1604
			}#if end
1605
 
1606
		#迴圈,有幾行資料就執行幾次
1607
		for($i=0;$i<$fileContent["lineCount"];$i++){
1608
 
1609
			#將該行內容用逗號分隔
1610
			$conf["stringProcess"]["spiltString"]["stringIn"]=$fileContent["fileContent"][$i];#要處理的字串。
1611
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=$conf["spiltSign"];#爲以哪個符號作爲分割
1612
			$lineSpiltResult[$i]=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
1613
			unset($conf["stringProcess"]["spiltString"]);	
1614
 
1615
			#如果分割字串失敗
1616
			if($lineSpiltResult[$i]["status"]=="false"){
1617
 
1618
				#設置執行失敗
1619
				$result["status"]="false";
1620
 
1621
				#設置執行錯誤訊息
1622
				$result["error"]=$lineSpiltResult[$i];
1623
 
1624
				#回傳結果
1625
				return $result;
1626
 
1627
				}#if end
1628
 
1629
			}#for end
1630
 
1631
		#取得
1632
		$result["lineContent"]=$lineSpiltResult;
1633
 
1634
		#取得資料的行數
1635
		$result["lineCount"]=$fileContent["lineCount"];
1636
 
1637
		#回傳結果
1638
		return $result;
1639
 
1640
		}#function getFileContentSpiltBySomething end
1641
 
1642
	/*
1643
	#函式說明:
1644
	#檢查多個檔案與資料夾是否存在.
1645
	#回傳的結果:
1646
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1647
	#$result["error"],錯誤訊息陣列.
1648
	#$resutl["function"],當前執行的涵式名稱.
1649
	#$result["argu"],使用的參數.
1650
	#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
1651
	#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
1652
	#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
1653
	#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
1654
	#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1655
	#必填參數:
1656
	#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
1657
	$conf["fileArray"]=array();
1658
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1659
	$conf["fileArgu"]=__FILE__;
1660
	#可省略參數:
1661
	#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
1662
	#$conf["disableWebSearch"]="false";
1663
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
1664
	#$conf["userDir"]="true";
1665
	#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
1666
	#$conf["web"]="true";
1667
	#參考資料:
1668
	#http://php.net/manual/en/function.file-exists.php
1669
	#http://php.net/manual/en/control-structures.foreach.php
1670
	#備註:
1671
	#函數file_exists檢查的路徑為檔案系統的路徑
1672
	#$result["varName"][$i]結果未實作
1673
	*/
1674
	public static function checkMultiFileExist(&$conf){
1675
 
1676
		#初始化要回傳的變數
1677
		$result=array();
1678
 
1679
		#設置當前執行的涵式
1680
		$result["function"]=__FUNCTION__;
1681
 
1682
		#如果 $conf 不為陣列
1683
		if(gettype($conf)!="array"){
1684
 
1685
			#設置執行失敗
1686
			$result["status"]="false";
1687
 
1688
			#設置執行錯誤訊息
1689
			$result["error"][]="\$conf變數須為陣列形態";
1690
 
1691
			#如果傳入的參數為 null
1692
			if($conf==null){
1693
 
1694
				#設置執行錯誤訊息
1695
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1696
 
1697
				}#if end
1698
 
1699
			#回傳結果
1700
			return $result;
1701
 
1702
			}#if end
1703
 
1704
		#取得使用的參數
1705
		$result["argu"]=$conf;
1706
 
1707
		#檢查參數
1708
		#函式說明:
1709
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1710
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1711
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1712
		#$result["function"],當前執行的函式名稱.
1713
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1714
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1715
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1716
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1717
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1718
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1719
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1720
		#必填寫的參數:
1721
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1722
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1723
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1724
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArray","fileArgu");
1725
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1726
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
1727
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1728
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1729
		#可以省略的參數:
1730
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1731
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1732
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1733
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("disableWebSearch","userDir","web");
1734
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1735
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
1736
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1737
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","true","true");
1738
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1739
		#$conf["arrayCountEqualCheck"][]=array();
1740
		#參考資料來源:
1741
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1742
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1743
		unset($conf["variableCheck::checkArguments"]);
1744
 
1745
		#如果 $checkArguments["status"] 等於 "false"
1746
		if($checkArguments["status"]=="false"){
1747
 
1748
			#設置錯誤識別
1749
			$result["status"]="false";
1750
 
1751
			#設置錯誤訊息
1752
			$result["error"]=$checkArguments;
1753
 
1754
			#回傳結果
1755
			return $result;				
1756
 
1757
			}#if end
1758
 
1759
		#如果 $checkArguments["passed"] 等於 "false"
1760
		if($checkArguments["passed"]=="false"){
1761
 
1762
			#設置錯誤識別
1763
			$result["status"]="false";
1764
 
1765
			#設置錯誤訊息
1766
			$result["error"]=$checkArguments;
1767
 
1768
			#回傳結果
1769
			return $result;				
1770
 
1771
			}#if end
1772
 
1773
		#初始化儲存每個檔案是否存在的陣列變數
1774
		$result["varName"]=array();
1775
		$result["varExist"]=array();
1776
 
1777
		#針對每個要檢查的檔案
1778
		foreach($conf["fileArray"] as $i=>$varName){
1779
 
1780
			#儲存要判斷是否存在的物件
1781
			$result["varName"][]=$varName;
1782
 
1783
			#函式說明:
1784
			#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
1785
			#回傳結果:
1786
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1787
			#$result["error"],錯誤訊息陣列.
1788
			#$result["function"],函數名稱. 
1789
			#$result["argu"],使用的參數.
1790
			#$result["content"],網址,若是在命令列執行,則為"null".
1791
			#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
1792
			#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
1793
			#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
1794
			#必填參數:
1795
			#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
1796
			$conf["fileAccess::getInternetAddressV2"]["address"]=$varName;
1797
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1798
			$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
1799
			#可省略參數:
1800
			$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
1801
			#備註:
1802
			#建構中,fileSystemRelativePosition尚未實作.
1803
			$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
1804
			unset($conf["fileAccess::getInternetAddressV2"]);
1805
 
1806
			#如果轉換成絕對路徑失敗
1807
			if($getInternetAddressV2["status"]=="false"){
1808
 
1809
				#設置錯誤識別
1810
				$result["status"]="false";
1811
 
1812
				#設置錯誤訊息
1813
				$result["error"]=$getInternetAddressV2;
1814
 
1815
				#回傳結果
1816
				return $result;
1817
 
1818
				}#if end
1819
 
1820
			#傳參考
1821
			$getInternetAddress=&$getInternetAddressV2;
1822
 
1823
			#如果沒有檔案的絕對路徑位置
1824
			if(!isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1825
 
1826
				#置換成給予的參數網址
1827
				$conf["fileArray"][$i]=$getInternetAddress["content"];
1828
 
1829
				#設置無法從檔案系統找到
1830
				$exist=FALSE;
1831
 
1832
				}#if end
1833
 
1834
			#反之取得
1835
			else{
1836
 
1837
				#轉換好的絕對路徑
1838
				$conf["fileArray"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
1839
 
1840
				#判斷該檔案是否存在
1841
				$exist=file_exists($conf["fileArray"][$i]);
1842
 
1843
				#如果不存在或是指向不存在目標的連結
1844
				if($exist===false){
1845
 
1846
					#判斷是否為軟連結
1847
					$exist=is_link($conf["fileArray"][$i]);
1848
 
1849
					}#if end`
1850
 
1851
				}#else end
1852
 
1853
			#如果 $exist 等於 false (檔案不存在) 且 沒有停用網路搜尋功能
1854
			if($exist===FALSE && $conf["disableWebSearch"]==="false"){
1855
 
1856
				#將目標轉換成網址
1857
				#函式說明:
1858
				#將檔案的位置名稱變成網址
1859
				#回傳結果:
1860
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1861
				#$result["error"],錯誤訊息陣列.
1862
				#$result["function"],函數名稱. 
1863
				#$result["content"],網址.
1864
				#必填參數:
1865
				#$conf["address"],字串,檔案的相對位置.
1866
				$conf["fileAccess::getInternetAddress"]["address"]=$conf["fileArray"][$i];
1867
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1868
				$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
1869
				$getInternetAddress=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddress"]);
1870
				unset($conf["fileAccess::getInternetAddress"]);
1871
 
1872
				#如果轉換失敗
1873
				if($getInternetAddress["status"]=="false"){
1874
 
1875
					#設置錯誤識別
1876
					$result["status"]="false";
1877
 
1878
					#設置錯誤訊息
1879
					$result["error"]=$getInternetAddress;
1880
 
1881
					#回傳結果
1882
					return $result;	
1883
 
1884
					}#if end
1885
 
1886
				#函式說明:
1887
				#運行curl cmd
1888
				#回傳結果:
1889
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1890
				#$result["error"],錯誤訊息陣列.
1891
				#$result["function"],當前執行的函式名稱.
1892
				#$result["content"],取得的回應內容.
1893
				#$result["cookie"],cookie檔案的位置與名稱.
1894
				#$result["cmd"],執行的command.
1895
				#$result["argu],使用的參數.
1896
				#必填參數:
1897
				#$conf["url"],字串,目標url.
1898
				$conf["catchWebContent::curlCmd"]["url"]=$getInternetAddress["content"];
1899
				#$conf["fileArgu"],字串,變數__FILE__的內容.
1900
				$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];
1901
				#可省略參數:
1902
				#$conf["header"],字串陣列,要傳送的header.
1903
				#$conf["header"]=array();
1904
				#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
1905
				#$conf["allowAnySSLcertificate"]="";
1906
				#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
1907
				#$conf["postVar"]=array();
1908
				#$conf["rawPost"]="字串",要傳送的raw post內容.
1909
				#$conf["rawPost"]="";
1910
				#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
1911
				#$conf["urlEncode"]="false";
1912
				#$conf["agent"],字串,user agent的名稱.
1913
				#$conf["agent"]="";
1914
				#$conf["cookie"],字串,cookie位置與檔案位置.
1915
				#$conf["cookie"]="";
1916
				#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
1917
				#$conf["forceNewCookie"]="";
1918
				$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
1919
				unset($conf["catchWebContent::curlCmd"]);
1920
 
1921
				#如果抓取資料失敗
1922
				if($curlCmd["status"]==="false"){
1923
 
1924
					#設置錯誤識別
1925
					$result["status"]="false";
1926
 
1927
					#設置錯誤訊息
1928
					$result["error"]=$curlCmd;
1929
 
1930
					#回傳結果
1931
					return $result;
1932
 
1933
					}#if end
1934
 
1935
				#反之檔案存在網路上
1936
				else{
1937
 
1938
					#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1939
					$result["varName"][$i]=$getInternetAddress["content"];
1940
 
1941
					#如果存在檔案路徑的絕對位置
1942
					if(isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1943
 
1944
						#設置該檔案的絕對路徑位置						
1945
						$result["varNameFullPath"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
1946
 
1947
						}#if end
1948
 
1949
					#反之代表輸入參數是網址	
1950
					else{
1951
 
1952
						#設置該檔案的網址
1953
						$result["varNameWebPath"][$i]=$getInternetAddress["content"];
1954
 
1955
						}#else end
1956
 
1957
					#設置有無找到的識別
1958
					$result["varExist"][$i]=$curlCmd["founded"];
1959
 
1960
					}#else end
1961
 
1962
				}#if end
1963
 
1964
			#反之檔案不存在,且停用網路搜尋.
1965
			else if($exist===FALSE){
1966
 
1967
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1968
				$result["varName"][$i]=$conf["fileArray"][$i];
1969
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
1970
				$result["varExist"][$i]="false";
1971
 
1972
				#設置全部檔案都存在的識別變數為 "false"
1973
				$result["allExist"]="false";
1974
 
1975
				}#if end
1976
 
1977
			#反之代表檔案存在
1978
			else{
1979
 
1980
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1981
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
1982
 
1983
				#如果 web 參數為 "true"
1984
				if($conf["web"]==="true"){
1985
 
1986
					#設置網路上的位置
1987
					$result["varNameWebPath"][$i]=$getInternetAddress["content"];
1988
 
1989
					}#if end
1990
 
1991
				$result["varExist"][$i]="true";
1992
 
1993
				}#else end
1994
 
1995
			}#foreach end
1996
 
1997
		#如果所有檔案與資料夾都找到的識別變數不存在
1998
		if(!isset($result["allExist"])){
1999
 
2000
			#設置全部檔案與資料夾都有找到
2001
			$result["allExist"]="true";
2002
 
2003
			}#if end
2004
 
2005
		#執行到這邊代表執行正常
2006
		$result["status"]="true";
2007
 
2008
		#回傳結果
2009
		return $result;
2010
 
2011
		}#function checkMutiFileExist
2012
 
2013
	/*
2014
	#函式說明:
2015
	#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
2016
	#回傳結果:
2017
	#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
2018
	#$result["error"],錯誤訊息陣列.
2019
	#$result["function"],當前執行的函數名稱.
2020
	#$result["argu"],使用的參數.
2021
	#$result["createdFileName"],建立好的檔案名稱.
2022
	#$result["createdFilePath"],檔案建立的路徑.
2023
	#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
2024
	#必填參數:
2025
	#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
2026
	$conf["checkedFileAndPath"]="";
2027
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2028
	$conf["fileArgu"]=__FILE__;
2029
	#可省略參數:
2030
	#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.
2031
	#$conf["filenameExtensionStartPoint"]="";
2032
	#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".
2033
	#$conf["repeatNameRule"]="";
2034
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2035
	#$conf["web"]="false";
2036
	#參考資料:
2037
	#無.
2038
	#備註:
2039
	#如果要在/tmp底下建立檔案,若在apache環境下則會被作業系統特殊處理,即不等於實際上的路徑.
2040
	*/
2041
	public static function createFileAfterCheck(&$conf){
2042
 
2043
		#初始化要回傳的結果
2044
		$result=array();
2045
 
2046
		#設置當前執行的涵式
2047
		$result["function"]=__FUNCTION__;
2048
 
2049
		#如果 $conf 不為陣列
2050
		if(gettype($conf)!="array"){
2051
 
2052
			#設置執行失敗
2053
			$result["status"]="false";
2054
 
2055
			#設置執行錯誤訊息
2056
			$result["error"][]="\$conf變數須為陣列形態";
2057
 
2058
			#如果傳入的參數為 null
2059
			if($conf==null){
2060
 
2061
				#設置執行錯誤訊息
2062
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2063
 
2064
				}#if end
2065
 
2066
			#回傳結果
2067
			return $result;
2068
 
2069
			}#if end
2070
 
2071
		#取得參數
2072
		$result["argu"]=$conf;
2073
 
2074
		#檢查參數
2075
		#函式說明:
2076
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2077
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2078
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2079
		#$result["function"],當前執行的函式名稱.
2080
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2081
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2082
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2083
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2084
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2085
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2086
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2087
		#必填寫的參數:
2088
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2089
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2090
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2091
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","checkedFileAndPath");
2092
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2093
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2094
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2095
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2096
		#可以省略的參數:
2097
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2098
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2099
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2100
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("filenameExtensionStartPoint","repeatNameRule","web");
2101
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2102
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
2103
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2104
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1","(\$i)","false");
2105
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2106
		#$conf["arrayCountEqualCheck"][]=array();
2107
		#參考資料來源:
2108
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2109
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2110
		unset($conf["variableCheck::checkArguments"]);
2111
 
2112
		#如果 $checkArguments["status"] 等於 "false"
2113
		if($checkArguments["status"]=="false"){
2114
 
2115
			#設置錯誤識別
2116
			$result["status"]="false";
2117
 
2118
			#設置錯誤訊息
2119
			$result["error"]=$checkArguments;
2120
 
2121
			#回傳結果
2122
			return $result;				
2123
 
2124
			}#if end
2125
 
2126
		#如果 $checkArguments["passed"] 等於 "false"
2127
		if($checkArguments["passed"]=="false"){
2128
 
2129
			#設置錯誤識別
2130
			$result["status"]="false";
2131
 
2132
			#設置錯誤訊息
2133
			$result["error"]=$checkArguments;
2134
 
2135
			#回傳結果
2136
			return $result;				
2137
 
2138
			}#if end	
2139
 
2140
		#確保要建立檔案的路徑
2141
		#函式說明:
2142
		#確保路徑存在.
2143
		#回傳結果:
2144
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2145
		#$result["error"],錯誤訊息陣列.
2146
		#$resutl["function"],當前執行的涵式名稱.
2147
		#$result["path"],建立好的路徑字串.
2148
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
2149
		#必填參數:
2150
		#$conf["path"],要檢查的路徑
2151
		$conf["fileAccess::validatePath"]["path"]=$conf["checkedFileAndPath"];		
2152
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2153
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2154
		#可省略參數:
2155
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2156
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2157
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2158
		#$conf["dirPermission"]="";
2159
		$conf["fileAccess::validatePath"]["web"]=$conf["web"];
2160
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2161
		unset($conf["fileAccess::validatePath"]);	
2162
 
2163
		#debug
2164
		#var_dump($validatePath);
2165
		#exit;	
2166
 
2167
		#如果確保路徑失敗
2168
		if($validatePath["status"]==="false"){
2169
 
2170
			#設置錯誤識別
2171
			$result["status"]="false";
2172
 
2173
			#設置錯誤訊息
2174
			$result["error"]=$validatePath;
2175
 
2176
			#回傳結果
2177
			return $result;
2178
 
2179
			}#if end
2180
 
2181
		#取得要建立的檔案名稱
2182
		$createdFileName=$validatePath["fileName"];
2183
 
2184
		#取得要建立的路徑			
2185
		$createdFilePath=$validatePath["path"];
2186
 
2187
		#透過無窮迴圈嘗試建立不同編號的檔案
2188
		for($i=0;$i>-1;$i++){
2189
 
2190
			#如果 $i 為 0
2191
			if($i==0){
2192
 
2193
				#檢查該檔案是否存在
2194
				#函式說明:
2195
				#檢查多個檔案與資料夾是否存在.
2196
				#回傳的結果:
2197
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2198
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2199
				#必填參數:
2200
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2201
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2202
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2203
				#參考資料來源:
2204
				#http://php.net/manual/en/function.file-exists.php
2205
				#http://php.net/manual/en/control-structures.foreach.php
2206
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2207
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2208
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2209
 
2210
				#debug
2211
				#var_dump($checkResult);
2212
				#exit;
2213
 
2214
				#如果檢查檔案是否存在失敗
2215
				if($checkResult["status"]=="false"){
2216
 
2217
					#設置執行失敗
2218
					$result["status"]="false";
2219
 
2220
					#設置錯誤訊息
2221
					$result["error"]=$checkResult;
2222
 
2223
					#回傳結果
2224
					return $result;
2225
 
2226
					}#if end
2227
 
2228
				#如果 $createFilePath.$createdFileName 檔案存在
2229
				if($checkResult["varExist"][0]=="true"){
2230
 
2231
					#跳過這次迴圈
2232
					continue;
2233
 
2234
					}#if end
2235
 
2236
				#反之代表 $createFilePath.$createdFileName 檔案不存在
2237
				else{
2238
 
2239
					#嘗試建立該檔案
2240
					#函式說明:
2241
					#將字串寫入到檔案
2242
					#回傳結果:
2243
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2244
					#$result["error"],錯誤訊息陣列.
2245
					#必填參數:
2246
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2247
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2248
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2249
					#可省略參數:
2250
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2251
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2252
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2253
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2254
 
2255
					#如果 $fileCreateResult["status"] 等於 "true"
2256
					if($fileCreateResult["status"]=="true"){
2257
 
2258
						#代表檔案建立成功
2259
 
2260
						#更新建立的檔案名稱
2261
						$result["createdFileName"]=$createdFileName;
2262
 
2263
						#設置新建立的檔案名稱與路徑
2264
						$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2265
 
2266
						#設置新建立的檔與路徑
2267
						$result["createdFilePath"]=$createdFilePath;
2268
 
2269
						#跳出迴圈
2270
						break;
2271
 
2272
						}#if end
2273
 
2274
					#反之代表檔案建立失敗
2275
					else{
2276
 
2277
						#設置錯誤識別
2278
						$result["status"]="false";
2279
 
2280
						#設置錯誤訊息
2281
						$result["error"]=$fileCreateResult;
2282
 
2283
						#回傳結果
2284
						return $result;
2285
 
2286
						}#else end
2287
 
2288
					}#else end	
2289
 
2290
				}#if end
2291
 
2292
			#反之代表有相同檔名存在
2293
			else{					
2294
 
2295
				#用「.」分割檔案名稱
2296
				#函式說明:
2297
				#將固定格式的字串分開,並回傳分開的結果。
2298
				#回傳結果:
2299
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2300
				#$result["error"],錯誤訊息陣列
2301
				#$result["function"],當前執行的函數名稱.
2302
				#$result["oriStr"],要分割的原始字串內容
2303
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2304
				#$result["dataCounts"],爲總共分成幾段
2305
				#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
2306
				#必填參數:
2307
				$conf["stringProcess::spiltString"]["stringIn"]=$createdFileName;#要處理的字串。
2308
				$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
2309
				#可省略參數:
2310
				#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2311
				$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2312
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2313
				unset($conf["stringProcess::spiltString"]);					
2314
 
2315
				#如果分割檔案名稱失敗
2316
				if($spiltString["status"]=="false"){
2317
 
2318
					#設置執行失敗
2319
					$result["status"]="false";
2320
 
2321
					#設置錯誤訊息
2322
					$result["error"]=$spiltString;
2323
 
2324
					#回傳結果
2325
					return $result;
2326
 
2327
					}#if end
2328
 
2329
				#初始化儲存建立的檔案名稱
2330
				$createdFileName="";
2331
 
2332
				#初始化儲存編號的變數
2333
				$no="";
2334
 
2335
				#如果沒有dot存在
2336
				if($spiltString["found"]=="false"){
2337
 
2338
					#解析 $conf["repeatNameRule"],用 \$i 分割.
2339
					#函式說明:
2340
					#將固定格式的字串分開,並回傳分開的結果。
2341
					#回傳結果:
2342
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2343
					#$result["error"],錯誤訊息陣列
2344
					#$result["function"],當前執行的函數名稱.
2345
					#$result["oriStr"],要分割的原始字串內容
2346
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2347
					#$result["dataCounts"],爲總共分成幾段
2348
					#必填參數:
2349
					$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2350
					$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2351
					#可省略參數:
2352
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2353
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2354
					$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2355
					unset($conf["stringProcess::spiltString"]);					
2356
 
2357
					#如果分割檔案名稱失敗
2358
					if($noString["status"]=="false"){
2359
 
2360
						#設置執行失敗
2361
						$result["status"]="false";
2362
 
2363
						#設置錯誤訊息
2364
						$result["error"]=$noString;
2365
 
2366
						#回傳結果
2367
						return $result;
2368
 
2369
						}#if end
2370
 
2371
					#如果 編號規則字串 分割出來的段數為2
2372
					if($noString["dataCounts"]==2){
2373
 
2374
						#組合編號
2375
						$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2376
 
2377
						}#if end
2378
 
2379
					#反之 號規則字串 分割出來的段數為1
2380
					else if($noString["dataCounts"]==1){
2381
 
2382
						#判斷 "\$i" 在開頭或結尾
2383
						#函式說明:
2384
						#取得關鍵字在字串的哪個位置
2385
						#回傳結果:
2386
						#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2387
						#$result["error"],錯誤訊息陣列.
2388
						#$result["function"],當前執行的函數名稱.
2389
						#$result["argu"],傳入的參數.
2390
						#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2391
						#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2392
						#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2393
						#必填參數:
2394
						#$conf["inputStr"],字串,被搜尋的字串.
2395
						$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2396
						#$conf["keyWord"],字串,關鍵字.
2397
						$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2398
						#參考資料:
2399
						#http://php.net/manual/en/function.strpos.php
2400
						$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2401
						unset($conf["search::findKeyWordPosition"]);
2402
 
2403
						#如果取得關鍵字位置失敗
2404
						if($findKeyWordPosition["status"]=="false"){
2405
 
2406
							#設置執行失敗
2407
							$result["status"]="false";
2408
 
2409
							#設置錯誤訊息
2410
							$result["error"]=$findKeyWordPosition;
2411
 
2412
							#回傳結果
2413
							return $result;
2414
 
2415
							}#if end
2416
 
2417
						#如果關鍵字在開頭
2418
						if($findKeyWordPosition["head"]=="true"){
2419
 
2420
							#組合編號
2421
							$no=$i.$noString["dataArray"][0];
2422
 
2423
							}#if end
2424
 
2425
						#反之如果關鍵字在結尾
2426
						else if($findKeyWordPosition["tail"]=="true"){
2427
 
2428
							#組合編號
2429
							$no=$noString["dataArray"][0].$i;
2430
 
2431
							}#if end
2432
 
2433
						#其他情況
2434
						else{
2435
 
2436
							#設置執行失敗
2437
							$result["status"]="false";
2438
 
2439
							#設置錯誤訊息
2440
							$result["error"]=$findKeyWordPosition;
2441
 
2442
							#設置額外的錯誤訊息
2443
							$result["error"][]="非預期的結果";
2444
 
2445
							#回傳結果
2446
							return $result;
2447
 
2448
							}#else end
2449
 
2450
						}#if end
2451
 
2452
					#反之 編號規則字串 分割出來的段數為0
2453
					else if($noString["dataCounts"]==0){
2454
 
2455
						#組合編號
2456
						$no=$j;
2457
 
2458
						}#if end
2459
 
2460
					#其他結果
2461
					else{
2462
 
2463
						#設置執行失敗
2464
						$result["status"]="false";
2465
 
2466
						#設置錯誤訊息
2467
						$result["error"]=$noString;
2468
 
2469
						#設置額外的錯誤訊息
2470
						$result["error"][]="非預期的結果";
2471
 
2472
						#回傳結果
2473
						return $result;
2474
 
2475
						}#else end	
2476
 
2477
					#串接編號到檔案名稱上
2478
					$createdFileName=$validatePath["fileName"].$no;
2479
 
2480
					}#if end
2481
 
2482
				#反之有dot存在	
2483
				else{
2484
 
2485
					#依據 $spiltString["dataCounts"] 值來組裝新的檔案名稱
2486
					for($j=0;$j<$spiltString["dataCounts"];$j++){
2487
 
2488
						#如果是副檔名的前一段內容
2489
						if(($conf["filenameExtensionStartPoint"]+1)==($spiltString["dataCounts"]-$j)){
2490
 
2491
							#解析 $conf["repeatNameRule"],用 \$i 分割.
2492
							#函式說明:
2493
							#將固定格式的字串分開,並回傳分開的結果。
2494
							#回傳結果:
2495
							#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2496
							#$result["error"],錯誤訊息陣列
2497
							#$result["function"],當前執行的函數名稱.
2498
							#$result["oriStr"],要分割的原始字串內容
2499
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2500
							#$result["dataCounts"],爲總共分成幾段
2501
							#必填參數:
2502
							$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2503
							$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2504
							#可省略參數:
2505
							#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2506
							$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2507
							$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2508
							unset($conf["stringProcess::spiltString"]);					
2509
 
2510
							#如果分割檔案名稱失敗
2511
							if($noString["status"]=="false"){
2512
 
2513
								#設置執行失敗
2514
								$result["status"]="false";
2515
 
2516
								#設置錯誤訊息
2517
								$result["error"]=$noString;
2518
 
2519
								#回傳結果
2520
								return $result;
2521
 
2522
								}#if end
2523
 
2524
							#如果 編號規則字串 分割出來的段數為2
2525
							if($noString["dataCounts"]==2){
2526
 
2527
								#組合編號
2528
								$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2529
 
2530
								}#if end
2531
 
2532
							#反之 號規則字串 分割出來的段數為1
2533
							else if($noString["dataCounts"]==1){
2534
 
2535
								#判斷 "\$i" 在開頭或結尾
2536
								#函式說明:
2537
								#取得關鍵字在字串的哪個位置
2538
								#回傳結果:
2539
								#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2540
								#$result["error"],錯誤訊息陣列.
2541
								#$result["function"],當前執行的函數名稱.
2542
								#$result["argu"],傳入的參數.
2543
								#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2544
								#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2545
								#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2546
								#必填參數:
2547
								#$conf["inputStr"],字串,被搜尋的字串.
2548
								$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2549
								#$conf["keyWord"],字串,關鍵字.
2550
								$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2551
								#參考資料:
2552
								#http://php.net/manual/en/function.strpos.php
2553
								$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2554
								unset($conf["search::findKeyWordPosition"]);
2555
 
2556
								#如果取得關鍵字位置失敗
2557
								if($findKeyWordPosition["status"]=="false"){
2558
 
2559
									#設置執行失敗
2560
									$result["status"]="false";
2561
 
2562
									#設置錯誤訊息
2563
									$result["error"]=$findKeyWordPosition;
2564
 
2565
									#回傳結果
2566
									return $result;
2567
 
2568
									}#if end
2569
 
2570
								#如果關鍵字在開頭
2571
								if($findKeyWordPosition["head"]=="true"){
2572
 
2573
									#組合編號
2574
									$no=$i.$noString["dataArray"][0];
2575
 
2576
									}#if end
2577
 
2578
								#反之如果關鍵字在結尾
2579
								else if($findKeyWordPosition["tail"]=="true"){
2580
 
2581
									#組合編號
2582
									$no=$noString["dataArray"][0].$i;
2583
 
2584
									}#if end
2585
 
2586
								#其他情況
2587
								else{
2588
 
2589
									#設置執行失敗
2590
									$result["status"]="false";
2591
 
2592
									#設置錯誤訊息
2593
									$result["error"]=$findKeyWordPosition;
2594
 
2595
									#設置額外的錯誤訊息
2596
									$result["error"][]="非預期的結果";
2597
 
2598
									#回傳結果
2599
									return $result;
2600
 
2601
									}#else end
2602
 
2603
								}#if end
2604
 
2605
							#反之 編號規則字串 分割出來的段數為0
2606
							else if($noString["dataCounts"]==0){
2607
 
2608
								#組合編號
2609
								$no=$j;
2610
 
2611
								}#if end
2612
 
2613
							#其他結果
2614
							else{
2615
 
2616
								#設置執行失敗
2617
								$result["status"]="false";
2618
 
2619
								#設置錯誤訊息
2620
								$result["error"]=$noString;
2621
 
2622
								#設置額外的錯誤訊息
2623
								$result["error"][]="非預期的結果";
2624
 
2625
								#回傳結果
2626
								return $result;
2627
 
2628
								}#else end	
2629
 
2630
							#串接編號到檔案名稱上
2631
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].$no;
2632
 
2633
							#如果不是最後一段
2634
							if($j!=$spiltString["dataCounts"]-1){
2635
 
2636
								#串接並加上 dot
2637
								$createdFileName=$createdFileName.".";
2638
 
2639
								}#if end
2640
 
2641
							}#if end
2642
 
2643
						#反之如果不是最後一段
2644
						else if($j!=$spiltString["dataCounts"]-1){
2645
 
2646
							#串接並加上 dot
2647
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].".";
2648
 
2649
							}#if end
2650
 
2651
						#反之是最後一段	
2652
						else{
2653
 
2654
							#串接並加上 dot
2655
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j];
2656
 
2657
							}#else end
2658
 
2659
						}#for end
2660
 
2661
					}#else end
2662
 
2663
				#檢查加上編號的檔案是否存在
2664
				#函式說明:
2665
				#檢查多個檔案與資料夾是否存在.
2666
				#回傳的結果:
2667
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2668
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2669
				#必填參數:
2670
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2671
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2672
				#參考資料來源:
2673
				#http://php.net/manual/en/function.file-exists.php
2674
				#http://php.net/manual/en/control-structures.foreach.php
2675
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2676
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2677
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2678
 
2679
				#如果檢查檔案是否存在失敗
2680
				if($checkResult["status"]=="false"){
2681
 
2682
					#設置執行失敗
2683
					$result["status"]="false";
2684
 
2685
					#設置錯誤訊息
2686
					$result["error"]=$checkResult;
2687
 
2688
					#回傳結果
2689
					return $result;
2690
 
2691
					}#if end						
2692
 
2693
				#如果 $checkResult["varExist"][0] 等於 "true"
2694
				if($checkResult["varExist"][0]=="true"){						
2695
 
2696
					#取得要建立的檔案名稱
2697
					$createdFileName=$validatePath["fileName"];
2698
 
2699
					#跳到下個迴圈
2700
					continue;
2701
 
2702
					}#if end
2703
 
2704
				#反之代表 $createFilePath.$createdFileName."(".$i.")" 檔檔案不存在
2705
				else{
2706
 
2707
					#嘗試建立該檔案
2708
					#函式說明:
2709
					#將字串寫入到檔案
2710
					#回傳結果:
2711
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2712
					#$result["error"],錯誤訊息陣列.
2713
					#必填參數:
2714
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2715
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2716
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2717
					#可省略參數:
2718
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2719
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2720
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2721
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2722
 
2723
					#如果 $fileCreateResult["status"] 等於 "true"
2724
					if($fileCreateResult["status"]=="true"){
2725
 
2726
						#代表檔案建立成功
2727
 
2728
						#更新建立的檔案名稱
2729
						$result["createdFileName"]=$createdFileName;
2730
 
2731
						#跳出迴圈
2732
						break;
2733
 
2734
						}#if end
2735
 
2736
					#反之代表檔案建立失敗
2737
					else{
2738
 
2739
						#設置錯誤識別
2740
						$result["status"]="false";
2741
 
2742
						#設置錯誤訊息
2743
						$result["error"]=$fileCreateResult;
2744
 
2745
						#回傳結果
2746
						return $result;
2747
 
2748
						}#else end
2749
 
2750
					}#else end
2751
 
2752
				}#else end
2753
 
2754
			}#for end
2755
 
2756
		#如果不存在建立的檔案名稱
2757
		if(!isset($result["createdFileName"])){
2758
 
2759
			#設置錯誤識別
2760
			$result["status"]="false";
2761
 
2762
			#設置錯誤訊息
2763
			$result["error"][]="建立的檔案名稱不存在";
2764
 
2765
			#回傳結果
2766
			return $result;
2767
 
2768
			}#if end	
2769
 
2770
		#執行到這邊代表執行成功
2771
		$result["status"]="true";
2772
 
2773
		#設置新建立的檔案名稱與路徑
2774
		$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2775
 
2776
		#設置新建立的檔與路徑
2777
		$result["createdFilePath"]=$createdFilePath;
2778
 
2779
		#回傳結果
2780
		return $result;
2781
 
2782
		}#fucntion createFileAfterCheck end
2783
 
2784
	/*
2785
	#函式說明:
2786
	#將檔案內容清空
2787
	#回傳結果:
2788
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2789
	#$result["error"],錯誤訊息陣列
2790
	#必填參數:
2791
	#$conf["fileAddr"],字串,要清空的檔案位置與名稱.
2792
	$conf["fileAddr"]="";
2793
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2794
	$conf["fileArgu"]=__FILE__;
2795
	#可省略參數:
2796
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2797
	#$conf["web"]="false";
2798
	#參考資料:
2799
	#無.
2800
	#備註:
2801
	#無.
2802
	*/
2803
	public static function emptyFile(&$conf){
2804
 
2805
		#初始化要回傳的結果
2806
		$result=array();
2807
 
2808
		#設置當前執行的涵式
2809
		$result["function"]=__FUNCTION__;
2810
 
2811
		#如果 $conf 不為陣列
2812
		if(gettype($conf)!="array"){
2813
 
2814
			#設置執行失敗
2815
			$result["status"]="false";
2816
 
2817
			#設置執行錯誤訊息
2818
			$result["error"][]="\$conf變數須為陣列形態";
2819
 
2820
			#如果傳入的參數為 null
2821
			if($conf==null){
2822
 
2823
				#設置執行錯誤訊息
2824
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2825
 
2826
				}#if end
2827
 
2828
			#回傳結果
2829
			return $result;
2830
 
2831
			}#if end
2832
 
2833
		#取得參數
2834
		$result["argu"]=$conf;
2835
 
2836
		#檢查參數
2837
		#函式說明:
2838
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2839
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2840
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2841
		#$result["function"],當前執行的函式名稱.
2842
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2843
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2844
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2845
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2846
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2847
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2848
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2849
		#必填寫的參數:
2850
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2851
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2852
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2853
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddr");
2854
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2855
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2856
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2857
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2858
		#可以省略的參數:
2859
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2860
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2861
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2862
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
2863
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2864
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
2865
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2866
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
2867
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2868
		#$conf["arrayCountEqualCheck"][]=array();
2869
		#參考資料來源:
2870
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2871
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2872
		unset($conf["variableCheck::checkArguments"]);
2873
 
2874
		#如果 $checkArguments["status"] 等於 "false"
2875
		if($checkArguments["status"]=="false"){
2876
 
2877
			#設置錯誤識別
2878
			$result["status"]="false";
2879
 
2880
			#設置錯誤訊息
2881
			$result["error"]=$checkArguments;
2882
 
2883
			#回傳結果
2884
			return $result;				
2885
 
2886
			}#if end
2887
 
2888
		#如果 $checkArguments["passed"] 等於 "false"
2889
		if($checkArguments["passed"]=="false"){
2890
 
2891
			#設置錯誤識別
2892
			$result["status"]="false";
2893
 
2894
			#設置錯誤訊息
2895
			$result["error"]=$checkArguments;
2896
 
2897
			#回傳結果
2898
			return $result;				
2899
 
2900
			}#if end	
2901
 
2902
		#函式說明:
2903
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
2904
		#回傳結果:
2905
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2906
		#$result["error"],錯誤訊息陣列.
2907
		#$result["function"],函數名稱. 
2908
		#$result["argu"],使用的參數.
2909
		#$result["content"],網址,若是在命令列執行,則為"null".
2910
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
2911
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
2912
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
2913
		#必填參數:
2914
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
2915
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["fileAddr"];
2916
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
2917
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
2918
		#可省略參數:
2919
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2920
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
2921
		#備註:
2922
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
2923
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
2924
		unset($conf["fileAccess::getInternetAddressV2"]);
2925
 
2926
		#如果確保路徑失敗
2927
		if($getInternetAddressV2["status"]==="false"){
2928
 
2929
			#設置錯誤識別
2930
			$result["status"]="false";
2931
 
2932
			#設置錯誤訊息
2933
			$result["error"]=$getInternetAddressV2;
2934
 
2935
			#回傳結果
2936
			return $result;
2937
 
2938
			}#if end
2939
 
2940
		#更新檔案路徑
2941
		$conf["fileAddr"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
2942
 
2943
		#確保要建立檔案的路徑
2944
		#函式說明:
2945
		#確保路徑存在.
2946
		#回傳結果:
2947
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2948
		#$result["error"],錯誤訊息陣列.
2949
		#$resutl["function"],當前執行的涵式名稱.
2950
		#$result["path"],建立好的路徑字串.
2951
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
2952
		#必填參數:
2953
		#$conf["path"],要檢查的路徑
2954
		$conf["fileAccess::validatePath"]["path"]=$conf["fileAddr"];		
2955
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2956
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2957
		#可省略參數:
2958
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2959
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2960
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2961
		#$conf["dirPermission"]="";
2962
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2963
		$conf["fileAccess::validatePath"]["web"]="false";
2964
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2965
		unset($conf["fileAccess::validatePath"]);	
2966
 
2967
		#如果確保路徑失敗
2968
		if($validatePath["status"]==="false"){
2969
 
2970
			#設置錯誤識別
2971
			$result["status"]="false";
2972
 
2973
			#設置錯誤訊息
2974
			$result["error"]=$validatePath;
2975
 
2976
			#回傳結果
2977
			return $result;
2978
 
2979
			}#if end
2980
 
2981
		#清空檔案
2982
		#函式說明:
2983
		#將字串寫入到檔案
2984
		#回傳結果:
2985
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
2986
		#$result["error"],錯誤訊息陣列.
2987
		#$result["function"],當前執行的函數名稱.
2988
		#$result["fileInfo"],實際上寫入的檔案資訊陣列.
2989
		#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
2990
		#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
2991
		#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
2992
		#$result["argu"],使用的參數.
2993
		#必填參數:
2994
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2995
		$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2996
		#可省略參數:
2997
		#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
2998
		#$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];
2999
		$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];;
3000
		#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
3001
		#$conf["inputString"]="";
3002
		#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
3003
		#$conf["writeMethod"]="a";
3004
		#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
3005
		#$conf["checkRepeat"]="";
3006
		#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
3007
		#$conf["filenameExtensionStartPoint"]="";
3008
		#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
3009
		#$conf["repeatNameRule"]="";
3010
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3011
		$conf["fileAccess::writeTextIntoFile"]["web"]="false";
3012
		$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
3013
		unset($conf["fileAccess::writeTextIntoFile"]);
3014
 
3015
		#如果確保路徑失敗
3016
		if($writeTextIntoFile["status"]==="false"){
3017
 
3018
			#設置錯誤識別
3019
			$result["status"]="false";
3020
 
3021
			#設置錯誤訊息
3022
			$result["error"]=$writeTextIntoFile;
3023
 
3024
			#回傳結果
3025
			return $result;
3026
 
3027
			}#if end
3028
 
3029
		#設置執行正常
3030
		$result["status"]="true";
3031
 
3032
		#儲存建立的結果
3033
		$result["content"]=$writeTextIntoFile;
3034
 
3035
		#回傳結果
3036
		return $result;
3037
 
3038
		}#function emptyFile end
3039
 
3040
	/*
3041
	#函式說明:
3042
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
3043
	#回傳結果:
3044
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3045
	#$result["error"],錯誤訊息陣列
3046
	#$result["warning"],警告訊息陣列
3047
	#必填參數:
3048
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3049
	$conf["dirPositionAndName"]="";
3050
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3051
	$conf["fileArgu"]=__FILE__;
3052
	#可省略參數:
3053
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3054
	#$conf["dirPermission"]="";
3055
	#參考資料:
3056
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3057
	#chmod=>http://php.net/manual/en/function.chmod.php
3058
	#參考資料:
3059
	#無.
3060
	#備註:
3061
	#同 function createFolderAfterCheck.
3062
	*/
3063
	public static function createNewFolder(&$conf){
3064
 
3065
		/*
3066
		#函式說明:
3067
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
3068
		#回傳的結果:
3069
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
3070
		#$result["error"],錯誤訊息陣列.
3071
		#$result["function"],當前執行的函數名稱.
3072
		#$result["createdFileName"],建立好的檔案名稱.
3073
		#$result["createdFilePath"],檔案建立的路徑.
3074
		#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
3075
		#必填參數:
3076
		#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
3077
		$conf["checkedFileAndPath"]="";
3078
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3079
		$conf["fileArgu"]=__FILE__;
3080
		*/
3081
		return fileAccess::createFolderAfterCheck($conf);
3082
		unset($conf);
3083
 
3084
		}#function createNewFolder end
3085
 
3086
	/*
3087
	#函式說明:
3088
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
3089
	#回傳結果:
3090
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3091
	#$result["error"],錯誤訊息陣列
3092
	#$result["warning"],警告訊息陣列
3093
	#$result["argu"],使用的參數.
3094
	#$result["content"],建立的目錄路徑.
3095
	#必填參數:
3096
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3097
	$conf["dirPositionAndName"]="";
3098
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3099
	$conf["fileArgu"]=__FILE__;
3100
	#可省略參數:
3101
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3102
	#$conf["dirPermission"]="";
3103
	#$conf["web"],"false"代表在檔案系統環境,"true"代表在網頁稀系統環境.
3104
	#$conf["web"]="false";
3105
	#參考資料:
3106
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3107
	#chmod=>http://php.net/manual/en/function.chmod.php
3108
	#備註:
3109
	#無.
3110
	*/
3111
	public static function createFolderAfterCheck(&$conf){
3112
 
3113
		#初始化要回傳的結果
3114
		$result=array();
3115
 
3116
		#初始化警告訊息陣列
3117
		$result["warning"]=array();
3118
 
3119
		#記錄當前執行的函數名稱
3120
		$result["function"]=__FUNCTION__;
3121
 
3122
		#如果 $conf 不為陣列
3123
		if(gettype($conf)!="array"){
3124
 
3125
			#設置執行失敗
3126
			$result["status"]="false";
3127
 
3128
			#設置執行錯誤訊息
3129
			$result["error"][]="\$conf變數須為陣列形態";
3130
 
3131
			#如果傳入的參數為 null
3132
			if($conf==null){
3133
 
3134
				#設置執行錯誤訊息
3135
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3136
 
3137
				}#if end
3138
 
3139
			#回傳結果
3140
			return $result;
3141
 
3142
			}#if end
3143
 
3144
		#取得參數
3145
		$result["argu"]=$conf;
3146
 
3147
		#檢查參數
3148
		#函式說明:
3149
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3150
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3151
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3152
		#$result["function"],當前執行的函式名稱.
3153
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3154
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3155
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3156
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3157
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3158
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3159
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3160
		#必填寫的參數:
3161
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3162
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3163
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3164
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dirPositionAndName");
3165
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3166
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3167
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3168
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3169
		#可以省略的參數:
3170
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3171
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3172
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3173
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dirPermission","web");
3174
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3175
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
3176
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3177
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("0770","false");
3178
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3179
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
3180
		#參考資料來源:
3181
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3182
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3183
		unset($conf["variableCheck::checkArguments"]);
3184
 
3185
		#如果 $checkArguments["status"] 等於 "false"
3186
		if($checkArguments["status"]==="false"){
3187
 
3188
			#設置 $result["status"] 為 "false"
3189
			$result["status"]="false";
3190
 
3191
			#設置 $result["error"]
3192
			$result["error"]=$checkArguments;
3193
 
3194
			#回傳結果
3195
			return $result;
3196
 
3197
			}#if end
3198
 
3199
		#如果 $checkArguments["passed"] 等於 "false"
3200
		if($checkArguments["passed"]==="false"){
3201
 
3202
			#設置 $result["status"] 為 "false"
3203
			$result["status"]="false";
3204
 
3205
			#設置 $result["error"]
3206
			$result["error"]=$checkArguments;
3207
 
3208
			#回傳結果
3209
			return $result;
3210
 
3211
			}#if end			
3212
 
3213
		#函式說明:
3214
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
3215
		#回傳結果:
3216
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3217
		#$result["error"],錯誤訊息陣列.
3218
		#$result["function"],函數名稱. 
3219
		#$result["argu"],使用的參數.
3220
		#$result["content"],網址,若是在命令列執行,則為"null".
3221
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
3222
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
3223
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
3224
		#必填參數:
3225
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
3226
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["dirPositionAndName"];
3227
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3228
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
3229
		#可省略參數:
3230
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3231
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
3232
		#備註:
3233
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
3234
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
3235
		unset($conf["fileAccess::getInternetAddressV2"]);
3236
 
3237
		#如果 $getInternetAddressV2["status"] 等於 "false"
3238
		if($getInternetAddressV2["status"]==="false"){
3239
 
3240
			#設置 $result["status"] 為 "false"
3241
			$result["status"]="false";
3242
 
3243
			#設置 $result["error"]
3244
			$result["error"]=$getInternetAddressV2;
3245
 
3246
			#回傳結果
3247
			return $result;
3248
 
3249
			}#if end
3250
 
3251
		#取得絕對位置
3252
		$conf["dirPositionAndName"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
3253
 
3254
		#用「/」分割要建立的路徑
3255
		#函式說明:
3256
		#將固定格式的字串分開,並回傳分開的結果。
3257
		#回傳結果:
3258
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3259
		#$result["error"],錯誤訊息陣列
3260
		#$result["function"],當前執行的函數名稱.
3261
		#$result["oriStr"],要分割的原始字串內容
3262
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
3263
		#$result["dataCounts"],爲總共分成幾段
3264
		#必填參數:
3265
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["dirPositionAndName"];
3266
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
3267
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
3268
		unset($conf["stringProcess::spiltString"]);	
3269
 
3270
		#如果分割失敗
3271
		if($spiltString["status"]=="false"){
3272
 
3273
			#設置 $result["status"] 為 "false"
3274
			$result["status"]="false";
3275
 
3276
			#設置 $result["error"]
3277
			$result["error"]=$spiltString;
3278
 
3279
			#回傳結果
3280
			return $result;
3281
 
3282
			}#if end
3283
 
3284
		$checkedPath="";
3285
 
3286
		#依據切割成的路徑片段數目
3287
		for($i=0;$i<$spiltString["dataCounts"];$i++){
3288
 
3289
			$checkedPath=$checkedPath."/".$spiltString["dataArray"][$i];
3290
 
3291
			#檢查路徑是否存在
3292
			#函式說明:
3293
			#檢查多個檔案與資料夾是否存在.
3294
			#回傳的結果:
3295
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3296
			#$result["error"],錯誤訊息陣列.
3297
			#$resutl["function"],當前執行的涵式名稱.
3298
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3299
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
3300
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
3301
			#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
3302
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3303
			#必填參數:
3304
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
3305
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($checkedPath);
3306
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3307
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3308
			#可省略參數
3309
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3310
			#$conf["disableWebSearch"]="false";
3311
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3312
			#$conf["userDir"]="true";
3313
			#參考資料來源:
3314
			#http://php.net/manual/en/function.file-exists.php
3315
			#http://php.net/manual/en/control-structures.foreach.php
3316
			#備註:
3317
			#函數file_exists檢查的路徑為檔案系統的路徑
3318
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
3319
 
3320
			#如果檢查資料夾路徑失敗
3321
			if($checkMultiFileExist["status"]=="false"){
3322
 
3323
				#設置 $result["status"] 為 "false"
3324
				$result["status"]="false";
3325
 
3326
				#設置 $result["error"]
3327
				$result["error"]=$spiltString;
3328
 
3329
				#回傳結果
3330
				return $result;
3331
 
3332
				}#if end
3333
 
3334
			#如果目錄不存在
3335
			if($checkMultiFileExist["allExist"]=="false"){
3336
 
3337
				#如果有這個名稱的東西存在
3338
				if(file_exists($checkedPath)){
3339
 
3340
					#如果目錄存在
3341
					if(is_dir($checkedPath)){
3342
 
3343
						#目錄已經存在換下一層
3344
						continue;
3345
 
3346
						}#if end
3347
 
3348
					}#if end
3349
 
3350
				#建立目錄
3351
				$mkdir=@mkdir($checkedPath,0770);
3352
 
3353
				#如果建立目錄失敗
3354
				#參考資料:
3355
				#http://php.net/manual/en/function.mkdir.php
3356
				if($mkdir===false){
3357
 
3358
					#設置 $result["status"] 為 "false"
3359
					$result["status"]="false";
3360
 
3361
					#設置 $result["error"]
3362
					$result["error"][]="建立目錄「".$checkedPath."」失敗";
3363
 
3364
					#回傳結果
3365
					return $result;
3366
 
3367
					}#if end
3368
 
3369
				#更改目錄的權限為 0770
3370
				chmod($checkedPath,0770);
3371
 
3372
				}#if end
3373
 
3374
			}#for end
3375
 
3376
		#取得建立好的目錄
3377
		$result["content"]=$checkedPath;	
3378
 
3379
		#執行到這邊代表執行成功
3380
		$result["status"]="true";
3381
 
3382
		#回傳結果
3383
		return $result;
3384
 
3385
		}#function createFolderAfterCheck end
3386
 
3387
	/*
3388
	#函式說明:
3389
	#移除檔案
3390
	#回傳結果:
3391
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3392
	#$result["error"],錯誤訊息陣列.
3393
	#$result["warning"],警告訊息陣列.
3394
	#$result["function"],當前執行的函數名稱.
3395
	#$result["argu"],當前函式使用的參數.
3396
	#必填參數:
3397
	#$conf["fileAddress"],字串,要移除檔案的位置.
3398
	$conf["fileAddress"]="";
3399
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3400
	$conf["fileArgu"]=__FILE__;
3401
	#可省略參數:
3402
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3403
	#$conf["commentsArray"]=array("");
3404
	#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
3405
	#$conf["allowDelSymlink"]="true";
3406
	#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
3407
	#$conf["allowDelFolder"]="true";
3408
	#參考資料:
3409
	#無.
3410
	#備註:
3411
	#無.
3412
	*/		
3413
	public static function delFile(&$conf){
3414
 
3415
		#初始化要回傳的結果
3416
		$result=array();
3417
 
3418
		#設置當其函數名稱
3419
		$result["function"]=__FUNCTION__;
3420
 
3421
		#如果 $conf 不為陣列
3422
		if(gettype($conf)!="array"){
3423
 
3424
			#設置執行失敗
3425
			$result["status"]="false";
3426
 
3427
			#設置執行錯誤訊息
3428
			$result["error"][]="\$conf變數須為陣列形態";
3429
 
3430
			#如果傳入的參數為 null
3431
			if($conf==null){
3432
 
3433
				#設置執行錯誤訊息
3434
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3435
 
3436
				}#if end
3437
 
3438
			#回傳結果
3439
			return $result;
3440
 
3441
			}#if end
3442
 
3443
		#取得參數
3444
		$result["argu"]=$conf;
3445
 
3446
		#檢查參數
3447
		#函式說明:
3448
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3449
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3450
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3451
		#$result["function"],當前執行的函式名稱.
3452
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3453
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3454
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3455
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3456
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3457
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3458
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3459
		#必填寫的參數:
3460
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3461
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3462
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3463
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3464
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3465
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3466
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3467
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3468
		#可以省略的參數:
3469
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3470
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3471
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3472
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","allowDelSymlink","allowDelFolder");
3473
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3474
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
3475
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3476
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
3477
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3478
		#$conf["arrayCountEqualCheck"][]=array();
3479
		#參考資料來源:
3480
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3481
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3482
		unset($conf["variableCheck::checkArguments"]);
3483
 
3484
		#如果檢查失敗
3485
		if($checkResult["status"]=="false"){
3486
 
3487
			#設置錯誤識別
3488
			$result["status"]="false";
3489
 
3490
			#設置錯誤訊息
3491
			$result["error"]=$checkResult;
3492
 
3493
			#回傳結果
3494
			return $result;
3495
 
3496
			}#if end
3497
 
3498
		#如果檢查不通過
3499
		if($checkResult["passed"]=="false"){
3500
 
3501
			#設置錯誤識別
3502
			$result["status"]="false";
3503
 
3504
			#設置錯誤訊息
3505
			$result["error"]=$checkResult;
3506
 
3507
			#回傳結果
3508
			return $result;
3509
 
3510
			}#if end
3511
 
3512
		#如果 $conf["commentsArray"] 有設定
3513
		if(isset($conf["commentsArray"])){
3514
 
3515
			#印出提示文字
3516
			#函式說明:
3517
			#印出多行文字,結尾自動換行.
3518
			#回傳的結果:
3519
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3520
			#$result["function"],當前執行的函數名稱.
3521
			#$result["error"],錯誤訊息陣列.
3522
			#必填參數:
3523
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
3524
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
3525
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
3526
			unset($conf["cmd::echoMultiLine"]);
3527
 
3528
			#如果印出提示文字失敗
3529
			if($echoMultiLine["status"]=="false"){
3530
 
3531
				#設置執行失敗
3532
				$result["status"]="false";
3533
 
3534
				#設置執行錯誤訊息
3535
				$result["error"]=$echoMultiLine;
3536
 
3537
				#回傳結果
3538
				return $result;
3539
 
3540
				}#if end
3541
 
3542
			}#if end
3543
 
3544
		#檢查要移除的檔案是否存在
3545
		#函式說明:
3546
		#檢查多個檔案與資料夾是否存在.
3547
		#回傳的結果:
3548
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3549
		#$result["error"],錯誤訊息陣列.
3550
		#$resutl["function"],當前執行的涵式名稱.
3551
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3552
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3553
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3554
		#必填參數:
3555
		$conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["fileAddress"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
3556
		#$conf["fileAccess.checkMultiFileExist"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3557
		$conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3558
		#可省略參數:
3559
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3560
		#$conf["disableWebSearch"]="false";
3561
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3562
		#$conf["userDir"]="true";
3563
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
3564
		$conf["fileAccess.checkMultiFileExist"]["web"]="false";
3565
		#參考資料來源:
3566
		#http://php.net/manual/en/function.file-exists.php
3567
		#http://php.net/manual/en/control-structures.foreach.php
3568
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3569
		unset($conf["fileAccess.checkMultiFileExist"]);
3570
 
3571
		#var_dump($checkResult);
3572
 
3573
		#如果檢查檔案是否存在失敗
3574
		if($checkResult["status"]==="false"){
3575
 
3576
			#設置執行失敗
3577
			$result["status"]="false";
3578
 
3579
			#回傳錯誤訊息
3580
			$result["error"]=$checkResult;
3581
 
3582
			#回傳結果
3583
			return $result;
3584
 
3585
			}#if end
3586
 
3587
		#如果目標檔案不存在
3588
		if($checkResult["varExist"][0]==="false"){
3589
 
3590
			#設置錯誤識別
3591
			$result["status"]="true";
3592
 
3593
			#回傳錯誤訊息
3594
			$result["warning"][]="要移除的檔案不存在";
3595
 
3596
			#回傳結果
3597
			return $result;
3598
 
3599
			}#if end
3600
 
3601
		#如果要移除的目標是檔案
3602
		if(is_file($conf["fileAddress"])){
3603
 
3604
			#移除檔案,並回傳移除的結果
3605
			$eraseResult=(@unlink($conf["fileAddress"]));
3606
 
3607
			#如果 $eraseResult 等於 false
3608
			if($eraseResult===false){
3609
 
3610
				#設置錯誤識別
3611
				$result["status"]="false";
3612
 
3613
				#回傳錯誤訊息
3614
				$result["error"][]="檔案移除失敗";
3615
 
3616
				#回傳結果
3617
				return $result;
3618
 
3619
				}#if end
3620
 
3621
			}#if end
3622
 
3623
		#反之要移除的目標是目錄
3624
		else if(is_dir($conf["fileAddress"])){
3625
 
3626
			#如果允許移除目錄
3627
			if($conf["allowDelFolder"]==="true"){
3628
 
3629
				#移除目錄跟底下的內容
3630
				w函式說明:
3631
				#呼叫shell執行系統命令,並取得回傳的內容.
3632
				#回傳結果:
3633
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3634
				#$result["error"],錯誤訊息陣列.
3635
				#$result["function"],當前執行的函數名稱.
3636
				#$result["argu"],使用的參數.
3637
				#$result["cmd"],執行的指令內容.
3638
				#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
3639
				#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
3640
				#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
3641
				#$result["running"],是否還在執行.
3642
				#$result["pid"],pid.
3643
				#$result["statusCode"],執行結束後的代碼.
3644
				#必填參數:
3645
				#$conf["command"],字串,要執行的指令.
3646
				$conf["external::callShell"]["command"]="rm";
3647
				#$conf["fileArgu"],字串,變數__FILE__的內容.
3648
				$conf["external::callShell"]["fileArgu"]=__FILE__;
3649
				#可省略參數:
3650
				#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
3651
				$conf["external::callShell"]["argu"]=array("-rf",$conf["fileAddress"]);
3652
				#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
3653
				#$conf["arguIsAddr"]=array();
3654
				#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
3655
				#$conf["plainArgu"]=array();
3656
				#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
3657
				#$conf["useApostrophe"]=array();
3658
				#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
3659
				#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
3660
				#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
3661
				#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
3662
				#$conf["enablePrintDescription"]="true";
3663
				#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
3664
				#$conf["printDescription"]="";
3665
				#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
3666
				$conf["external::callShell"]["escapeshellarg"]="true";
3667
				#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
3668
				#$conf["thereIsShellVar"]=array();
3669
				#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
3670
				#$conf["username"]="";
3671
				#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
3672
				#$conf["password"]="";
3673
				#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
3674
				#$conf["useScript"]="";
3675
				#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
3676
				#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
3677
				#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
3678
				#$conf["inBackGround"]="";
3679
				#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
3680
				#$conf["getErr"]="false";
3681
				#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
3682
				#$conf["doNotRun"]="false";
3683
				#參考資料:
3684
				#exec=>http://php.net/manual/en/function.exec.php
3685
				#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
3686
				#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
3687
				#備註:
3688
				#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
3689
				#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
3690
				$callShell=external::callShell($conf["external::callShell"]);
3691
				unset($conf["external::callShell"]);
3692
 
3693
				#如果執行失敗
3694
				if($callShell["status"]==="false"){
3695
 
3696
					#設置錯誤識別
3697
					$result["status"]="false";
3698
 
3699
					#回傳錯誤訊息
3700
					$result["error"]=$callShell;
3701
 
3702
					#回傳結果
3703
					return $result;
3704
 
3705
					}#if end
3706
 
3707
				}#if end	
3708
 
3709
			#反之不允許
3710
			else{
3711
 
3712
				#設置錯誤識別
3713
				$result["status"]="false";
3714
 
3715
				#回傳錯誤訊息
3716
				$result["error"][]="不允許移除目錄";
3717
 
3718
				#回傳結果
3719
				return $result;
3720
 
3721
				}#else end
3722
 
3723
			}#if end
3724
 
3725
		#反之
3726
		else{
3727
 
3728
			#可能為 軟連結
3729
 
3730
			#如果允許移除
3731
			if($conf["allowDelSymlink"]==="true"){
3732
 
3733
				#移除檔案,並回傳移除的結果
3734
				$eraseResult=(@unlink($conf["fileAddress"]));
3735
 
3736
				#如果 $eraseResult 等於 false
3737
				if($eraseResult===false){
3738
 
3739
					#設置錯誤識別
3740
					$result["status"]="false";
3741
 
3742
					#回傳錯誤訊息
3743
					$result["error"][]="檔案移除失敗";
3744
 
3745
					#回傳結果
3746
					return $result;
3747
 
3748
					}#if end
3749
 
3750
				}#if end
3751
 
3752
			#反之
3753
			else{
3754
 
3755
				#設置錯誤識別
3756
				$result["status"]="false";
3757
 
3758
				#設置錯誤訊息
3759
				$result["error"][]="不允許移除 檔案、目錄 以外類型的目標";
3760
 
3761
				#回傳結果
3762
				return $result;
3763
 
3764
				}#else end
3765
 
3766
			}#else end
3767
 
3768
		#執行到這邊代表執行正常.
3769
		$result["status"]="true";
3770
 
3771
		#回傳結果
3772
		return $result;
3773
 
3774
		}#function delFile end
3775
 
3776
	/*
3777
	#函式說明:
3778
	#移除多個檔案
3779
	#回傳結果:
3780
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3781
	#$result["error"],錯誤訊息陣列
3782
	#$result["function"],當前執行的函數名稱.
3783
	#$result["argu"],使用的參數.
3784
	#$result["content"],陣列,移除各個檔案的結果.
3785
	#必填參數:
3786
	#$conf["fileAddress"],字串陣列,要移除檔案的位置.
3787
	$conf["fileAddress"]=array("");
3788
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3789
	$conf["fileArgu"]=__FILE__;
3790
	#可省略參數:
3791
	#無.
3792
	#參考資料:
3793
	#無.
3794
	#備註:
3795
	#無.
3796
	*/		
3797
	public static function delMultiFile(&$conf){
3798
 
3799
		#初始化要回傳的結果
3800
		$result=array();
3801
 
3802
		#設置當其函數名稱
3803
		$result["function"]=__FUNCTION__;
3804
 
3805
		#如果 $conf 不為陣列
3806
		if(gettype($conf)!="array"){
3807
 
3808
			#設置執行失敗
3809
			$result["status"]="false";
3810
 
3811
			#設置執行錯誤訊息
3812
			$result["error"][]="\$conf變數須為陣列形態";
3813
 
3814
			#如果傳入的參數為 null
3815
			if($conf==null){
3816
 
3817
				#設置執行錯誤訊息
3818
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3819
 
3820
				}#if end
3821
 
3822
			#回傳結果
3823
			return $result;
3824
 
3825
			}#if end
3826
 
3827
		#取得使用的參數.
3828
		$result["argu"]=$conf;
3829
 
3830
		#檢查參數
3831
		#函式說明:
3832
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3833
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3834
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3835
		#$result["function"],當前執行的函式名稱.
3836
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3837
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3838
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3839
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3840
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3841
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3842
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3843
		#必填寫的參數:
3844
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3845
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3846
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3847
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3848
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3849
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
3850
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3851
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3852
		#可以省略的參數:
3853
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3854
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3855
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3856
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
3857
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3858
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3859
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3860
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3861
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3862
		#$conf["arrayCountEqualCheck"][]=array();
3863
		#參考資料來源:
3864
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3865
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3866
		unset($conf["variableCheck::checkArguments"]);
3867
 
3868
		#如果檢查失敗
3869
		if($checkResult["status"]=="false"){
3870
 
3871
			#設置錯誤識別
3872
			$result["status"]="false";
3873
 
3874
			#設置錯誤訊息
3875
			$result["error"]=$checkResult;
3876
 
3877
			#回傳結果
3878
			return $result;
3879
 
3880
			}#if end
3881
 
3882
		#如果檢查不通過
3883
		if($checkResult["passed"]=="false"){
3884
 
3885
			#設置錯誤識別
3886
			$result["status"]="false";
3887
 
3888
			#設置錯誤訊息
3889
			$result["error"]=$checkResult;
3890
 
3891
			#回傳結果
3892
			return $result;
3893
 
3894
			}#if end
3895
 
3896
		#針對每個要移除的檔案
3897
		foreach($conf["fileAddress"] as $fileAddr){
3898
 
3899
			#函式說明:
3900
			#移除檔案
3901
			#回傳結果:
3902
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3903
			#$result["error"],錯誤訊息陣列
3904
			#$result["warning"],警告訊息陣列
3905
			#$result["function"],當前執行的函數名稱
3906
			#必填參數:
3907
			#$conf["fileAddress"],字串,要移除檔案的位置.
3908
			$conf["fileAccess::delFile"]["fileAddress"]=$fileAddr;
3909
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3910
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
3911
			#可省略參數:
3912
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3913
			#$conf["commentsArray"]=array("");
3914
			#備註:
3915
			#無.
3916
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
3917
			unset($conf["fileAccess::delFile"]);
3918
 
3919
			#如果檢查失敗
3920
			if($delFile["status"]==="false"){
3921
 
3922
				#設置錯誤識別
3923
				$result["status"]="false";
3924
 
3925
				#設置錯誤訊息
3926
				$result["error"]=$delFile;
3927
 
3928
				#回傳結果
3929
				return $result;
3930
 
3931
				}#if end
3932
 
3933
			#取得移除檔案的結果
3934
			$result["content"][]=$delFile;
3935
 
3936
			}#foreach end
3937
 
3938
		#設置執行正常
3939
		$result["status"]="true";
3940
 
3941
		#回傳結果
3942
		return $result;
3943
 
3944
		}#function delMultiFile end
3945
 
3946
	/*
3947
	#函式說明:
3948
	#確保路徑存在.
3949
	#回傳結果:
3950
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3951
	#$result["error"],錯誤訊息陣列.
3952
	#$resutl["function"],當前執行的涵式名稱.
3953
	#$result["path"],建立好的路徑字串.
3954
	#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
3955
	#$result["argu"],使用的參數.
3956
	#必填參數:
3957
	#$conf["path"],要檢查的路徑
3958
	$conf["path"]="";		
3959
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3960
	$conf["fileArgu"]=__FILE__;
3961
	#可省略參數:
3962
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
3963
	#$conf["haveFileName"]="false";
3964
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人無法使用.
3965
	#$conf["dirPermission"]="";
3966
	#$conf["web"],是否為檔案系統,"true"為網頁路徑,"false"為網頁系統,預設為"false".
3967
	#$conf["web"]="";
3968
	#參考資料:
3969
	#無.
3970
	#備註:
3971
	#無.
3972
	*/ 
3973
	public static function validatePath(&$conf){
3974
 
3975
		#初始化要回傳的結果
3976
		$result=array();
3977
 
3978
		#設置當其函數名稱
3979
		$result["function"]=__FUNCTION__;
3980
 
3981
		#如果 $conf 不為陣列
3982
		if(gettype($conf)!="array"){
3983
 
3984
			#設置執行失敗
3985
			$result["status"]="false";
3986
 
3987
			#設置執行錯誤訊息
3988
			$result["error"][]="\$conf變數須為陣列形態";
3989
 
3990
			#如果傳入的參數為 null
3991
			if($conf==null){
3992
 
3993
				#設置執行錯誤訊息
3994
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3995
 
3996
				}#if end
3997
 
3998
			#回傳結果
3999
			return $result;
4000
 
4001
			}#if end
4002
 
4003
		#取得使用的參數
4004
		$result["argu"]=$conf;	
4005
 
4006
		#檢查參數
4007
		#函式說明:
4008
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4009
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4010
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4011
		#$result["function"],當前執行的函式名稱.
4012
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4013
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4014
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4015
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4016
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4017
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4018
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4019
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4020
		#必填寫的參數:
4021
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4022
		$conf["variableCheck::checkArgument"]["varInput"]=&$conf;
4023
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4024
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableName"]=array("path","fileArgu");
4025
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4026
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableType"]=array("string","string");
4027
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4028
		$conf["variableCheck::checkArgument"]["referenceVarKey"]="variableCheck::checkArgument";
4029
		#可以省略的參數:
4030
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4031
		$conf["variableCheck::checkArgument"]["canBeEmptyString"]="false";
4032
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4033
		$conf["variableCheck::checkArgument"]["skipableVariableCanNotBeEmpty"]=array("haveFileName","dirPermission","web");
4034
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4035
		$conf["variableCheck::checkArgument"]["skipableVariableName"]=array("haveFileName","dirPermission","web");
4036
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4037
		$conf["variableCheck::checkArgument"]["skipableVariableType"]=array("string","string","string");
4038
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4039
		$conf["variableCheck::checkArgument"]["skipableVarDefaultValue"]=array("false","0770","false");
4040
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4041
		#$conf["arrayCountEqualCheck"][]=array();
4042
		#參考資料來源:
4043
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4044
		$checkArgument=variableCheck::checkArguments($conf["variableCheck::checkArgument"]);
4045
		unset($conf["variableCheck::checkArgument"]);
4046
 
4047
		#如果檢查過程出錯
4048
		if($checkArgument["status"]==="false"){
4049
 
4050
			#設置執行失敗
4051
			$result["status"]="false";
4052
 
4053
			#設置執行錯誤訊息
4054
			$result["error"]=$checkArgument;
4055
 
4056
			#回傳結果
4057
			return $result;
4058
 
4059
			}#if end
4060
 
4061
		#如果檢查不通過
4062
		if($checkArgument["passed"]==="false"){
4063
 
4064
			#設置執行失敗
4065
			$result["status"]="false";
4066
 
4067
			#設置執行錯誤訊息
4068
			$result["error"]=$checkArgument;
4069
 
4070
			#回傳結果
4071
			return $result;
4072
 
4073
			}#if end
4074
 
4075
		#函式說明:
4076
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
4077
		#回傳結果:
4078
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4079
		#$result["error"],錯誤訊息陣列.
4080
		#$result["function"],函數名稱. 
4081
		#$result["argu"],使用的參數.
4082
		#$result["content"],網址,若是在命令列執行,則為"null".
4083
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
4084
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
4085
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
4086
		#必填參數:
4087
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
4088
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["path"];
4089
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
4090
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
4091
		#可省略參數:
4092
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
4093
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
4094
		#備註:
4095
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
4096
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
4097
		unset($conf["fileAccess::getInternetAddressV2"]);	
4098
 
4099
		#如果檢查過程出錯
4100
		if($getInternetAddressV2["status"]=="false"){
4101
 
4102
			#設置執行失敗
4103
			$result["status"]="false";
4104
 
4105
			#設置執行錯誤訊息
4106
			$result["error"]=$getInternetAddressV2;
4107
 
4108
			#回傳結果
4109
			return $result;
4110
 
4111
			}#if end		
4112
 
4113
		#取得轉換好的絕對路徑
4114
		$result["path"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
4115
 
4116
		#debug
4117
		#var_dump($getInternetAddressV2);exit;
4118
 
4119
		#如果 路徑 含有檔案名稱
4120
		if($conf["haveFileName"]==="true"){
4121
 
4122
			#預設要加回去的結束字串為空字串
4123
			$endStr="";
4124
 
4125
			#如果開頭跟結尾都是 "'"
4126
			if( strpos($result["path"],"'")===0 && strpos($result["path"],"'")===(strlen($result["path"])-1) ){
4127
 
4128
				#設置要加回去的結束字串
4129
				$endStr="'";
4130
 
4131
				}#if end
4132
 
4133
			#函式說明:
4134
			#將固定格式的字串分開,並回傳分開的結果。
4135
			#回傳結果:
4136
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4137
			#$result["error"],錯誤訊息陣列
4138
			#$result["function"],當前執行的函數名稱.
4139
			#$result["argu"],使用的參數.
4140
			#$result["oriStr"],要分割的原始字串內容
4141
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4142
			#$result["dataCounts"],爲總共分成幾段
4143
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4144
			#必填參數:
4145
			#$conf["stringIn"],字串,要處理的字串.
4146
			$conf["stringProcess::spiltString"]["stringIn"]=$result["path"];
4147
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4148
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4149
			#可省略參數:
4150
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4151
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
4152
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4153
			unset($conf["stringProcess::spiltString"]);
4154
 
4155
			#如果檢查過程出錯
4156
			if($spiltString["status"]==="false"){
4157
 
4158
				#設置執行失敗
4159
				$result["status"]="false";
4160
 
4161
				#設置執行錯誤訊息
4162
				$result["error"]=$spiltString;
4163
 
4164
				#回傳結果
4165
				return $result;
4166
 
4167
				}#if end
4168
 
4169
			#初始化儲存 path
4170
			$path="";
4171
 
4172
			#針對n-1段的內容
4173
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
4174
 
4175
				#串接路徑
4176
				$path=$path."/".$spiltString["dataArray"][$i];
4177
 
4178
				}#for end
4179
 
4180
			#如果路徑為空
4181
			if($path===""){
4182
 
4183
				#則與設為根目錄
4184
				$path="/";
4185
 
4186
				}#if end
4187
 
4188
			#設置檔案名稱
4189
			$result["fileName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
4190
 
4191
			#取得不含檔案名稱的路徑
4192
			$conf["path"]=$path.$endStr;
4193
 
4194
			#取得不含檔案名稱的路徑
4195
			$result["path"]=$path.$endStr;
4196
 
4197
			}#if end
4198
 
4199
		#函式說明:
4200
		#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
4201
		#回傳結果:
4202
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4203
		#$result["error"],錯誤訊息陣列
4204
		#必填參數:
4205
		$conf["fileAccess::createFolderAfterCheck"]["dirPositionAndName"]=$conf["path"];#新建的位置與名稱
4206
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4207
		$conf["fileAccess::createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];
4208
		#可省略參數:
4209
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
4210
		$conf["fileAccess::createFolderAfterCheck"]["dirPermission"]=$conf["dirPermission"];
4211
		$conf["fileAccess::createFolderAfterCheck"]["web"]="false";
4212
		#參考資料:
4213
		#mkdir=>http://php.net/manual/en/function.mkdir.php
4214
		#chmod=>http://php.net/manual/en/function.chmod.php
4215
		$createFolderAfterCheck=fileAccess::createFolderAfterCheck($conf["fileAccess::createFolderAfterCheck"]);
4216
		unset($conf["fileAccess::createFolderAfterCheck"]);
4217
 
4218
		#如果建立路徑過程出錯
4219
		if($createFolderAfterCheck["status"]==="false"){
4220
 
4221
			#設置執行失敗
4222
			$result["status"]="false";
4223
 
4224
			#設置執行錯誤訊息
4225
			$result["error"]=$createFolderAfterCheck;
4226
 
4227
			#回傳結果
4228
			return $result;
4229
 
4230
			}#if end
4231
 
4232
		#如果有警告訊息
4233
		if(count($createFolderAfterCheck["warning"])>0){
4234
 
4235
			#取得警告訊息
4236
			$result["error"]=$createFolderAfterCheck["warning"];
4237
 
4238
			#設置執行失敗
4239
			$result["status"]="false";
4240
 
4241
			#回傳結果
4242
			return $result;
4243
 
4244
			}#if end
4245
 
4246
		#執行到這邊代表成功
4247
		$result["status"]="true";
4248
 
4249
		#回傳結果
4250
		return $result;
4251
 
4252
		}#function validatePath end
4253
 
4254
	/*
4255
	#函式說明:
4256
	#解析路徑的每個層級.
4257
	#回傳結果:
4258
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4259
	#$result["error"],錯誤訊息陣列.
4260
	#$resutl["function"],當前執行的涵式名稱.
4261
	#$result["argu"],使用的參數.
4262
	#$result["content"],解析出來的路徑階層.
4263
	#必填參數:
4264
	#$conf["path"],要檢查的路徑
4265
	$conf["path"]="";
4266
	#可省略參數:
4267
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4268
	#$conf["haveFileName"]="false";
4269
	#參考資料:
4270
	#無.
4271
	#備註:
4272
	#無.
4273
	*/
4274
	public static function parsePath(&$conf){
4275
 
4276
		#初始化要回傳的內容
4277
		$result=array();
4278
 
4279
		#取得當前執行的函數名稱
4280
		$result["function"]=__FUNCTION__;
4281
 
4282
		#如果 $conf 不為陣列
4283
		if(gettype($conf)!="array"){
4284
 
4285
			#設置執行失敗
4286
			$result["status"]="false";
4287
 
4288
			#設置執行錯誤訊息
4289
			$result["error"][]="\$conf變數須為陣列形態";
4290
 
4291
			#如果傳入的參數為 null
4292
			if($conf==null){
4293
 
4294
				#設置執行錯誤訊息
4295
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4296
 
4297
				}#if end
4298
 
4299
			#回傳結果
4300
			return $result;
4301
 
4302
			}#if end
4303
 
4304
		#記錄使用的參數
4305
		$result["argu"]=$conf;
4306
 
4307
		#檢查參數
4308
		#函式說明:
4309
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4310
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4311
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4312
		#$result["function"],當前執行的函式名稱.
4313
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4314
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4315
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4316
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4317
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4318
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4319
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4320
		#必填寫的參數:
4321
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4322
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4323
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4324
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
4325
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4326
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4327
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4328
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4329
		#可以省略的參數:
4330
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4331
		#$conf["canBeEmptyString"]="false";
4332
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4333
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4334
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4335
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4336
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4337
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4338
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4339
		#$conf["arrayCountEqualCheck"][]=array();
4340
		#參考資料來源:
4341
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4342
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4343
		unset($conf["variableCheck::checkArguments"]);
4344
 
4345
		#如果檢查有誤
4346
		if($checkResult["status"]=="false"){
4347
 
4348
			#設置錯誤識別
4349
			$result["status"]="false";
4350
 
4351
			#設置錯誤訊息
4352
			$result["error"]=$checkResult;
4353
 
4354
			#回傳結果
4355
			return $result;
4356
 
4357
			}#if end
4358
 
4359
		#如果檢查不通過
4360
		if($checkResult["passed"]=="false"){
4361
 
4362
			#設置錯誤識別
4363
			$result["status"]="false";
4364
 
4365
			#設置錯誤訊息
4366
			$result["error"]=$checkResult;
4367
 
4368
			#回傳結果
4369
			return $result;
4370
 
4371
			}#if end
4372
 
4373
		#函式說明:
4374
		#將固定格式的字串分開,並回傳分開的結果.
4375
		#回傳結果:
4376
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4377
		#$result["error"],錯誤訊息陣列
4378
		#$result["function"],當前執行的函數名稱.
4379
		#$result["argu"],使用的參數.
4380
		#$result["oriStr"],要分割的原始字串內容
4381
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4382
		#$result["dataCounts"],爲總共分成幾段
4383
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4384
		#必填參數:
4385
		#$conf["stringIn"],字串,要處理的字串.
4386
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];
4387
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4388
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4389
		#可省略參數:
4390
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4391
		#$conf["allowEmptyStr"]="false";
4392
		#參考資料:
4393
		#無.
4394
		#備註:
4395
		#無.
4396
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4397
		unset($conf["stringProcess::spiltString"]);
4398
 
4399
		#如果檢查有誤
4400
		if($spiltString["status"]==="false"){
4401
 
4402
			#設置錯誤識別
4403
			$result["status"]="false";
4404
 
4405
			#設置錯誤訊息
4406
			$result["error"]=$spiltString;
4407
 
4408
			#回傳結果
4409
			return $result;
4410
 
4411
			}#if end
4412
 
4413
		#確認是否為絕對路徑
4414
		#函式說明:
4415
		#取得符合特定字首與字尾的字串
4416
		#回傳結果:
4417
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4418
		#$result["function"],當前執行的函數名稱.
4419
		#$result["error"],錯誤訊息陣列.
4420
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4421
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4422
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4423
		#$result["argu"],使用的參數.
4424
		#必填參數:
4425
		#$conf["checkString"],字串,要檢查的字串.
4426
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
4427
		#可省略參數:
4428
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4429
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
4430
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4431
		#$conf["search::getMeetConditionsString"]["tailWord"]="";
4432
		#參考資料:
4433
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4434
		#備註:
4435
		#無.
4436
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4437
		unset($conf["search::getMeetConditionsString"]);
4438
 
4439
		#如果檢查有誤
4440
		if($getMeetConditionsString["status"]==="false"){
4441
 
4442
			#設置錯誤識別
4443
			$result["status"]="false";
4444
 
4445
			#設置錯誤訊息
4446
			$result["error"]=$getMeetConditionsString;
4447
 
4448
			#回傳結果
4449
			return $result;
4450
 
4451
			}#if end
4452
 
4453
		#如果是絕對路徑
4454
		if($getMeetConditionsString["founded"]==="true"){
4455
 
4456
			#初始化路徑為 "/"
4457
			$result["content"][]="/";
4458
 
4459
			}#if end
4460
 
4461
		#針對每個切割出來的路徑階層
4462
		foreach($spiltString["dataArray"] as $index => $dir){
4463
 
4464
			#如果路徑結尾含有檔案名稱
4465
			if($conf["haveFileName"]==="true"){
4466
 
4467
				#如果是最後一段
4468
				if($index===$spiltString["dataCounts"]-1){
4469
 
4470
					#忽略
4471
					continue;
4472
 
4473
					}#if end
4474
 
4475
				}#if end
4476
 
4477
			#後面加上 資料夾名稱 跟 "/"
4478
			$newPath=$dir."/";
4479
 
4480
			#如果有 content
4481
			if(isset($result["content"])){
4482
 
4483
				#如果有上個資料夾
4484
				if(isset($result["content"][count($result["content"])-1])){
4485
 
4486
					#後面加上 上個資料夾名稱 加上資料夾名稱 跟 "/"
4487
					$newPath=$result["content"][count($result["content"])-1].$dir."/";
4488
 
4489
					}#if end
4490
 
4491
				}#if end
4492
 
4493
			#並新增置結果
4494
			$result["content"][]=$newPath;
4495
 
4496
			}#foreach end
4497
 
4498
		#var_dump($result["content"]);
4499
 
4500
		#設置執行正常
4501
		$result["status"]="true";
4502
 
4503
		#回傳結果
4504
		return $result;
4505
 
4506
		}#function parsePath end
4507
 
4508
	/*
4509
	#函式說明:
4510
	#檢查路徑是否存在.
4511
	#回傳結果:
4512
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4513
	#$result["error"],錯誤訊息陣列.
4514
	#$resutl["function"],當前執行的涵式名稱.
4515
	#$result["argu"],使用的參數.
4516
	#$result["found"],路徑是否存在,"true"代表存在,"false"代表不存在.
4517
	#$result["content"],每個階層路徑的檢查結果,每個元素有檢查的路徑"path"跟是否有存在或可存取的識別"found".
4518
	#必填參數:
4519
	#$conf["path"],要檢查的路徑
4520
	$conf["path"]="";
4521
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4522
	$conf["fileArgu"]=__FILE__;
4523
	#可省略參數:
4524
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4525
	#$conf["haveFileName"]="false";
4526
	#參考資料:
4527
	#無.
4528
	#備註:
4529
	#無.
4530
	*/
4531
	public static function checkPathExist(&$conf){
4532
 
4533
		#初始化要回傳的內容
4534
		$result=array();
4535
 
4536
		#取得當前執行的函數名稱
4537
		$result["function"]=__FUNCTION__;
4538
 
4539
		#如果 $conf 不為陣列
4540
		if(gettype($conf)!="array"){
4541
 
4542
			#設置執行失敗
4543
			$result["status"]="false";
4544
 
4545
			#設置執行錯誤訊息
4546
			$result["error"][]="\$conf變數須為陣列形態";
4547
 
4548
			#如果傳入的參數為 null
4549
			if($conf==null){
4550
 
4551
				#設置執行錯誤訊息
4552
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4553
 
4554
				}#if end
4555
 
4556
			#回傳結果
4557
			return $result;
4558
 
4559
			}#if end
4560
 
4561
		#記錄使用的參數
4562
		$result["argu"]=$conf;
4563
 
4564
		#檢查參數
4565
		#函式說明:
4566
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4567
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4568
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4569
		#$result["function"],當前執行的函式名稱.
4570
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4571
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4572
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4573
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4574
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4575
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4576
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4577
		#必填寫的參數:
4578
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4579
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4580
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4581
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
4582
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4583
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
4584
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4585
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4586
		#可以省略的參數:
4587
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4588
		#$conf["canBeEmptyString"]="false";
4589
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4590
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4591
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4592
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4593
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4594
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4595
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4596
		#$conf["arrayCountEqualCheck"][]=array();
4597
		#參考資料來源:
4598
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4599
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4600
		unset($conf["variableCheck::checkArguments"]);
4601
 
4602
		#如果檢查有誤
4603
		if($checkResult["status"]=="false"){
4604
 
4605
			#設置錯誤識別
4606
			$result["status"]="false";
4607
 
4608
			#設置錯誤訊息
4609
			$result["error"]=$checkResult;
4610
 
4611
			#回傳結果
4612
			return $result;
4613
 
4614
			}#if end
4615
 
4616
		#如果檢查不通過
4617
		if($checkResult["passed"]=="false"){
4618
 
4619
			#設置錯誤識別
4620
			$result["status"]="false";
4621
 
4622
			#設置錯誤訊息
4623
			$result["error"]=$checkResult;
4624
 
4625
			#回傳結果
4626
			return $result;
4627
 
4628
			}#if end
4629
 
4630
		#函式說明:
4631
		#解析路徑的每個層級.
4632
		#回傳結果:
4633
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4634
		#$result["error"],錯誤訊息陣列.
4635
		#$resutl["function"],當前執行的涵式名稱.
4636
		#$result["argu"],使用的參數.
4637
		#$result["content"],解析出來的路徑階層.
4638
		#必填參數:
4639
		#$conf["path"],要檢查的路徑
4640
		$conf["fileAccess::parsePath"]["path"]=$conf["path"];
4641
		#可省略參數:
4642
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4643
		$conf["fileAccess::parsePath"]["haveFileName"]=$conf["haveFileName"];
4644
		#參考資料:
4645
		#無.
4646
		#備註:
4647
		#無.
4648
		$parsePath=fileAccess::parsePath($conf["fileAccess::parsePath"]);
4649
		unset($conf["fileAccess::parsePath"]);
4650
 
4651
		#如果檢查有誤
4652
		if($parsePath["status"]==="false"){
4653
 
4654
			#設置錯誤識別
4655
			$result["status"]="false";
4656
 
4657
			#設置錯誤訊息
4658
			$result["error"]=$parsePath;
4659
 
4660
			#回傳結果
4661
			return $result;
4662
 
4663
			}#if end
4664
 
4665
		#函式說明:
4666
		#檢查多個檔案與資料夾是否存在.
4667
		#回傳的結果:
4668
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4669
		#$result["error"],錯誤訊息陣列.
4670
		#$resutl["function"],當前執行的涵式名稱.
4671
		#$result["argu"],使用的參數.
4672
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
4673
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
4674
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
4675
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
4676
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
4677
		#必填參數:
4678
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
4679
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$parsePath["content"];
4680
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4681
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
4682
		#可省略參數:
4683
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
4684
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="true";
4685
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
4686
		$conf["fileAccess::checkMultiFileExist"]["userDir"]="false";
4687
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
4688
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
4689
		#參考資料:
4690
		#http://php.net/manual/en/function.file-exists.php
4691
		#http://php.net/manual/en/control-structures.foreach.php
4692
		#備註:
4693
		#函數file_exists檢查的路徑為檔案系統的路徑
4694
		#$result["varName"][$i]結果未實作
4695
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
4696
		unset($conf["fileAccess::checkMultiFileExist"]);
4697
 
4698
		#如果執行異常
4699
		if($checkMultiFileExist["status"]==="false"){
4700
 
4701
			#設置錯誤識別
4702
			$result["status"]="false";
4703
 
4704
			#設置錯誤訊息
4705
			$result["error"]=$checkMultiFileExist;
4706
 
4707
			#回傳結果
4708
			return $result;
4709
 
4710
			}#if end
4711
 
4712
		#如果有路徑無法存取
4713
		if($checkMultiFileExist["allExist"]==="false"){
4714
 
4715
			#設置執行正常識別
4716
			$result["status"]="true";
4717
 
4718
			#設置路徑找不到
4719
			$result["found"]="false";
4720
 
4721
			#針對每個路徑的搜尋結果
4722
			foreach($checkMultiFileExist["varExist"] as $index => $found){
4723
 
4724
				#設置路徑尋找結果
4725
				$result["content"][]=array("found"=>$found,"path"=>$checkMultiFileExist["varNameFullPath"][$index]);
4726
 
4727
				}#foreach end
4728
 
4729
			#回傳結果
4730
			return $result;
4731
 
4732
			}#if end
4733
 
4734
		#設置路徑有找到
4735
		$result["found"]="true";
4736
 
4737
		#設置執行正常識別
4738
		$result["status"]="true";
4739
 
4740
		#回傳結果
4741
		return $result;
4742
 
4743
		}#function checkPathExist end
4744
 
4745
	/*	
4746
	#函式說明:
4747
	#demo建立pdf檔
4748
	#必填參數:
4749
	#無
4750
	#可省略參數:
4751
	#無
4752
	#參考資料:
4753
	#tcpdf=>http://www.tcpdf.org/examples.php
4754
	#備註:
4755
	#開發中,需要安裝 php-tcpdf 套件.
4756
	*/
4757
	public static function demoCreateTcPdfFile(){
4758
 
4759
		#避免 TCPDF ERROR: Some data has already been output, can't send PDF file 錯誤產生
4760
		ob_end_clean();
4761
 
4762
		#create new PDF document
4763
		$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
4764
 
4765
		#set document information
4766
		$pdf->SetCreator(PDF_CREATOR);
4767
		$pdf->SetAuthor('qbpwc');
4768
		$pdf->SetTitle('pdf sample title');
4769
		$pdf->SetSubject('pdf sample subject');
4770
		$pdf->SetKeywords('pdf, sample, tcpdf, qbpwc');
4771
 
4772
		#set default header data
4773
		$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
4774
		$pdf->setFooterData(array(0,64,0), array(0,64,128));
4775
 
4776
		#set header and footer fonts
4777
		$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
4778
		$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
4779
 
4780
		#set default monospaced font
4781
		$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
4782
 
4783
		#set margins
4784
		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
4785
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
4786
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
4787
 
4788
		#set auto page breaks
4789
		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
4790
 
4791
		#set image scale factor
4792
		$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
4793
 
4794
		#set some language-dependent strings (optional)
4795
		if (@file_exists(dirname(__FILE__).'/lang/eng.php')){
4796
 
4797
			require_once(dirname(__FILE__).'/lang/eng.php');
4798
 
4799
			$pdf->setLanguageArray($l);
4800
 
4801
			}#if end
4802
 
4803
		#set default font subsetting mode
4804
		$pdf->setFontSubsetting(true);
4805
 
4806
		#Set font
4807
		#dejavusans is a UTF-8 Unicode font, if you only need to
4808
		#print standard ASCII chars, you can use core fonts like
4809
		#helvetica or times to reduce file size.
4810
		$pdf->SetFont('dejavusans', '', 14, '', true);
4811
 
4812
		#Add a page
4813
		#This method has several options, check the source code documentation for more information.
4814
		$pdf->AddPage();
4815
 
4816
		#set text shadow effect
4817
		$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));
4818
 
4819
		#Set some content to print
4820
		$html="<h5>Hello World!</h5>";
4821
 
4822
		// Print text using writeHTMLCell()
4823
		$pdf->writeHTMLCell(0,0,'','',$html,0,1,0,true,'',true);
4824
 
4825
		// Close and output PDF document
4826
		// This method has several options, check the source code documentation for more information.
4827
		$pdf->Output('fileAccessT/example_001.pdf','I');
4828
 
4829
		}#function demoCreateTcPdfFile end
4830
 
4831
	/*
4832
	#函式說明:
4833
	#取得檔案路徑字串的路徑與檔案的名稱與檔案副檔名
4834
	#回傳的結果:
4835
	#$result["status"],執行是否正常,"true"正常,"false"代表不正常.
4836
	#$result["error"],錯誤訊息.
4837
	#$result["function"],當前執行的函式名稱.
4838
	#$result["filePath"],路徑字串.
4839
	#$result["fileName"],檔案名稱字串.
4840
	#$result["fileExtention"],檔案的副檔名.
4841
	#$result["fullFileName"],含副檔名的檔案名稱.
4842
	#$result["fullFilePathAndName"],完整的檔案路徑(含副檔名).
4843
	#必填參數:
4844
	#$conf["fileAddressAndName"],字串,檔案名稱與其路徑.
4845
	$conf["fileAddressAndName"]="";
4846
	#可省略參數:
4847
	#無.
4848
	#參考資料:
4849
	#無.
4850
	#備註:
4851
	#無.
4852
	*/
4853
	public static function getFileAddressAndNameAndFileExtention(&$conf){
4854
 
4855
		#初始化要回傳的參數
4856
		$result=array();
4857
 
4858
		#取得當前執行函數名稱
4859
		$result["function"]=__FUNCTION__;
4860
 
4861
		#如果 $conf 不為陣列
4862
		if(gettype($conf)!="array"){
4863
 
4864
			#設置執行失敗
4865
			$result["status"]="false";
4866
 
4867
			#設置執行錯誤訊息
4868
			$result["error"][]="\$conf變數須為陣列形態";
4869
 
4870
			#如果傳入的參數為 null
4871
			if($conf==null){
4872
 
4873
				#設置執行錯誤訊息
4874
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4875
 
4876
				}#if end
4877
 
4878
			#回傳結果
4879
			return $result;
4880
 
4881
			}#if end
4882
 
4883
		#檢查參數
4884
		#函式說明:
4885
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4886
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4887
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4888
		#$result["function"],當前執行的函式名稱.
4889
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4890
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4891
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4892
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4893
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4894
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4895
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4896
		#必填寫的參數:
4897
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4898
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4899
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4900
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileAddressAndName");
4901
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
4902
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4903
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4904
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4905
		#可以省略的參數:
4906
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4907
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4908
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4909
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("outputAddress","noDownload");
4910
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4911
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4912
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4913
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".bin/".$conf["cppAddress"].".bin","true");
4914
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4915
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
4916
		#參考資料來源:
4917
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4918
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4919
		unset($conf["variableCheck::checkArguments"]);
4920
 
4921
		#如果 $checkArguments["status"] 等於 "false"
4922
		if($checkArguments["status"]=="false"){
4923
 
4924
			#設置 $result["status"] 為 "false"
4925
			$result["status"]="false";
4926
 
4927
			#設置 $result["error"]
4928
			$result["error"]=$checkArguments;
4929
 
4930
			#回傳結果
4931
			return $result;
4932
 
4933
			}#if end
4934
 
4935
		#如果 $checkArguments["passed"] 等於 "false"
4936
		if($checkArguments["passed"]=="false"){
4937
 
4938
			#設置 $result["status"] 為 "false"
4939
			$result["status"]="false";
4940
 
4941
			#設置 $result["error"]
4942
			$result["error"]=$checkArguments;
4943
 
4944
			#回傳結果
4945
			return $result;
4946
 
4947
			}#if end
4948
 
4949
		#確認路徑是否為絕對路徑
4950
		#函式說明:
4951
		#取得符合特定字首與字尾的字串
4952
		#回傳結果:
4953
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4954
		#$result["function"],當前執行的函數名稱.
4955
		#$result["error"],錯誤訊息陣列.
4956
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4957
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4958
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4959
		#$result["argu"],使用的參數.
4960
		#必填參數:
4961
		#$conf["checkString"],字串,要檢查的字串.
4962
		$conf["fileAccess::getMeetConditionsString"]["checkString"]=$conf["fileAddressAndName"];
4963
		#可省略參數:
4964
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4965
		$conf["fileAccess::getMeetConditionsString"]["frontWord"]="/";
4966
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4967
		#$conf["tailWord"]="";
4968
		#參考資料:
4969
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4970
		#備註:
4971
		#無.
4972
		$getMeetConditionsString=search::getMeetConditionsString($conf["fileAccess::getMeetConditionsString"]);
4973
		unset($conf["fileAccess::getMeetConditionsString"]);
4974
 
4975
		#如果執行出錯
4976
		if($getMeetConditionsString["status"]==="false"){
4977
 
4978
			#設置錯誤識別
4979
			$result["status"]="false";
4980
 
4981
			#設置錯誤訊息
4982
			$result["error"]=$getMeetConditionsString;
4983
 
4984
			#回傳結果
4985
			return $result;
4986
 
4987
			}#if end
4988
 
4989
		#預設參數 $conf["fileAddressAndName"] 不為 "/" 開始
4990
		$fileAddressAndNameStarFromRoot="true";
4991
 
4992
		#如果是 "/" 開頭
4993
		if($getMeetConditionsString["founded"]==="false"){
4994
 
4995
			#設置參數 $conf["fileAddressAndName"] 為 "/" 開始
4996
			$fileAddressAndNameStarFromRoot="true";
4997
 
4998
			}#if end
4999
 
5000
		#檢查是否有路徑資訊 
5001
		#函式說明:
5002
		#將固定格式的字串分開,並回傳分開的結果。
5003
		#回傳的參數:
5004
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5005
		#$result["error"],錯誤訊息陣列
5006
		#$result["oriStr"],要分割的原始字串內容
5007
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5008
		#$result["dataCounts"],爲總共分成幾段
5009
		#必填參數:
5010
		$conf["stringProcess"]["spiltString"]["stringIn"]=$conf["fileAddressAndName"];#要處理的字串。
5011
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
5012
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5013
		unset($conf["stringProcess"]["spiltString"]);
5014
 
5015
		#如果 $spiledResult["status"] 等於 "false"
5016
		if($spiledResult["status"]==="false"){
5017
 
5018
			#設置錯誤識別
5019
			$result["status"]="false";
5020
 
5021
			#設置錯誤訊息
5022
			$result["error"]=$spiledResult;
5023
 
5024
			#回傳結果
5025
			return $result;
5026
 
5027
			}#if end
5028
 
5029
		#如果 $spiledResult["dataCounts"] 大於 1
5030
		if($spiledResult["dataCounts"]>1){
5031
 
5032
			#代表有路徑字串
5033
 
5034
			#初始化路徑字串暫存變數
5035
			$tempPathStr="";
5036
 
5037
			#如果是絕對路徑
5038
			if($fileAddressAndNameStarFromRoot==="true"){
5039
 
5040
				#加上根目錄
5041
				$tempPathStr=$tempPathStr."/";
5042
 
5043
				}#if end
5044
 
5045
			#取得路徑字串
5046
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5047
 
5048
				#串連片段路徑字串
5049
				$tempPathStr=$tempPathStr.$spiledResult["dataArray"][$i]."/";
5050
 
5051
				}#for end
5052
 
5053
			#取得檔案的路徑
5054
			$result["filePath"]=$tempPathStr;
5055
 
5056
			}#if end
5057
 
5058
		#反之 $spiledResult["dataCounts"] 等於 1
5059
		else{
5060
 
5061
			#檔案的路徑設為""
5062
			$result["filePath"]="";
5063
 
5064
			}#else end
5065
 
5066
		#取得檔案名稱(含副檔名)
5067
		$result["fullFileName"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5068
 
5069
		#取得副檔名
5070
		#函式說明:
5071
		#將固定格式的字串分開,並回傳分開的結果。
5072
		#回傳的參數:
5073
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5074
		#$result["error"],錯誤訊息陣列
5075
		#$result["oriStr"],要分割的原始字串內容
5076
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5077
		#$result["dataCounts"],爲總共分成幾段
5078
		#必填參數:
5079
		$conf["stringProcess"]["spiltString"]["stringIn"]=$result["fullFileName"];#要處理的字串。
5080
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
5081
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5082
		unset($conf["stringProcess"]["spiltString"]);
5083
 
5084
		#如果 $spiledResult["status"] 等於 "false"
5085
		if($spiledResult["status"]=="false"){
5086
 
5087
			#設置錯誤識別
5088
			$result["status"]="false";
5089
 
5090
			#設置錯誤訊息
5091
			$result["error"]=$spiledResult;
5092
 
5093
			#回傳結果
5094
			return $result;
5095
 
5096
			}#if end
5097
 
5098
		#如果 $spiledResult["dataCounts"] 大於 1
5099
		if($spiledResult["dataCounts"]>1){
5100
 
5101
			#代表有副檔名
5102
 
5103
			#初始化檔名字串暫存變數
5104
			$tempFileNameStr="";
5105
 
5106
			#取得路徑字串
5107
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5108
 
5109
				#如果是最後一個小黑點前面的字串片段
5110
				if($i==$spiledResult["dataCounts"]-2){
5111
 
5112
					#串連片段路徑字串
5113
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i];
5114
 
5115
					}#if end
5116
 
5117
				#反之不是最後一個小黑點前面的字串片段
5118
				else{
5119
 
5120
					#串連片段路徑字串(含小黑點)
5121
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i].".";
5122
 
5123
					}#else end
5124
 
5125
				}#for end
5126
 
5127
			#取得檔名
5128
			$result["fileName"]=$tempFileNameStr;
5129
 
5130
			#取得副檔名
5131
			$result["fileExtention"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5132
 
5133
			}#if end
5134
 
5135
		#反之 $spiledResult["dataCounts"] 等於 1
5136
		else{
5137
 
5138
			#檔案的副檔名設為""
5139
			$result["fileExtention"]="";
5140
 
5141
			#取得檔案的名稱
5142
			$result["fileName"]=$spiledResult["dataArray"][0];
5143
 
5144
			}#else end
5145
 
5146
		#如果 $result["fileExtention"] 不等於 ""
5147
		if($result["fileExtention"]!=""){
5148
 
5149
			#將副檔名用小黑點跟檔案名稱連在一塊
5150
			$result["fullFileName"]=$result["fileName"].".".$result["fileExtention"];
5151
 
5152
			}#if end
5153
 
5154
		#反之代表沒有副檔名
5155
		else{
5156
 
5157
			#取得含副檔名的檔案名稱
5158
			$result["fullFileName"]=$result["fileName"].$result["fileExtention"];
5159
 
5160
			}#else end
5161
 
5162
		#完整的檔案路徑(含副檔名).
5163
		$result["fullFilePathAndName"]=$result["filePath"].$result["fullFileName"];
5164
 
5165
		#設置執行正常的識別
5166
		$result["status"]="true";
5167
 
5168
		#回傳結果
5169
		return $result;
5170
 
5171
		}#funciton getFileAddressAndNameAndFileExtention end
5172
 
5173
	/*
5174
	#函式說明:
5175
	#將資料夾或檔案打包成tar檔案
5176
	#回傳結果:
5177
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5178
	#$result["function"],當前執行的函數名稱
5179
	#$result["error"],錯誤訊息.
5180
	#$result["content"],檔案輸出後的位置與名稱.
5181
	#必填參數:
5182
	#$conf["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5183
	$conf["packetTarget"]=array("");
5184
	#$conf["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5185
	$conf["createdTarFile"]="";
5186
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5187
	$conf["fileArgu"]=__FILE__;
5188
	#可省略參數:
5189
	#無.
5190
	#參考資料:
5191
	#無.
5192
	#備註:
5193
	#無.
5194
	*/
5195
	public static function makeTarFile(&$conf){
5196
 
5197
		#初始化要回傳的內容
5198
		$result=array();
5199
 
5200
		#記錄當前執行的函數名稱
5201
		$result["function"]=__FUNCTION__;
5202
 
5203
		#如果 $conf 不為陣列
5204
		if(gettype($conf)!="array"){
5205
 
5206
			#設置執行失敗
5207
			$result["status"]="false";
5208
 
5209
			#設置執行錯誤訊息
5210
			$result["error"][]="\$conf變數須為陣列形態";
5211
 
5212
			#如果傳入的參數為 null
5213
			if($conf==null){
5214
 
5215
				#設置執行錯誤訊息
5216
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5217
 
5218
				}#if end
5219
 
5220
			#回傳結果
5221
			return $result;
5222
 
5223
			}#if end
5224
 
5225
		#檢查參數
5226
		#函式說明:
5227
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5228
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5229
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5230
		#$result["function"],當前執行的函式名稱.
5231
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5232
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5233
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5234
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5235
		#必填寫的參數:
5236
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5237
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5238
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5239
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","packetTarget","createdTarFile");
5240
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5241
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5242
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5243
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5244
		#可以省略的參數:
5245
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5246
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5247
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5248
		#$conf["skipableVariableName"]=array();
5249
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5250
		#$conf["skipableVariableType"]=array();
5251
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5252
		#$conf["skipableVarDefaultValue"]=array("");
5253
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5254
		#$conf["arrayCountEqualCheck"][]=array();
5255
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5256
		unset($conf["variableCheck::checkArguments"]);
5257
 
5258
		#若檢查失敗
5259
		if($checkResult["status"]=="false"){
5260
 
5261
			#設置執行失敗
5262
			$result["status"]="false";
5263
 
5264
			#設置執行錯誤訊息
5265
			$result["error"]=$checkResult;
5266
 
5267
			#回傳結果
5268
			return $result;
5269
 
5270
			}#if end
5271
 
5272
		#若檢查不通過
5273
		if($checkResult["passed"]=="false"){
5274
 
5275
			#設置執行失敗
5276
			$result["status"]="false";
5277
 
5278
			#設置執行錯誤訊息
5279
			$result["error"]=$checkResult;
5280
 
5281
			#回傳結果
5282
			return $result;
5283
 
5284
			}#if end
5285
 
5286
		#初始化打包要用的tar指令參數
5287
		$paramsArray=array("-cvf",$conf["createdTarFile"].".tar");
5288
 
5289
		#檢查要打包的檔案是否存在
5290
		#函式說明:
5291
		#檢查多個檔案與資料夾是否存在.
5292
		#回傳的結果:
5293
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5294
		#$result["error"],錯誤訊息陣列.
5295
		#$resutl["function"],當前執行的涵式名稱.
5296
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5297
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5298
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5299
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5300
		#必填參數:
5301
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5302
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$conf["packetTarget"];
5303
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5304
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5305
		#可省略參數
5306
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5307
		#$conf["disableWebSearch"]="false";
5308
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5309
		#$conf["userDir"]="true";
5310
		#參考資料來源:
5311
		#http://php.net/manual/en/function.file-exists.php
5312
		#http://php.net/manual/en/control-structures.foreach.php
5313
		#備註:
5314
		#函數file_exists檢查的路徑為檔案系統的路徑
5315
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5316
		unset($conf["fileAccess::checkMultiFileExist"]);
5317
 
5318
		#如果檢查要打包的檔案失敗
5319
		if($checkMultiFileExist["status"]=="false"){
5320
 
5321
			#設置執行失敗
5322
			$result["status"]="false";
5323
 
5324
			#設置執行錯誤訊息
5325
			$result["error"]=$checkMultiFileExist;
5326
 
5327
			#回傳結果
5328
			return $result;
5329
 
5330
			}#if end
5331
 
5332
		#如果要打包的檔案有缺
5333
		if($checkMultiFileExist["allExist"]=="false"){
5334
 
5335
			#設置執行失敗
5336
			$result["status"]="false";
5337
 
5338
			#設置執行錯誤訊息
5339
			$result["error"]=$checkMultiFileExist;
5340
 
5341
			#回傳結果
5342
			return $result;
5343
 
5344
			}#if end
5345
 
5346
		#有幾個要打包的目標就執行幾次
5347
		for($i=0;$i<count($conf["packetTarget"]);$i++){
5348
 
5349
			#串接上要打包的檔案或資料夾
5350
			$paramsArray[]=$conf["packetTarget"][$i];
5351
 
5352
			}#for end
5353
 
5354
		#函式說明:
5355
		#呼叫shell執行系統命令,並取得回傳的內容.
5356
		#回傳結果:
5357
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5358
		#$result["error"],錯誤訊息陣列.
5359
		#$result["function"],當前執行的函數名稱.
5360
		#$result["argu"],使用的參數.
5361
		#$result["cmd"],執行的指令內容.
5362
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
5363
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
5364
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
5365
		#$result["running"],是否還在執行.
5366
		#$result["pid"],pid.
5367
		#$result["statusCode"],執行結束後的代碼.
5368
		#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
5369
		#必填參數:
5370
		#$conf["command"],字串,要執行的指令.
5371
		$conf["external::callShell"]["command"]="tar";
5372
		#$conf["fileArgu"],字串,變數__FILE__的內容.
5373
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5374
		#可省略參數:
5375
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5376
		$conf["external::callShell"]["argu"]=$paramsArray;
5377
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
5378
		#$conf["arguIsAddr"]=array();
5379
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
5380
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
5381
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
5382
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5383
		#$conf["enablePrintDescription"]="true";
5384
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
5385
		#$conf["printDescription"]="";
5386
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
5387
		$conf["external::callShell"]["escapeshellarg"]="true";
5388
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
5389
		#$conf["thereIsShellVar"]=array();
5390
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
5391
		#$conf["username"]="";
5392
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
5393
		#$conf["password"]="";
5394
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
5395
		#$conf["useScript"]="";
5396
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
5397
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
5398
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
5399
		#$conf["inBackGround"]="";
5400
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
5401
		#$conf["getErr"]="false";
5402
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
5403
		#$conf["doNotRun"]="false";
5404
		#參考資料:
5405
		#exec=>http://php.net/manual/en/function.exec.php
5406
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
5407
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
5408
		#備註:
5409
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
5410
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
5411
		$conf["external::callShell"]=external::callShell($conf["external::callShell"]);
5412
		unset($conf["external::callShell"]);
5413
 
5414
		#如果執行shell失敗
5415
		if($callShell["status"]=="false"){
5416
 
5417
			#設置執行失敗
5418
			$result["status"]="false";
5419
 
5420
			#設置執行錯誤訊息
5421
			$result["error"]=$callShell;
5422
 
5423
			#回傳結果
5424
			return $result;
5425
 
5426
			}#if end
5427
 
5428
		#打包好的檔案位置與名稱
5429
		$result["content"]=$conf["createdTarFile"].".tar";
5430
 
5431
		#執行到這邊代表執行正常
5432
		$result["status"]="true";
5433
 
5434
		#回傳結果
5435
		return $result;
5436
 
5437
		}#function makeTarFile end
5438
 
5439
	/*
5440
	#函式說明:
5441
	#將一個檔案壓縮成xz檔案
5442
	#回傳結果:
5443
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5444
	#$result["function"],當前執行的函數名稱
5445
	#$result["error"],錯誤訊息.
5446
	#$result["content"],檔案輸出後的位置與名稱.
5447
	#必填參數:
5448
	#$conf["compressTarget"],字串,要打包的每個資料夾與檔案位置
5449
	$conf["compressTarget"]="";
5450
	#$conf["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5451
	$conf["createdXzFile"]="";
5452
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5453
	$conf["fileArgu"]=__FILE__;
5454
	#可省略參數:
5455
	#無.
5456
	#參考資料:
5457
	#無.
5458
	#備註:
5459
	#無.
5460
	*/
5461
	public static function makeXzFile(&$conf){
5462
 
5463
		#初始化要回傳的內容
5464
		$result=array();
5465
 
5466
		#記錄當前執行的函數名稱
5467
		$result["function"]=__FUNCTION__;
5468
 
5469
		#如果 $conf 不為陣列
5470
		if(gettype($conf)!="array"){
5471
 
5472
			#設置執行失敗
5473
			$result["status"]="false";
5474
 
5475
			#設置執行錯誤訊息
5476
			$result["error"][]="\$conf變數須為陣列形態";
5477
 
5478
			#如果傳入的參數為 null
5479
			if($conf==null){
5480
 
5481
				#設置執行錯誤訊息
5482
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5483
 
5484
				}#if end
5485
 
5486
			#回傳結果
5487
			return $result;
5488
 
5489
			}#if end
5490
 
5491
		#檢查參數
5492
		#函式說明:
5493
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5494
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5495
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5496
		#$result["function"],當前執行的函式名稱.
5497
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5498
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5499
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5500
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5501
		#必填寫的參數:
5502
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5503
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5504
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5505
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdXzFile");
5506
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5507
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
5508
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5509
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5510
		#可以省略的參數:
5511
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5512
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5513
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5514
		#$conf["skipableVariableName"]=array();
5515
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5516
		#$conf["skipableVariableType"]=array();
5517
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5518
		#$conf["skipableVarDefaultValue"]=array("");
5519
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5520
		#$conf["arrayCountEqualCheck"][]=array();
5521
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5522
		unset($conf["variableCheck::checkArguments"]);
5523
 
5524
		#若檢查失敗
5525
		if($checkResult["status"]=="false"){
5526
 
5527
			#設置執行失敗
5528
			$result["status"]="false";
5529
 
5530
			#設置執行錯誤訊息
5531
			$result["error"]=$checkResult;
5532
 
5533
			#回傳結果
5534
			return $result;
5535
 
5536
			}#if end
5537
 
5538
		#若檢查不通過
5539
		if($checkResult["passed"]=="false"){
5540
 
5541
			#設置執行失敗
5542
			$result["status"]="false";
5543
 
5544
			#設置執行錯誤訊息
5545
			$result["error"]=$checkResult;
5546
 
5547
			#回傳結果
5548
			return $result;
5549
 
5550
			}#if end
5551
 
5552
		#檢查要用xz壓縮的檔案是否存在
5553
		#函式說明:
5554
		#檢查多個檔案與資料夾是否存在.
5555
		#回傳的結果:
5556
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5557
		#$result["error"],錯誤訊息陣列.
5558
		#$resutl["function"],當前執行的涵式名稱.
5559
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5560
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5561
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5562
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5563
		#必填參數:
5564
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5565
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["compressTarget"]);
5566
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5567
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5568
		#可省略參數
5569
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5570
		#$conf["disableWebSearch"]="false";
5571
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5572
		#$conf["userDir"]="true";
5573
		#參考資料來源:
5574
		#http://php.net/manual/en/function.file-exists.php
5575
		#http://php.net/manual/en/control-structures.foreach.php
5576
		#備註:
5577
		#函數file_exists檢查的路徑為檔案系統的路徑
5578
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5579
		unset($conf["fileAccess::checkMultiFileExist"]);
5580
 
5581
		#如果檢查要用xz壓縮的檔案失敗
5582
		if($checkMultiFileExist["status"]=="false"){
5583
 
5584
			#設置執行失敗
5585
			$result["status"]="false";
5586
 
5587
			#設置執行錯誤訊息
5588
			$result["error"]=$checkMultiFileExist;
5589
 
5590
			#回傳結果
5591
			return $result;
5592
 
5593
			}#if end
5594
 
5595
		#如果要用xz壓縮的檔案有缺
5596
		if($checkMultiFileExist["allExist"]=="false"){
5597
 
5598
			#設置執行失敗
5599
			$result["status"]="false";
5600
 
5601
			#設置執行錯誤訊息
5602
			$result["error"]=$checkMultiFileExist;
5603
 
5604
			#回傳結果
5605
			return $result;
5606
 
5607
			}#if end
5608
 
5609
		#壓縮要用的xz語法
5610
		#函式說明:
5611
		#呼叫shell執行系統命令,並取得回傳的內容.
5612
		#回傳的結果:
5613
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5614
		#$result["error"],錯誤訊息陣列
5615
		#$result["output"],爲執行完二元碼後的輸出陣列
5616
		#必填的參數
5617
		$conf["external::callShell"]["command"]="xz";#要執行的指令與參數
5618
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5619
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5620
		#可省略參數:
5621
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5622
		$conf["external::callShell"]["argu"]=array("-v","-v","-z","-c",$conf["compressTarget"],">",$conf["createdXzFile"].".xz ");
5623
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5624
		#$conf["enablePrintDescription"]="true";
5625
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
5626
		#$conf["printDescription"]="";
5627
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
5628
		$conf["external::callShell"]["escapeshellarg"]="true";
5629
		#參考資料:
5630
		#http://php.net/manual/en/function.exec.php
5631
		$callShell=external::callShell($conf["external::callShell"]);
5632
		unset($conf["external::callShell"]);
5633
 
5634
		#如果執行shell失敗
5635
		if($callShell["status"]=="false"){
5636
 
5637
			#設置執行失敗
5638
			$result["status"]="false";
5639
 
5640
			#設置執行錯誤訊息
5641
			$result["error"]=$callShell;
5642
 
5643
			#回傳結果
5644
			return $result;
5645
 
5646
			}#if end
5647
 
5648
		#壓縮好的檔案位置與名稱
5649
		$result["content"]=$conf["createdXzFile"].".xz";
5650
 
5651
		#執行到這邊代表執行正常
5652
		$result["status"]="status";
5653
 
5654
		#回傳結果
5655
		return $result;
5656
 
5657
		}#function makeXzFile end
5658
 
5659
	/*
5660
	#函式說明:
5661
	#將資料夾或檔案打包壓縮成tar.xz檔案
5662
	#回傳結果:
5663
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5664
	#$result["function"],當前執行的函數名稱
5665
	#$result["error"],錯誤訊息.
5666
	#$result["content"],檔案輸出後的位置與名稱.
5667
	#必填參數:
5668
	#$conf["compressTarget"],陣列,要打包壓縮的每個資料夾與檔案位置
5669
	$conf["compressTarget"]=array();
5670
	#$conf["createdTarXzFile"],字串,打包壓縮好的檔案要放在哪裡,副檔名.tar.xz會自動加上.
5671
	$conf["createdTarXzFile"]="";
5672
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5673
	$conf["fileArgu"]=__FILE__;
5674
	#可省略參數:
5675
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
5676
	#$conf["commentsArray"]=array("");
5677
	#$conf["includeDotStart"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「.」開頭的檔案目錄,預設為"false",不包含,"true"為要包含.
5678
	#$conf["includeDotStart"]="false";
5679
	#$conf["includeWaveEnd"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「~」結尾的檔案.預設為"false",不包含,"true"為要包含.
5680
	#$conf["includeWaveEnd"]="false";
5681
	#參考資料:
5682
	#無.
5683
	#備註:
5684
	#建議加上 --exclude-backups, --exclude-caches-all 	
5685
	*/
5686
	public static function makeTarXzFile(&$conf){
5687
 
5688
		#初始化要回傳的內容
5689
		$result=array();
5690
 
5691
		#記錄當前執行的函數名稱
5692
		$result["function"]=__FUNCTION__;
5693
 
5694
		#如果 $conf 不為陣列
5695
		if(gettype($conf)!="array"){
5696
 
5697
			#設置執行失敗
5698
			$result["status"]="false";
5699
 
5700
			#設置執行錯誤訊息
5701
			$result["error"][]="\$conf變數須為陣列形態";
5702
 
5703
			#如果傳入的參數為 null
5704
			if($conf==null){
5705
 
5706
				#設置執行錯誤訊息
5707
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5708
 
5709
				}#if end
5710
 
5711
			#回傳結果
5712
			return $result;
5713
 
5714
			}#if end
5715
 
5716
		#檢查參數
5717
		#函式說明:
5718
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5719
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5720
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5721
		#$result["function"],當前執行的函式名稱.
5722
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5723
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5724
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5725
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5726
		#必填寫的參數:
5727
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5728
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5729
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5730
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdTarXzFile");
5731
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5732
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5733
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5734
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5735
		#可以省略的參數:
5736
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5737
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5738
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5739
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","includeDotStart","includeWaveEnd");
5740
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5741
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
5742
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5743
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
5744
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5745
		#$conf["arrayCountEqualCheck"][]=array();
5746
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5747
		unset($conf["variableCheck::checkArguments"]);
5748
 
5749
		#若檢查失敗
5750
		if($checkResult["status"]=="false"){
5751
 
5752
			#設置執行失敗
5753
			$result["status"]="false";
5754
 
5755
			#設置執行錯誤訊息
5756
			$result["error"]=$checkResult;
5757
 
5758
			#回傳結果
5759
			return $result;
5760
 
5761
			}#if end
5762
 
5763
		#若檢查不通過
5764
		if($checkResult["passed"]=="false"){
5765
 
5766
			#設置執行失敗
5767
			$result["status"]="false";
5768
 
5769
			#設置執行錯誤訊息
5770
			$result["error"]=$checkResult;
5771
 
5772
			#回傳結果
5773
			return $result;
5774
 
5775
			}#if end
5776
 
5777
		#如果 $conf["commentsArray"] 有設定
5778
		if(isset($conf["commentsArray"])){
5779
 
5780
			#印出提示文字
5781
			#函式說明:
5782
			#印出多行文字,結尾自動換行.
5783
			#回傳的結果:
5784
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
5785
			#$result["function"],當前執行的函數名稱.
5786
			#$result["error"],錯誤訊息陣列.
5787
			#必填參數:
5788
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
5789
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
5790
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
5791
			unset($conf["cmd::echoMultiLine"]);
5792
 
5793
			#如果印出提示文字失敗
5794
			if($echoMultiLine["status"]=="false"){
5795
 
5796
				#設置執行失敗
5797
				$result["status"]="false";
5798
 
5799
				#設置執行錯誤訊息
5800
				$result["error"]=$echoMultiLine;
5801
 
5802
				#回傳結果
5803
				return $result;
5804
 
5805
				}#if end
5806
 
5807
			}#if end	
5808
 
5809
		#解析要處理的檔案路徑
5810
		#函式說明:
5811
		#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
5812
		#回傳結果:
5813
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5814
		#$result["error"],錯誤訊息陣列.
5815
		#$result["function"],函數名稱. 
5816
		#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
5817
		#$result["pathCount"],整數,有幾個路徑.
5818
		#必填參數:
5819
		#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
5820
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["path"]=$conf["compressTarget"];
5821
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5822
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
5823
		#可省略參數:
5824
		#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
5825
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["includeDotStart"]==="true"?"false":"true";
5826
		#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
5827
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["includeWaveEnd"]==="true"?"false":"true";
5828
		$realPathArray=fileAccess::resolveMultiPostionStringWhichContainStarSymbol($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5829
		unset($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5830
 
5831
		#如果解析路徑失敗
5832
		if($realPathArray["status"]=="false"){
5833
 
5834
			#設置執行失敗
5835
			$result["status"]="false";
5836
 
5837
			#設置執行錯誤訊息
5838
			$result["error"]=$realPathArray;
5839
 
5840
			#回傳結果
5841
			return $result;
5842
 
5843
			}#if end
5844
 
5845
		#取得解析好的檔案路徑陣列
5846
		$conf["compressTarget"]=$realPathArray["content"];	
5847
 
5848
		#將路徑轉換成相對路徑
5849
		#函式說明:
5850
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
5851
		#回傳結果:
5852
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5853
		#$result["error"],錯誤訊息陣列.
5854
		#$result["function"],函數名稱. 
5855
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
5856
		#必填參數:
5857
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
5858
		$conf["fileAccess::getRelativePath"]["path"]=$conf["compressTarget"];
5859
		#$conf["fileArgu"],字串,當前路徑.
5860
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
5861
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
5862
		unset($conf["fileAccess::getRelativePath"]);
5863
 
5864
		#如果轉換失敗
5865
		if($getRelativePath["status"]=="false"){
5866
 
5867
			#設置執行失敗
5868
			$result["status"]="false";
5869
 
5870
			#設置執行錯誤訊息
5871
			$result["error"]=$getRelativePat;
5872
 
5873
			#回傳結果
5874
			return $result;
5875
 
5876
			}#if end	
5877
 
5878
		#打包成tar檔
5879
		#函式說明:
5880
		#將資料夾或檔案打包成tar檔案
5881
		#回傳的結果:
5882
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5883
		#$result["function"],當前執行的函數名稱
5884
		#$result["error"],錯誤訊息.
5885
		#$result["content"],檔案輸出後的位置與名稱.
5886
		#必填參數:
5887
		#$conf["fileAccess::makeTarFile"]["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5888
		$conf["fileAccess::makeTarFile"]["packetTarget"]=$getRelativePath["content"];
5889
		#$conf["fileAccess::makeTarFile"]["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5890
		$conf["fileAccess::makeTarFile"]["createdTarFile"]=$conf["createdTarXzFile"];
5891
		#$conf["fileAccess::makeTarFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5892
		$conf["fileAccess::makeTarFile"]["fileArgu"]=$conf["fileArgu"];
5893
		$makeTarFile=fileAccess::makeTarFile($conf["fileAccess::makeTarFile"]);
5894
		unset($conf["fileAccess::makeTarFile"]);
5895
 
5896
		#如果打包失敗
5897
		if($makeTarFile["status"]=="false"){
5898
 
5899
			#設置執行不正常
5900
			$result["status"]="false";
5901
 
5902
			#設置錯誤訊息
5903
			$result["error"]=$makeTarFile;
5904
 
5905
			#回傳結果
5906
			return $result;
5907
 
5908
			}#if end
5909
 
5910
		#壓縮成xz檔
5911
		#函式說明:
5912
		#將一個檔案壓縮成xz檔案
5913
		#回傳的結果:
5914
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5915
		#$result["function"],當前執行的函數名稱
5916
		#$result["error"],錯誤訊息.
5917
		#$result["content"],檔案輸出後的位置與名稱.
5918
		#必填參數:
5919
		#$conf["fileAccess::makeXzFile"]["compressTarget"],字串,要打包的每個資料夾與檔案位置
5920
		$conf["fileAccess::makeXzFile"]["compressTarget"]=$makeTarFile["content"];
5921
		#$conf["fileAccess::makeXzFile"]["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5922
		$conf["fileAccess::makeXzFile"]["createdXzFile"]=$makeTarFile["content"];
5923
		#$conf["fileAccess::makeXzFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5924
		$conf["fileAccess::makeXzFile"]["fileArgu"]=$conf["fileArgu"];
5925
		$makeXzFile=fileAccess::makeXzFile($conf["fileAccess::makeXzFile"]);
5926
		unset($conf["fileAccess::makeXzFile"]);
5927
 
5928
		#如果壓縮失敗
5929
		if($makeXzFile["status"]=="false"){
5930
 
5931
			#設置執行不正常
5932
			$result["status"]="false";
5933
 
5934
			#設置錯誤訊息
5935
			$result["error"]=$makeXzFile;
5936
 
5937
			#回傳結果
5938
			return $result;
5939
 
5940
			}#if end
5941
 
5942
		#移除tar檔案
5943
		#函式說明:
5944
		#移除檔案
5945
		#回傳結果:
5946
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
5947
		#$result["error"],錯誤訊息陣列
5948
		#$result["warning"],警告訊息陣列
5949
		#$result["function"],當前執行的函數名稱
5950
		#必填參數:
5951
		$conf["fileAccess::delFile"]["fileAddress"]=$makeTarFile["content"];#要移除檔案的位置
5952
		#$conf["fileAccess::delFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5953
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
5954
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
5955
		unset($conf["fileAccess::delFile"]);
5956
 
5957
		#如果移除tar檔案失敗
5958
		if($delFile["status"]=="false"){
5959
 
5960
			#設置執行不正常
5961
			$result["status"]="false";
5962
 
5963
			#設置錯誤訊息
5964
			$result["error"]=$delFile;
5965
 
5966
			#回傳結果
5967
			return $result;
5968
 
5969
			}#if end
5970
 
5971
		#取得壓縮好的檔案位置與名稱
5972
		$result["content"]=$makeXzFile["content"];
5973
 
5974
		#執行到這邊代表執行正常
5975
		$result["status"]="true";
5976
 
5977
		#回傳結果
5978
		return $result;
5979
 
5980
		}#function makeTarXzFile end
5981
 
5982
	/*
5983
	#函式說明:
5984
	#移動檔案
5985
	#回傳結果:
5986
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5987
	#$result["function"],當前執行的函數名稱
5988
	#$result["error"],錯誤訊息.
5989
	#$result["content"],檔案輸出後的位置與名稱.
5990
	#必填參數:
5991
	#$conf["from"],字串,要移動的檔案名稱與位置.
5992
	$conf["from"]="";
5993
	#$conf["to"],字串,要移動到的位置與名稱
5994
	$conf["to"]="";
5995
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5996
	$conf["fileArgu"]=__FILE__;
5997
	#可省略參數:
5998
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
5999
	#$conf["commentsArray"]=array("");
6000
	#參考資料:
6001
	#無.
6002
	#備註:
6003
	#無.
6004
	*/
6005
	public static function mv(&$conf){
6006
 
6007
		#初始化要回傳的結果
6008
		$result=array();
6009
 
6010
		#取得當前執行的函數名稱
6011
		$result["function"]=__FUNCTION__;
6012
 
6013
		#如果 $conf 不為陣列
6014
		if(gettype($conf)!="array"){
6015
 
6016
			#設置執行失敗
6017
			$result["status"]="false";
6018
 
6019
			#設置執行錯誤訊息
6020
			$result["error"][]="\$conf變數須為陣列形態";
6021
 
6022
			#如果傳入的參數為 null
6023
			if($conf==null){
6024
 
6025
				#設置執行錯誤訊息
6026
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6027
 
6028
				}#if end
6029
 
6030
			#回傳結果
6031
			return $result;
6032
 
6033
			}#if end
6034
 
6035
		#檢查參數
6036
		#函式說明:
6037
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6038
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6039
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6040
		#$result["function"],當前執行的函式名稱.
6041
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6042
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6043
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6044
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6045
		#必填寫的參數:
6046
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6047
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
6048
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6049
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("from","to","fileArgu");
6050
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
6051
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
6052
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6053
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
6054
		#可以省略的參數:
6055
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
6056
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
6057
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
6058
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
6059
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
6060
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
6061
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6062
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
6063
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
6064
		#$conf["arrayCountEqualCheck"][]=array();
6065
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
6066
		unset($conf["variableCheck::checkArguments"]);
6067
 
6068
		#若檢查失敗
6069
		if($checkResult["status"]=="false"){
6070
 
6071
			#設置執行失敗
6072
			$result["status"]="false";
6073
 
6074
			#設置執行錯誤訊息
6075
			$result["error"]=$checkResult;
6076
 
6077
			#回傳結果
6078
			return $result;
6079
 
6080
			}#if end
6081
 
6082
		#若檢查不通過
6083
		if($checkResult["passed"]=="false"){
6084
 
6085
			#設置執行失敗
6086
			$result["status"]="false";
6087
 
6088
			#設置執行錯誤訊息
6089
			$result["error"]=$checkResult;
6090
 
6091
			#回傳結果
6092
			return $result;
6093
 
6094
			}#if end
6095
 
6096
		#如果 $conf["commentsArray"] 有設定
6097
		if(isset($conf["commentsArray"])){
6098
 
6099
			#印出提示文字
6100
			#函式說明:
6101
			#印出多行文字,結尾自動換行.
6102
			#回傳的結果:
6103
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
6104
			#$result["function"],當前執行的函數名稱.
6105
			#$result["error"],錯誤訊息陣列.
6106
			#必填參數:
6107
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
6108
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
6109
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
6110
			unset($conf["cmd::echoMultiLine"]);
6111
 
6112
			#如果印出提示文字失敗
6113
			if($echoMultiLine["status"]=="false"){
6114
 
6115
				#設置執行失敗
6116
				$result["status"]="false";
6117
 
6118
				#設置執行錯誤訊息
6119
				$result["error"]=$echoMultiLine;
6120
 
6121
				#回傳結果
6122
				return $result;
6123
 
6124
				}#if end
6125
 
6126
			}#if end	
6127
 
6128
		#檢查要移動的檔案是否存在
6129
		#函式說明:
6130
		#檢查多個檔案與資料夾是否存在.
6131
		#回傳的結果:
6132
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6133
		#$result["error"],錯誤訊息陣列.
6134
		#$resutl["function"],當前執行的涵式名稱.
6135
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6136
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6137
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
6138
		#必填參數:
6139
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["from"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6140
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6141
		#參考資料來源:
6142
		#http://php.net/manual/en/function.file-exists.php
6143
		#http://php.net/manual/en/control-structures.foreach.php
6144
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6145
		unset($conf["fileAccess::checkMultiFileExist"]);
6146
 
6147
		#如果檢查失敗
6148
		if($checkMultiFileExist["status"]=="false"){
6149
 
6150
			#設置執行失敗
6151
			$result["status"]="false";
6152
 
6153
			#設置執行錯誤訊息
6154
			$result["error"]=$checkMultiFileExist;
6155
 
6156
			#回傳結果
6157
			return $result;
6158
 
6159
			}#if end	
6160
 
6161
		#如果來源檔案不存在
6162
		if($checkMultiFileExist["allExist"]=="false"){
6163
 
6164
			#設置執行失敗
6165
			$result["status"]="false";
6166
 
6167
			#設置執行錯誤訊息
6168
			$result["error"][]="檔案「".$conf["from"]."」不存在";
6169
 
6170
			#回傳結果
6171
			return $result;
6172
 
6173
			}#if end
6174
 
6175
		#函式說明:
6176
		#呼叫shell執行系統命令,並取得回傳的內容.
6177
		#回傳的結果:
6178
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6179
		#$result["error"],錯誤訊息陣列
6180
		#$result["output"],爲執行完二元碼後的輸出陣列
6181
		#必填的參數
6182
		$conf["external::callShell"]["command"]="mv";#要執行的指令與參數
6183
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"]; #__FILE__的內容
6184
		#可省略參數:
6185
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
6186
		$conf["external::callShell"]["argu"]=array("-v",$conf["from"],$conf["to"]);
6187
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
6188
		#$conf["external::callShell"]["enablePrintDescription"]="true";
6189
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
6190
		#$conf["printDescription"]="";
6191
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
6192
		$conf["external::callShell"]["escapeshellarg"]="true";
6193
		#參考資料:
6194
		#http://php.net/manual/en/function.exec.php
6195
		$callShell=external::callShell($conf["external::callShell"]);
6196
		unset($conf["external::callShell"]);
6197
 
6198
		#如果移動檔案失敗
6199
		if($callShell["status"]=="false"){
6200
 
6201
			#設置執行失敗
6202
			$result["status"]="false";
6203
 
6204
			#設置執行錯誤訊息
6205
			$result["error"]=$callShell;
6206
 
6207
			#回傳結果
6208
			return $result;
6209
 
6210
			}#if end
6211
 
6212
		#執行到這邊代表正常
6213
		$result["status"]="true";
6214
 
6215
		#儲存移動後的位置與名稱
6216
		$result["content"]=$conf["to"];
6217
 
6218
		#回傳結果
6219
		return $result;
6220
 
6221
		}#function mv end
6222
 
6223
	/*
6224
	#函式說明:
6225
	#取得目錄底下所有目錄與檔案的樹狀結構.
6226
	#回傳結果:
6227
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6228
	#$result["error"],錯誤訊息陣列.
6229
	#$result["function"],函數名稱.
6230
	#$result["position"],根目錄位置.
6231
	#$result["content"],陣列,檔案目錄的樹狀結構.
6232
	#$result["content"][$i]["name"],根目錄底下第$i+1個檔案或目錄的名稱
6233
	#$result["content"][$i]["folder"],根目錄底下第$i+1個名稱是目錄("true")還是檔案("false").
6234
	#$result["content"][$i]["position"],根目錄底下第$i+1個名稱或目錄的位置.
6235
	#$result["content"][$i]["ownerPerm"],根目錄底下第$i+1個使用者的權限.
6236
	#$result["content"][$i]["groupPerm"],根目錄底下第$i+1個群組使用者的權限.
6237
	#$result["content"][$i]["otherPerm"],根目錄底下第$i+1個其他使用者的權限.
6238
	#$result["content"][$i]["ownerName"],根目錄底下第$i+1個擁有者賬戶.
6239
	#$result["content"][$i]["groupName"],根目錄底下第$i+1個群組擁有者賬戶.
6240
	#$result["content"][$i]["next"][$j]["name"],第$i+1個為目錄的名稱的目錄底下第$j+1個檔案或目錄的名稱
6241
	#$result["content"][$i]["next"][$j]["folder"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱是目錄("true")還是檔案("false").
6242
	#$result["content"][$i]["next"][$j]["position"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱或目錄的位置.
6243
	#$result["content"][$i]["next"][$j]["ownerPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個使用者的權限.
6244
	#$result["content"][$i]["next"][$j]["groupPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組使用者的權限.
6245
	#$result["content"][$i]["next"][$j]["otherPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個其他使用者的權限.
6246
	#$result["content"][$i]["next"][$j]["ownerName"],第$i+1個為目錄的名稱的目錄底下第$j+1個擁有者賬戶.
6247
	#$result["content"][$i]["next"][$j]["groupName"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組擁有者賬戶.
6248
	#以此類推...		
6249
	#必填參數:
6250
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6251
	$conf["position"]="";
6252
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6253
	$conf["fileArgu"]=__FILE__;
6254
	#可省略參數:
6255
	#無.
6256
	#參考資料:
6257
	#無.
6258
	#備註:
6259
	#無.
6260
	*/
6261
	public static function getListTree(&$conf){
6262
 
6263
		#初始化要回傳的結果
6264
		$result=array();
6265
 
6266
		#設置當其函數名稱
6267
		$result["function"]=__FUNCTION__;
6268
 
6269
		#如果 $conf 不為陣列
6270
		if(gettype($conf)!="array"){
6271
 
6272
			#設置執行失敗
6273
			$result["status"]="false";
6274
 
6275
			#設置執行錯誤訊息
6276
			$result["error"][]="\$conf變數須為陣列形態";
6277
 
6278
			#如果傳入的參數為 null
6279
			if($conf==null){
6280
 
6281
				#設置執行錯誤訊息
6282
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6283
 
6284
				}#if end
6285
 
6286
			#回傳結果
6287
			return $result;
6288
 
6289
			}#if end
6290
 
6291
		#檢查必填參數
6292
		#函式說明:
6293
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6294
		#回傳的結果:
6295
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6296
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6297
		#$result["function"],當前執行的函式名稱.
6298
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6299
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6300
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6301
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6302
		#必填寫的參數:
6303
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6304
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6305
		#可以省略的參數:
6306
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6307
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6308
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6309
		unset($conf["variableCheck.isexistMulti"]);
6310
 
6311
		#如果檢查失敗
6312
		if($checkResult["status"]=="false"){
6313
 
6314
			#設置錯誤識別
6315
			$result["status"]="false";
6316
 
6317
			#設置錯誤訊息
6318
			$result["error"]=$checkResult;
6319
 
6320
			#回傳結果
6321
			return $result;
6322
 
6323
			}#if end
6324
 
6325
		#如果檢查不通過
6326
		if($checkResult["passed"]=="false"){
6327
 
6328
			#設置錯誤識別
6329
			$result["status"]="false";
6330
 
6331
			#設置錯誤訊息
6332
			$result["error"]=$checkResult;
6333
 
6334
			#回傳結果
6335
			return $result;
6336
 
6337
			}#if end
6338
 
6339
		#如果目錄不為 . 與 ..
6340
		if(basename($conf["position"])!="." && basename($conf["position"])!=".."){
6341
 
6342
			#檢查目錄是否存在
6343
			#函式說明:
6344
			#檢查多個檔案與資料夾是否存在.
6345
			#回傳的結果:
6346
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6347
			#$result["error"],錯誤訊息陣列.
6348
			#$resutl["function"],當前執行的涵式名稱.
6349
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6350
			#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6351
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
6352
			#必填參數:
6353
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["position"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6354
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6355
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6356
			#參考資料來源:
6357
			#http://php.net/manual/en/function.file-exists.php
6358
			#http://php.net/manual/en/control-structures.foreach.php
6359
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6360
			unset($conf["fileAccess::checkMultiFileExist"]);
6361
 
6362
			#如果檢查目錄失敗
6363
			if($checkMultiFileExist["status"]=="false"){
6364
 
6365
				#設置錯誤識別
6366
				$result["status"]="false";
6367
 
6368
				#設置錯誤訊息
6369
				$result["error"]=$checkMultiFileExist;
6370
 
6371
				#回傳結果
6372
				return $result;
6373
 
6374
				}#if end	
6375
 
6376
			#如果目錄不存在
6377
			if($checkMultiFileExist["varExist"][0]=="false"){
6378
 
6379
				#設置錯誤識別
6380
				$result["status"]="false";
6381
 
6382
				#設置錯誤訊息
6383
				$result["error"]=$checkMultiFileExist;
6384
 
6385
				#回傳結果
6386
				return $result;
6387
 
6388
				}#if end	
6389
 
6390
			}#if end
6391
 
6392
		#取得根目錄的樹狀結構
6393
		#函式說明:
6394
		#取得目錄底下所有目錄與檔案清單.
6395
		#回傳結果:
6396
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6397
		#$result["error"],錯誤訊息陣列.
6398
		#$result["function"],函數名稱.
6399
		#$result["content"],陣列,目錄底下的檔案與子目錄.
6400
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6401
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6402
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6403
		#$result["position"],目前的位置.
6404
		#必填參數:
6405
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6406
		$conf["fileAccess::getList"]["position"]=$conf["position"];
6407
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6408
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
6409
		#可省略參數:
6410
		#無
6411
		#參考資料來源:
6412
		#opendir=>http://php.net/manual/en/function.opendir.php
6413
		#is_dir=>http://php.net/manual/en/function.is-dir.php
6414
		$rootList=fileAccess::getList($conf["fileAccess::getList"]);
6415
		unset($conf["fileAccess::getList"]);	
6416
 
6417
		#如果取得根目錄底下的資料失敗
6418
		if($rootList["status"]=="false"){
6419
 
6420
			#設置錯誤識別
6421
			$result["status"]="false";
6422
 
6423
			#設置錯誤訊息
6424
			$result["error"]=$rootList;
6425
 
6426
			#回傳結果
6427
			return $result;
6428
 
6429
			}#if end
6430
 
6431
		#取得當前目錄	
6432
		$result["position"]=$rootList["position"];	
6433
 
6434
		#取得根目錄層級可以看到的檔案與目錄
6435
		$result["content"]=$rootList["content"];
6436
 
6437
		#如果當前目錄有檔案與子目錄
6438
		if(isset($result["content"])){
6439
 
6440
			#當前層級有幾個檔案目錄就執行幾次
6441
			for($i=0;$i<count($result["content"]);$i++){
6442
 
6443
				#如果該單位是目錄
6444
				if($result["content"][$i]["folder"]=="true"){
6445
 
6446
					#呼叫當前函數,取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6447
					#函式說明:
6448
					#取得目錄底下所有目錄與檔案的樹狀結構.
6449
					#回傳結果:
6450
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6451
					#$result["error"],錯誤訊息陣列.
6452
					#$result["function"],函數名稱.
6453
					#$result["content"],陣列,檔案目錄的樹狀結構.
6454
					#$result["total"],根目錄底下有多少目錄與檔案
6455
					#必填參數:
6456
					#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6457
					$conf["fileAccess::getListTree"]["position"]=$conf["position"]."/".$result["content"][$i]["name"];
6458
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6459
					$conf["fileAccess::getListTree"]["fileArgu"]=$conf["fileArgu"];
6460
					#可省略參數:
6461
					#無
6462
					$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6463
					unset($conf["fileAccess::getListTree"]);
6464
 
6465
					#如果取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊失敗
6466
					if($getListTree["status"]=="false"){
6467
 
6468
						#設置錯誤識別
6469
						$result["status"]="false";
6470
 
6471
						#設置錯誤訊息
6472
						$result["error"]=$getListTree;
6473
 
6474
						#回傳結果
6475
						return $result;
6476
 
6477
						}#if end
6478
 
6479
					#如果 $conf["position"]."/".$result["content"][$i]["name"] 目錄有檔案與子目錄
6480
					if(isset($getListTree["content"])){	
6481
 
6482
						#取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6483
						$result["content"][$i]["next"]=$getListTree["content"];
6484
 
6485
						}#if end
6486
 
6487
					#取得當前目錄	
6488
					$result["content"][$i]["position"]=$rootList["position"];	
6489
 
6490
					}#if end
6491
 
6492
				}#for end
6493
 
6494
			}#if end
6495
 
6496
		#執行到這邊代表執行正常
6497
		$result["status"]="true";
6498
 
6499
		#回傳結果
6500
		return $result;
6501
 
6502
		}#function getListTree end
6503
 
6504
	/*
6505
	#函式說明:
6506
	#取得目錄底下所有目錄與檔案清單.
6507
	#回傳結果:
6508
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6509
	#$result["error"],錯誤訊息陣列.
6510
	#$result["function"],函數名稱.
6511
	#$result["content"],陣列,目錄底下的檔案與子目錄.
6512
	#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6513
	#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6514
	#$result["content"][$i]["ownerPerm"],字串,使用者的權限.
6515
	#$result["content"][$i]["groupPerm"],字串,群組使用者的權限.
6516
	#$result["content"][$i]["otherPerm"],字串,其他使用者的權限.
6517
	#$result["content"][$i]["ownerName"],字串,擁有者賬戶.
6518
	#$result["content"][$i]["groupName"],字串,群組擁有者賬戶.
6519
	#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6520
	#$result["position"],目前的位置.
6521
	#必填參數:
6522
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6523
	$conf["position"]="";
6524
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6525
	$conf["fileArgu"]=__FILE__;
6526
	#可省略參數:
6527
	#無
6528
	#參考資料:
6529
	#opendir=>http://php.net/manual/en/function.opendir.php
6530
	#is_dir=>http://php.net/manual/en/function.is-dir.php
6531
	#備註:
6532
	#無.
6533
	*/
6534
	public static function getList(&$conf){
6535
 
6536
		#初始化要回傳的結果
6537
		$result=array();
6538
 
6539
		#設置當其函數名稱
6540
		$result["function"]=__FUNCTION__;
6541
 
6542
		#初始化記載檔案目錄名單的陣列
6543
		$result["content"]=array();
6544
 
6545
		#如果 $conf 不為陣列
6546
		if(gettype($conf)!="array"){
6547
 
6548
			#設置執行失敗
6549
			$result["status"]="false";
6550
 
6551
			#設置執行錯誤訊息
6552
			$result["error"][]="\$conf變數須為陣列形態";
6553
 
6554
			#如果傳入的參數為 null
6555
			if($conf==null){
6556
 
6557
				#設置執行錯誤訊息
6558
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6559
 
6560
				}#if end
6561
 
6562
			#回傳結果
6563
			return $result;
6564
 
6565
			}#if end
6566
 
6567
		#檢查必填參數
6568
		#函式說明:
6569
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6570
		#回傳的結果:
6571
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6572
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6573
		#$result["function"],當前執行的函式名稱.
6574
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6575
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6576
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6577
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6578
		#必填寫的參數:
6579
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6580
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6581
		#可以省略的參數:
6582
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6583
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6584
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6585
		unset($conf["variableCheck.isexistMulti"]);
6586
 
6587
		#如果檢查失敗
6588
		if($checkResult["status"]=="false"){
6589
 
6590
			#設置錯誤識別
6591
			$result["status"]="false";
6592
 
6593
			#設置錯誤訊息
6594
			$result["error"]=$checkResult;
6595
 
6596
			#回傳結果
6597
			return $result;
6598
 
6599
			}#if end
6600
 
6601
		#如果檢查不通過
6602
		if($checkResult["passed"]==="false"){
6603
 
6604
			#設置錯誤識別
6605
			$result["status"]="false";
6606
 
6607
			#設置錯誤訊息
6608
			$result["error"]=$checkResult;
6609
 
6610
			#回傳結果
6611
			return $result;
6612
 
6613
			}#if end
6614
 
6615
		#檢查目標路徑是否為「/」開頭的路徑
6616
		#函式說明:
6617
		#取得符合特定字首與字尾的字串
6618
		#回傳結果:
6619
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
6620
		#$result["function"],當前執行的函數名稱.
6621
		#$result["error"],錯誤訊息陣列.
6622
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
6623
		#$result["returnString"],爲符合字首條件的字串內容。
6624
		#必填參數:
6625
		#$conf["checkString"],字串,要檢查的字串.
6626
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["position"];
6627
		#可省略參數:
6628
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
6629
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
6630
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
6631
		#$conf["tailWord"]="";
6632
		#參考資料:
6633
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
6634
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
6635
		unset($conf["search::getMeetConditionsString"]);
6636
 
6637
		#如果檢查關鍵字失敗
6638
		if($getMeetConditionsString["status"]=="false"){
6639
 
6640
			#設置錯誤識別
6641
			$result["status"]="false";
6642
 
6643
			#設置錯誤訊息
6644
			$result["error"]=$getMeetConditionsString;
6645
 
6646
			#回傳結果
6647
			return $result;
6648
 
6649
			}#if end					
6650
 
6651
		#如果目標路徑不為「/」開頭的路徑,則為相對路徑
6652
		if($getMeetConditionsString["founded"]=="false"){
6653
 
6654
			#取得目標位置的路徑
6655
			#函式說明:
6656
			#將檔案的位置名稱變成網址
6657
			#回傳結果:
6658
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6659
			#$result["error"],錯誤訊息陣列.
6660
			#$result["function"],函數名稱. 
6661
			#$result["content"],網址.
6662
			#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
6663
			#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
6664
			#必填參數:
6665
			#$conf["address"],字串,檔案的相對位置.
6666
			$conf["fileAccess::getInternetAddress"]["address"]=$conf["position"];
6667
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
6668
			$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
6669
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
6670
			#$conf["fileAccess::getInternetAddress"]["userDir"]="true";
6671
			$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
6672
			unset($conf["fileAccess::getInternetAddress"]);	
6673
 
6674
			#如果將檔案的位置名稱變成網址失敗
6675
			if($getInternetAddress["status"]=="false"){
6676
 
6677
				#設置錯誤識別
6678
				$result["status"]="false";
6679
 
6680
				#設置錯誤訊息
6681
				$result["error"]=$getInternetAddress;
6682
 
6683
				#回傳結果
6684
				return $result;
6685
 
6686
				}#if end	
6687
 
6688
			#置換目標位置為檔案系統路徑的絕對位置
6689
			$conf["position"]=$getInternetAddress["fileSystemAbsoulutePosition"];
6690
 
6691
			}#if end						
6692
 
6693
		#如果目標是資料夾	
6694
		if(is_dir($conf["position"])) {
6695
 
6696
			#設置為資料夾
6697
			$result["folder"]="true";
6698
 
6699
			#如果開啟資料夾成功
6700
			if($dh=opendir($conf["position"])){
6701
 
6702
				#初始化計數變數
6703
				$count=0;
6704
 
6705
				#如果資料夾裡面有檔案
6706
				while(($fileName=readdir($dh))!==false){
6707
 
6708
					#debug
6709
					#echo "有檔案";
6710
 
6711
					#如果名稱是「.」或「..」
6712
					if($fileName=="." || $fileName==".."){
6713
 
6714
						#則跳過
6715
						continue;
6716
 
6717
						}#if end
6718
 
6719
					#取得檔案或子目錄名稱
6720
					$result["content"][$count]["name"]=$fileName;					
6721
 
6722
					#取得詳細資訊
6723
					#函式說明:
6724
					#取得節點的資訊.
6725
					#回傳結果:
6726
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6727
					#$result["error"],錯誤訊息陣列.
6728
					#$result["function"],函數名稱. 
6729
					#$result["content"],檔案資訊陣列.
6730
					#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
6731
					#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
6732
					#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
6733
					#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
6734
					#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
6735
					#$result["content"]["ownerName"],檔案擁有着資訊.
6736
					#$result["content"]["groupName"],檔案所屬擁有着資訊.
6737
					#$result["content"]["size"],檔案大小.
6738
					#$result["content"]["modifyDate"],檔案變更年月日.
6739
					#$result["content"]["modifyTime"],檔案變更時分秒.
6740
					#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
6741
					#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
6742
					#必填參數:
6743
					#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
6744
					$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];
6745
					#$conf["file"],字串,要查看擁有者資訊的檔案.
6746
					$conf["fileAccess::fileInfo"]["file"]=$conf["position"]."/".$fileName;
6747
					#可省略參數:
6748
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
6749
					$conf["fileAccess::fileInfo"]["web"]="false";
6750
					#參考資料:
6751
					#fileowner=>http://php.net/manual/en/function.fileowner.php
6752
					#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
6753
					#備註:
6754
					#無.
6755
					$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);
6756
					unset($conf["fileAccess::fileInfo"]);
6757
 
6758
					#如果執行失敗
6759
					if($fileInfo["status"]=="false"){
6760
 
6761
						#設置錯誤識別
6762
						$result["status"]="false";
6763
 
6764
						#設置錯誤訊息
6765
						$result["error"]=$fileInfo;
6766
 
6767
						#回傳結果
6768
						return $result;
6769
 
6770
						}#if end
6771
 
6772
					#設置是否為資料夾
6773
					$result["content"][$count]["folder"]=$fileInfo["content"]["is_folder"];
6774
 
6775
					#設置使用者的權限
6776
					$result["content"][$count]["ownerPerm"]=$fileInfo["content"]["ownerPerm"];
6777
 
6778
					#設置群組的權限
6779
					$result["content"][$count]["groupPerm"]=$fileInfo["content"]["groupPerm"];
6780
 
6781
					#設置其他使用者的權限
6782
					$result["content"][$count]["otherPerm"]=$fileInfo["content"]["otherPerm"];
6783
 
6784
					#設置其擁有者賬戶
6785
					$result["content"][$count]["ownerName"]=$fileInfo["content"]["ownerName"];
6786
 
6787
					#設置其群組擁有者賬戶
6788
					$result["content"][$count]["groupName"]=$fileInfo["content"]["groupName"];
6789
 
6790
					#計數加1
6791
					$count++;
6792
 
6793
					}#while
6794
 
6795
				#關閉資料夾
6796
				closedir($dh);
6797
 
6798
				}#if end
6799
 
6800
			#開啟資料夾失敗	
6801
			else{
6802
 
6803
				#設置執行失敗
6804
				$result["status"]="false";
6805
 
6806
				#設置執行錯誤訊息
6807
				$result["error"][]="開啟資料夾「".$conf["position"]."」失敗";
6808
 
6809
				#回傳結果
6810
				return $result;
6811
 
6812
				}#else end
6813
 
6814
			}#if end
6815
 
6816
		#反之是檔案
6817
		else{
6818
 
6819
			#設置不為目錄
6820
			$result["folder"]="false";
6821
 
6822
			}#else end
6823
 
6824
		#取得目前位置
6825
		$result["position"]=$conf["position"];	
6826
 
6827
		#執行到這邊代表執行正常
6828
		$result["status"]="true";
6829
 
6830
		#回傳結果
6831
		return $result;	
6832
 
6833
		}#function getList end
6834
 
6835
	/*
6836
	#函式說明:
6837
	#取得目錄底下所有目錄與檔案的樹狀結構.
6838
	#回傳結果:
6839
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6840
	#$result["error"],錯誤訊息陣列.
6841
	#$result["function"],函數名稱.
6842
	#$result["content"],陣列,檔案目錄的樹狀結構.
6843
	#必填參數:
6844
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6845
	$conf["position"]="";
6846
	#可省略參數:
6847
	#無.
6848
	#參考資料:
6849
	#無.
6850
	#備註:
6851
	#無.
6852
	*/
6853
	public static function exportListTree(&$conf){
6854
 
6855
		#初始化要回傳的結果
6856
		$result=array();
6857
 
6858
		#設置當其函數名稱
6859
		$result["function"]=__FUNCTION__;
6860
 
6861
		#如果 $conf 不為陣列
6862
		if(gettype($conf)!="array"){
6863
 
6864
			#設置執行失敗
6865
			$result["status"]="false";
6866
 
6867
			#設置執行錯誤訊息
6868
			$result["error"][]="\$conf變數須為陣列形態";
6869
 
6870
			#如果傳入的參數為 null
6871
			if($conf==null){
6872
 
6873
				#設置執行錯誤訊息
6874
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6875
 
6876
				}#if end
6877
 
6878
			#回傳結果
6879
			return $result;
6880
 
6881
			}#if end
6882
 
6883
		#檢查必填參數
6884
		#函式說明:
6885
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6886
		#回傳的結果:
6887
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6888
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6889
		#$result["function"],當前執行的函式名稱.
6890
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6891
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6892
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6893
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6894
		#必填寫的參數:
6895
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6896
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6897
		#可以省略的參數:
6898
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6899
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6900
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6901
		unset($conf["variableCheck.isexistMulti"]);
6902
 
6903
		#如果檢查失敗
6904
		if($checkResult["status"]=="false"){
6905
 
6906
			#設置錯誤識別
6907
			$result["status"]="false";
6908
 
6909
			#設置錯誤訊息
6910
			$result["error"]=$checkResult;
6911
 
6912
			#回傳結果
6913
			return $result;
6914
 
6915
			}#if end
6916
 
6917
		#如果檢查不通過
6918
		if($checkResult["passed"]=="false"){
6919
 
6920
			#設置錯誤識別
6921
			$result["status"]="false";
6922
 
6923
			#設置錯誤訊息
6924
			$result["error"]=$checkResult;
6925
 
6926
			#回傳結果
6927
			return $result;
6928
 
6929
			}#if end
6930
 
6931
		#函式說明:
6932
		#取得目錄底下所有目錄與檔案的樹狀結構.
6933
		#回傳結果:
6934
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6935
		#$result["error"],錯誤訊息陣列.
6936
		#$result["function"],函數名稱.
6937
		#$result["content"],陣列,檔案目錄的樹狀結構.
6938
		#必填參數:
6939
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6940
		$conf["fileAccess::getListTree"]["position"]=$conf["position"];
6941
		#可省略參數:
6942
		#無
6943
		#備註:
6944
		#若檔案與目錄的名稱含有「[」與「]」與「(」與「)」將會無法取得其目錄底下的內容	
6945
		#若檔案與目錄的名稱含有「 」將會無法檢查檔案是否存在
6946
		#改用opendir()函數應該可以解決大部分的bug.
6947
		$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6948
		unset($conf["fileAccess::getListTree"]);
6949
 
6950
		#如果取得 目標目錄底下所有目錄與檔案的樹狀結構 失敗
6951
		if($getListTree["status"]==="false"){
6952
 
6953
			#設置錯誤識別
6954
			$result["status"]="false";
6955
 
6956
			#設置錯誤訊息
6957
			$result["error"]=$getListTree;
6958
 
6959
			#回傳結果
6960
			return $result;
6961
 
6962
			}#if end
6963
 
6964
		#目標目錄底下有幾個
6965
 
6966
		}#function exportListTree end
6967
 
6968
	/*
6969
	#函式說明:
6970
	#解壓縮tar.xz檔案,解壓縮完畢後,tar.xz檔案會被移除.
6971
	#回傳結果:
6972
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6973
	#$result["error"],錯誤訊息陣列.
6974
	#$result["function"],函數名稱. 
6975
	#必填參數:
6976
	#$conf["tarXzFile"],字串變數,壓縮檔的位置與名稱,副檔名".tar.xz"會自動補上.
6977
	$conf["tarXzFile"]="";
6978
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6979
	$conf["fileArgu"]=__FILE__;
6980
	#可省略參數:
6981
	#$conf["extractTo"],字串,要解壓縮到哪邊,預設為當前路徑"."
6982
	#$conf["extractTo"]=".";
6983
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
6984
	#$conf["commentsArray"]=array("");
6985
	#參考資料:
6986
	#無.
6987
	#備註:
6988
	#無.
6989
	*/
6990
	public static function unpackTarXzFile(&$conf){
6991
 
6992
		#初始化要回傳的內容
6993
		$result=array();
6994
 
6995
		#記錄當前執行的函數名稱
6996
		$result["function"]=__FUNCTION__;
6997
 
6998
		#如果 $conf 不為陣列
6999
		if(gettype($conf)!="array"){
7000
 
7001
			#設置執行失敗
7002
			$result["status"]="false";
7003
 
7004
			#設置執行錯誤訊息
7005
			$result["error"][]="\$conf變數須為陣列形態";
7006
 
7007
			#如果傳入的參數為 null
7008
			if($conf==null){
7009
 
7010
				#設置執行錯誤訊息
7011
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7012
 
7013
				}#if end
7014
 
7015
			#回傳結果
7016
			return $result;
7017
 
7018
			}#if end
7019
 
7020
		#檢查參數
7021
		#函式說明:
7022
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7023
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7024
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7025
		#$result["function"],當前執行的函式名稱.
7026
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7027
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7028
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7029
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7030
		#必填寫的參數:
7031
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7032
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7033
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7034
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","tarXzFile");
7035
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7036
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7037
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7038
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7039
		#可以省略的參數:
7040
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7041
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7042
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7043
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","extractTo");
7044
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7045
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");
7046
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7047
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,".");
7048
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7049
		#$conf["arrayCountEqualCheck"][]=array();
7050
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7051
		unset($conf["variableCheck::checkArguments"]);
7052
 
7053
		#若檢查失敗
7054
		if($checkResult["status"]=="false"){
7055
 
7056
			#設置執行失敗
7057
			$result["status"]="false";
7058
 
7059
			#設置執行錯誤訊息
7060
			$result["error"]=$checkResult;
7061
 
7062
			#回傳結果
7063
			return $result;
7064
 
7065
			}#if end
7066
 
7067
		#若檢查不通過
7068
		if($checkResult["passed"]=="false"){
7069
 
7070
			#設置執行失敗
7071
			$result["status"]="false";
7072
 
7073
			#設置執行錯誤訊息
7074
			$result["error"]=$checkResult;
7075
 
7076
			#回傳結果
7077
			return $result;
7078
 
7079
			}#if end
7080
 
7081
		#如果 $conf["commentsArray"] 有設定
7082
		if(isset($conf["commentsArray"])){
7083
 
7084
			#印出提示文字
7085
			#函式說明:
7086
			#印出多行文字,結尾自動換行.
7087
			#回傳的結果:
7088
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
7089
			#$result["function"],當前執行的函數名稱.
7090
			#$result["error"],錯誤訊息陣列.
7091
			#必填參數:
7092
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
7093
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
7094
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
7095
			unset($conf["cmd::echoMultiLine"]);
7096
 
7097
			#如果印出提示文字失敗
7098
			if($echoMultiLine["status"]=="false"){
7099
 
7100
				#設置執行失敗
7101
				$result["status"]="false";
7102
 
7103
				#設置執行錯誤訊息
7104
				$result["error"]=$echoMultiLine;
7105
 
7106
				#回傳結果
7107
				return $result;
7108
 
7109
				}#if end
7110
 
7111
			}#if end
7112
 
7113
		#檢查要移動的檔案是否存在
7114
		#函式說明:
7115
		#檢查多個檔案與資料夾是否存在.
7116
		#回傳的結果:
7117
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
7118
		#$result["error"],錯誤訊息陣列.
7119
		#$resutl["function"],當前執行的涵式名稱.
7120
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
7121
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
7122
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
7123
		#必填參數:
7124
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["tarXzFile"].".tar.xz");#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
7125
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
7126
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
7127
		#參考資料來源:
7128
		#http://php.net/manual/en/function.file-exists.php
7129
		#http://php.net/manual/en/control-structures.foreach.php
7130
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
7131
		unset($conf["fileAccess::checkMultiFileExist"]);
7132
 
7133
		#如果檢查失敗
7134
		if($checkMultiFileExist["status"]=="false"){
7135
 
7136
			#設置執行失敗
7137
			$result["status"]="false";
7138
 
7139
			#設置執行錯誤訊息
7140
			$result["error"]=$checkMultiFileExist;
7141
 
7142
			#回傳結果
7143
			return $result;
7144
 
7145
			}#if end	
7146
 
7147
		#如果來源檔案不存在
7148
		if($checkMultiFileExist["allExist"]=="false"){
7149
 
7150
			#設置執行失敗
7151
			$result["status"]="false";
7152
 
7153
			#設置執行錯誤訊息
7154
			$result["error"][]="檔案「".$conf["tarXzFile"].".tar.xz」不存在";
7155
 
7156
			#回傳結果
7157
			return $result;
7158
 
7159
			}#if end
7160
 
7161
		#進行解壓縮xz檔
7162
		#函式說明:
7163
		#呼叫shell執行系統命令,並取得回傳的內容.
7164
		#回傳的結果:
7165
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7166
		#$result["error"],錯誤訊息陣列.
7167
		#$result["function"],當前執行的函數名稱.
7168
		#$result["cmd"],執行的指令內容.
7169
		#$result["output"],爲執行完二元碼後的輸出陣列.
7170
		#必填的參數
7171
		#$conf["command"],字串,要執行的指令與.
7172
		$conf["fileAccess::callShell"]["command"]="xz -v -v -d -f ".$conf["tarXzFile"].".tar.xz";
7173
		#可省略參數:
7174
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7175
		#$conf["fileAccess::callShell"]["argu"]=array();
7176
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7177
		#$conf["enablePrintDescription"]="true";
7178
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7179
		#$conf["printDescription"]="";
7180
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7181
		#$conf["escapeshellarg"]="true";
7182
		#備註:
7183
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7184
		#參考資料:
7185
		#exec=>http://php.net/manual/en/function.exec.php
7186
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7187
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7188
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7189
		unset($conf["fileAccess::callShell"]);
7190
 
7191
		#如果解壓縮xz檔案失敗
7192
		if($callShell["status"]=="false"){
7193
 
7194
			#設置執行失敗
7195
			$result["status"]="false";
7196
 
7197
			#設置執行錯誤訊息
7198
			$result["error"]=$callShell;
7199
 
7200
			#回傳結果
7201
			return $result;
7202
 
7203
			}#if end
7204
 
7205
		#解壓縮tar檔
7206
		#函式說明:
7207
		#呼叫shell執行系統命令,並取得回傳的內容.
7208
		#回傳的結果:
7209
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7210
		#$result["error"],錯誤訊息陣列.
7211
		#$result["function"],當前執行的函數名稱.
7212
		#$result["cmd"],執行的指令內容.
7213
		#$result["output"],爲執行完二元碼後的輸出陣列.
7214
		#必填的參數
7215
		#$conf["command"],字串,要執行的指令與.
7216
		$conf["fileAccess::callShell"]["command"]="tar";
7217
		#可省略參數:
7218
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7219
		$conf["fileAccess::callShell"]["argu"]=array("-xvf",$conf["tarXzFile"]."tar",$conf["extractTo"]);
7220
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7221
		#$conf["enablePrintDescription"]="true";
7222
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7223
		#$conf["printDescription"]="";
7224
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7225
		$conf["fileAccess::callShell"]["escapeshellarg"]="true";
7226
		#備註:
7227
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7228
		#參考資料:
7229
		#exec=>http://php.net/manual/en/function.exec.php
7230
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7231
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7232
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7233
		unset($conf["fileAccess::callShell"]);
7234
 
7235
		#如果解壓縮xz檔案失敗
7236
		if($callShell["status"]=="false"){
7237
 
7238
			#設置執行失敗
7239
			$result["status"]="false";
7240
 
7241
			#設置執行錯誤訊息
7242
			$result["error"]=$callShell;
7243
 
7244
			#回傳結果
7245
			return $result;
7246
 
7247
			}#if end
7248
 
7249
		#移除tar檔
7250
		#函式說明:
7251
		#移除檔案
7252
		#回傳結果:
7253
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7254
		#$result["error"],錯誤訊息陣列
7255
		#$result["warning"],警告訊息陣列
7256
		#$result["function"],當前執行的函數名稱
7257
		#必填參數:
7258
		$conf["fileAccess::delFile"]["fileAddress"]=$conf["tarXzFile"].".tar";#要移除檔案的位置
7259
		#可省略參數:
7260
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7261
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
7262
		#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
7263
		#$conf["commentsArray"]=array("");
7264
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
7265
		unset($conf["fileAccess::delFile"]);	
7266
 
7267
		#如果移除檔案失敗
7268
		if($delFile["status"]=="false"){
7269
 
7270
			#設置執行失敗
7271
			$result["status"]="false";
7272
 
7273
			#設置執行錯誤訊息
7274
			$result["error"]=$delFile;
7275
 
7276
			#回傳結果
7277
			return $result;
7278
 
7279
			}#if end	
7280
 
7281
		#執行到這邊代表執行正常
7282
		$result["status"]="true";
7283
 
7284
		#回傳結果
7285
		return $result;
7286
 
7287
		}#function unpackTarXzFile end
7288
 
7289
	/*
7290
	#函式說明:
7291
	#用data:mimeType;base64,fileVar的形式來提供檔案的連結,亦即檔案儲存在變數裡面.
7292
	#回傳結果:
7293
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7294
	#$result["error"],錯誤訊息
7295
	#$result["content"],檔案變數的內容
7296
	#$result["fileTypeName"],副檔名,ex:「.tar.xz」.
7297
	#$result["function"],當前執行的函數名稱 
7298
	#必填參數:
7299
	#$conf["filePosition"],要轉存成2元碼的檔案位置與名稱
7300
	$conf["filePosition"]="";
7301
	#$conf["mimeType"],2元碼的內容是什麼
7302
	$conf["mimeType"]="";
7303
	#可省略參數:
7304
	#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
7305
	#$conf["compressType"]="base64";
7306
	#$conf["delFile"],讀取完檔案後,要移除檔案嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
7307
	#$conf["delFile"]="false";
7308
	#參考資料:
7309
	#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
7310
	#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
7311
	#備註:
7312
	#無.
7313
	*/
7314
	public static function data(&$conf){
7315
 
7316
		#初始化要回傳的內容
7317
		$result=array();
7318
 
7319
		#取得當前執行的函數名稱
7320
		$result["function"]=__FUNCTION__;
7321
 
7322
		#如果 $conf 不為陣列
7323
		if(gettype($conf)!="array"){
7324
 
7325
			#設置執行失敗
7326
			$result["status"]="false";
7327
 
7328
			#設置執行錯誤訊息
7329
			$result["error"][]="\$conf變數須為陣列形態";
7330
 
7331
			#如果傳入的參數為 null
7332
			if($conf==null){
7333
 
7334
				#設置執行錯誤訊息
7335
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7336
 
7337
				}#if end
7338
 
7339
			#回傳結果
7340
			return $result;
7341
 
7342
			}#if end
7343
 
7344
		#檢查參數
7345
		#函式說明:
7346
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7347
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7348
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7349
		#$result["function"],當前執行的函式名稱.
7350
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7351
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7352
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7353
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7354
		#必填寫的參數:
7355
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7356
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7357
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7358
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePosition");
7359
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7360
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
7361
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7362
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7363
		#可以省略的參數:
7364
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7365
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7366
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7367
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
7368
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7369
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
7370
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7371
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
7372
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7373
		#$conf["arrayCountEqualCheck"][]=array();
7374
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7375
		unset($conf["variableCheck::checkArguments"]);
7376
 
7377
		#如果檢查參數失敗
7378
		if($checkResult["status"]=="false"){
7379
 
7380
			#設置執行失敗
7381
			$result["status"]="false";
7382
 
7383
			#設置錯誤訊息
7384
			$result["error"]=$checkResult;
7385
 
7386
			#回傳結果
7387
			return $result;
7388
 
7389
			}#if end
7390
 
7391
		#如果檢查參數不通過
7392
		if($checkResult["passed"]=="false"){
7393
 
7394
			#設置執行失敗
7395
			$result["status"]="false";
7396
 
7397
			#設置錯誤訊息
7398
			$result["error"]=$checkResult;
7399
 
7400
			#回傳結果
7401
			return $result;
7402
 
7403
			}#if end
7404
 
7405
		#依據檔案名稱取得副檔名 $result["fileTypeName"]
7406
		#函式說明:
7407
		#將固定格式的字串分開,並回傳分開的結果。
7408
		#回傳的參數:
7409
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7410
		#$result["error"],錯誤訊息陣列
7411
		#$result["function"],當前執行的函數名稱.
7412
		#$result["oriStr"],要分割的原始字串內容
7413
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7414
		#$result["dataCounts"],爲總共分成幾段
7415
		#必填參數:
7416
		$conf["stringProcess::spiltString"]["stringIn"]=basename($conf["filePosition"]);#要處理的字串。
7417
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
7418
		#備註:
7419
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
7420
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7421
		unset($conf["stringProcess::spiltString"]);
7422
 
7423
		#如果分割字串失敗
7424
		if($spiltString["status"]=="false"){
7425
 
7426
			#設置執行失敗
7427
			$result["status"]="false";
7428
 
7429
			#設置錯誤訊息
7430
			$result["error"]=$spiltString;
7431
 
7432
			#回傳結果
7433
			return $result;
7434
 
7435
			}#if end
7436
 
7437
		#初始化副檔名
7438
		$result["fileTypeName"]="";	
7439
 
7440
		#如果只有一段代表沒有副檔名
7441
		if($spiltString["dataCounts"]==1){
7442
 
7443
			#副檔名設置為 "unknow"
7444
			$result["fileTypeName"]="unknow";
7445
 
7446
			}#if end
7447
 
7448
		#不符合以上條件,但至少有兩段
7449
		else if($spiltString["dataCounts"]>=2){
7450
 
7451
			#執行 $spiltString["dataCounts"] 減一次的迴圈
7452
			for($i=1;$i<$spiltString["dataCounts"];$i++){
7453
 
7454
				#串接副檔名
7455
				$result["fileTypeName"]=$result["fileTypeName"].".".$spiltString["dataArray"][$i];
7456
 
7457
				}#for end
7458
 
7459
			}#if end
7460
 
7461
		#讀取檔案內容
7462
		$fileBin=file_get_contents($conf["filePosition"],"rb");
7463
 
7464
		#編碼檔案
7465
		$base64fileBin=base64_encode($fileBin);
7466
 
7467
		#如果 $conf["delFile"] 等於 "true"
7468
		if($conf["delFile"]=="true"){
7469
 
7470
			#移除檔案
7471
			#函式說明:
7472
			#移除檔案
7473
			#回傳結果:
7474
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7475
			#$result["error"],錯誤訊息陣列
7476
			#$result["warning"],警告訊息陣列
7477
			#$result["function"],當前執行的函數名稱
7478
			#必填參數:
7479
			$conf["fileAccess::delFile"]["fileAddress"]=$conf["filePosition"];#要移除檔案的位置
7480
			$del=fileAccess::delFile($conf["fileAccess::delFile"]);
7481
			unset($conf["fileAccess::delFile"]);
7482
 
7483
			#如果移除圖片失敗
7484
			if($del["status"]=="false"){
7485
 
7486
				#設置執行失敗
7487
				$result["status"]="false";
7488
 
7489
				#設置錯誤訊息
7490
				$result["error"]=$del;
7491
 
7492
				#回傳結果
7493
				return $result;
7494
 
7495
				}#if end
7496
 
7497
			}#if end
7498
 
7499
		#放置檔案的語法
7500
		$result["content"]="data:".$conf["mimeType"].";".$conf["compressType"].",".$base64fileBin;
7501
 
7502
		#執行到這邊代表執行正常
7503
		$result["status"]="true";
7504
 
7505
		#回傳結果
7506
		return $result;
7507
 
7508
		}#function data end
7509
 
7510
	/*
7511
	#函式說明:
7512
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7513
	#回傳結果:
7514
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7515
	#$result["error"],錯誤訊息陣列.
7516
	#$result["function"],函數名稱. 
7517
	#$result["argu"],使用的參數.
7518
	#$result["content"],網址,若是在命令列執行,則為"null".
7519
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7520
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
7521
	#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
7522
	#必填參數:
7523
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7524
	$conf["address"]="";
7525
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7526
	$conf["fileArgu"]=__FILE__;
7527
	#可省略參數:
7528
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
7529
	#$conf["userDir"]="true";
7530
	#參考資料:
7531
	#無.
7532
	#備註:
7533
	#無.
7534
	*/
7535
	public static function getInternetAddress(&$conf){
7536
 
7537
		#初始化要回傳的變數
7538
		$result=array();
7539
 
7540
		#記錄當前執行的函數名稱
7541
		$result["function"]=__FUNCTION__;
7542
 
7543
		#如果 $conf 不為陣列
7544
		if(gettype($conf)!="array"){
7545
 
7546
			#設置執行失敗
7547
			$result["status"]="false";
7548
 
7549
			#設置執行錯誤訊息
7550
			$result["error"][]="\$conf變數須為陣列形態";
7551
 
7552
			#如果傳入的參數為 null
7553
			if($conf==null){
7554
 
7555
				#設置執行錯誤訊息
7556
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7557
 
7558
				}#if end
7559
 
7560
			#回傳結果
7561
			return $result;
7562
 
7563
			}#if end
7564
 
7565
		#取得使用的參數
7566
		$result["argu"]=$conf;
7567
 
7568
		#檢查參數
7569
		#函式說明:
7570
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7571
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7572
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7573
		#$result["function"],當前執行的函式名稱.
7574
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7575
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7576
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7577
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7578
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7579
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7580
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
7581
		#必填寫的參數:
7582
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7583
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7584
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7585
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
7586
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7587
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7588
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7589
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7590
		#可以省略的參數:
7591
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7592
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7593
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7594
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("userDir");
7595
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7596
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
7597
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7598
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
7599
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7600
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
7601
		#參考資料來源:
7602
		#array_keys=>http://php.net/manual/en/function.array-keys.php
7603
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7604
		unset($conf["variableCheck::checkArguments"]);
7605
 
7606
		#如果檢查失敗
7607
		if($checkResult["status"]==="false"){
7608
 
7609
			#設置錯誤狀態
7610
			$result["status"]="false";
7611
 
7612
			#設置錯誤提示
7613
			$result["error"]=$checkResult;
7614
 
7615
			#回傳結果
7616
			return $result;
7617
 
7618
			}#if end
7619
 
7620
		#如果檢查不通過
7621
		if($checkResult["passed"]==="false"){
7622
 
7623
			#設置錯誤狀態
7624
			$result["status"]="false";
7625
 
7626
			#設置錯誤提示
7627
			$result["error"]=$checkResult;
7628
 
7629
			#回傳結果
7630
			return $result;
7631
 
7632
			}#if end
7633
 
7634
		#如果是本來就是網址了
7635
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
7636
 
7637
			#設置執行正常
7638
			$result["status"]="true";
7639
 
7640
			#取得網址
7641
			$result["content"]=$conf["address"];
7642
 
7643
			#回傳結果
7644
			return $result;			
7645
 
7646
			}#if end	
7647
 
7648
		#解析 $conf["fileArgu"]
7649
		#函式說明:
7650
		#將固定格式的字串分開,並回傳分開的結果。
7651
		#回傳的參數:
7652
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7653
		#$result["error"],錯誤訊息陣列
7654
		#$result["function"],當前執行的函數名稱.
7655
		#$result["oriStr"],要分割的原始字串內容
7656
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7657
		#$result["dataCounts"],爲總共分成幾段
7658
		#必填參數:
7659
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7660
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7661
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7662
		unset($conf["stringProcess::spiltString"]); 
7663
 
7664
		#如果分割字串失敗
7665
		if($spiltString["status"]==="false"){
7666
 
7667
			#設置錯誤狀態
7668
			$result["status"]="false";
7669
 
7670
			#設置錯誤提示
7671
			$result["error"]=$spiltString;
7672
 
7673
			#回傳結果
7674
			return $result;
7675
 
7676
			}#if end
7677
 
7678
		#函式說明:
7679
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
7680
		#回傳結果:
7681
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7682
		#$result["error"],錯誤訊息陣列.
7683
		#$result["function"],函數名稱. 
7684
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
7685
		#必填參數:
7686
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
7687
		$conf["fileAccess::getRelativePath"]["path"]=array($conf["address"]);
7688
		#$conf["fileArgu"],字串,當前路徑.
7689
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
7690
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
7691
		unset($conf["fileAccess::getRelativePath"]);
7692
 
7693
		#如果取得相對位置失敗
7694
		if($getRelativePath["status"]==="false"){
7695
 
7696
			#設置錯誤狀態
7697
			$result["status"]="false";
7698
 
7699
			#設置錯誤提示
7700
			$result["error"]=$getRelativePath;
7701
 
7702
			#回傳結果
7703
			return $result;
7704
 
7705
			}#if end			
7706
 
7707
		#取得轉換成相對路徑的位置
7708
		$result["fileSystemRelativePosition"]=$getRelativePath["content"][0];
7709
 
7710
		#解析 $conf["fileArgu"]
7711
		#函式說明:
7712
		#將固定格式的字串分開,並回傳分開的結果。
7713
		#回傳的參數:
7714
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7715
		#$result["error"],錯誤訊息陣列
7716
		#$result["function"],當前執行的函數名稱.
7717
		#$result["oriStr"],要分割的原始字串內容
7718
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7719
		#$result["dataCounts"],爲總共分成幾段
7720
		#必填參數:
7721
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7722
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7723
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7724
		unset($conf["stringProcess::spiltString"]); 
7725
 
7726
		#如果分割字串失敗
7727
		if($spiltString["status"]==="false"){
7728
 
7729
			#設置錯誤狀態
7730
			$result["status"]="false";
7731
 
7732
			#設置錯誤提示
7733
			$result["error"]=$spiltString;
7734
 
7735
			#回傳結果
7736
			return $result;
7737
 
7738
			}#if end
7739
 
7740
		#debug
7741
		#var_dump($spiltString);
7742
		#var_dump($_SERVER);
7743
 
7744
		#初始化檔案在伺服器上的檔案系統位置
7745
		$result["fileSystemAbsoulutePosition"]="/";
7746
 
7747
		#將最後一段捨棄
7748
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7749
 
7750
			$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$spiltString["dataArray"][$i]."/";
7751
 
7752
			}#for end				
7753
 
7754
		#取得非直觀的絕對位置
7755
		$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$result["fileSystemRelativePosition"];
7756
 
7757
		#將檔案的相對路徑進行整理,變成可以直接讀的路徑.
7758
		#函式說明:
7759
		#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
7760
		#回傳的結果:
7761
		#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
7762
		#$result["function"],當前執行的函數.
7763
		#$result["error"],錯誤訊息陣列.
7764
		#$result["changedPath"],處理完後回傳的目錄字串.
7765
		#$result["oriPath"],原始的路徑字串
7766
		#必填參數:
7767
		#$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"],字串,要處理的檔案目錄字串.
7768
		$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$result["fileSystemAbsoulutePosition"];
7769
		$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
7770
		unset($conf["stringProcess::changeDirByDotDotSolidus"]);
7771
 
7772
		#如果處理失敗
7773
		if($changeDirByDotDotSolidus["status"]==="false"){
7774
 
7775
			#設置錯誤狀態
7776
			$result["status"]="false";
7777
 
7778
			#設置錯誤提示
7779
			$result["error"]=$changeDirByDotDotSolidus;
7780
 
7781
			#回傳結果
7782
			return $result;
7783
 
7784
			}#if end
7785
 
7786
		#改變為易讀的絕對路徑
7787
		$result["fileSystemAbsoulutePosition"]=$changeDirByDotDotSolidus["changedPath"];	
7788
 
7789
		#如果 $conf["userDir"] 為 "true"
7790
		if($conf["userDir"]==="true"){
7791
 
7792
			#重設為 絕對路徑 [/~家目錄名稱」
7793
			$result["webPathFromRoot"]="/~".$spiltString["dataArray"][1];
7794
 
7795
			#從第四段到倒數第二段,將其內容合併
7796
			for($i=3;$i<$spiltString["dataCounts"]-1;$i++){
7797
 
7798
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7799
 
7800
				}#for end
7801
 
7802
			}#if end
7803
 
7804
		#反之 $conf["userDir"] 為 "false",
7805
		else{
7806
 
7807
			#重設為 ""
7808
			$result["webPathFromRoot"]="";
7809
 
7810
			#可能的根目錄層級 - start 
7811
 
7812
			#解析 $conf["fileArgu"]
7813
			#函式說明:
7814
			#將固定格式的字串分開,並回傳分開的結果。
7815
			#回傳的參數:
7816
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7817
			#$result["error"],錯誤訊息陣列
7818
			#$result["function"],當前執行的函數名稱.
7819
			#$result["oriStr"],要分割的原始字串內容
7820
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7821
			#$result["dataCounts"],爲總共分成幾段
7822
			#必填參數:
7823
			$conf["stringProcess::spiltString"]["stringIn"]=$_SERVER["PHP_SELF"];#要處理的字串。
7824
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7825
			$keyWord=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7826
			unset($conf["stringProcess::spiltString"]); 
7827
 
7828
			#如果處理失敗
7829
			if($keyWord["status"]==="false"){
7830
 
7831
				#設置錯誤狀態
7832
				$result["status"]="false";
7833
 
7834
				#設置錯誤提示
7835
				$result["error"]=$keyWord;
7836
 
7837
				#回傳結果
7838
				return $result;
7839
 
7840
				}#if end
7841
 
7842
			#取得關鍵字
7843
			$keyWord=$keyWord["dataArray"][0];
7844
 
7845
			#預設層級為4層
7846
			$layer=4;
7847
 
7848
			#檢查每個絕對路徑片段
7849
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7850
 
7851
				#如果路徑片段等於 $keyWord
7852
				if($spiltString["dataArray"][$i]===$keyWord){
7853
 
7854
					#取得層級
7855
					$layer=$i;
7856
 
7857
					#跳出迴圈
7858
					break;
7859
 
7860
					}#if end
7861
 
7862
				}#for end
7863
 
7864
			#可能的根目錄層級 - end
7865
 
7866
			#網頁於檔案系統中的存放路徑可能為「/var/www/html」,從第四段到倒數第二段,將其內容合併
7867
			for($i=$layer;$i<$spiltString["dataCounts"]-1;$i++){
7868
 
7869
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7870
 
7871
				}#for end
7872
 
7873
			}#else end
7874
 
7875
		#加上檔案的路徑
7876
		$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$conf["address"];			
7877
 
7878
		#取得檔案位於網頁伺服器的絕對位置
7879
		#函式說明:
7880
		#取得用戶端的資訊,並依據需要寫入到資料表裡面
7881
		#回傳結果:
7882
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
7883
		#$result["error"],錯誤訊息.
7884
		#$result["function"],檔前執行的函數名稱.
7885
		#$result["userBrowserType"],爲使用者的瀏覽器資訊
7886
		#$result["userIp"],爲使用者的IP
7887
		#$result["serverIp"],為伺服器的IP
7888
		#$result["scheme"],通訊協定
7889
		#$result["serverPort"],伺服器給對外下載網頁的port
7890
		#$result["requestUri"],爲使用者要求的網址
7891
		#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
7892
		#$result["clientRequestIP"],用戶端要求的ip與port
7893
		#必填參數:
7894
		$conf["csInformation::getConnectionInfo"]["getAccount"]="false";#是否要取得帳號
7895
		#可省略參數:
7896
		#$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]
7897
		#$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存
7898
		#$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。
7899
		#$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。
7900
		#$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7901
		#$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7902
		#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,
7903
			#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
7904
			#寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間
7905
			#$conf["saveToDb"]設為"true",則該參數為必填。
7906
		#$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7907
		$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
7908
		unset($conf["csInformation::getConnectionInfo"]);	
7909
 
7910
		#如果取得連線資訊失敗
7911
		if($getConnectionInfo["status"]==="false"){
7912
 
7913
			#設置錯誤狀態
7914
			$result["status"]="false";
7915
 
7916
			#設置錯誤提示
7917
			$result["error"]=$getConnectionInfo;
7918
 
7919
			#回傳結果
7920
			return $result;
7921
 
7922
			}#if end
7923
 
7924
		#如果運行環境為 "web"
7925
		if($getConnectionInfo["mode"]=="web"){
7926
 
7927
			#為絕對路徑加上通訊協定與ip與port
7928
			#$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["serverIp"].":".$getConnectionInfo["serverPort"].$result["webPathFromRoot"];	
7929
 
7930
			#為絕對路徑加上用戶端通訊協定與ip與port	
7931
			$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["clientRequestIP"].$result["webPathFromRoot"];
7932
 
7933
			}#if end
7934
 
7935
		#反之如果為 "cmd" 環境
7936
		else{
7937
 
7938
			$result["content"]="null";
7939
 
7940
			}#else end
7941
 
7942
		#設置執行正常
7943
		$result["status"]="true";
7944
 
7945
		#回傳結果
7946
		return $result;
7947
 
7948
		}#function getInternetAddress end
7949
 
7950
	/*
7951
	#函式說明:
7952
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7953
	#回傳結果:
7954
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7955
	#$result["error"],錯誤訊息陣列.
7956
	#$result["function"],函數名稱. 
7957
	#$result["argu"],使用的參數.
7958
	#$result["content"],網址,若是在命令列執行,則為"null".
7959
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7960
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
7961
	#必填參數:
7962
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7963
	$conf["address"]="";
7964
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7965
	$conf["fileArgu"]=__FILE__;
7966
	#可省略參數:
7967
	#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
7968
	#$conf["web"]="true";
7969
	#參考資料:
7970
	#無.
7971
	#備註:
7972
	#無.
7973
	*/
7974
	public static function getInternetAddressV2(&$conf){
7975
 
7976
		#初始化要回傳的變數
7977
		$result=array();
7978
 
7979
		#記錄當前執行的函數名稱
7980
		$result["function"]=__FUNCTION__;
7981
 
7982
		#取得參數
7983
		$result["argu"]=$conf;
7984
 
7985
		#檢查參數
7986
		#函式說明:
7987
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7988
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7989
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7990
		#$result["function"],當前執行的函式名稱.
7991
		#$result["argu"],設置給予的參數.
7992
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7993
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7994
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7995
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
7996
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
7997
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7998
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7999
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8000
		#必填寫的參數:
8001
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8002
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8003
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8004
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8005
		#可以省略的參數:
8006
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8007
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
8008
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
8009
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8010
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
8011
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8012
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
8013
		#$conf["canNotBeEmpty"]=array();
8014
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
8015
		#$conf["canBeEmpty"]=array();
8016
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
8017
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
8018
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8019
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
8020
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
8021
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
8022
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8023
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
8024
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
8025
		#$conf["disallowAllSkipableVarIsEmpty"]="";
8026
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
8027
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
8028
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8029
		#$conf["arrayCountEqualCheck"][]=array();
8030
		#參考資料來源:
8031
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8032
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8033
		unset($conf["variableCheck::checkArguments"]);
8034
 
8035
		#如果檢查失敗
8036
		if($checkArguments["status"]==="false"){
8037
 
8038
			#設置錯誤狀態
8039
			$result["status"]="false";
8040
 
8041
			#設置錯誤提示
8042
			$result["error"]=$checkArguments;
8043
 
8044
			#回傳結果
8045
			return $result;
8046
 
8047
			}#if end
8048
 
8049
		#如果檢查不通過
8050
		if($checkArguments["passed"]==="false"){
8051
 
8052
			#設置錯誤狀態
8053
			$result["status"]="false";
8054
 
8055
			#設置錯誤提示
8056
			$result["error"]=$checkArguments;
8057
 
8058
			#回傳結果
8059
			return $result;
8060
 
8061
			}#if end
8062
 
8063
		#如果是本來就是網址了
8064
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
8065
 
8066
			#取得網址
8067
			$result["content"]=$conf["address"];
8068
 
8069
			}#if end
8070
 
8071
		#反之是絕對或相對路徑
8072
		else{
8073
 
8074
			#確認 $conf["address"] 是否為 escaped 後的內容
8075
			#函式說明:
8076
			#判斷字串是否一定需要經過escapeshellarg才能為單一shell參數,並回傳可以成為單一shell參數的結果.
8077
			#回傳結果:
8078
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8079
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
8080
			#$result["function"],當前執行的函式名稱.
8081
			#$result["argu"],使用的參數.
8082
			#$result["content"],字串,單一shell參數.
8083
			#$result["escaped"],字串,"true"代表content為 escape後的結果;反之為"false".
8084
			#$result["urlEncodeStr"],字串,未被escape過的單一shell參數被url encode後的結果.
8085
			#必填參數:
8086
			#$conf["str"],字串,認為要為單一 shell參數的字串.
8087
			$conf["stringProcess::toSingleShellArg"]["str"]=$conf["address"];
8088
			#可省略參數:
8089
			#無.
8090
			#參考資料:
8091
			#無.
8092
			#備註:
8093
			#無.
8094
			$toSingleShellArg=stringProcess::toSingleShellArg($conf["stringProcess::toSingleShellArg"]);
8095
			unset($conf["stringProcess::toSingleShellArg"]);
8096
 
8097
			#如果執行失敗
8098
			if($toSingleShellArg["status"]==="false"){
8099
 
8100
				#設置錯誤狀態
8101
				$result["status"]="false";
8102
 
8103
				#設置錯誤提示
8104
				$result["error"]=$toSingleShellArg;
8105
 
8106
				#回傳結果
8107
				return $result;
8108
 
8109
				}#if end
8110
 
8111
			#取得不含escape字元的address參數
8112
			$conf["address"]=urldecode($toSingleShellArg["urlEncodeStr"]);
8113
 
8114
			#不是絕對位置
8115
			if(strpos($conf["address"],"/")!==0){
8116
 
8117
				#如果有這些參數
8118
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8119
 
8120
					#網址
8121
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8122
 
8123
					}#if end
8124
 
8125
				#反之
8126
				else{
8127
 
8128
					#網址設置為 null
8129
					$result["content"]=null;
8130
 
8131
					}#else
8132
 
8133
				}#if end
8134
 
8135
			#反之是絕對位置
8136
			else{
8137
 
8138
				#移除開頭的 "/"
8139
				$conf["address"]=substr($conf["address"],1);
8140
 
8141
				#如果有這些參數
8142
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8143
 
8144
					#網址
8145
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8146
 
8147
					}#if end
8148
 
8149
				#反之
8150
				else{
8151
 
8152
					#網址設置為 null
8153
					$result["content"]=null;
8154
 
8155
					}#else
8156
 
8157
				}#else end
8158
 
8159
			#取得 doc root;
8160
			$docRoot=$_SERVER['DOCUMENT_ROOT'];
8161
 
8162
			#如果不是網路環境
8163
			if($conf["web"]==="false"){
8164
 
8165
				#不採用 docRoot
8166
				$docRoot="";
8167
 
8168
				}#if end
8169
 
8170
			#如果不存在 DOCUMENT_ROOT 變數或 web 參數為 "false" 且為相對位置.
8171
			if( ($_SERVER['DOCUMENT_ROOT']==="" || $conf["web"]==="false") && (strpos($result["argu"]["address"],"/")!==0) ){
8172
 
8173
				#執行 "pwd" 取得當前位置
8174
				exec("pwd",$output,$status);
8175
 
8176
				#預設為`pwd`的結果加"/"
8177
				$docRoot=$output[0]."/";
8178
 
8179
				}#if end	
8180
 
8181
			#如果是絕對位置
8182
			else if(strpos($result["argu"]["address"],"/")===0){
8183
 
8184
				#補回 "/" 
8185
				$conf["address"]="/".$conf["address"];
8186
 
8187
				}#if end
8188
 
8189
			#針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
8190
			$result["fileSystemAbsoulutePosition"]=$docRoot.$conf["address"];
8191
 
8192
			}#else end
8193
 
8194
		#設置執行正常
8195
		$result["status"]="true";	
8196
 
8197
		#回傳結果
8198
		return $result;
8199
 
8200
		}#function getInternetAddressV2 end
8201
 
8202
	/*
8203
	#函式說明:
8204
	#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
8205
	#回傳結果:
8206
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8207
	#$result["error"],錯誤訊息陣列.
8208
	#$result["function"],函數名稱. 
8209
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
8210
	#必填參數:
8211
	#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
8212
	$conf["path"]="";
8213
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8214
	$conf["fileArgu"]=__FILE__;
8215
	#可省略參數:
8216
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
8217
	#$conf["noDotStart"]="true";
8218
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
8219
	#$conf["noWaveEnd"]="true";
8220
	#參考資料:
8221
	#無.
8222
	#備註:
8223
	#無.
8224
	*/
8225
	public static function resolvePostionStringWhichContainStarSymbol(&$conf){
8226
 
8227
		#初始化要回傳的結果
8228
		$result=array();
8229
 
8230
		#設置當其函數名稱
8231
		$result["function"]=__FUNCTION__;
8232
 
8233
		#如果 $conf 不為陣列
8234
		if(gettype($conf)!="array"){
8235
 
8236
			#設置執行失敗
8237
			$result["status"]="false";
8238
 
8239
			#設置執行錯誤訊息
8240
			$result["error"][]="\$conf變數須為陣列形態";
8241
 
8242
			#如果傳入的參數為 null
8243
			if($conf==null){
8244
 
8245
				#設置執行錯誤訊息
8246
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8247
 
8248
				}#if end
8249
 
8250
			#回傳結果
8251
			return $result;
8252
 
8253
			}#if end
8254
 
8255
		#檢查參數
8256
		#函式說明:
8257
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8258
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8259
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8260
		#$result["function"],當前執行的函式名稱.
8261
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8262
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8263
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8264
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
8265
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8266
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8267
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8268
		#必填寫的參數:
8269
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8270
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8271
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8272
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
8273
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
8274
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8275
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8276
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8277
		#可以省略的參數:
8278
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
8279
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8280
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8281
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
8282
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
8283
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
8284
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8285
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
8286
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8287
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
8288
		#參考資料來源:
8289
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8290
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8291
		unset($conf["variableCheck::checkArguments"]);
8292
 
8293
		#如果 $checkResult["status"] 等於 "fasle"
8294
		if($checkResult["status"]==="false"){
8295
 
8296
			#設置錯誤識別
8297
			$result["status"]="false";
8298
 
8299
			#設置錯誤訊息
8300
			$result["error"]=$checkResult;
8301
 
8302
			#回傳結果
8303
			return $result;
8304
 
8305
			}#if end
8306
 
8307
		#如果 $checkResult["passed"] 等於 "fasle"
8308
		if($checkResult["passed"]==="false"){
8309
 
8310
			#設置錯誤識別
8311
			$result["status"]="false";
8312
 
8313
			#設置錯誤訊息
8314
			$result["error"]=$checkResult;
8315
 
8316
			#回傳結果
8317
			return $result;
8318
 
8319
			}#if end
8320
 
8321
		#轉換檔案路徑為相對於伺服器檔案系統的絕對路徑
8322
		#函式說明:
8323
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
8324
		#回傳結果:
8325
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8326
		#$result["error"],錯誤訊息陣列.
8327
		#$result["function"],函數名稱. 
8328
		#$result["content"],網址.
8329
		#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
8330
		#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
8331
		#必填參數:
8332
		#$conf["address"],字串,檔案的相對位置.
8333
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["path"];
8334
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8335
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
8336
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
8337
		$conf["fileAccess::getInternetAddress"]["userDir"]="true";
8338
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
8339
		unset($conf["fileAccess::getInternetAddress"]);
8340
 
8341
		#如果轉換路徑失敗
8342
		if($getInternetAddress["status"]=="false"){
8343
 
8344
			#設置錯誤識別
8345
			$result["status"]="false";
8346
 
8347
			#設置錯誤訊息
8348
			$result["error"]=$checkResult;
8349
 
8350
			#回傳結果
8351
			return $result;
8352
 
8353
			}#if end
8354
 
8355
		#取得轉換好的路徑
8356
		$conf["path"]=$getInternetAddress["fileSystemAbsoulutePosition"];
8357
 
8358
		#檢查檔案路徑字串是否含有「*」
8359
		#函式說明:
8360
		#檢查字串裡面有無指定的關鍵字
8361
		#回傳結果:
8362
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8363
		#$result["error"],錯誤訊息
8364
		#$result["function"],當前執行的函數名稱.
8365
		#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8366
		#$result["keyWordCount"],找到的關鍵字數量.
8367
		#必填參數:
8368
		$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8369
		$conf["search::findKeyWord"]["string"]=$conf["path"];#要被搜尋的字串內容
8370
		#可省略參數:
8371
		#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8372
		$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8373
		unset($conf["search::findKeyWord"]);
8374
 
8375
		#如果尋找關鍵字出錯
8376
		if($findKeyWord["status"]=="false"){
8377
 
8378
			#設置錯誤識別
8379
			$result["status"]="false";
8380
 
8381
			#設置錯誤訊息
8382
			$result["error"]=$findKeyWord;
8383
 
8384
			#回傳結果
8385
			return $result;
8386
 
8387
			}#if end
8388
 
8389
		#如果含有「*」
8390
		if($findKeyWord["founded"]=="true"){
8391
 
8392
			#透過「/」分割路徑字串
8393
			#函式說明:
8394
			#將固定格式的字串分開,並回傳分開的結果。
8395
			#回傳的參數:
8396
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8397
			#$result["error"],錯誤訊息陣列
8398
			#$result["function"],當前執行的函數名稱.
8399
			#$result["oriStr"],要分割的原始字串內容
8400
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8401
			#$result["dataCounts"],爲總共分成幾段
8402
			#必填參數:
8403
			$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];#要處理的字串。
8404
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8405
			$spiltPathStr=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8406
			unset($conf["stringProcess::spiltString"]);
8407
 
8408
			#如果分割字串失敗
8409
			if($spiltPathStr["status"]=="false"){
8410
 
8411
				#設置錯誤識別
8412
				$result["status"]="false";
8413
 
8414
				#設置錯誤訊息
8415
				$result["error"]=$spiltPathStr;
8416
 
8417
				#回傳結果
8418
				return $result;
8419
 
8420
				}#if end
8421
 
8422
			#初始化暫存展開後的檔案路徑字串
8423
			$extendPath=array("");			
8424
 
8425
			#要解析的路徑分成幾段就執行幾次
8426
			foreach($spiltPathStr["dataArray"] as $pathPart){
8427
 
8428
				#檢查該段名稱是否有「*」
8429
				#函式說明:
8430
				#檢查字串裡面有無指定的關鍵字
8431
				#回傳結果:
8432
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8433
				#$result["error"],錯誤訊息
8434
				#$result["function"],當前執行的函數名稱.
8435
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8436
				#$result["keyWordCount"],找到的關鍵字數量.
8437
				#必填參數:
8438
				$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8439
				$conf["search::findKeyWord"]["string"]=$pathPart;#要被搜尋的字串內容
8440
				#可省略參數:
8441
				#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8442
				$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8443
				unset($conf["search::findKeyWord"]);
8444
 
8445
				#如果尋找關鍵字出錯
8446
				if($findKeyWord["status"]=="false"){
8447
 
8448
					#設置錯誤識別
8449
					$result["status"]="false";
8450
 
8451
					#設置錯誤訊息
8452
					$result["error"]=$findKeyWord;
8453
 
8454
					#回傳結果
8455
					return $result;
8456
 
8457
					}#if end									
8458
 
8459
				#如果不含「*」
8460
				if($findKeyWord["founded"]=="false"){
8461
 
8462
					#針對每個既有的路徑
8463
					for($i=0;$i<count($extendPath);$i++){
8464
 
8465
						#加上切割好的路徑
8466
						$extendPath[$i]=$extendPath[$i]."/".$pathPart;
8467
 
8468
						}#for end
8469
 
8470
					}#if end
8471
 
8472
				#反之該段含有「*」	
8473
				else{
8474
 
8475
					#用「*」分割該段
8476
					#函式說明:
8477
					#將固定格式的字串分開,並回傳分開的結果。
8478
					#回傳的參數:
8479
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8480
					#$result["error"],錯誤訊息陣列
8481
					#$result["function"],當前執行的函數名稱.
8482
					#$result["oriStr"],要分割的原始字串內容
8483
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8484
					#$result["dataCounts"],爲總共分成幾段
8485
					#必填參數:
8486
					$conf["stringProcess::spiltString"]["stringIn"]=$pathPart;#要處理的字串。
8487
					$conf["stringProcess::spiltString"]["spiltSymbol"]="*";#爲以哪個符號作爲分割
8488
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8489
					unset($conf["stringProcess::spiltString"]);
8490
 
8491
					#如果分字串失敗
8492
					if($spiltString["status"]=="false"){
8493
 
8494
						#設置錯誤識別
8495
						$result["status"]="false";
8496
 
8497
						#設置錯誤訊息
8498
						$result["error"]=$spiltStringByStar;
8499
 
8500
						#回傳結果
8501
						return $result;
8502
 
8503
						}#if end
8504
 
8505
					#如果用「*」分割後的段數為0
8506
					if($spiltString["dataCounts"]==0){
8507
 
8508
						#初始化儲存符合條件的路徑
8509
						$newExtendPath=array();
8510
 
8511
						#代表沒有塞選條件
8512
						#當前有幾個符合條件的路徑就執行幾次
8513
						for($i=0;$i<count($extendPath);$i++){
8514
 
8515
							#取得該目錄下所有的東西
8516
							#取得該目錄底下的檔案目錄清單
8517
							#函式說明:
8518
							#取得目錄底下所有目錄與檔案清單.
8519
							#回傳結果:
8520
							#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8521
							#$result["error"],錯誤訊息陣列.
8522
							#$result["function"],函數名稱.
8523
							#$result["content"],陣列,目錄底下的檔案與子目錄.
8524
							#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8525
							#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8526
							#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8527
							#$result["position"],目前的位置.
8528
							#必填參數:
8529
							#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8530
							$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8531
							#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8532
							$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
8533
							#可省略參數:
8534
							#無
8535
							#參考資料來源:
8536
							#opendir=>http://php.net/manual/en/function.opendir.php
8537
							#is_dir=>http://php.net/manual/en/function.is-dir.php
8538
							$getList=fileAccess::getList($conf["fileAccess::getList"]);
8539
							unset($conf["fileAccess::getList"]);										
8540
 
8541
							#如果取得目標目錄底下的檔案目錄清單失敗
8542
							if($getList["status"]=="false"){
8543
 
8544
								#設置錯誤識別
8545
								$result["status"]="false";
8546
 
8547
								#設置錯誤訊息
8548
								$result["error"]=$getList;																				
8549
 
8550
								#回傳結果
8551
								return $result;
8552
 
8553
								}#if end
8554
 
8555
							#如果底下有東西
8556
							if(count($getList["content"])>0){
8557
 
8558
								#初始化儲存要檢查的檔案或資料夾名稱陣列
8559
								$list=array();
8560
 
8561
								#針對每個檔案或資料夾
8562
								foreach($getList["content"] as $num=>$array){
8563
 
8564
									#儲存該名稱
8565
									$list[]=$array["name"];
8566
 
8567
									}#foreach end
8568
 
8569
								#初始化儲存符合新條件字串的陣列
8570
								$tempExtendPath=array();
8571
 
8572
								#針對每個現有的路徑字串
8573
								for($j=0;$j<count($extendPath);$j++){
8574
 
8575
									#附加每個符合條件的名稱到路徑字串裡面
8576
									for($k=0;$k<count($list);$k++){
8577
 
8578
										#如果 $conf["noDotStart"] 為 "true"
8579
										if($conf["noDotStart"]==="true"){
8580
 
8581
											#將 $list[$k] 用 "/" 分割
8582
											#函式說明:
8583
											#將固定格式的字串分開,並回傳分開的結果。
8584
											#回傳結果:
8585
											#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8586
											#$result["error"],錯誤訊息陣列
8587
											#$result["function"],當前執行的函數名稱.
8588
											#$result["oriStr"],要分割的原始字串內容
8589
											#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8590
											#$result["dataCounts"],爲總共分成幾段
8591
											#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
8592
											#必填參數:
8593
											$conf["stringProcess::spiltString"]["stringIn"]=$list[$k];#要處理的字串。
8594
											$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8595
											#可省略參數:
8596
											#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
8597
											$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
8598
											$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8599
											unset($conf["stringProcess::spiltString"]);
8600
 
8601
											#如果分割路徑失敗
8602
											if($spiltString["status"]==="false"){
8603
 
8604
												#設置執行錯誤識別
8605
												$result["status"]="false";
8606
 
8607
												#取得錯誤訊息
8608
												$result["error"]=$spiltString;
8609
 
8610
												#回傳結果
8611
												return $result;
8612
 
8613
												}#if end
8614
 
8615
											#如果有關鍵字「/」存在
8616
											if($spiltString["found"]==="true"){
8617
 
8618
												#針對每個段落
8619
												foreach($spiltString["dataArray"] as $pp){
8620
 
8621
													#看該符合的名稱開頭是否包含「.」
8622
													#函式說明:
8623
													#取得符合特定字首與字尾的字串
8624
													#回傳結果:
8625
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8626
													#$result["function"],當前執行的函數名稱.
8627
													#$result["error"],錯誤訊息陣列.
8628
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8629
													#$result["returnString"],爲符合字首條件的字串內容。
8630
													#必填參數:
8631
													#$conf["checkString"],字串,要檢查的字串.
8632
													$conf["search::getMeetConditionsString"]["checkString"]=$pp;
8633
													#可省略參數:
8634
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8635
													$conf["search::getMeetConditionsString"]["frontWord"]=".";
8636
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8637
													#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8638
													#參考資料:
8639
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8640
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8641
													unset($conf["search::getMeetConditionsString"]);
8642
 
8643
													#如果 取得符合特定字首的字串 出錯
8644
													if($getMeetConditionsString["status"]=="false"){
8645
 
8646
														#設置執行錯誤識別
8647
														$result["status"]="false";
8648
 
8649
														#設置錯誤訊息
8650
														$result["error"]=$getMeetConditionsString;
8651
 
8652
														#回傳結果
8653
														return $result;
8654
 
8655
														}#if end
8656
 
8657
													#如果有「.」在開頭
8658
													if($getMeetConditionsString["founded"]=="true"){
8659
 
8660
														#忽略這個名稱 
8661
														continue 2;
8662
 
8663
														}#if end
8664
 
8665
													}#foreach end
8666
 
8667
												}#if end
8668
 
8669
											#反之沒有關鍵字「/」存在
8670
											else{
8671
 
8672
												#看該符合的名稱開頭是否包含「.」
8673
												#函式說明:
8674
												#取得符合特定字首與字尾的字串
8675
												#回傳結果:
8676
												#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8677
												#$result["function"],當前執行的函數名稱.
8678
												#$result["error"],錯誤訊息陣列.
8679
												#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8680
												#$result["returnString"],爲符合字首條件的字串內容。
8681
												#必填參數:
8682
												#$conf["checkString"],字串,要檢查的字串.
8683
												$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8684
												#可省略參數:
8685
												#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8686
												$conf["search::getMeetConditionsString"]["frontWord"]=".";
8687
												#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8688
												#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8689
												#參考資料:
8690
												#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8691
												$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8692
												unset($conf["search::getMeetConditionsString"]);
8693
 
8694
												#如果 取得符合特定字首的字串 出錯
8695
												if($getMeetConditionsString["status"]=="false"){
8696
 
8697
													#設置執行錯誤識別
8698
													$result["status"]="false";
8699
 
8700
													#設置錯誤訊息
8701
													$result["error"]=$getMeetConditionsString;
8702
 
8703
													#回傳結果
8704
													return $result;
8705
 
8706
													}#if end
8707
 
8708
												#如果有「.」在開頭
8709
												if($getMeetConditionsString["founded"]=="true"){
8710
 
8711
													#忽略這個名稱 
8712
													continue;
8713
 
8714
													}#if end
8715
 
8716
												}#else end
8717
 
8718
											}#if end
8719
 
8720
										#如果 $conf["noWaveEnd"] 為 "true"
8721
										if($conf["noWaveEnd"]==="true"){
8722
 
8723
											#看該符合的名稱結尾是否包含「~」
8724
											#函式說明:
8725
											#取得符合特定字首與字尾的字串
8726
											#回傳結果:
8727
											#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8728
											#$result["function"],當前執行的函數名稱.
8729
											#$result["error"],錯誤訊息陣列.
8730
											#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8731
											#$result["returnString"],爲符合字首條件的字串內容。
8732
											#必填參數:
8733
											#$conf["checkString"],字串,要檢查的字串.
8734
											$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8735
											#可省略參數:
8736
											#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8737
											#$conf["search::getMeetConditionsString"]["frontWord"]=".";
8738
											#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8739
											$conf["search::getMeetConditionsString"]["tailWord"]="~";
8740
											#參考資料:
8741
											#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8742
											$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8743
											unset($conf["search::getMeetConditionsString"]);
8744
 
8745
											#如果 取得符合特定字首的字串 出錯
8746
											if($getMeetConditionsString["status"]=="false"){
8747
 
8748
												#設置執行錯誤識別
8749
												$result["status"]="false";
8750
 
8751
												#設置錯誤訊息
8752
												$result["error"]=$getMeetConditionsString;
8753
 
8754
												#回傳結果
8755
												return $result;
8756
 
8757
												}#if end
8758
 
8759
											#如果有「~」在結尾
8760
											if($getMeetConditionsString["founded"]=="true"){
8761
 
8762
												#忽略這個名稱
8763
												continue;
8764
 
8765
												}#if end
8766
 
8767
											}#if end
8768
 
8769
										#暫存該符合的路徑
8770
										$tempExtendPath[]=$extendPath[$j]."/".$list[$k];
8771
 
8772
										}#for end
8773
 
8774
									}#for end	
8775
 
8776
								#該次有幾個符合的路徑就執行幾次
8777
								foreach($tempExtendPath as $path){
8778
 
8779
									#暫存符合的路徑
8780
									$newExtendPath[]=$path;
8781
 
8782
									}#for end	
8783
 
8784
								}#if end
8785
 
8786
							#反之該目錄底下沒有東西
8787
							else{
8788
 
8789
								#移除該 $extendPath[$i]
8790
								unset($extendPath[$i]);
8791
 
8792
								}#else end					
8793
 
8794
							}#for end
8795
 
8796
						#置換原始符合條件字串的路徑字串陣列
8797
						$extendPath=$newExtendPath;
8798
 
8799
						}#if end
8800
 
8801
						#反之用「*」分割後有分段
8802
						else{
8803
 
8804
							#初始化暫存符合條件的新路徑陣列變數
8805
							$newExtendPath=array();
8806
 
8807
							#當前有幾個符合條件的路徑就執行幾次
8808
							for($i=0;$i<count($extendPath);$i++){
8809
 
8810
								#取得該目錄下所有的東西
8811
								#函式說明:
8812
								#取得目錄底下所有目錄與檔案清單.
8813
								#回傳結果:
8814
								#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8815
								#$result["error"],錯誤訊息陣列.
8816
								#$result["function"],函數名稱.
8817
								#$result["content"],陣列,目錄底下的檔案與子目錄.
8818
								#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8819
								#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8820
								#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8821
								#$result["position"],目前的位置.
8822
								#必填參數:
8823
								#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8824
								$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8825
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8826
								$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
8827
								#可省略參數:
8828
								#無
8829
								#參考資料來源:
8830
								#opendir=>http://php.net/manual/en/function.opendir.php
8831
								#is_dir=>http://php.net/manual/en/function.is-dir.php
8832
								$getList=fileAccess::getList($conf["fileAccess::getList"]);
8833
								unset($conf["fileAccess::getList"]);										
8834
 
8835
								#如果取得目標目錄底下的檔案目錄清單失敗
8836
								if($getList["status"]=="false"){
8837
 
8838
									#設置錯誤識別
8839
									$result["status"]="false";
8840
 
8841
									#設置錯誤訊息
8842
									$result["error"]=$getList;																				
8843
 
8844
									#回傳結果
8845
									return $result;
8846
 
8847
									}#if end
8848
 
8849
								#如果底下有東西
8850
								if(count($getList["content"])>0){
8851
 
8852
									#初始化儲存要檢查的檔案或資料夾名稱陣列
8853
									$list=array();
8854
 
8855
									#針對每個檔案或資料夾
8856
									foreach($getList["content"] as $num=>$array){
8857
 
8858
										#儲存該名稱
8859
										$list[]=$array["name"];
8860
 
8861
										}#foreach end
8862
 
8863
									#初始化儲存符合的名稱
8864
									$passedName=array();
8865
 
8866
									#依據每個檔案目錄名稱,檢查有無符合篩選條件
8867
									foreach($list as $filteredName){
8868
 
8869
										#初始化儲存被檢查的片段檔案資料夾名稱
8870
										$partName=$filteredName;
8871
 
8872
										#依據 $pathPart 分割成幾段(關鍵字數量)就執行幾次
8873
										for($i=0;$i<$spiltString["dataCounts"];$i++){
8874
 
8875
											#尋找關鍵字 $spiltString["dataArray"][$i]
8876
											#函式說明:
8877
											#檢查字串裡面有無指定的關鍵字
8878
											#回傳結果:
8879
											#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8880
											#$result["error"],錯誤訊息
8881
											#$result["function"],當前執行的函數名稱.
8882
											#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8883
											#$result["keyWordCount"],找到的關鍵字數量.
8884
											#必填參數:
8885
											$conf["search::findKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#想要搜尋的關鍵字
8886
											$conf["search::findKeyWord"]["string"]=$partName;#要被搜尋的字串內容
8887
											#可省略參數:
8888
											#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8889
											$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8890
											unset($conf["search::findKeyWord"]);
8891
 
8892
											#如果尋找關鍵字失敗
8893
											if($findKeyWord["status"]=="false"){
8894
 
8895
												#設置執行錯誤識別
8896
												$result["status"]="false";
8897
 
8898
												#設置錯誤訊息
8899
												$result["error"]=$findKeyWord;
8900
 
8901
												#回傳結果
8902
												return $result;
8903
 
8904
												}#if end
8905
 
8906
											#如果有找到關鍵字
8907
											if($findKeyWord["founded"]=="true"){
8908
 
8909
												#如果是最後一段要檢查的關鍵字
8910
												if($i==$spiltString["dataCounts"]-1){
8911
 
8912
													#判斷該關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的開頭
8913
													#函式說明:
8914
													#取得符合特定字首與字尾的字串
8915
													#回傳結果:
8916
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8917
													#$result["function"],當前執行的函數名稱.
8918
													#$result["error"],錯誤訊息陣列.
8919
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8920
													#$result["returnString"],爲符合字首條件的字串內容。
8921
													#必填參數:
8922
													#$conf["checkString"],字串,要檢查的字串.
8923
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
8924
													#可省略參數:
8925
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8926
													$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8927
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8928
													#$conf["tailWord"]="";
8929
													#參考資料:
8930
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8931
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8932
													unset($conf["search::getMeetConditionsString"]);
8933
 
8934
													#如果 取得符合特定字首的字串 出錯
8935
													if($getMeetConditionsString["status"]=="false"){
8936
 
8937
														#設置執行錯誤識別
8938
														$result["status"]="false";
8939
 
8940
														#設置錯誤訊息
8941
														$result["error"]=$getMeetConditionsString;
8942
 
8943
														#回傳結果
8944
														return $result;
8945
 
8946
														}#if end
8947
 
8948
													#如果關鍵字是在開頭
8949
													if($getMeetConditionsString["founded"]=="true"){
8950
 
8951
														#判斷關鍵字是否在該檔案目錄名稱的開頭
8952
														#函式說明:
8953
														#取得符合特定字首與字尾的字串
8954
														#回傳結果:
8955
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8956
														#$result["function"],當前執行的函數名稱.
8957
														#$result["error"],錯誤訊息陣列.
8958
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8959
														#$result["returnString"],爲符合字首條件的字串內容。
8960
														#必填參數:
8961
														#$conf["checkString"],字串,要檢查的字串.
8962
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
8963
														#可省略參數:
8964
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8965
														$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8966
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8967
														#$conf["tailWord"]="";
8968
														#參考資料:
8969
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8970
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8971
														unset($conf["search::getMeetConditionsString"]);
8972
 
8973
														#如果 取得符合特定字首的字串 出錯
8974
														if($getMeetConditionsString["status"]=="false"){
8975
 
8976
															#設置執行錯誤識別
8977
															$result["status"]="false";
8978
 
8979
															#設置錯誤訊息
8980
															$result["error"]=$getMeetConditionsString;
8981
 
8982
															#回傳結果
8983
															return $result;
8984
 
8985
															}#if end
8986
 
8987
														#如果關鍵字不在開頭
8988
														if($getMeetConditionsString["founded"]=="false"){
8989
 
8990
															#不符合條件,跳過該檔案目錄名稱
8991
															break;
8992
 
8993
															}#if end
8994
 
8995
														}#if end
8996
 
8997
													#判斷最後一個關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的結尾
8998
													#函式說明:
8999
													#取得符合特定字首與字尾的字串
9000
													#回傳結果:
9001
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9002
													#$result["function"],當前執行的函數名稱.
9003
													#$result["error"],錯誤訊息陣列.
9004
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9005
													#$result["returnString"],爲符合字首條件的字串內容。
9006
													#必填參數:
9007
													#$conf["checkString"],字串,要檢查的字串.
9008
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
9009
													#可省略參數:
9010
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9011
													#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
9012
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9013
													$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9014
													#參考資料:
9015
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9016
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9017
													unset($conf["search::getMeetConditionsString"]);
9018
 
9019
													#如果 取得符合特定字尾的字串 出錯
9020
													if($getMeetConditionsString["status"]=="false"){
9021
 
9022
														#設置執行錯誤識別
9023
														$result["status"]="false";
9024
 
9025
														#設置錯誤訊息
9026
														$result["error"]=$getMeetConditionsString;
9027
 
9028
														#回傳結果
9029
														return $result;
9030
 
9031
														}#if end
9032
 
9033
													#如果關鍵字是在字尾
9034
													if($getMeetConditionsString["founded"]=="true"){
9035
 
9036
														#判斷關鍵字是否在該片段的開頭
9037
														#函式說明:
9038
														#取得符合特定字首與字尾的字串
9039
														#回傳結果:
9040
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9041
														#$result["function"],當前執行的函數名稱.
9042
														#$result["error"],錯誤訊息陣列.
9043
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9044
														#$result["returnString"],爲符合字首條件的字串內容。
9045
														#必填參數:
9046
														#$conf["checkString"],字串,要檢查的字串.
9047
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9048
														#可省略參數:
9049
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9050
														#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
9051
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9052
														$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9053
														#參考資料:
9054
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9055
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9056
														unset($conf["search::getMeetConditionsString"]);
9057
 
9058
														#如果 取得符合特定字首的字串 出錯
9059
														if($getMeetConditionsString["status"]=="false"){
9060
 
9061
															#設置執行錯誤識別
9062
															$result["status"]="false";
9063
 
9064
															#設置錯誤訊息
9065
															$result["error"]=$getMeetConditionsString;
9066
 
9067
															#回傳結果
9068
															return $result;
9069
 
9070
															}#if end
9071
 
9072
														#如果關鍵字不在結尾
9073
														if($getMeetConditionsString["founded"]=="false"){
9074
 
9075
															#不符合條件,跳過該檔案目錄名稱
9076
															break;
9077
 
9078
															}#if end
9079
 
9080
														}#if end
9081
 
9082
													#如果 $conf["noDotStart"] 為 "true"
9083
													if($conf["noDotStart"]==="true"){
9084
 
9085
														#看該符合的名稱開頭是否包含「.」
9086
														#函式說明:
9087
														#取得符合特定字首與字尾的字串
9088
														#回傳結果:
9089
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9090
														#$result["function"],當前執行的函數名稱.
9091
														#$result["error"],錯誤訊息陣列.
9092
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9093
														#$result["returnString"],爲符合字首條件的字串內容。
9094
														#必填參數:
9095
														#$conf["checkString"],字串,要檢查的字串.
9096
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9097
														#可省略參數:
9098
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9099
														$conf["search::getMeetConditionsString"]["frontWord"]=".";
9100
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9101
														#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9102
														#參考資料:
9103
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9104
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9105
														unset($conf["search::getMeetConditionsString"]);
9106
 
9107
														#如果 取得符合特定字首的字串 出錯
9108
														if($getMeetConditionsString["status"]=="false"){
9109
 
9110
															#設置執行錯誤識別
9111
															$result["status"]="false";
9112
 
9113
															#設置錯誤訊息
9114
															$result["error"]=$getMeetConditionsString;
9115
 
9116
															#回傳結果
9117
															return $result;
9118
 
9119
															}#if end
9120
 
9121
														#如果有「.」在開頭
9122
														if($getMeetConditionsString["founded"]=="true"){
9123
 
9124
															#中斷迴圈
9125
															break;
9126
 
9127
															}#if end
9128
 
9129
														}#if end
9130
 
9131
													#如果 $conf["noWaveEnd"] 為 "true"
9132
													if($conf["noWaveEnd"]==="true"){
9133
 
9134
														#看該符合的名稱結尾是否包含「~」
9135
														#函式說明:
9136
														#取得符合特定字首與字尾的字串
9137
														#回傳結果:
9138
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9139
														#$result["function"],當前執行的函數名稱.
9140
														#$result["error"],錯誤訊息陣列.
9141
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9142
														#$result["returnString"],爲符合字首條件的字串內容。
9143
														#必填參數:
9144
														#$conf["checkString"],字串,要檢查的字串.
9145
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9146
														#可省略參數:
9147
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9148
														#$conf["search::getMeetConditionsString"]["frontWord"]=".";
9149
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9150
														$conf["search::getMeetConditionsString"]["tailWord"]="~";
9151
														#參考資料:
9152
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9153
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9154
														unset($conf["search::getMeetConditionsString"]);
9155
 
9156
														#如果 取得符合特定字首的字串 出錯
9157
														if($getMeetConditionsString["status"]=="false"){
9158
 
9159
															#設置執行錯誤識別
9160
															$result["status"]="false";
9161
 
9162
															#設置錯誤訊息
9163
															$result["error"]=$getMeetConditionsString;
9164
 
9165
															#回傳結果
9166
															return $result;
9167
 
9168
															}#if end
9169
 
9170
														#如果有「~」在結尾
9171
														if($getMeetConditionsString["founded"]=="true"){
9172
 
9173
															#中斷迴圈
9174
															break;
9175
 
9176
															}#if end
9177
 
9178
														}#if end
9179
 
9180
													#取得該符合的名稱
9181
													$passedName[]=$filteredName;
9182
 
9183
													#中斷迴圈
9184
													break;
9185
 
9186
													}#if end
9187
 
9188
												#將 $partName 從左到關鍵字結束的部份剔除
9189
												#函式說明:
9190
												#將特定字串前面的內容剔除
9191
												#回傳結果:
9192
												#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9193
												#$result["error"],錯誤訊息陣列.
9194
												#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
9195
												#$result["function"],當前執行的函數名稱.
9196
												#$result["oriStr"],要處理的原始字串內容.
9197
												#$result["content"],處理好的的字串內容.
9198
												#必填參數:
9199
												$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$partName;#要處理的字串.
9200
												$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#特定字串.
9201
												$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
9202
												unset($conf["stringProcess::delStrBeforeKeyWord"]);
9203
 
9204
												#如果將 $partName 從左到關鍵字結束的部份剔除失敗
9205
												if($delStrBeforeKeyWord["status"]=="false"){
9206
 
9207
													#設置執行錯誤識別
9208
													$result["status"]="false";
9209
 
9210
													#設置錯誤訊息
9211
													$result["error"]=$delStrBeforeKeyWord;
9212
 
9213
													#回傳結果
9214
													return $result;
9215
 
9216
													}#if end
9217
 
9218
												#如果沒有找到特定關鍵字字串
9219
												if($delStrBeforeKeyWord["founded"]=="false"){
9220
 
9221
													#設置執行錯誤識別
9222
													$result["status"]="false";
9223
 
9224
													#設置錯誤訊息
9225
													$result["error"]=$delStrBeforeKeyWord;
9226
 
9227
													#回傳結果
9228
													return $result;
9229
 
9230
													}#if end
9231
 
9232
												#取得剔除過關鍵字前字串的字串	
9233
												$partName=$delStrBeforeKeyWord["content"];
9234
 
9235
												}#if end
9236
 
9237
											#反之關鍵字不存在	
9238
											else{
9239
 
9240
												#儲存被拋棄的片段
9241
												#$result["dismissLog"][]="片段「".$partName."」沒有關鍵字「".$spiltString["dataArray"][$i]."」";
9242
 
9243
												#該名稱不符合條件
9244
												break;
9245
 
9246
												}#else end
9247
 
9248
											}#for end
9249
 
9250
										}#foreach end
9251
 
9252
									#初始化儲存符合的暫存路徑
9253
									$tempExtendPath=array();
9254
 
9255
									#針對每個現有的路徑字串
9256
									for($j=0;$j<count($extendPath);$j++){
9257
 
9258
										#附加每個符合條件的名稱到路徑字串裡面
9259
										for($k=0;$k<count($passedName);$k++){
9260
 
9261
											#暫存該符合的路徑
9262
											$tempExtendPath[]=$extendPath[$j]."/".$passedName[$k];
9263
 
9264
											}#for end
9265
 
9266
										}#for end	
9267
 
9268
									#該次有幾個符合的路徑就執行幾次
9269
									foreach($tempExtendPath as $path){
9270
 
9271
										#暫存符合的路徑
9272
										$newExtendPath[]=$path;
9273
 
9274
										}#foreach end	
9275
 
9276
									}#if end
9277
 
9278
								#反之該目錄底下沒有東西
9279
								else{
9280
 
9281
									#移除該 $extendPath[$i]
9282
									unset($extendPath[$i]);
9283
 
9284
									}#else end					
9285
 
9286
								}#for end
9287
 
9288
							#如果有新的路徑產生
9289
							if(count($newExtendPath)>0){
9290
 
9291
								#置換原始符合條件字串的路徑字串陣列
9292
								$extendPath=$newExtendPath;
9293
 
9294
								}#if end
9295
 
9296
							#反之找不到後續符合的路徑
9297
							else{
9298
 
9299
								$extendPath=array();
9300
 
9301
								}#else end
9302
 
9303
							}#else end
9304
 
9305
					}#else end
9306
 
9307
				}#foreach end
9308
 
9309
			}#if end
9310
 
9311
		#反之沒有含有「*」
9312
		else{
9313
 
9314
			#判斷 $conf["path"] 是否存在
9315
			#函式說明:
9316
			#檢查多個檔案與資料夾是否存在.
9317
			#回傳的結果:
9318
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
9319
			#$result["error"],錯誤訊息陣列.
9320
			#$resutl["function"],當前執行的涵式名稱.
9321
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
9322
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
9323
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
9324
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
9325
			#必填參數:
9326
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
9327
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["path"]);
9328
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
9329
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
9330
			#可省略參數
9331
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
9332
			#$conf["disableWebSearch"]="false";
9333
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
9334
			#$conf["userDir"]="true";
9335
			#參考資料來源:
9336
			#http://php.net/manual/en/function.file-exists.php
9337
			#http://php.net/manual/en/control-structures.foreach.php
9338
			#備註:
9339
			#函數file_exists檢查的路徑為檔案系統的路徑
9340
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
9341
			unset($conf["fileAccess::checkMultiFileExist"]);
9342
 
9343
			#如果檢查失敗
9344
			if($checkMultiFileExist["status"]=="false"){
9345
 
9346
				#設置錯誤識別
9347
				$result["status"]="false";
9348
 
9349
				#設置錯誤訊息
9350
				$result["error"]=$checkMultiFileExist;
9351
 
9352
				#回傳結果
9353
				return $result;
9354
 
9355
				}#if end
9356
 
9357
			#如果存在
9358
			if($checkMultiFileExist["varExist"][0]=="true"){
9359
 
9360
				#初始化暫存展開後的檔案路徑字串
9361
				$extendPath=array($conf["path"]);
9362
 
9363
				}#if end
9364
 
9365
			#反之不存在
9366
			else{
9367
 
9368
				#置換符合的路徑為空字串
9369
				$extendPath=array();
9370
 
9371
				}#else end
9372
 
9373
			#初始化暫存展開後的檔案路徑字串
9374
			$extendPath=array($conf["path"]);
9375
 
9376
			}#else end
9377
 
9378
		#取得解析完「*」的檔案路徑字串
9379
		$result["content"]=$extendPath;
9380
 
9381
		#取得有幾個檔案路徑
9382
		$result["pathCount"]=count($result["content"]);
9383
 
9384
		#設置執行正常
9385
		$result["status"]="true";
9386
 
9387
		#回傳結果
9388
		return $result;
9389
 
9390
		}#function resolvePostionStringWhichContainStarSymbol end
9391
 
9392
	/*
9393
	#函式說明:
9394
	#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
9395
	#回傳結果:
9396
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9397
	#$result["error"],錯誤訊息陣列.
9398
	#$result["function"],函數名稱. 
9399
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9400
	#$result["pathCount"],整數,有幾個路徑.
9401
	#必填參數:
9402
	#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
9403
	$conf["path"]=array();
9404
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9405
	$conf["fileArgu"]=__FILE__;
9406
	#可省略參數:
9407
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9408
	#$conf["noDotStart"]="true";
9409
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9410
	#$conf["noWaveEnd"]="true";
9411
	#參考資料:
9412
	#無.
9413
	#備註:
9414
	#無.
9415
	*/
9416
	public static function resolveMultiPostionStringWhichContainStarSymbol(&$conf){
9417
 
9418
		#初始化要回傳的結果
9419
		$result=array();
9420
 
9421
		#設置當其函數名稱
9422
		$result["function"]=__FUNCTION__;
9423
 
9424
		#如果 $conf 不為陣列
9425
		if(gettype($conf)!="array"){
9426
 
9427
			#設置執行失敗
9428
			$result["status"]="false";
9429
 
9430
			#設置執行錯誤訊息
9431
			$result["error"][]="\$conf變數須為陣列形態";
9432
 
9433
			#如果傳入的參數為 null
9434
			if($conf==null){
9435
 
9436
				#設置執行錯誤訊息
9437
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9438
 
9439
				}#if end
9440
 
9441
			#回傳結果
9442
			return $result;
9443
 
9444
			}#if end
9445
 
9446
		#檢查參數
9447
		#函式說明:
9448
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9449
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9450
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9451
		#$result["function"],當前執行的函式名稱.
9452
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9453
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9454
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9455
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9456
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9457
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9458
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9459
		#必填寫的參數:
9460
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9461
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9462
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9463
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9464
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9465
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9466
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9467
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9468
		#可以省略的參數:
9469
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9470
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9471
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9472
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
9473
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9474
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9475
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9476
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
9477
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9478
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9479
		#參考資料來源:
9480
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9481
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9482
		unset($conf["variableCheck::checkArguments"]);
9483
 
9484
		#如果 $checkResult["status"] 等於 "fasle"
9485
		if($checkResult["status"]=="false"){
9486
 
9487
			#設置錯誤識別
9488
			$result["status"]="false";
9489
 
9490
			#設置錯誤訊息
9491
			$result["error"]=$checkResult;
9492
 
9493
			#回傳結果
9494
			return $result;
9495
 
9496
			}#if end
9497
 
9498
		#如果 $checkResult["passed"] 等於 "fasle"
9499
		if($checkResult["passed"]=="false"){
9500
 
9501
			#設置錯誤識別
9502
			$result["status"]="false";
9503
 
9504
			#設置錯誤訊息
9505
			$result["error"]=$checkResult;
9506
 
9507
			#回傳結果
9508
			return $result;
9509
 
9510
			}#if end
9511
 
9512
		#針對每個要解析的路徑字串
9513
		foreach($conf["path"] as $path){
9514
 
9515
			#函式說明:
9516
			#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
9517
			#回傳結果:
9518
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9519
			#$result["error"],錯誤訊息陣列.
9520
			#$result["function"],函數名稱. 
9521
			#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9522
			#必填參數:
9523
			#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
9524
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["path"]=$path;
9525
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9526
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
9527
			#可省略參數:
9528
			#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9529
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["noDotStart"];
9530
			#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9531
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["noWaveEnd"];
9532
			$resolvePostionStringWhichContainStarSymbol=fileAccess::resolvePostionStringWhichContainStarSymbol($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9533
			unset($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9534
 
9535
			#如果解析失敗
9536
			if($resolvePostionStringWhichContainStarSymbol["status"]=="false"){
9537
 
9538
				#設置錯誤識別
9539
				$result["status"]="false";
9540
 
9541
				#設置錯誤訊息
9542
				$result["error"]=$resolvePostionStringWhichContainStarSymbol;
9543
 
9544
				#回傳結果
9545
				return $result;
9546
 
9547
				}#if end
9548
 
9549
			#針對每個解析出來的路徑
9550
			foreach($resolvePostionStringWhichContainStarSymbol["content"] as $filteredPath){
9551
 
9552
				#儲存符合條件的路徑
9553
				$result["content"][]=$filteredPath;
9554
 
9555
				}#foreach end
9556
 
9557
			}#foreach end
9558
 
9559
		#如果有路徑存在
9560
		if(isset($result["content"])){
9561
 
9562
			#取得有幾個路徑
9563
			$result["pathCount"]=count($result["content"]);
9564
 
9565
			}#if end
9566
 
9567
		#反之 
9568
		else{
9569
 
9570
			#設置空的路徑結果
9571
			$result["content"]=array();
9572
 
9573
			#取得有幾個路徑
9574
			$result["pathCount"]=count($result["content"]);
9575
 
9576
			}#else end
9577
 
9578
		#設置執行正常
9579
		$result["status"]="true";
9580
 
9581
		#回傳結果
9582
		return $result;
9583
 
9584
		}#function resolveMultiPostionStringWhichContainStarSymbol end
9585
 
9586
	/*
9587
	#函式說明:
9588
	#將多個路徑字串變成相對於當前路徑的相對路徑字串
9589
	#回傳結果:
9590
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9591
	#$result["error"],錯誤訊息陣列.
9592
	#$result["function"],函數名稱. 
9593
	#$result["argu"],使用的參數.
9594
	#$result["content"],字串陣列,多個轉換好的相對路徑字串.
9595
	#$result["cmd"],使用的指令.
9596
	#必填參數:
9597
	#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
9598
	$conf["path"]=array();
9599
	#$conf["fileArgu"],字串,當前路徑.
9600
	$conf["fileArgu"]=__FILE__;
9601
	#可省略參數:
9602
	#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
9603
	#$conf["baseFrom"]="";
9604
	#參考資料:
9605
	#無.
9606
	#備註:
9607
	#無.
9608
	*/
9609
	public static function getRelativePath(&$conf){
9610
 
9611
		#初始化要回傳的結果
9612
		$result=array();
9613
 
9614
		#設置當其函數名稱
9615
		$result["function"]=__FUNCTION__;
9616
 
9617
		#如果 $conf 不為陣列
9618
		if(gettype($conf)!="array"){
9619
 
9620
			#設置執行失敗
9621
			$result["status"]="false";
9622
 
9623
			#設置執行錯誤訊息
9624
			$result["error"][]="\$conf變數須為陣列形態";
9625
 
9626
			#如果傳入的參數為 null
9627
			if($conf==null){
9628
 
9629
				#設置執行錯誤訊息
9630
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9631
 
9632
				}#if end
9633
 
9634
			#回傳結果
9635
			return $result;
9636
 
9637
			}#if end
9638
 
9639
		#檢查參數
9640
		#函式說明:
9641
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9642
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9643
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9644
		#$result["function"],當前執行的函式名稱.
9645
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9646
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9647
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9648
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9649
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9650
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9651
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9652
		#必填寫的參數:
9653
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9654
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9655
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9656
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9657
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9658
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9659
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9660
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9661
		#可以省略的參數:
9662
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9663
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9664
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9665
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("baseFrom");
9666
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9667
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
9668
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9669
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
9670
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9671
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9672
		#參考資料來源:
9673
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9674
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9675
		unset($conf["variableCheck::checkArguments"]);
9676
 
9677
		#如果 $checkResult["status"] 等於 "false"
9678
		if($checkResult["status"]=="false"){
9679
 
9680
			#設置錯誤識別
9681
			$result["status"]="false";
9682
 
9683
			#設置錯誤訊息
9684
			$result["error"]=$checkResult;
9685
 
9686
			#回傳結果
9687
			return $result;
9688
 
9689
			}#if end
9690
 
9691
		#如果 $checkResult["passed"] 等於 "fasle"
9692
		if($checkResult["passed"]=="false"){
9693
 
9694
			#設置錯誤識別
9695
			$result["status"]="false";
9696
 
9697
			#設置錯誤訊息
9698
			$result["error"]=$checkResult;
9699
 
9700
			#回傳結果
9701
			return $result;
9702
 
9703
			}#if end
9704
 
9705
		#取得參數
9706
		$result["argu"]=$conf;
9707
 
9708
		#函式說明:
9709
		#將固定格式的字串分開,並回傳分開的結果.
9710
		#回傳結果:
9711
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9712
		#$result["error"],錯誤訊息陣列
9713
		#$result["function"],當前執行的函數名稱.
9714
		#$result["argu"],使用的參數.
9715
		#$result["oriStr"],要分割的原始字串內容
9716
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9717
		#$result["dataCounts"],爲總共分成幾段
9718
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9719
		#必填參數:
9720
		#$conf["stringIn"],字串,要處理的字串.
9721
		$conf["fileAccess::spiltString"]["stringIn"]=$conf["fileArgu"];
9722
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9723
		$conf["fileAccess::spiltString"]["spiltSymbol"]="/";
9724
		#可省略參數:
9725
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9726
		$conf["fileAccess::spiltString"]["allowEmptyStr"]="false";
9727
		#參考資料:
9728
		#無.
9729
		#備註:
9730
		#無.
9731
		$spiltString=stringProcess::spiltString($conf["fileAccess::spiltString"]);
9732
		unset($conf["fileAccess::spiltString"]);
9733
 
9734
		#如果執行失敗
9735
		if($spiltString["status"]==="false"){
9736
 
9737
			#設置錯誤識別
9738
			$result["status"]="false";
9739
 
9740
			#設置錯誤訊息
9741
			$result["error"]=$spiltString;
9742
 
9743
			#回傳結果
9744
			return $result;
9745
 
9746
			}#if end
9747
 
9748
		#如果沒有關鍵字
9749
		if($spiltString["found"]==="false"){
9750
 
9751
			#設置錯誤識別
9752
			$result["status"]="false";
9753
 
9754
			#設置錯誤訊息
9755
			$result["error"]=$spiltString;
9756
 
9757
			#回傳結果
9758
			return $result;
9759
 
9760
			}#if end
9761
 
9762
		#取得 $conf["fileArgu"] 的路徑
9763
		#函式說明:
9764
		#將固定格式的字串分開,並回傳分開的結果.
9765
		#回傳結果:
9766
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9767
		#$result["error"],錯誤訊息陣列
9768
		#$result["function"],當前執行的函數名稱.
9769
		#$result["argu"],使用的參數.
9770
		#$result["oriStr"],要分割的原始字串內容
9771
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9772
		#$result["dataCounts"],爲總共分成幾段
9773
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9774
		#必填參數:
9775
		#$conf["stringIn"],字串,要處理的字串.
9776
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];
9777
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9778
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
9779
		#可省略參數:
9780
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9781
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
9782
		#參考資料:
9783
		#無.
9784
		#備註:
9785
		#無.
9786
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
9787
		unset($conf["stringProcess::spiltString"]);
9788
 
9789
		#如果執行失敗
9790
		if($spiltString["status"]==="false"){
9791
 
9792
			#設置錯誤識別
9793
			$result["status"]="false";
9794
 
9795
			#設置錯誤訊息
9796
			$result["error"]=$spiltString;
9797
 
9798
			#回傳結果
9799
			return $result;
9800
 
9801
			}#if end
9802
 
9803
		/*
9804
		#break point
9805
		var_dump($spiltString);
9806
		exit;
9807
		*/
9808
 
9809
		#預設 fileArgu 的路徑為 ""
9810
		$fileArguPath="";
9811
 
9812
		#針對每個目錄
9813
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
9814
 
9815
			#串接路徑
9816
			$fileArguPath=$fileArguPath."/".$spiltString["dataArray"][$i];
9817
 
9818
			}#for end
9819
 
9820
		#取得相對於目標的當前位置
9821
		#函式說明:
9822
		#呼叫shell執行系統命令,並取得回傳的內容.
9823
		#回傳結果:
9824
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9825
		#$result["error"],錯誤訊息陣列.
9826
		#$result["function"],當前執行的函數名稱.
9827
		#$result["argu"],使用的參數.
9828
		#$result["cmd"],執行的指令內容.
9829
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9830
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9831
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9832
		#$result["running"],是否還在執行.
9833
		#$result["pid"],pid.
9834
		#$result["statusCode"],執行結束後的代碼.
9835
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
9836
		#必填參數:
9837
		#$conf["command"],字串,要執行的指令.
9838
		$conf["external::callShell"]["command"]="cd";
9839
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9840
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9841
		#可省略參數:
9842
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9843
		$conf["external::callShell"]["argu"]=array($fileArguPath,";","pwd");
9844
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9845
		#$conf["arguIsAddr"]=array();
9846
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9847
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9848
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9849
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9850
		#$conf["enablePrintDescription"]="true";
9851
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9852
		#$conf["printDescription"]="";
9853
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
9854
		$conf["external::callShell"]["escapeshellarg"]="true";
9855
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
9856
		#$conf["thereIsShellVar"]=array();
9857
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9858
		#$conf["username"]="";
9859
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9860
		#$conf["password"]="";
9861
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9862
		#$conf["useScript"]="";
9863
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9864
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9865
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9866
		#$conf["inBackGround"]="";
9867
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9868
		#$conf["getErr"]="false";
9869
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
9870
		#$conf["doNotRun"]="false";
9871
		#參考資料:
9872
		#exec=>http://php.net/manual/en/function.exec.php
9873
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9874
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9875
		#備註:
9876
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9877
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
9878
		$callShell=external::callShell($conf["external::callShell"]);
9879
		unset($conf["external::callShell"]);
9880
 
9881
		#如果執行失敗
9882
		if($callShell["status"]==="false"){
9883
 
9884
			#設置錯誤識別
9885
			$result["status"]="false";
9886
 
9887
			#設置錯誤訊息
9888
			$result["error"]=$callShell;
9889
 
9890
			#回傳結果
9891
			return $result;
9892
 
9893
			}#if end
9894
 
9895
		#如果執行失敗
9896
		if(!isset($callShell["output"][0])){
9897
 
9898
			#設置錯誤識別
9899
			$result["status"]="false";
9900
 
9901
			#設置錯誤訊息
9902
			$result["error"]=$callShell;
9903
 
9904
			#回傳結果
9905
			return $result;
9906
 
9907
			}#if end	
9908
 
9909
		/*
9910
		#break point
9911
		var_dump($callShell);
9912
		exit;
9913
		*/
9914
 
9915
		#記錄執行的指令
9916
		$result["cmd"][]=$callShell["cmd"];
9917
 
9918
		#保存相對於目標的當前位置
9919
		$pwd=$callShell["output"][0];
9920
 
9921
		#更新 fileArgu
9922
		$conf["fileArgu"]=$pwd."/".$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9923
 
9924
		#針對每個 $conf["path"]
9925
		foreach($conf["path"] as $path){
9926
 
9927
			#將 $path 變成易讀的格式
9928
			#函式說明:
9929
			#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
9930
			#回傳的結果:
9931
			#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
9932
			#$result["function"],當前執行的函數.
9933
			#$result["error"],錯誤訊息陣列.
9934
			#$result["changedPath"],處理完後回傳的目錄字串.
9935
			#$result["oriPath"],原始的路徑字串
9936
			#必填參數:
9937
			#$conf["dirStr"],字串,要處理的檔案目錄字串.
9938
			$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$path;
9939
			$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
9940
			unset($conf["stringProcess::changeDirByDotDotSolidus"]);
9941
 
9942
			#如果處理失敗
9943
			if($changeDirByDotDotSolidus["status"]==="false"){
9944
 
9945
				#設置錯誤識別
9946
				$result["status"]="false";
9947
 
9948
				#設置錯誤訊息
9949
				$result["error"]=$changeDirByDotDotSolidus;
9950
 
9951
				#回傳結果
9952
				return $result;
9953
 
9954
				}#if end
9955
 
9956
			#取得易讀的路徑
9957
			$path=$changeDirByDotDotSolidus["changedPath"];
9958
 
9959
			#判斷 $path 是否為絕對路徑
9960
			#函式說明:
9961
			#取得符合特定字首與字尾的字串
9962
			#回傳結果:
9963
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9964
			#$result["function"],當前執行的函數名稱.
9965
			#$result["error"],錯誤訊息陣列.
9966
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9967
			#$result["returnString"],爲符合字首條件的字串內容。
9968
			#必填參數:
9969
			#$conf["checkString"],字串,要檢查的字串.
9970
			$conf["search::getMeetConditionsString"]["checkString"]=$path;
9971
			#可省略參數:
9972
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9973
			$conf["search::getMeetConditionsString"]["frontWord"]="/";
9974
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9975
			#$conf["tailWord"]="";
9976
			#參考資料:
9977
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9978
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9979
			unset($conf["search::getMeetConditionsString"]);			
9980
 
9981
			#如果檢查失敗
9982
			if($getMeetConditionsString["status"]=="false"){
9983
 
9984
				#設置錯誤識別
9985
				$result["status"]="false";
9986
 
9987
				#設置錯誤訊息
9988
				$result["error"]=$getMeetConditionsString;
9989
 
9990
				#回傳結果
9991
				return $result;
9992
 
9993
				}#if end
9994
 
9995
			#如果沒有「/」開頭
9996
			if($getMeetConditionsString["founded"]==="false"){
9997
 
9998
				#將 $conf["fileArgu"] 最後面的檔案或目錄名稱剔除
9999
				#函式說明:
10000
				#將固定格式的字串分開,並回傳分開的結果。
10001
				#回傳結果:
10002
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10003
				#$result["error"],錯誤訊息陣列
10004
				#$result["function"],當前執行的函數名稱.
10005
				#$result["oriStr"],要分割的原始字串內容
10006
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
10007
				#$result["dataCounts"],爲總共分成幾段
10008
				#必填參數:
10009
				$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
10010
				$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
10011
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
10012
				unset($conf["stringProcess::spiltString"]);
10013
 
10014
				#如果分割字串失敗
10015
				if($spiltString["status"]=="false"){
10016
 
10017
					#設置錯誤識別
10018
					$result["status"]="false";
10019
 
10020
					#設置錯誤訊息
10021
					$result["error"]=$spiltString;
10022
 
10023
					#回傳結果
10024
					return $result;
10025
 
10026
					}#if end
10027
 
10028
				#初始化相對路徑為開頭片段""
10029
				$relativePathPart="/";
10030
 
10031
				#剔除最後一段
10032
				for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
10033
 
10034
					#串接起來
10035
					$relativePathPart=$relativePathPart.$spiltString["dataArray"][$i]."/";
10036
 
10037
					}#for end
10038
 
10039
				#如果有設定 baseFrom
10040
				if(isset($conf["baseFrom"])){
10041
 
10042
					#函式說明:
10043
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10044
					#回傳結果:
10045
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10046
					#$result["error"],錯誤訊息陣列.
10047
					#$result["function"],函數名稱. 
10048
					#$result["argu"],使用的參數.
10049
					#$result["content"],網址,若是在命令列執行,則為"null".
10050
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10051
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10052
					#必填參數:
10053
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10054
					$conf["fileAccess::getInternetAddressV2"]["address"]=$path;
10055
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10056
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10057
					#可省略參數:
10058
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10059
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10060
					#參考資料:
10061
					#無.
10062
					#備註:
10063
					#無.
10064
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10065
					unset($conf["fileAccess::getInternetAddressV2"]);
10066
 
10067
					##var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10068
 
10069
					#如果執行失敗
10070
					if($getInternetAddressV2["status"]==="false"){
10071
 
10072
						#設置錯誤識別
10073
						$result["status"]="false";
10074
 
10075
						#設置錯誤訊息
10076
						$result["error"]=$getInternetAddressV2;
10077
 
10078
						#回傳結果
10079
						return $result;
10080
 
10081
						}#if end
10082
 
10083
					#取得絕對位置
10084
					$path=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10085
 
10086
					#函式說明:
10087
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10088
					#回傳結果:
10089
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10090
					#$result["error"],錯誤訊息陣列.
10091
					#$result["function"],函數名稱. 
10092
					#$result["argu"],使用的參數.
10093
					#$result["content"],網址,若是在命令列執行,則為"null".
10094
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10095
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10096
					#必填參數:
10097
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10098
					$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["baseFrom"];
10099
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10100
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10101
					#可省略參數:
10102
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10103
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10104
					#參考資料:
10105
					#無.
10106
					#備註:
10107
					#無.
10108
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10109
					unset($conf["fileAccess::getInternetAddressV2"]);
10110
 
10111
					#var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10112
 
10113
					#如果執行失敗
10114
					if($getInternetAddressV2["status"]==="false"){
10115
 
10116
						#設置錯誤識別
10117
						$result["status"]="false";
10118
 
10119
						#設置錯誤訊息
10120
						$result["error"]=$getInternetAddressV2;
10121
 
10122
						#回傳結果
10123
						return $result;
10124
 
10125
						}#if end
10126
 
10127
					#取得絕對位置
10128
					$conf["baseFrom"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10129
 
10130
					#函式說明:
10131
					#將多個路徑字串變成相對於當前路徑的相對路徑字串
10132
					#回傳結果:
10133
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10134
					#$result["error"],錯誤訊息陣列.
10135
					#$result["function"],函數名稱. 
10136
					#$result["argu"],使用的參數.
10137
					#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10138
					#必填參數:
10139
					#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10140
					$conf["fileAccess::getRelativePath"]["path"]=array($path);
10141
					#$conf["fileArgu"],字串,當前路徑.
10142
					$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["baseFrom"]."/name";
10143
					#可省略參數:
10144
					#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
10145
					#$conf["baseFrom"]="";
10146
					#參考資料:
10147
					#無.
10148
					#備註:
10149
					#無.
10150
					$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10151
					unset($conf["fileAccess::getRelativePath"]);
10152
 
10153
					#var_dump(__LINE__." ".print_r($getRelativePath,true));
10154
 
10155
					#如果執行失敗
10156
					if($getRelativePath["status"]==="false"){
10157
 
10158
						#設置錯誤識別
10159
						$result["status"]="false";
10160
 
10161
						#設置錯誤訊息
10162
						$result["error"]=$getRelativePath;
10163
 
10164
						#回傳結果
10165
						return $result;
10166
 
10167
						}#if end
10168
 
10169
					#取得轉換好的絕對路徑
10170
					$relativePathPart=$getRelativePath["content"][0]."/";
10171
 
10172
					#清空path,避免出錯
10173
					$path="";
10174
 
10175
					}#if end
10176
 
10177
				#轉換成易讀的相對路徑
10178
				#函式說明:
10179
				#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
10180
				#回傳的結果:
10181
				#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
10182
				#$result["function"],當前執行的函數.
10183
				#$result["error"],錯誤訊息陣列.
10184
				#$result["changedPath"],處理完後回傳的目錄字串.
10185
				#$result["oriPath"],原始的路徑字串
10186
				#必填參數:
10187
				#$conf["dirStr"],字串,要處理的檔案目錄字串.
10188
				$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$relativePathPart.$path;
10189
				$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
10190
				unset($conf["stringProcess::changeDirByDotDotSolidus"]);
10191
 
10192
				#var_dump($changeDirByDotDotSolidus);	
10193
 
10194
				#如果轉換失敗
10195
				if($changeDirByDotDotSolidus["status"]=="false"){
10196
 
10197
					#設置錯誤識別
10198
					$result["status"]="false";
10199
 
10200
					#設置錯誤訊息
10201
					$result["error"]=$changeDirByDotDotSolidus;
10202
 
10203
					#回傳結果
10204
					return $result;
10205
 
10206
					}#if end
10207
 
10208
				#轉換為相對路徑
10209
				#函式說明:
10210
				#將多個路徑字串變成相對於當前路徑的相對路徑字串
10211
				#回傳結果:
10212
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10213
				#$result["error"],錯誤訊息陣列.
10214
				#$result["function"],函數名稱. 
10215
				#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10216
				#必填參數:
10217
				#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10218
				$conf["fileAccess::getRelativePath"]["path"]=array($changeDirByDotDotSolidus["changedPath"]);
10219
				#$conf["fileArgu"],字串,當前路徑.
10220
				$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
10221
				$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10222
				unset($conf["fileAccess::getRelativePath"]);
10223
 
10224
				#var_dump($getRelativePath);	
10225
 
10226
				#如果轉換路徑失敗
10227
				if($getRelativePath["status"]==="false"){
10228
 
10229
					#設置錯誤識別
10230
					$result["status"]="false";
10231
 
10232
					#設置錯誤訊息
10233
					$result["error"]=$changeDirByDotDotSolidus;
10234
 
10235
					#回傳結果
10236
					return $result;
10237
 
10238
					}#if end
10239
 
10240
				#取得相對路徑
10241
				$result["content"][]=$getRelativePath["content"][0];
10242
 
10243
				}#if end
10244
 
10245
			#反之有「/」開頭
10246
			else{
10247
				#函式說明:
10248
				#移除多個絕對路徑字串開頭相同的部分
10249
				#回傳結果:
10250
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10251
				#$result["error"],錯誤訊息陣列.
10252
				#$result["function"],當前執行的函數名稱.
10253
				#$result["content"],處理好的的字串內容.
10254
				#必填參數:
10255
				#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10256
				$conf["fileAccess::delSamePathHead"]["pathIn"]=array($path,$conf["fileArgu"]);		
10257
				$delSamePathHead=fileAccess::delSamePathHead($conf["fileAccess::delSamePathHead"]);
10258
				unset($conf["fileAccess::delSamePathHead"]);
10259
 
10260
				#var_dump($delSamePathHead);
10261
 
10262
				#如果移除多個絕對路徑字串開頭相同的部分失敗
10263
				if($delSamePathHead["status"]==="false"){
10264
 
10265
					#設置錯誤識別
10266
					$result["status"]="false";
10267
 
10268
					#設置錯誤訊息
10269
					$result["error"]=$delSameHead;
10270
 
10271
					#回傳結果
10272
					return $result;
10273
 
10274
					}#if end
10275
 
10276
				#如果 $conf["fileArgu"] 剩下空
10277
				if($delSamePathHead["content"][1]===""){
10278
 
10279
					#檢查 $delSamePathHead[0] 開頭是否為「/」
10280
					#函式說明:
10281
					#取得符合特定字首與字尾的字串
10282
					#回傳結果:
10283
					#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10284
					#$result["function"],當前執行的函數名稱.
10285
					#$result["error"],錯誤訊息陣列.
10286
					#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10287
					#$result["returnString"],爲符合字首條件的字串內容。
10288
					#必填參數:
10289
					#$conf["checkString"],字串,要檢查的字串.
10290
					$conf["search::getMeetConditionsString"]["checkString"]=$delSamePathHead["content"][0];
10291
					#可省略參數:
10292
					#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10293
					$conf["search::getMeetConditionsString"]["frontWord"]="/";
10294
					#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10295
					#$conf["tailWord"]="";
10296
					#參考資料:
10297
					#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10298
					$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
10299
					unset($conf["search::getMeetConditionsString"]);
10300
 
10301
					#如果檢查失敗
10302
					if($getMeetConditionsString["status"]=="false"){
10303
 
10304
						#設置錯誤識別
10305
						$result["status"]="false";
10306
 
10307
						#設置錯誤訊息
10308
						$result["error"]=$getMeetConditionsString;
10309
 
10310
						#回傳結果
10311
						return $result;
10312
 
10313
						}#if end
10314
 
10315
					#如果有開頭有「/」
10316
					if($getMeetConditionsString["founded"]==="true"){
10317
 
10318
						#函式說明:
10319
						#將字串特定關鍵字與其前面的內容剔除
10320
						#回傳結果:
10321
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10322
						#$result["error"],錯誤訊息陣列.
10323
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10324
						#$result["function"],當前執行的函數名稱.
10325
						#$result["oriStr"],要處理的原始字串內容.
10326
						#$result["content"],處理好的的字串內容.
10327
						#必填參數:
10328
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delSamePathHead["content"][0];#要處理的字串.
10329
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";#特定字串.
10330
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
10331
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
10332
 
10333
						#如果 將字串特定關鍵字與其前面的內容剔除 失敗
10334
						if($delStrBeforeKeyWord["status"]=="false"){
10335
 
10336
							#設置錯誤識別
10337
							$result["status"]="false";
10338
 
10339
							#設置錯誤訊息
10340
							$result["error"]=$delStrBeforeKeyWord;
10341
 
10342
							#回傳結果
10343
							return $result;
10344
 
10345
							}#if end
10346
 
10347
						#取得相對位置
10348
						$result["content"][]=$delStrBeforeKeyWord["content"];
10349
 
10350
						}#if end
10351
 
10352
					#反之
10353
					else{
10354
 
10355
						#取得相對位置
10356
						$result["content"][]=$delSamePathHead["content"][0];
10357
 
10358
						}#else end	
10359
 
10360
					}#if end
10361
 
10362
				#反之剩下的 $conf["fileArgu"] 不為空
10363
				else{
10364
 
10365
					#檢查 $delSamePathHead["content"][1] 有幾個「/」
10366
					#函式說明:
10367
					#檢查字串裡面有無指定的關鍵字
10368
					#回傳結果:
10369
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
10370
					#$result["error"],錯誤訊息
10371
					#$result["function"],當前執行的函數名稱.
10372
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
10373
					#$result["keyWordCount"],找到的關鍵字數量.
10374
					#必填參數:
10375
					$conf["search::findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字
10376
					$conf["search::findKeyWord"]["string"]=$delSamePathHead["content"][1];#要被搜尋的字串內容
10377
					#可省略參數:
10378
					#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
10379
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
10380
					unset($conf["search::findKeyWord"]);
10381
 
10382
					#如果 檢查字串裡面有無指定的關鍵字 失敗
10383
					if($findKeyWord["status"]==="false"){
10384
 
10385
						#設置錯誤識別
10386
						$result["status"]="false";
10387
 
10388
						#設置錯誤訊息
10389
						$result["error"]=$findKeyWord;
10390
 
10391
						#回傳結果
10392
						return $result;
10393
 
10394
						}#if end
10395
 
10396
					#有幾個「/」就執行幾次
10397
					for($i=0;$i<$findKeyWord["keyWordCount"];$i++){
10398
 
10399
						#在前面加上 "../"
10400
						$delSamePathHead["content"][0]="../".$delSamePathHead["content"][0];
10401
 
10402
						}#for end
10403
 
10404
					#取得相對位置
10405
					$result["content"][]=$delSamePathHead["content"][0];
10406
 
10407
					}#else end
10408
 
10409
				}#else end
10410
 
10411
			}#foreach end
10412
 
10413
		#設置執行正常
10414
		$result["status"]="true";
10415
 
10416
		#回傳結果
10417
		return $result;
10418
 
10419
		}#function getRelativeParh end
10420
 
10421
	/*
10422
	#函式說明:
10423
	#移除多個絕對路徑字串開頭相同的部分
10424
	#回傳結果:
10425
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10426
	#$result["error"],錯誤訊息陣列.
10427
	#$result["function"],當前執行的函數名稱.
10428
	#$result["argu"],參數.
10429
	#$result["content"],處理好的的字串內容.
10430
	#必填參數:
10431
	#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10432
	$conf["pathIn"]=array();		
10433
	#可省略參數:
10434
	#無
10435
	#參考資料:
10436
	#無.
10437
	#備註:
10438
	#無.
10439
	*/
10440
	public static function delSamePathHead(&$conf){
10441
 
10442
		#初始化要回傳的結果
10443
		$result=array();
10444
 
10445
		#取得當前執行的函數名稱
10446
		$result["function"]=__FUNCTION__;
10447
 
10448
		#如果沒有參數
10449
		if(func_num_args()==0){
10450
 
10451
			#設置執行失敗
10452
			$result["status"]="false";
10453
 
10454
			#設置執行錯誤訊息
10455
			$result["error"]="函數".$result["function"]."需要參數";
10456
 
10457
			#回傳結果
10458
			return $result;
10459
 
10460
			}#if end
10461
 
10462
		#如果 $conf 不為陣列
10463
		if(gettype($conf)!="array"){
10464
 
10465
			#設置執行失敗
10466
			$result["status"]="false";
10467
 
10468
			#設置執行錯誤訊息
10469
			$result["error"][]="\$conf變數須為陣列形態";
10470
 
10471
			#如果傳入的參數為 null
10472
			if($conf==null){
10473
 
10474
				#設置執行錯誤訊息
10475
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10476
 
10477
				}#if end
10478
 
10479
			#回傳結果
10480
			return $result;
10481
 
10482
			}#if end
10483
 
10484
		#取得參數
10485
		$result["argv"]=$conf;	
10486
 
10487
		#檢查參數
10488
		#函式說明:
10489
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10490
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10491
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10492
		#$result["function"],當前執行的函式名稱.
10493
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10494
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10495
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10496
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10497
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10498
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10499
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10500
		#必填寫的參數:
10501
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10502
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10503
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10504
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("pathIn");
10505
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
10506
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
10507
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10508
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10509
		#可以省略的參數:
10510
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
10511
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
10512
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10513
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
10514
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10515
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10516
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10517
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
10518
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10519
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
10520
		#參考資料來源:
10521
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10522
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10523
		unset($conf["variableCheck::checkArguments"]);
10524
 
10525
		#如果 $checkResult["status"] 等於 "fasle"
10526
		if($checkResult["status"]=="false"){
10527
 
10528
			#設置錯誤識別
10529
			$result["status"]="false";
10530
 
10531
			#設置錯誤訊息
10532
			$result["error"]=$checkResult;
10533
 
10534
			#回傳結果
10535
			return $result;
10536
 
10537
			}#if end
10538
 
10539
		#如果 $checkResult["passed"] 等於 "fasle"
10540
		if($checkResult["passed"]=="false"){
10541
 
10542
			#設置錯誤識別
10543
			$result["status"]="false";
10544
 
10545
			#設置錯誤訊息
10546
			$result["error"]=$checkResult;
10547
 
10548
			#回傳結果
10549
			return $result;
10550
 
10551
			}#if end
10552
 
10553
		#檢查是否都為絕對路徑
10554
		#函式說明:
10555
		#取得多個符合特定字首與字尾的字串.
10556
		#回傳結果:
10557
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10558
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10559
		#$result["function"],當前執行的函數名稱.
10560
		#$result["returnString"],爲符合字首條件的字串陣列內容。
10561
		#必填參數:
10562
		#$conf["checkString"],陣列字串,要檢查的字串們.
10563
		$conf["search::getMeetConditionsStringMulti"]["checkString"]=$conf["pathIn"];#要檢查的字串陣列
10564
		#可省略參數:
10565
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10566
		$conf["search::getMeetConditionsStringMulti"]["frontWord"]="/";
10567
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10568
		#$conf["tailWord"]="";
10569
		#參考資料:
10570
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10571
		$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
10572
		unset($conf["search::getMeetConditionsStringMulti"]);
10573
 
10574
		#如果檢測是否為絕對路徑失敗
10575
		if($getMeetConditionsStringMulti["status"]=="false"){
10576
 
10577
			#設置錯誤識別
10578
			$result["status"]="false";
10579
 
10580
			#設置錯誤訊息
10581
			$result["error"]=$getMeetConditionsStringMulti;
10582
 
10583
			#增加額外的錯誤訊息
10584
			$result["error"][]="僅接受絕對路徑字串";
10585
 
10586
			#回傳結果
10587
			return $result;
10588
 
10589
			}#if end
10590
 
10591
		#函式說明:
10592
		#將多個固定格式的字串分開,並回傳分開的結果
10593
		#回傳的參數:
10594
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
10595
		#$result["error"],錯誤訊息陣列.
10596
		#$result["function"],當前執行的函數名稱.
10597
		#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
10598
		#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
10599
		#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
10600
		#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
10601
		#必填參數:
10602
		#$conf["stringIn"],字串陣列,要處理的字串陣列.
10603
		$conf["stringProcess::spiltMutiString"]["stringIn"]=$conf["pathIn"];
10604
		#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
10605
		$conf["stringProcess::spiltMutiString"]["spiltSymbol"]="/";
10606
		$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
10607
 
10608
		#如果分割所有路徑字串失敗
10609
		if($spiltMutiString["status"]=="false"){
10610
 
10611
			#設置錯誤識別
10612
			$result["status"]="false";
10613
 
10614
			#設置錯誤訊息
10615
			$result["error"]=$spiltMutiString;				
10616
 
10617
			#回傳結果
10618
			return $result;
10619
 
10620
			}#if end
10621
 
10622
		#初始化暫存每個路徑分割成的段數
10623
		$spiltedPathCount=array();					
10624
 
10625
		#取得每個路徑分割成的段數
10626
		#針對每個 $spiltMutiString["spiltString"]
10627
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10628
 
10629
			$spiltedPathCount[]=$spiltMutiString["spiltString"][$i]["dataCounts"];
10630
 
10631
			}#for end
10632
 
10633
		#取得所有路徑字串分割後的最小數量
10634
		#涵式說明
10635
		#找最小值,結果會回傳最小值
10636
		#回傳的內容
10637
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
10638
		#$result["error"],錯誤訊息陣列.
10639
		#$result["function"],當前執行的函數名稱.
10640
		#$result["key"],最大值原先的key.
10641
		#$result["value"],陣列裏面最小的數值.
10642
		#必填參數:
10643
		$conf["math::getMinValue"]["rawDataArray"]=$spiltedPathCount;#爲原始數據
10644
		$getMinValue=math::getMinValue($conf["math::getMinValue"]);
10645
		unset($conf["math::getMinValue"]);
10646
 
10647
		#如果取得最小數值失敗
10648
		if($getMinValue["status"]=="false"){
10649
 
10650
			#設置錯誤識別
10651
			$result["status"]="false";
10652
 
10653
			#設置錯誤訊息
10654
			$result["error"]=$getMinValue;				
10655
 
10656
			#回傳結果
10657
			return $result;
10658
 
10659
			}#if end	
10660
 
10661
		#初始化暫存每個路徑字串的前面幾個片段是相同的
10662
		$samePartCount=0;
10663
 
10664
		#var_dump($getMinValue["value"]);	
10665
 
10666
		#依據所有路徑字串分割後的最小數量
10667
		for($j=0;$j<$getMinValue["value"];$j++){
10668
 
10669
			#初始化暫存第一個路徑的片段字串
10670
			$firstPathPart="";
10671
 
10672
			#針對每個 $spiltMutiString["spiltString"]
10673
			for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10674
 
10675
				#暫存分割的字串
10676
				$spiltedPath=$spiltMutiString["spiltString"][$i];
10677
 
10678
				#如果是第一個路徑
10679
				if($i==0){
10680
 
10681
					#取得第一個路徑的片段字串
10682
					$firstPathPart=$spiltedPath["dataArray"][$j];
10683
 
10684
					}#if end									
10685
 
10686
				#如果第$i+1個路徑片段不跟第1個路徑的片段字串一樣
10687
				if($spiltedPath["dataArray"][$j]!=$firstPathPart){
10688
 
10689
					#讓最外層迴圈中止
10690
					$getMinValue["value"]=-1;
10691
 
10692
					#跳出迴圈
10693
					break;
10694
 
10695
					}#if end			
10696
 
10697
				}#for end
10698
 
10699
			#代表每個路徑字串的第$j段是一樣的.
10700
			$samePartCount=$j;
10701
 
10702
			}#for end
10703
 
10704
		#var_dump($samePartCount);
10705
 
10706
		#依據每個路徑
10707
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){			
10708
 
10709
			#初始化儲存第$i+1個處理好的路徑字串
10710
			$result["content"][$i]="";			
10711
 
10712
			#依據 $samePartCount 與 路徑的段數
10713
			for($j=$samePartCount;$j<$spiltMutiString["spiltString"][$i]["dataCounts"];$j++){
10714
 
10715
				#如果不是第一段
10716
				if($j!=$samePartCount){
10717
 
10718
					#組裝每個路徑片段
10719
					$result["content"][$i]=$result["content"][$i]."/".$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10720
 
10721
					}#if end
10722
 
10723
				#反之為第一段
10724
				else{
10725
 
10726
					#組裝每個路徑片段
10727
					$result["content"][$i]=$result["content"][$i].$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10728
 
10729
					}#else end
10730
 
10731
				}#for end
10732
 
10733
			}#for end
10734
 
10735
		#設置執行正常
10736
		$result["status"]="true";
10737
 
10738
		#回傳結果
10739
		return $result;
10740
 
10741
		}#function delSamePathHead end
10742
 
10743
	/*
10744
	#函式說明:
10745
	#於本套件位置底下的tmp資料夾下建立與回傳暫存檔案名稱路徑 
10746
	#回傳結果:
10747
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10748
	#$result["error"],錯誤訊息.
10749
	#$result["function"],當前執行的函數名稱.
10750
	#$result["content"],暫存檔案的路徑與名稱.
10751
	#$result["fileName"],暫存檔案的名稱.
10752
	#$result["path"],暫存檔案的路徑.
10753
	#必填參數:
10754
	#無.
10755
	#可省略參數:
36 liveuser 10756
	#$conf["content"],陣列,每行檔案的內容,預設為空陣列,不寫入任何資料.
10757
	#$conf["contant"]=array();
3 liveuser 10758
	#參考資料:
10759
	#無.
10760
	#備註:
10761
	#無.
10762
	*/
36 liveuser 10763
	public static function createTempFile(&$conf){
3 liveuser 10764
 
10765
		#初始化要回傳的結果
10766
		$result=array();
10767
 
10768
		#取得當前執行的函數名稱
10769
		$result["function"]=__FUNCTION__;
36 liveuser 10770
 
10771
		#取得參數
10772
		$result["argu"]=$conf;
10773
 
10774
		#如果 $conf 不為陣列
10775
		if(gettype($conf)!="array"){
10776
 
10777
			#設置執行失敗
10778
			$result["status"]="false";
10779
 
10780
			#設置執行錯誤訊息
10781
			$result["error"][]="\$conf變數須為陣列形態";
10782
 
10783
			#如果傳入的參數為 null
10784
			if(is_null($conf)){
10785
 
10786
				#設置執行錯誤訊息
10787
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10788
 
10789
				}#if end
10790
 
10791
			#回傳結果
10792
			return $result;
10793
 
10794
			}#if end
10795
 
10796
		#檢查參數
10797
		#函式說明:
10798
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
10799
		#回傳結果:
10800
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10801
		#$result["error"],執行不正常結束的錯訊息陣列.
10802
		#$result["simpleError"],簡單表示的錯誤訊息.
10803
		#$result["function"],當前執行的函式名稱.
10804
		#$result["argu"],設置給予的參數.
10805
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10806
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10807
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10808
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10809
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10810
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10811
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10812
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10813
		#必填參數:
10814
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10815
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10816
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10817
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10818
		#可省略參數:
10819
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10820
		#$conf["mustBeFilledVariableName"]=array();
10821
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
10822
		#$conf["mustBeFilledVariableType"]=array();
10823
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10824
		#$conf["canBeEmptyString"]="false";
10825
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10826
		#$conf["canNotBeEmpty"]=array();
10827
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10828
		#$conf["canBeEmpty"]=array();
10829
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10830
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10831
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10832
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("content");
10833
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
10834
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
10835
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10836
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array());
10837
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
10838
		#$conf["disallowAllSkipableVarIsEmpty"]="";
10839
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
10840
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
10841
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
10842
		#$conf["disallowAllSkipableVarNotExist"]="";
10843
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10844
		#$conf["arrayCountEqualCheck"][]=array();
10845
		#參考資料:
10846
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10847
		#備註:
10848
		#無.
10849
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10850
		unset($conf["variableCheck::checkArguments"]);
10851
 
10852
		#如果執行失敗
10853
		if($checkArguments["status"]==="false"){
10854
 
10855
			#設置執行異常
10856
			$result["status"]="false";
3 liveuser 10857
 
36 liveuser 10858
			#設置錯誤訊息
10859
			$result["error"]=$checkArguments;
10860
 
10861
			#回傳結果
10862
			return $result;
10863
 
10864
			}#if end
10865
 
10866
		#如果檢查不通過
10867
		if($checkArguments["passed"]==="false"){
10868
 
10869
			#設置執行異常
10870
			$result["status"]="false";
10871
 
10872
			#設置錯誤訊息
10873
			$result["error"]=$checkArguments;
10874
 
10875
			#回傳結果
10876
			return $result;
10877
 
10878
			}#if end
10879
 
3 liveuser 10880
		#取得相對於當前路徑的  tmp 目錄.
10881
		exec("cd ".pathinfo(__FILE__)["dirname"]."/../../../var/qbpwcf/tmp;pwd;",$output,$status);
10882
 
10883
		#如果執行失敗
10884
		if($status!==0){
10885
 
10886
			#設置執行失敗
10887
			$result["status"]="false";
10888
 
10889
			#設置執行錯誤訊息
10890
			$result["error"][]="取得暫存目錄失敗";
10891
 
10892
			#回傳結果
10893
			return $result;
10894
 
10895
			}#if end	
10896
 
10897
		#設置預設的暫存目錄
10898
		$defaultTmpDir=$output[0];	
10899
 
10900
		#取得暫存檔案的路徑與名稱
10901
		$result["content"]=tempnam($defaultTmpDir,"qbpwcf_tmpfile_");
10902
 
10903
		#函式說明:
10904
		#將字串特定關鍵字與其前面的內容剔除
10905
		#回傳結果:
10906
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10907
		#$result["error"],錯誤訊息陣列.
10908
		#$result["warning"],警告訊息鎮列.
10909
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10910
		#$result["function"],當前執行的函數名稱.
10911
		#$result["argu"],使用的參數.
10912
		#$result["oriStr"],要處理的原始字串內容.
10913
		#$result["content"],處理好的的字串內容.	
10914
		#必填參數:
10915
		#$conf["stringIn"],字串,要處理的字串.
10916
		$conf["stringPorcess::delStrBeforeKeyWord"]["stringIn"]=$result["content"];
10917
		#$conf["keyWord"],字串,特定字串.
10918
		$conf["stringPorcess::delStrBeforeKeyWord"]["keyWord"]=$defaultTmpDir."/qbpwcf_tmpfile_";
10919
		#可省略參數:
10920
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
10921
		#$conf["recursive"]="true";
10922
		#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
10923
		#$conf["lastResult"]=$delStrBeforeKeyWord;
10924
		#參考資料:
10925
		#無.
10926
		#備註:
10927
		#無.
10928
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringPorcess::delStrBeforeKeyWord"]);
10929
		unset($conf["stringPorcess::delStrBeforeKeyWord"]);
10930
 
10931
		#如果執行失敗
10932
		if($delStrBeforeKeyWord["status"]==="false"){
10933
 
10934
			#設置執行失敗
10935
			$result["status"]="false";
10936
 
10937
			#設置執行錯誤訊息
10938
			$result["error"]=$delStrBeforeKeyWord;
10939
 
10940
			#回傳結果
10941
			return $result;
10942
 
10943
			}#if end
10944
 
10945
		#如果應該要存在的路徑關鍵字不在
10946
		if($delStrBeforeKeyWord["founded"]==="false"){
10947
 
10948
			#設置執行失敗
10949
			$result["status"]="false";
10950
 
10951
			#設置執行錯誤訊息
10952
			$result["error"]=$delStrBeforeKeyWord;
10953
 
10954
			#回傳結果
10955
			return $result;
10956
 
10957
			}#if end
10958
 
10959
		#取得檔案名稱
10960
		$result["fileName"]=$delStrBeforeKeyWord["content"];
10961
 
10962
		#函式說明:
10963
		#將字串特定關鍵字與其後面的內容剔除
10964
		#回傳結果:
10965
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10966
		#$result["error"],錯誤訊息陣列.
10967
		#$result["warning"],警告訊息鎮列.
10968
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10969
		#$result["function"],當前執行的函數名稱.
10970
		#$result["oriStr"],要處理的原始字串內容.
10971
		#$result["content"],處理好的的字串內容.
10972
		#$result["argu"],使用的參數.
10973
		#必填參數:
10974
		#$conf["stringIn"],字串,要處理的字串.
10975
		$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$result["content"];
10976
		#$conf["keyWord"],字串,特定字串.
10977
		$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$result["fileName"];
10978
		#可省略參數:
10979
		#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
10980
		#$conf["deleteLastRepeatedOne"]="";
10981
		#參考資料:
10982
		#無.
10983
		#備註:
10984
		#無.
10985
		$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
10986
		unset($conf["stringProcess::delStrAfterKeyWord"]);
10987
 
10988
		#如果執行失敗
10989
		if($delStrAfterKeyWord["status"]==="false"){
10990
 
10991
			#設置執行失敗
10992
			$result["status"]="false";
10993
 
10994
			#設置執行錯誤訊息
10995
			$result["error"]=$delStrAfterKeyWord;
10996
 
10997
			#回傳結果
10998
			return $result;
10999
 
11000
			}#if end
11001
 
11002
		#如果應該要存在的檔案名稱關鍵字不在
11003
		if($delStrAfterKeyWord["founded"]==="false"){
11004
 
11005
			#設置執行失敗
11006
			$result["status"]="false";
11007
 
11008
			#設置執行錯誤訊息
11009
			$result["error"]=$delStrAfterKeyWord;
11010
 
11011
			#回傳結果
11012
			return $result;
11013
 
11014
			}#if end
11015
 
11016
		#取得路徑
11017
		$result["path"]=$delStrAfterKeyWord["content"];
11018
 
36 liveuser 11019
		#如果有內容要寫入
11020
		if(!empty($conf["content"])){
11021
 
11022
			#函式說明:
11023
			#將多行字串寫入到檔案
11024
			#回傳結果:
11025
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
11026
			#$result["error"],錯誤訊息陣列.
11027
			#$result["function"],當前執行函數的名稱.
11028
			#必填參數:
11029
			#$conf["fileName"],字串,爲要編輯的檔案名稱
11030
			$conf["fileAccess::writeMultiLine"]["fileName"]=$result["content"];
11031
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
11032
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["content"];
11033
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11034
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=__FILE__;
11035
			#可省略參數:
11036
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
11037
			#參考資料:
11038
			#無.
11039
			#備註:
11040
			#無.
11041
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
11042
			unset($conf["fileAccess::writeMultiLine"]);
11043
 
11044
			#如果執行失敗
11045
			if($writeMultiLine["status"]==="false"){
11046
 
11047
				#設置執行失敗
11048
				$result["status"]="false";
11049
 
11050
				#設置執行錯誤訊息
11051
				$result["error"]=$writeMultiLine;
11052
 
11053
				#回傳結果
11054
				return $result;
11055
 
11056
				}#if end
11057
 
11058
			}#if end
11059
 
3 liveuser 11060
		#設置執行正常
11061
		$result["status"]="true";
11062
 
11063
		#回傳結果
11064
		return $result;
11065
 
11066
		}#function createTempFile end
11067
 
11068
	/*
11069
	#函式說明:
11070
	#分割檔案,分割出來的檔案名稱編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11071
	#回傳結果:
11072
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11073
	#$result["error"],錯誤訊息陣列.
11074
	#$result["function"],當前執行的函數名稱.
11075
	#$result["cmd"],執行的指令.
11076
	#$result["content"],執行指令回傳的結果.
11077
	#必填參數:
11078
	#$conf["file"],字串,要分割的檔案名稱.
11079
	$conf["file"]="";	
11080
	#可省略參數:
11081
	#$conf["splitNameHead"],字串,分割成檔案的名稱開頭,預設為 $conf["file"]."-" .
11082
	#$conf["splitNameHead"]="";	
11083
	#$conf["partSize"],字串,分割檔的大小為多少?可以為XMB,XGB,XKB,可參見split指令的說明,預設為50MB.
11084
	#$conf["partSize"]="";
11085
	#參考資料:
11086
	#無.
11087
	#備註:
11088
	#需要有split指令
11089
	*/
11090
	public static function split(&$conf=array()){
11091
 
11092
		#初始化要回傳的結果
11093
		$result=array();
11094
 
11095
		#取得當前執行的函數名稱
11096
		$result["function"]=__FUNCTION__;
11097
 
11098
		#如果沒有參數
11099
		if(func_num_args()==0){
11100
 
11101
			#設置執行失敗
11102
			$result["status"]="false";
11103
 
11104
			#設置執行錯誤訊息
11105
			$result["error"]="函數".$result["function"]."需要參數";
11106
 
11107
			#回傳結果
11108
			return $result;
11109
 
11110
			}#if end
11111
 
11112
		#函式說明:
11113
		#判斷當前環境為web還是cmd
11114
		#回傳結果:
11115
		#$result,"web"或"cmd"
11116
		if(csInformation::getEnv()==="web"){
11117
 
11118
			#設置執行失敗
11119
			$result["status"]="false";
11120
 
11121
			#設置執行錯誤訊息
11122
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11123
 
11124
			#回傳結果
11125
			return $result;
11126
 
11127
			}#if end
11128
 
11129
		#取得參數
11130
		$result["argu"]=$conf;
11131
 
11132
		#如果 $conf 不為陣列
11133
		if(gettype($conf)!=="array"){
11134
 
11135
			#設置執行失敗
11136
			$result["status"]="false";
11137
 
11138
			#設置執行錯誤訊息
11139
			$result["error"][]="\$conf變數須為陣列形態";
11140
 
11141
			#如果傳入的參數為 null
11142
			if($conf===null){
11143
 
11144
				#設置執行錯誤訊息
11145
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11146
 
11147
				}#if end
11148
 
11149
			#回傳結果
11150
			return $result;
11151
 
11152
			}#if end
11153
 
11154
		#檢查參數
11155
		#函式說明:
11156
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11157
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11158
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11159
		#$result["function"],當前執行的函式名稱.
11160
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11161
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11162
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11163
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11164
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11165
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11166
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11167
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11168
		#必填寫的參數:
11169
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11170
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11171
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11172
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file");
11173
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11174
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
11175
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11176
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11177
		#可以省略的參數:
11178
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11179
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11180
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11181
		#$conf["canNotBeEmpty"]=array();
11182
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11183
		#$conf["canBeEmpty"]=array();
11184
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11185
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11186
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11187
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("splitNameHead","partSize");
11188
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11189
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
11190
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]",若後面需要加上內容,則可以再補上\",後面再補上要串接的內容.
11191
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"file\"]\"-","50MB");
11192
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11193
		#$conf["arrayCountEqualCheck"][]=array();
11194
		#參考資料來源:
11195
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11196
		#建議:
11197
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11198
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11199
		unset($conf["variableCheck::checkArguments"]);
11200
 
11201
		#如果檢查參數失敗
11202
		if($checkArguments["status"]==="false"){
11203
 
11204
			#設置執行失敗
11205
			$result["status"]="false";
11206
 
11207
			#設置錯誤訊息
11208
			$result["error"]=$checkArguments;
11209
 
11210
			#回傳結果
11211
			return $result;
11212
 
11213
			}#if end
11214
 
11215
		#如果要分割的檔案存在
11216
		if(file_exists($conf["file"])){
11217
 
11218
			#取得執行的指令
11219
			$result["cmd"]="split -b ".$conf["partSize"]." '".$conf["file"]."' '".$conf["splitNameHead"]."'";
11220
 
11221
			#執行還原的指令
11222
			exec($result["cmd"],$output,$status);
11223
 
11224
			#取得執行後的輸出
11225
			$result["content"]=$output;
11226
 
11227
			}#if end
11228
 
11229
		#反之
11230
		else{
11231
 
11232
			#設置執行失敗
11233
			$result["status"]="false";
11234
 
11235
			#設置執行錯誤訊息
11236
			$result["error"][]="要分割的檔案「".$conf["file"]."」不存在";
11237
 
11238
			#回傳結果
11239
			return $result;
11240
 
11241
			}#else end
11242
 
11243
		#設置執行正常
11244
		$result["status"]="true";
11245
 
11246
		#回傳結果
11247
		return $result;
11248
 
11249
		}#function split end
11250
 
11251
	/*
11252
	#函式說明:
11253
	#合併檔案,檔案編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11254
	#回傳結果:
11255
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11256
	#$result["error"],錯誤訊息陣列.
11257
	#$result["function"],當前執行的函數名稱.
11258
	#$result["cmd"],執行的指令.
11259
	#$result["content"],執行指令回傳的結果.
11260
	#必填參數:
11261
	#$conf["filePartHead"],字串,分割檔案的名稱開頭.
11262
	$conf["filePartHead"]="";
11263
	#$conf["oriFileName"],字串,合併後的檔案名稱.
11264
	$conf["oriFileName"]="";
11265
	#可省略參數:
11266
	#無
11267
	#參考資料:
11268
	#無.
11269
	#備註:
11270
	#需要有cat指令.
11271
	#僅能在命令列執行.
11272
	*/
11273
	public static function merge(&$conf=array()){
11274
 
11275
		#初始化要回傳的結果
11276
		$result=array();
11277
 
11278
		#取得當前執行的函數名稱
11279
		$result["function"]=__FUNCTION__;
11280
 
11281
		#如果沒有參數
11282
		if(func_num_args()==0){
11283
 
11284
			#設置執行失敗
11285
			$result["status"]="false";
11286
 
11287
			#設置執行錯誤訊息
11288
			$result["error"]="函數".$result["function"]."需要參數";
11289
 
11290
			#回傳結果
11291
			return $result;
11292
 
11293
			}#if end
11294
 
11295
		#函式說明:
11296
		#判斷當前環境為web還是cmd
11297
		#回傳結果:
11298
		#$result,"web"或"cmd"
11299
		if(csInformation::getEnv()==="web"){
11300
 
11301
			#設置執行失敗
11302
			$result["status"]="false";
11303
 
11304
			#設置執行錯誤訊息
11305
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11306
 
11307
			#回傳結果
11308
			return $result;
11309
 
11310
			}#if end
11311
 
11312
		#取得參數
11313
		$result["argu"]=$conf;
11314
 
11315
		#如果 $conf 不為陣列
11316
		if(gettype($conf)!=="array"){
11317
 
11318
			#設置執行失敗
11319
			$result["status"]="false";
11320
 
11321
			#設置執行錯誤訊息
11322
			$result["error"][]="\$conf變數須為陣列形態";
11323
 
11324
			#如果傳入的參數為 null
11325
			if($conf===null){
11326
 
11327
				#設置執行錯誤訊息
11328
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11329
 
11330
				}#if end
11331
 
11332
			#回傳結果
11333
			return $result;
11334
 
11335
			}#if end
11336
 
11337
		#檢查參數
11338
		#函式說明:
11339
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11340
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11341
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11342
		#$result["function"],當前執行的函式名稱.
11343
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11344
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11345
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11346
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11347
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11348
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11349
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11350
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11351
		#必填寫的參數:
11352
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11353
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11354
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11355
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePartHead","oriFileName");
11356
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11357
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11358
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11359
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11360
		#可以省略的參數:
11361
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11362
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11363
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11364
		#$conf["canNotBeEmpty"]=array();
11365
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11366
		#$conf["canBeEmpty"]=array();
11367
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11368
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11369
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11370
		#$conf["skipableVariableName"]=array();
11371
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11372
		#$conf["skipableVariableType"]=array();
11373
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11374
		#$conf["skipableVarDefaultValue"]=array("");
11375
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11376
		#$conf["arrayCountEqualCheck"][]=array();
11377
		#參考資料來源:
11378
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11379
		#建議:
11380
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11381
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11382
		unset($conf["variableCheck::checkArguments"]);
11383
 
11384
		#如果檢查參數失敗
11385
		if($checkArguments["status"]==="false"){
11386
 
11387
			#設置執行失敗
11388
			$result["status"]="false";
11389
 
11390
			#設置錯誤訊息
11391
			$result["error"]=$checkArguments;
11392
 
11393
			#回傳結果
11394
			return $result;
11395
 
11396
			}#if end
11397
 
11398
		#定義編號
11399
		$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");
11400
 
11401
		#定義分割檔案的前置字串
11402
		$filePartHead=$conf["filePartHead"];
11403
 
11404
		#要合併成的檔案名稱
11405
		$oriFileName=$conf["oriFileName"];
11406
 
11407
		#初始化要執行合併的語法
11408
		$restoreCmd="cat ";
11409
 
11410
		#有幾個編號就執行幾次
11411
		for($i=0;$i<count($charArray);$i++){
11412
 
11413
			#有幾個編號就執行幾次
11414
			for($j=0;$j<count($charArray);$j++){
11415
 
11416
				#如果該分割檔存在
11417
				if(file_exists($filePartHead.$charArray[$i].$charArray[$j])){
11418
 
11419
					#串接要還原的分割檔
11420
					$restoreCmd=$restoreCmd." '".$filePartHead.$charArray[$i].$charArray[$j]."'";
11421
 
11422
					}#if end
11423
 
11424
				#反之
11425
				else{
11426
 
11427
					#如果是第一個分割檔就找不到
11428
					if($i===0 && $j===0){
11429
 
11430
						#設置執行失敗
11431
						$result["status"]="false";
11432
 
11433
						#設置錯誤訊息
11434
						$result["error"][]="找不到第一個分割檔「".$filePartHead.$charArray[$i].$charArray[$j]."」";
11435
 
11436
						#回傳結果
11437
						return $result;
11438
 
11439
						}#if end
11440
 
11441
					#串接要還原成的檔案名稱
11442
					$restoreCmd=$restoreCmd." > '".$oriFileName."'";
11443
 
11444
					#取得執行的指令
11445
					$result["cmd"]=$restoreCmd;
11446
 
11447
					#執行還原的指令
11448
					exec($restoreCmd,$output,$status);
11449
 
11450
					#取得執行後的輸出
11451
					$result["content"]=$output;
11452
 
11453
					#結束回圈
11454
					break 2;
11455
 
11456
					}#else end
11457
 
11458
				}#for end
11459
 
11460
			}#for end
11461
 
11462
		#設置執行正常
11463
		$result["status"]="true";
11464
 
11465
		#回傳結果
11466
		return $result;
11467
 
11468
		}#function merge end
11469
 
11470
	/*
11471
	#函式說明:
11472
	#取得檔案的部分內容
11473
	#回傳結果:
11474
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11475
	#$result["error"],錯誤訊息陣列.
11476
	#$result["function"],當前執行的函數名稱.
11477
	#$result["cmd"],執行的指令.
11478
	#$result["content"],取得的檔案內容.
11479
	#$result["length"],取得的內容長度.
11480
	#$result["EOF"],識別是否已經到檔案結尾,"true"代表是,"false"代表不是.
11481
	#$result["mimeType"],檔案的 mime type.
11482
	#必填參數:
11483
	#$conf["file"],字串,檔案的路徑與名稱.
11484
	$conf["file"]="";
11485
	#$conf["fileArgu"],字串,__FILE__的內容.
11486
	$conf["fileArgu"]=__FILE__;
11487
	#$conf["bytes"],整數字串,要讀取多少bytes.
11488
	$conf["bytes"]="";
11489
	#$conf["startIndex"],要從哪個bytes位置開始,起始點為0.
11490
	$conf["startIndex"]="";
11491
	#可省略參數:
11492
	#無
11493
	#參考資料:
11494
	#無.
11495
	#備註:
11496
	#無
11497
	*/
11498
	public static function getFilePart(&$conf){
11499
 
11500
		#初始化要回傳的結果
11501
		$result=array();
11502
 
11503
		#取得當前執行的函數名稱
11504
		$result["function"]=__FUNCTION__;
11505
 
11506
		#如果沒有參數
11507
		if(func_num_args()==0){
11508
 
11509
			#設置執行失敗
11510
			$result["status"]="false";
11511
 
11512
			#設置執行錯誤訊息
11513
			$result["error"]="函數".$result["function"]."需要參數";
11514
 
11515
			#回傳結果
11516
			return $result;
11517
 
11518
			}#if end
11519
 
11520
		#取得參數
11521
		$result["argu"]=$conf;
11522
 
11523
		#如果 $conf 不為陣列
11524
		if(gettype($conf)!=="array"){
11525
 
11526
			#設置執行失敗
11527
			$result["status"]="false";
11528
 
11529
			#設置執行錯誤訊息
11530
			$result["error"][]="\$conf變數須為陣列形態";
11531
 
11532
			#如果傳入的參數為 null
11533
			if(is_null($conf)){
11534
 
11535
				#設置執行錯誤訊息
11536
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11537
 
11538
				}#if end
11539
 
11540
			#回傳結果
11541
			return $result;
11542
 
11543
			}#if end
11544
 
11545
		#函式說明:
11546
		#檢查多個檔案與資料夾是否存在.
11547
		#回傳的結果:
11548
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11549
		#$result["error"],錯誤訊息陣列.
11550
		#$resutl["function"],當前執行的涵式名稱.
11551
		#$result["argu"],使用的參數.
11552
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11553
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11554
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
11555
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
11556
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11557
		#必填參數:
11558
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11559
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
11560
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11561
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=__FILE__;
11562
		#可省略參數:
11563
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11564
		#$conf["disableWebSearch"]="false";
11565
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11566
		#$conf["userDir"]="true";
11567
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
11568
		#$conf["web"]="true";
11569
		#參考資料:
11570
		#http://php.net/manual/en/function.file-exists.php
11571
		#http://php.net/manual/en/control-structures.foreach.php
11572
		#備註:
11573
		#函數file_exists檢查的路徑為檔案系統的路徑
11574
		#$result["varName"][$i]結果未實作
11575
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11576
		unset($conf["fileAccess::checkMultiFileExist"]);
11577
 
11578
		#如果執行失敗
11579
		if($checkMultiFileExist["status"]==="false"){
11580
 
11581
			#設置執行失敗
11582
			$result["status"]="false";
11583
 
11584
			#設置執行錯誤訊息
11585
			$result["error"]=$checkMultiFileExist;
11586
 
11587
			#回傳結果
11588
			return $result;
11589
 
11590
			}#if end
11591
 
11592
		#如果檔案不存在
11593
		if($checkMultiFileExist["allExist"]==="false"){
11594
 
11595
			#設置執行失敗
11596
			$result["status"]="false";
11597
 
11598
			#設置執行錯誤訊息
11599
			$result["error"]=$checkMultiFileExist;
11600
 
11601
			#回傳結果
11602
			return $result;
11603
 
11604
			}#if end
11605
 
11606
		#取得mimetype
11607
		$mimetype=mime_content_type($conf["file"]);
11608
 
11609
		#取得檔案的 mime type
11610
		$result["mimeType"]=$mimetype;
11611
 
11612
		#透過 dd 指令,取得部分內容.
11613
		#函式說明:
11614
		#呼叫shell執行系統命令,並取得回傳的內容.
11615
		#回傳結果:
11616
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11617
		#$result["error"],錯誤訊息陣列.
11618
		#$result["function"],當前執行的函數名稱.
11619
		#$result["argu"],使用的參數.
11620
		#$result["cmd"],執行的指令內容.
11621
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
11622
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
11623
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
11624
		#$result["running"],是否還在執行.
11625
		#$result["pid"],pid.
11626
		#$result["statusCode"],執行結束後的代碼.
11627
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
11628
		#必填參數:
11629
		#$conf["command"],字串,要執行的指令.
11630
		$conf["external::callShell"]["command"]="dd";
11631
		#$conf["fileArgu"],字串,變數__FILE__的內容.
11632
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
11633
		#可省略參數:
11634
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
11635
		$conf["external::callShell"]["argu"]=array("if=".$conf["file"],"bs=".$conf["bytes"],"count=1","status=none");
11636
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
11637
		#$conf["arguIsAddr"]=array();
11638
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
11639
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
11640
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
11641
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
11642
		#$conf["enablePrintDescription"]="true";
11643
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
11644
		#$conf["printDescription"]="";
11645
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
11646
		#$conf["escapeshellarg"]="false";
11647
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
11648
		#$conf["thereIsShellVar"]=array();
11649
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
11650
		#$conf["username"]="";
11651
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
11652
		#$conf["password"]="";
11653
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
11654
		#$conf["useScript"]="";
11655
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
11656
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
11657
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
11658
		#$conf["inBackGround"]="";
11659
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
11660
		#$conf["getErr"]="false";
11661
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
11662
		#$conf["doNotRun"]="false";
11663
		#參考資料:
11664
		#exec=>http://php.net/manual/en/function.exec.php
11665
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
11666
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
11667
		#備註:
11668
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
11669
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
11670
		$callShell=external::callShell($conf["external::callShell"]);
11671
		unset($conf["external::callShell"]);
11672
 
11673
		#如果執行失敗
11674
		if($callShell["status"]==="false"){
11675
 
11676
			#設置執行失敗
11677
			$result["status"]="false";
11678
 
11679
			#設置執行錯誤訊息
11680
			$result["error"]=$callShell;
11681
 
11682
			#回傳結果
11683
			return $result;
11684
 
11685
			}#if end
11686
 
11687
		#取得結果
11688
		$result["content"]=$callShell["output"][0];
11689
 
11690
		#取得內容長度
11691
		$result["length"]=strlen($result["content"]);
11692
 
11693
		#預設尚未到檔案結尾 
11694
		$result["EOF"]="false";
11695
 
11696
		#如果取得的內容長度小於預期
11697
		if($result["length"]<$conf["bytes"]){
11698
 
11699
			#設置已經到檔案結尾了
11700
			$result["EOF"]="true";
11701
 
11702
			}#if end
11703
 
11704
		#設置執行正常
11705
		$result["status"]="true";
11706
 
11707
		#回傳結果
11708
		return $result;
11709
 
11710
		}#function getFilePart end
11711
 
11712
	/*
11713
	#函式說明:
11714
	#取得節點的資訊.
11715
	#回傳結果:
11716
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11717
	#$result["error"],錯誤訊息陣列.
11718
	#$result["function"],函數名稱. 
11719
	#$result["content"],檔案資訊陣列.
11720
	#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
11721
	#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
11722
	#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
11723
	#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
11724
	#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
11725
	#$result["content"]["ownerName"],檔案擁有着資訊.
11726
	#$result["content"]["groupName"],檔案所屬擁有着資訊.
11727
	#$result["content"]["size"],檔案大小.
11728
	#$result["content"]["modifyDate"],檔案變更年月日.
11729
	#$result["content"]["modifyTime"],檔案變更時分秒.
11730
	#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
11731
	#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
11732
	#必填參數:
11733
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
11734
	$conf["fileArgu"]=__FILE__;
11735
	#$conf["file"],字串,要查看擁有者資訊的檔案.
11736
	$conf["file"]="";
11737
	#可省略參數:
11738
	#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11739
	#$conf["web"]="true";
11740
	#參考資料:
11741
	#fileowner=>http://php.net/manual/en/function.fileowner.php
11742
	#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
11743
	#備註:
11744
	#無.
11745
	*/
11746
	public static function fileInfo(&$conf=array()){
11747
 
11748
		#初始化要回傳的結果
11749
		$result=array();
11750
 
11751
		#取得當前執行的函數名稱
11752
		$result["function"]=__FUNCTION__;
11753
 
11754
		#如果沒有參數
11755
		if(func_num_args()==0){
11756
 
11757
			#設置執行失敗
11758
			$result["status"]="false";
11759
 
11760
			#設置執行錯誤訊息
11761
			$result["error"]="函數".$result["function"]."需要參數";
11762
 
11763
			#回傳結果
11764
			return $result;
11765
 
11766
			}#if end
11767
 
11768
		#取得參數
11769
		$result["argu"]=$conf;
11770
 
11771
		#如果 $conf 不為陣列
11772
		if(gettype($conf)!=="array"){
11773
 
11774
			#設置執行失敗
11775
			$result["status"]="false";
11776
 
11777
			#設置執行錯誤訊息
11778
			$result["error"][]="\$conf變數須為陣列形態";
11779
 
11780
			#如果傳入的參數為 null
11781
			if($conf===null){
11782
 
11783
				#設置執行錯誤訊息
11784
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11785
 
11786
				}#if end
11787
 
11788
			#回傳結果
11789
			return $result;
11790
 
11791
			}#if end
11792
 
11793
		#檢查參數
11794
		#函式說明:
11795
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11796
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11797
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11798
		#$result["function"],當前執行的函式名稱.
11799
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11800
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11801
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11802
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11803
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11804
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11805
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11806
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11807
		#必填寫的參數:
11808
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11809
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
11810
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11811
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11812
		#可以省略的參數:
11813
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11814
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
11815
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11816
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11817
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11818
		#$conf["canBeEmptyString"]="false";
11819
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11820
		#$conf["ileAccess::checkArguments"]["canNotBeEmpty"]=array();
11821
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11822
		#$conf["canBeEmpty"]=array();
11823
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11824
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11825
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11826
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
11827
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11828
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
11829
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11830
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
11831
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
11832
		#$conf["disallowAllSkipableVarIsEmpty"]="";
11833
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
11834
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
11835
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11836
		#$conf["arrayCountEqualCheck"][]=array();
11837
		#參考資料來源:
11838
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11839
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11840
		unset($conf["variableCheck::checkArguments"]);
11841
 
11842
		#如果檢查參數失敗
11843
		if($checkArguments["status"]==="false"){
11844
 
11845
			#設置執行失敗
11846
			$result["status"]="false";
11847
 
11848
			#設置執行錯誤訊息
11849
			$result["error"]=$checkArguments;
11850
 
11851
			#回傳結果
11852
			return $result;
11853
 
11854
			}#if end
11855
 
11856
		#如果檢查參數不通過
11857
		if($checkArguments["passed"]==="false"){
11858
 
11859
			#設置執行失敗
11860
			$result["status"]="false";
11861
 
11862
			#設置執行錯誤訊息
11863
			$result["error"]=$checkArguments;
11864
 
11865
			#回傳結果
11866
			return $result;
11867
 
11868
			}#if end
11869
 
11870
		#函式說明:
11871
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
11872
		#回傳結果:
11873
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11874
		#$result["error"],錯誤訊息陣列.
11875
		#$result["function"],函數名稱. 
11876
		#$result["argu"],使用的參數.
11877
		#$result["content"],網址,若是在命令列執行,則為"null".
11878
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
11879
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
11880
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
11881
		#必填參數:
11882
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
11883
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["file"];
11884
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
11885
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
11886
		#可省略參數:
11887
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
11888
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
11889
		#備註:
11890
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
11891
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
11892
		unset($conf["fileAccess::getInternetAddressV2"]);
11893
 
11894
		#如果取得位置失敗
11895
		if($getInternetAddressV2["status"]==="false"){
11896
 
11897
			#設置執行失敗
11898
			$result["status"]="false";
11899
 
11900
			#設置執行錯誤訊息
11901
			$result["error"]=$getInternetAddressV2;
11902
 
11903
			#回傳結果
11904
			return $result;
11905
 
11906
			}#if end
11907
 
11908
		#函式說明:
11909
		#檢查多個檔案與資料夾是否存在.
11910
		#回傳的結果:
11911
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11912
		#$result["error"],錯誤訊息陣列.
11913
		#$resutl["function"],當前執行的涵式名稱.
11914
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11915
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11916
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
11917
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
11918
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11919
		#必填參數:
11920
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11921
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($getInternetAddressV2["fileSystemAbsoulutePosition"]);
11922
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11923
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
11924
		#可省略參數
11925
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11926
		#$conf["disableWebSearch"]="false";
11927
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11928
		#$conf["userDir"]="true";
11929
		#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11930
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
11931
		#參考資料來源:
11932
		#http://php.net/manual/en/function.file-exists.php
11933
		#http://php.net/manual/en/control-structures.foreach.php
11934
		#備註:
11935
		#函數file_exists檢查的路徑為檔案系統的路徑
11936
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11937
		unset($conf["fileAccess::checkMultiFileExist"]);
11938
 
11939
		#如果檢查檔案存在失敗
11940
		if($checkMultiFileExist["status"]==="false"){
11941
 
11942
			#設置執行失敗
11943
			$result["status"]="false";
11944
 
11945
			#設置執行錯誤訊息
11946
			$result["error"]=$checkMultiFileExist;
11947
 
11948
			#回傳結果
11949
			return $result;
11950
 
11951
			}#if end
11952
 
11953
		#如果檔案不存在
11954
		if($checkMultiFileExist["allExist"]==="false"){
11955
 
11956
			#設置執行失敗
11957
			$result["status"]="false";
11958
 
11959
			#設置執行錯誤訊息
11960
			$result["error"]=$checkMultiFileExist;
11961
 
11962
			#回傳結果
11963
			return $result;
11964
 
11965
			}#if end
11966
 
11967
		#透過ls指令取得檔案的資訊
11968
		#函式說明:
11969
		#呼叫shell執行系統命令,並取得回傳的內容.
11970
		#回傳的結果:
11971
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11972
		#$result["error"],錯誤訊息陣列.
11973
		#$result["function"],當前執行的函數名稱.
11974
		#$result["cmd"],執行的指令內容.
11975
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
11976
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
11977
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
11978
		#$result["running"],是否還在執行.
11979
		#$result["pid"],pid
11980
		#必填的參數
11981
		#$conf["command"],字串,要執行的指令
11982
		$conf["external::callShell"]["command"]="ls";
11983
		#$conf["fileArgu"],字串,變數__FILE__的內容.
11984
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
11985
		#可省略參數:
11986
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
11987
		$conf["external::callShell"]["argu"]=array("-l","--full-time","-d",$conf["file"]);
11988
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
11989
		$conf["external::callShell"]["arguIsAddr"]=array("false","false","false","false");
11990
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
11991
		#$conf["enablePrintDescription"]="true";
11992
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
11993
		#$conf["printDescription"]="";
11994
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
11995
		$conf["external::callShell"]["escapeshellarg"]="true";
11996
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
11997
		#$conf["username"]="";
11998
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
11999
		#$conf["password"]="";
12000
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12001
		#$conf["useScript"]="";
12002
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12003
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12004
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12005
		#$conf["inBackGround"]="";
12006
		#備註:
12007
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12008
		#參考資料:
12009
		#exec=>http://php.net/manual/en/function.exec.php
12010
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12011
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12012
		$callShell=external::callShell($conf["external::callShell"]);
12013
		unset($conf["external::callShell"]);
12014
 
12015
		#如果執行失敗
12016
		if($callShell["status"]==="false"){
12017
 
12018
			#設置執行失敗
12019
			$result["status"]="false";
12020
 
12021
			#設置執行錯誤訊息
12022
			$result["error"]=$callShell;
12023
 
12024
			#回傳結果
12025
			return $result;
12026
 
12027
			}#if end	
12028
 
12029
		#解析檔案資訊
12030
		#-rwxrwx--x. 1 apache apache 65K 2017-04-16 22:53:19.044545806 +0800 fileAccessT.php
12031
 
12032
		#取得權限資訊 -rwxrwx--x
12033
		$perm=substr($callShell["output"][0],0,strpos($callShell["output"][0],'.'));
12034
 
12035
		#如果是目錄
12036
		if(substr($perm,0,1)==="d"){
12037
 
12038
			#設定為目錄
12039
			$result["content"]["is_folder"]="true";
12040
 
12041
			}#if end
12042
 
12043
		#反之
12044
		else{
12045
 
12046
			#設定不為目錄
12047
			$result["content"]["is_folder"]="false";
12048
 
12049
			}#else end
12050
 
12051
		#解析檔案擁有者權限資訊
12052
		$result["content"]["ownerPerm"]=substr($perm,1,3);
12053
 
12054
		#如果檔案擁有者名稱為空
12055
		if(empty($result["content"]["ownerPerm"])){
12056
 
12057
			#設置執行失敗
12058
			$result["status"]="false";
12059
 
12060
			#設置執行錯誤訊息
12061
			$result["error"]=$callShell;
12062
 
12063
			#回傳結果
12064
			return $result;
12065
 
12066
			}#if end
12067
 
12068
		#解析檔案歸屬群組權限資訊
12069
		$result["content"]["groupPerm"]=substr($perm,4,3);
12070
 
12071
		#解析檔案對於其他身份使用者的權限資訊
12072
		$result["content"]["otherPerm"]=substr($perm,7,3);
12073
 
12074
		#取得目錄底下的檔案目錄數量起始點
12075
		$subElementStartPos=strpos($callShell["output"][0],' ');
12076
 
12077
		#取得目錄底下的檔案目錄數量結束點
12078
		$subElementEndPos=strpos($callShell["output"][0],' ',$subElementStartPos+1);
12079
 
12080
		#取得目錄底下的檔案目錄數量
12081
		$result["content"]["subElementCount"]=substr($callShell["output"][0],$subElementStartPos,$subElementEndPos-$subElementStartPos);
12082
 
12083
		#取得檔案擁有着資訊的起點
12084
		$ownerNameStrPos=strpos($callShell["output"][0],' ',$subElementEndPos)+1;
12085
 
12086
		#取得檔案擁有着資訊的結束點
12087
		$ownerNameEndPos=strpos($callShell["output"][0],' ',$ownerNameStrPos+1);
12088
 
12089
		#取得檔案擁有着資訊
12090
		$result["content"]["ownerName"]=substr($callShell["output"][0],$ownerNameStrPos,$ownerNameEndPos-$ownerNameStrPos);
12091
 
12092
		#取取得檔案群組擁有者資訊的起點
12093
		$groupNameStrPos=strpos($callShell["output"][0],' ',$ownerNameEndPos)+1;
12094
 
12095
		#取得檔案群組擁有者資訊的結束點
12096
		$groupNameEndPos=strpos($callShell["output"][0],' ',$groupNameStrPos);
12097
 
12098
		#取得檔案群組擁有者資訊
12099
		$result["content"]["groupName"]=substr($callShell["output"][0],$groupNameStrPos,$groupNameEndPos-$groupNameStrPos);
12100
 
12101
		#取得檔案大小的起點
12102
		$sizeStrPos=strpos($callShell["output"][0],' ',$groupNameEndPos)+1;
12103
 
12104
		#取得檔案大小的結束點
12105
		$sizeEndPos=strpos($callShell["output"][0],' ',$sizeStrPos);
12106
 
12107
		#取得檔案大小
12108
		$result["content"]["size"]=substr($callShell["output"][0],$sizeStrPos,$sizeEndPos-$sizeStrPos);
12109
 
12110
		#取得檔案變更年月日的起點
12111
		$modifyDateStrPos=strpos($callShell["output"][0],' ',$sizeEndPos)+1;
12112
 
12113
		#取得檔案變更年月日的結束點
12114
		$modifyDateEndPos=strpos($callShell["output"][0],' ',$modifyDateStrPos);
12115
 
12116
		#取得檔案變更年月日		
12117
		$result["content"]["modifyDate"]=substr($callShell["output"][0],$modifyDateStrPos,$modifyDateEndPos-$modifyDateStrPos);
12118
 
12119
		#取得檔案變更時分秒的起點
12120
		$modifyTimeStrPos=strpos($callShell["output"][0],' ',$modifyDateEndPos)+1;
12121
 
12122
		#取得檔案變更時分秒的結束點
12123
		$modifyTimeEndPos=strpos($callShell["output"][0],'.',$modifyTimeStrPos);
12124
 
12125
		#取得檔案變更時分秒
12126
		$result["content"]["modifyTime"]=substr($callShell["output"][0],$modifyTimeStrPos,$modifyTimeEndPos-$modifyTimeStrPos);
12127
 
12128
		#取得檔版變更時間秒的float數值起點
12129
		$modifyTimeFloatStrPos=strpos($callShell["output"][0],'.',$modifyTimeEndPos)+1;
12130
 
12131
		#取得檔版變更時間秒的float數值結束點
12132
		$modifyTimeFloatEndPos=strpos($callShell["output"][0],' ',$modifyTimeFloatStrPos);
12133
 
12134
		#取得檔版變更時間秒的float數值	
12135
		$result["content"]["modifyTimeFloat"]=substr($callShell["output"][0],$modifyTimeFloatStrPos,$modifyTimeFloatEndPos-$modifyTimeFloatStrPos);
12136
 
12137
		#取得時區起始點
12138
		$timezoneStrPos=strpos($callShell["output"][0],' ',$modifyTimeFloatEndPos)+1;
12139
 
12140
		#取得時區結束點
12141
		$timezoneEndPos=strpos($callShell["output"][0],' ',$timezoneStrPos)+1;	
12142
 
12143
		#取得檔案變更時間的時區與UTC的差距.
12144
		$result["content"]["timezone"]=substr($callShell["output"][0],$timezoneStrPos,$timezoneEndPos-$timezoneStrPos);			
12145
 
12146
		#設置執行正常
12147
		$result["status"]="true";
12148
 
12149
		#回傳結果
12150
		return $result;
12151
 
12152
		}#function fileInfo end
12153
 
12154
	/*
12155
	#函式說明:
12156
	#依據函數getListTree執行的結果,將其底下與其子目錄底下的特定檔案內容依據目錄層級輸出成html檔案 
12157
	#回傳結果:
12158
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12159
	#$result["error"],錯誤訊息陣列.
12160
	#$result["function"],函數名稱. 
12161
	#$result["content"],html檔案輸出的位置與名稱.
12162
	#必填參數:
12163
	#$conf["getListTree"],陣列變數,函數getListTree執行的結果.
12164
	$conf["getListTree"]=$getListTree;
12165
	#可省略參數:
12166
	#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".
12167
	#$conf["fileToRead"]="help";
12168
	#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".
12169
	#$conf["output"]="help.html"; 
12170
	#參考資料:
12171
	#無.
12172
	#備註:
12173
	#建構中...
12174
	*/
12175
	public static function createHelpFile($conf){
12176
 
12177
		#初始化要回傳的結果
12178
		$result=array();
12179
 
12180
		#設置當其函數名稱
12181
		$result["function"]=__FUNCTION__;
12182
 
12183
		#如果 $conf 不為陣列
12184
		if(gettype($conf)!="array"){
12185
 
12186
			#設置執行失敗
12187
			$result["status"]="false";
12188
 
12189
			#設置執行錯誤訊息
12190
			$result["error"][]="\$conf變數須為陣列形態";
12191
 
12192
			#如果傳入的參數為 null
12193
			if($conf==null){
12194
 
12195
				#設置執行錯誤訊息
12196
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12197
 
12198
				}#if end
12199
 
12200
			#回傳結果
12201
			return $result;
12202
 
12203
			}#if end
12204
 
12205
		#檢查參數
12206
		#函式說明:
12207
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12208
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12209
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12210
		#$result["function"],當前執行的函式名稱.
12211
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12212
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12213
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12214
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12215
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12216
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12217
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12218
		#必填寫的參數:
12219
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12220
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12221
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12222
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("getListTree");
12223
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12224
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
12225
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12226
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12227
		#可以省略的參數:
12228
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12229
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12230
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12231
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
12232
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12233
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
12234
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12235
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
12236
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12237
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
12238
		#參考資料來源:
12239
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12240
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12241
		unset($conf["variableCheck::checkArguments"]);
12242
 
12243
		#如果 $checkResult["status"] 等於 "fasle"
12244
		if($checkResult["status"]=="false"){
12245
 
12246
			#設置錯誤識別
12247
			$result["status"]="false";
12248
 
12249
			#設置錯誤訊息
12250
			$result["error"]=$checkResult;
12251
 
12252
			#回傳結果
12253
			return $result;
12254
 
12255
			}#if end
12256
 
12257
		#如果 $checkResult["passed"] 等於 "fasle"
12258
		if($checkResult["passed"]=="false"){
12259
 
12260
			#設置錯誤識別
12261
			$result["status"]="false";
12262
 
12263
			#設置錯誤訊息
12264
			$result["error"]=$checkResult;
12265
 
12266
			#回傳結果
12267
			return $result;
12268
 
12269
			}#if end
12270
 
12271
		#如果 $conf["getListTree"]["status"] 不存在
12272
		if(!isset($conf["getListTree"]["status"])){
12273
 
12274
			#設置錯誤識別
12275
			$result["status"]="false";
12276
 
12277
			#設置錯誤訊息
12278
			$result["error"][]="getListTree參數必須為getListTree函數執行後的結果";
12279
 
12280
			#回傳結果
12281
			return $result;
12282
 
12283
			}#if end
12284
 
12285
		#如果 $conf["getListTree"] 執行失敗
12286
		if($conf["getListTree"]["status"]=="false"){
12287
 
12288
			#設置錯誤識別
12289
			$result["status"]="false";
12290
 
12291
			#設置錯誤訊息
12292
			$result["error"]=$conf["getListTree"];
12293
 
12294
			#回傳結果
12295
			return $result;
12296
 
12297
			}#if end
12298
 
12299
		#如果有目錄檔案
12300
		if(isset($conf["getListTree"]["content"])){
12301
 
12302
 
12303
 
12304
			}#if end
12305
 
12306
		}#function createHelpFile end
12307
 
12308
	/*
12309
	#函式說明:
12310
	#嵌入pdf檔案到網頁上面
12311
	#回傳結果:
12312
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12313
	#$result["error"],錯誤訊息陣列.
12314
	#$result["function"],函數名稱. 
12315
	#$result["content"],嵌入pdf檔案的語法
12316
	#必填參數:
12317
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
12318
	$conf["fileArgu"]=__FILE__;
12319
	#$conf["file"],字串,pdf檔案位置.
12320
	$conf["file"]="";
12321
	#可省略參數:
12322
	#$conf["type"],字串,要用"iframe"還是"object"的方式嵌入pdf檔案,預設為"iframe".
12323
	#$conf["type"]="iframe";
12324
	#參考資料:
12325
	#嵌入pdf到網頁=>https://stackoverflow.com/questions/14690000/embed-a-pdf-in-html5
12326
	#備註:
12327
	#如果是網址就會出錯.
12328
	*/
12329
	public static function embedPdf(&$conf=array()){
12330
 
12331
		#初始化要回傳的結果
12332
		$result=array();
12333
 
12334
		#取得當前執行的函數名稱
12335
		$result["function"]=__FUNCTION__;
12336
 
12337
		#如果沒有參數
12338
		if(func_num_args()==0){
12339
 
12340
			#設置執行失敗
12341
			$result["status"]="false";
12342
 
12343
			#設置執行錯誤訊息
12344
			$result["error"]="函數".$result["function"]."需要參數";
12345
 
12346
			#回傳結果
12347
			return $result;
12348
 
12349
			}#if end
12350
 
12351
		#取得參數
12352
		$result["argu"]=$conf;
12353
 
12354
		#如果 $conf 不為陣列
12355
		if(gettype($conf)!=="array"){
12356
 
12357
			#設置執行失敗
12358
			$result["status"]="false";
12359
 
12360
			#設置執行錯誤訊息
12361
			$result["error"][]="\$conf變數須為陣列形態";
12362
 
12363
			#如果傳入的參數為 null
12364
			if($conf===null){
12365
 
12366
				#設置執行錯誤訊息
12367
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12368
 
12369
				}#if end
12370
 
12371
			#回傳結果
12372
			return $result;
12373
 
12374
			}#if end
12375
 
12376
		#檢查參數
12377
		#函式說明:
12378
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12379
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12380
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12381
		#$result["function"],當前執行的函式名稱.
12382
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12383
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12384
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12385
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12386
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12387
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12388
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12389
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12390
		#必填寫的參數:
12391
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12392
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12393
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12394
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
12395
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12396
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12397
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12398
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12399
		#可以省略的參數:
12400
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12401
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
12402
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12403
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("function");
12404
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12405
		#$conf["canBeEmpty"]=array();
12406
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12407
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("width","height");
12408
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12409
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("type");
12410
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12411
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12412
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12413
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("iframe");
12414
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12415
		#$conf["arrayCountEqualCheck"][]=array();
12416
		#參考資料來源:
12417
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12418
		#建議:
12419
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
12420
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12421
		unset($conf["variableCheck::checkArguments"]);		
12422
 
12423
		#如果檢查參數失敗
12424
		if($checkArguments["status"]==="false"){
12425
 
12426
			#設置執行失敗
12427
			$result["status"]="false";
12428
 
12429
			#設置執行錯誤訊息
12430
			$result["error"]=$checkArguments;
12431
 
12432
			#回傳結果
12433
			return $result;
12434
 
12435
			}#if end
12436
 
12437
		#如果參數檢查不通過
12438
		if($checkArguments["passed"]==="false"){
12439
 
12440
			#設置執行失敗
12441
			$result["status"]="false";
12442
 
12443
			#設置執行錯誤訊息
12444
			$result["error"]=$checkArguments;
12445
 
12446
			#回傳結果
12447
			return $result;
12448
 
12449
			}#if end
12450
 
12451
		#檢查檔案是否存在
12452
		#函式說明:
12453
		#檢查多個檔案與資料夾是否存在.
12454
		#回傳的結果:
12455
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12456
		#$result["error"],錯誤訊息陣列.
12457
		#$resutl["function"],當前執行的涵式名稱.
12458
		#$result["argu"],使用的參數.
12459
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12460
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12461
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
12462
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12463
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12464
		#必填參數:
12465
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12466
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
12467
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12468
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12469
		#可省略參數
12470
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12471
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="false";
12472
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12473
		#$conf["userDir"]="true";
12474
		#參考資料來源:
12475
		#http://php.net/manual/en/function.file-exists.php
12476
		#http://php.net/manual/en/control-structures.foreach.php
12477
		#備註:
12478
		#函數file_exists檢查的路徑為檔案系統的路徑
12479
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12480
		unset($conf["fileAccess::checkMultiFileExist"]);
12481
 
12482
		#如果檢查檔案是否存在失敗
12483
		if($checkMultiFileExist["status"]==="false"){
12484
 
12485
			#設置執行失敗
12486
			$result["status"]="false";
12487
 
12488
			#設置執行錯誤訊息
12489
			$result["error"]=$checkMultiFileExist;
12490
 
12491
			#回傳結果
12492
			return $result;
12493
 
12494
			}#if end
12495
 
12496
		#如果檔案不存在
12497
		if($checkMultiFileExist["allExist"]==="false"){
12498
 
12499
			#設置執行失敗
12500
			$result["status"]="false";
12501
 
12502
			#設置執行錯誤訊息
12503
			$result["error"]=$checkMultiFileExist;
12504
 
12505
			#回傳結果
12506
			return $result;
12507
 
12508
			}#if end
12509
 
12510
		#產生 base64 的 pdf 編碼字串
12511
		$base64pdf=base64_encode(file_get_contents($conf["file"]));
12512
 
12513
		#產生 base64 的 pdf 編碼字串 data
12514
		$base64pdfData="data:application/pdf;base64,".$base64pdf;
12515
 
12516
		#判斷要用哪種方式嵌入pdf
12517
		switch($conf["type"]){
12518
 
12519
			#如果是用 object 方式
12520
			case "object":
12521
 
12522
				#產生嵌入的語法
12523
				$embedSyntax="<object style=\"width:100%;height:100%;\" data=\"".$base64pdfData."\"></object>";
12524
 
12525
				#取得語法
12526
				$result["content"]=&$embedSyntax;
12527
 
12528
				#跳出 switch
12529
				break;
12530
 
12531
			#預設
12532
			default:
12533
 
12534
				#產生嵌入的語法
12535
				$embedSyntax="<iframe style=\"width:100%;height:100%;\" src=\"".$base64pdfData."\"></iframe>";
12536
 
12537
				#取得語法
12538
				$result["content"]=&$embedSyntax;
12539
 
12540
			}#switch end
12541
 
12542
		#設置執行正常
12543
		$result["status"]="true";
12544
 
12545
		#回傳結果
12546
		return $result;
12547
 
12548
		}#function embedPdf end
12549
 
12550
	/*
12551
	#函式說明:
12552
	#用linux unzip去解壓縮zip檔案 
12553
	#回傳結果:
12554
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12555
	#$result["error"],錯誤訊息.
12556
	#$result["function"],當前執行的函數名稱.
12557
	#$result["content"]["each"],每個檔案的資訊.
12558
	#$result["content"]["each"]["Length"][$i],各別檔案目錄的原始長度.
12559
	#$result["content"]["each"]["Method"][$i],各別檔案目錄的壓縮方法.
12560
	#$result["content"]["each"]["Size"][$i],各別檔案目錄的壓縮後長度.
12561
	#$result["content"]["each"]["Cmpr"][$i],各別檔案目錄的壓縮率.
12562
	#$result["content"]["each"]["Date"][$i],各別檔案目錄的最後修改日期.
12563
	#$result["content"]["each"]["Time"][$i],各別檔案目錄的最後修改時間.
12564
	#$result["content"]["each"]["CRC-32"][$i],各別檔案目錄的CRC-32檢查碼.
12565
	#$result["content"]["each"]["Name"][$i],各別檔案目錄的路徑與名稱.
12566
	#$result["content"]["total"],統整的資訊.
12567
	#$result["content"]["Length"],總共的檔案長度.
12568
	#$result["content"]["Size"],壓縮後的檔案長度.
12569
	#$result["content"]["Cmpr"],平均壓縮率.
12570
	#$result["content"]["count"],壓縮檔裡面總共的檔案跟目錄數目.
12571
	#必填參數;
12572
	#$conf["zip"],字串,要解壓縮的zip檔案.
12573
	$conf["zip"]="";
12574
	#$conf["fileArgu"],字串,__FILE__的內容.
12575
	$conf["fileArgu"]=__FILE__;
12576
	#可省略參數:
12577
	#$conf["extract"],字串,要解壓縮到那個路徑,預設為當前位置"./".
12578
	#$conf["extract"]="";
12579
	#備註:
12580
	#建議加上特定邊碼的支援例如、單
12581
	*/
12582
	public static function unzip(&$conf=array()){
12583
 
12584
		#初始化要回傳的結果
12585
		$result=array();
12586
 
12587
		#取得當前執行的函數名稱
12588
		$result["function"]=__FUNCTION__;
12589
 
12590
		#如果沒有參數
12591
		if(func_num_args()==0){
12592
 
12593
			#設置執行失敗
12594
			$result["status"]="false";
12595
 
12596
			#設置執行錯誤訊息
12597
			$result["error"]="函數".$result["function"]."需要參數";
12598
 
12599
			#回傳結果
12600
			return $result;
12601
 
12602
			}#if end
12603
 
12604
		#取得參數
12605
		$result["argu"]=$conf;
12606
 
12607
		#如果 $conf 不為陣列
12608
		if(gettype($conf)!=="array"){
12609
 
12610
			#設置執行失敗
12611
			$result["status"]="false";
12612
 
12613
			#設置執行錯誤訊息
12614
			$result["error"][]="\$conf變數須為陣列形態";
12615
 
12616
			#如果傳入的參數為 null
12617
			if($conf===null){
12618
 
12619
				#設置執行錯誤訊息
12620
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12621
 
12622
				}#if end
12623
 
12624
			#回傳結果
12625
			return $result;
12626
 
12627
			}#if end
12628
 
12629
		#檢查參數
12630
		#函式說明:
12631
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12632
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12633
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12634
		#$result["function"],當前執行的函式名稱.
12635
		#$result["argu"],設置給予的參數.
12636
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12637
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12638
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12639
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12640
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12641
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12642
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12643
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12644
		#必填寫的參數:
12645
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12646
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
12647
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12648
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12649
		#可以省略的參數:
12650
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12651
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("zip","fileArgu");
12652
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12653
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12654
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12655
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12656
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12657
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("zip","fileArgu");
12658
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12659
		#$conf["canBeEmpty"]=array();
12660
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12661
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("extract");
12662
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12663
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("extract");
12664
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12665
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12666
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12667
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("./");
12668
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
12669
		#$conf["disallowAllSkipableVarIsEmpty"]="";
12670
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
12671
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
12672
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12673
		#$conf["arrayCountEqualCheck"][]=array();
12674
		#參考資料來源:
12675
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12676
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12677
		unset($conf["variableCheck::checkArguments"]);
12678
 
12679
		#如果檢查參數失敗
12680
		if($checkArguments["status"]==="false"){
12681
 
12682
			#設置執行不正常
12683
			$result["status"]="false";
12684
 
12685
			#設置錯誤訊息
12686
			$result["error"]=$checkArguments;
12687
 
12688
			#回傳結果
12689
			return $result;
12690
 
12691
			}#if end
12692
 
12693
		#如果檢查參數不通過
12694
		if($checkArguments["passed"]==="false"){
12695
 
12696
			#設置執行不正常
12697
			$result["status"]="false";
12698
 
12699
			#設置錯誤訊息
12700
			$result["error"]=$checkArguments;
12701
 
12702
			#回傳結果
12703
			return $result;
12704
 
12705
			}#if end
12706
 
12707
		#檢查要解壓縮的檔案是否存在
12708
		#函式說明:
12709
		#檢查多個檔案與資料夾是否存在.
12710
		#回傳的結果:
12711
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12712
		#$result["error"],錯誤訊息陣列.
12713
		#$resutl["function"],當前執行的涵式名稱.
12714
		#$result["argu"],使用的參數.
12715
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12716
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12717
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
12718
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12719
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12720
		#必填參數:
12721
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12722
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["zip"]);
12723
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12724
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12725
		#可省略參數
12726
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12727
		#$conf["disableWebSearch"]="false";
12728
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12729
		#$conf["userDir"]="true";
12730
		#參考資料來源:
12731
		#http://php.net/manual/en/function.file-exists.php
12732
		#http://php.net/manual/en/control-structures.foreach.php
12733
		#備註:
12734
		#函數file_exists檢查的路徑為檔案系統的路徑
12735
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12736
		unset($conf["fileAccess::checkMultiFileExist"]);
12737
 
12738
		#如果檢查檔案是否存在失敗
12739
		if($checkMultiFileExist["status"]==="false"){
12740
 
12741
			#設置執行不正常
12742
			$result["status"]="false";
12743
 
12744
			#設置錯誤訊息
12745
			$result["error"]=$checkMultiFileExist;
12746
 
12747
			#回傳結果
12748
			return $result;
12749
 
12750
			}#if end
12751
 
12752
		#如果要解壓縮的檔案不存在
12753
		if($checkMultiFileExist["allExist"]==="false"){
12754
 
12755
			#設置執行不正常
12756
			$result["status"]="false";
12757
 
12758
			#設置錯誤訊息
12759
			$result["error"]=$checkMultiFileExist;
12760
 
12761
			#回傳結果
12762
			return $result;
12763
 
12764
			}#if end
12765
 
12766
		#函式說明:
12767
		#呼叫shell執行系統命令,並取得回傳的內容.
12768
		#回傳結果:
12769
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12770
		#$result["error"],錯誤訊息陣列.
12771
		#$result["function"],當前執行的函數名稱.
12772
		#$result["argu"],使用的參數.
12773
		#$result["cmd"],執行的指令內容.
12774
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12775
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12776
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12777
		#$result["running"],是否還在執行.
12778
		#$result["pid"],pid
12779
		#必填參數:
12780
		#$conf["command"],字串,要執行的指令與.
12781
		$conf["external::callShell"]["command"]="unzip";
12782
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12783
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12784
		#可省略參數:
12785
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12786
		$conf["external::callShell"]["argu"]=array("-d",$conf["extract"],"-o","-q",$conf["zip"]);
12787
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12788
		#$conf["arguIsAddr"]=array();
12789
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12790
		#$conf["enablePrintDescription"]="true";
12791
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12792
		#$conf["printDescription"]="";
12793
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12794
		$conf["external::callShell"]["escapeshellarg"]="true";
12795
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12796
		#$conf["username"]="";
12797
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12798
		#$conf["password"]="";
12799
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12800
		#$conf["useScript"]="";
12801
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12802
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12803
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12804
		#$conf["inBackGround"]="";
12805
		#備註:
12806
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12807
		#參考資料:
12808
		#exec=>http://php.net/manual/en/function.exec.php
12809
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12810
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12811
		$callShell=external::callShell($conf["external::callShell"]);
12812
		unset($conf["external::callShell"]);
12813
 
12814
		#如果執行cmd失敗
12815
		if($callShell["status"]==="false"){
12816
 
12817
			#設置執行不正常
12818
			$result["status"]="false";
12819
 
12820
			#設置錯誤訊息
12821
			$result["error"]=$callShell;
12822
 
12823
			#回傳結果
12824
			return $result;
12825
 
12826
			}#if end
12827
 
12828
		#函式說明:
12829
		#呼叫shell執行系統命令,並取得回傳的內容.
12830
		#回傳的結果:
12831
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12832
		#$result["error"],錯誤訊息陣列.
12833
		#$result["function"],當前執行的函數名稱.
12834
		#$result["argu"],使用的參數.
12835
		#$result["cmd"],執行的指令內容.
12836
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12837
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12838
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12839
		#$result["running"],是否還在執行.
12840
		#$result["pid"],pid
12841
		#必填的參數
12842
		#$conf["command"],字串,要執行的指令與.
12843
		$conf["external::callShell"]["command"]="unzip";
12844
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12845
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12846
		#可省略參數:
12847
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12848
		$conf["external::callShell"]["argu"]=array("-v",$conf["zip"]);
12849
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12850
		#$conf["arguIsAddr"]=array();
12851
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12852
		#$conf["enablePrintDescription"]="true";
12853
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12854
		#$conf["printDescription"]="";
12855
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12856
		$conf["external::callShell"]["escapeshellarg"]="true";
12857
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12858
		#$conf["username"]="";
12859
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12860
		#$conf["password"]="";
12861
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12862
		#$conf["useScript"]="";
12863
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12864
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12865
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12866
		#$conf["inBackGround"]="";
12867
		#備註:
12868
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12869
		#參考資料:
12870
		#exec=>http://php.net/manual/en/function.exec.php
12871
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12872
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12873
		$callShell=external::callShell($conf["external::callShell"]);
12874
		unset($conf["external::callShell"]);
12875
 
12876
		#如果執行cmd失敗
12877
		if($callShell["status"]==="false"){
12878
 
12879
			#設置執行不正常
12880
			$result["status"]="false";
12881
 
12882
			#設置錯誤訊息
12883
			$result["error"]=$callShell;
12884
 
12885
			#回傳結果
12886
			return $result;
12887
 
12888
			}#if end	
12889
 
12890
		#取得輸出的內容陣列
12891
		$unzipInfo=$callShell["output"];
12892
 
12893
		/*
12894
 
12895
		 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
12896
		--------  ------  ------- ---- ---------- ----- --------  ----
12897
		 4194304  Defl:X  2507269  40% 05-04-2002 17:30 9386a740  PS2 Bios 30004R V6 Pal.bin
12898
			   4  Defl:X        6 -50% 05-15-2005 06:45 054a6ec2  PS2 Bios 30004R V6 Pal.MEC
12899
			1024  Defl:X       22  98% 06-25-2005 14:55 3493bb06  PS2 Bios 30004R V6 Pal.NVM
12900
		  199680  Defl:X    70524  65% 06-02-2004 16:50 2c3bcd32  rom1.bin
12901
		 4194304  Defl:X  2637496  37% 02-20-2005 21:12 6f8e3c29  SCPH-70004_BIOS_V12_PAL_200.BIN
12902
		 3145728  Defl:X  3138427   0% 02-20-2005 21:12 bf3cbc65  SCPH-70004_BIOS_V12_PAL_200.EROM
12903
			1024  Defl:X      706  31% 02-20-2005 21:12 a8d51ead  SCPH-70004_BIOS_V12_PAL_200.NVM
12904
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM1
12905
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM2
12906
		 4194304  Defl:X  2213105  47% 10-18-2000 06:06 b7ef81a9  scph10000.bin
12907
			1024  Defl:X       11  99% 01-01-2005 00:42 efb5af2e  scph10000.NVM
12908
		 4194304  Defl:X  2511182  40% 06-27-2003 10:51 a19e0bf5  scph39001.bin
12909
			   4  Defl:X        6 -50% 05-14-2005 16:00 054a6ec2  scph39001.MEC
12910
			1024  Defl:X       20  98% 05-31-2005 16:09 e14a6cd6  scph39001.NVM
12911
		--------          -------  ---                            -------
12912
		21175304         13378622  37%                            14 files
12913
 
12914
		*/
12915
 
12916
		#取得行數
12917
		$lineCount=count($unzipInfo);
12918
 
12919
		#取得標題
12920
		#函式說明:
12921
		#將固定格式的字串分開,並回傳分開的結果。
12922
		#回傳結果:
12923
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12924
		#$result["error"],錯誤訊息陣列
12925
		#$result["function"],當前執行的函數名稱.
12926
		#$result["oriStr"],要分割的原始字串內容
12927
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12928
		#$result["dataCounts"],爲總共分成幾段
12929
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
12930
		#必填參數:
12931
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[1];#要處理的字串。
12932
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12933
		#可省略參數:
12934
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12935
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12936
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12937
		unset($conf["stringProcess::spiltString"]);
12938
 
12939
		#如果分割字串失敗
12940
		if($spiltString["status"]==="false"){
12941
 
12942
			#設置執行不正常
12943
			$result["status"]="false";
12944
 
12945
			#設置錯誤訊息
12946
			$result["error"]=$spiltString;
12947
 
12948
			#回傳結果
12949
			return $result;
12950
 
12951
			}#if end
12952
 
12953
		#如果沒有分割用的關鍵字
12954
		if($spiltString["found"]==="false"){
12955
 
12956
			#設置執行不正常
12957
			$result["status"]="false";
12958
 
12959
			#設置錯誤訊息
12960
			$result["error"]=$spiltString;
12961
 
12962
			#回傳結果
12963
			return $result;
12964
 
12965
			}#if end
12966
 
12967
		#取得標題欄位
12968
		$titles=$spiltString["dataArray"];	
12969
 
12970
		#取得標題欄位數目
12971
		$titleCount=$spiltString["dataCounts"];
12972
 
12973
		#針對每列輸出
12974
		for($i=3;$i<$lineCount-2;$i++){
12975
 
12976
			#取得各欄位的內容
12977
			#函式說明:
12978
			#將固定格式的字串分開,並回傳分開的結果。
12979
			#回傳結果:
12980
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12981
			#$result["error"],錯誤訊息陣列
12982
			#$result["function"],當前執行的函數名稱.
12983
			#$result["oriStr"],要分割的原始字串內容
12984
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12985
			#$result["dataCounts"],爲總共分成幾段
12986
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
12987
			#必填參數:
12988
			$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$i];#要處理的字串。
12989
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12990
			#可省略參數:
12991
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12992
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12993
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12994
			unset($conf["stringProcess::spiltString"]);
12995
 
12996
			#如果分割字串失敗
12997
			if($spiltString["status"]==="false"){
12998
 
12999
				#設置執行不正常
13000
				$result["status"]="false";
13001
 
13002
				#設置錯誤訊息
13003
				$result["error"]=$spiltString;
13004
 
13005
				#回傳結果
13006
				return $result;
13007
 
13008
				}#if end
13009
 
13010
			#如果沒有分割用的關鍵字
13011
			if($spiltString["found"]==="false"){
13012
 
13013
				#設置執行不正常
13014
				$result["status"]="false";
13015
 
13016
				#設置錯誤訊息
13017
				$result["error"]=$spiltString;
13018
 
13019
				#回傳結果
13020
				return $result;
13021
 
13022
				}#if end
13023
 
13024
			#取得各欄位的內容
13025
			$cols=$spiltString["dataArray"];
13026
 
13027
			#取得欄位的數目
13028
			$colsCount=$spiltString["dataCounts"];
13029
 
13030
			#如果實際抓出的內容欄位數量大於標題欄位數量,代表檔案/目錄名稱含有空格
13031
			if($colsCount>$titleCount){
13032
 
13033
				#新的檔案名稱
13034
				$newFileName="";
13035
 
13036
				#針對每個多出的欄位
13037
				for($j=$titleCount;$j<$colsCount;$j++){
13038
 
13039
					#串接屬於檔案名稱的部分
13040
					$newFileName=$newFileName.$cols[$j];
13041
 
13042
					#如果不是最後一個項目
13043
					if($j!==$colsCount-1){
13044
 
13045
						#增加空格
13046
						$newFileName=$newFileName." ";
13047
 
13048
						}#if end
13049
 
13050
					}#for end
13051
 
13052
				#取代成對的檔案名稱
13053
				$cols[$titleCount-1]=$newFileName;
13054
 
13055
				}#if end
13056
 
13057
			#針對每個欄位
13058
			for($j=0;$j<$titleCount;$j++){
13059
 
13060
				#取得欄位內容
13061
				$result["content"]["each"][$titles[$j]][]=$cols[$j];
13062
 
13063
				}#for end
13064
 
13065
			}#for end
13066
 
13067
		#取得 total 的輸出內容
13068
		#函式說明:
13069
		#將固定格式的字串分開,並回傳分開的結果。
13070
		#回傳結果:
13071
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13072
		#$result["error"],錯誤訊息陣列
13073
		#$result["function"],當前執行的函數名稱.
13074
		#$result["oriStr"],要分割的原始字串內容
13075
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13076
		#$result["dataCounts"],爲總共分成幾段
13077
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
13078
		#必填參數:
13079
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$lineCount-1];#要處理的字串。
13080
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
13081
		#可省略參數:
13082
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
13083
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
13084
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13085
		unset($conf["stringProcess::spiltString"]);
13086
 
13087
		#如果分割字串失敗
13088
		if($spiltString["status"]==="false"){
13089
 
13090
			#設置執行不正常
13091
			$result["status"]="false";
13092
 
13093
			#設置錯誤訊息
13094
			$result["error"]=$spiltString;
13095
 
13096
			#回傳結果
13097
			return $result;
13098
 
13099
			}#if end
13100
 
13101
		#如果沒有分割用的關鍵字
13102
		if($spiltString["found"]==="false"){
13103
 
13104
			#設置執行不正常
13105
			$result["status"]="false";
13106
 
13107
			#設置錯誤訊息
13108
			$result["error"]=$spiltString;
13109
 
13110
			#回傳結果
13111
			return $result;
13112
 
13113
			}#if end
13114
 
13115
		#取得各欄位的內容
13116
		$cols=$spiltString["dataArray"];
13117
 
13118
		#取得總共的檔案長度
13119
		$result["content"]["total"][$titles[0]]=$cols[0];
13120
 
13121
		#取得壓縮時的總共檔案長度
13122
		$result["content"]["total"][$titles[2]]=$cols[1];
13123
 
13124
		#取得壓縮時的總共檔案長度
13125
		$result["content"]["total"][$titles[3]]=$cols[2];
13126
 
13127
		#取得解壓縮出了多少檔案跟目錄
13128
		$result["content"]["total"]["count"]=explode(" ",$cols[3])[0];
13129
 
13130
		#設置執行正常
13131
		$result["status"]="true";
13132
 
13133
		#回傳結果
13134
		return $result;
13135
 
13136
		}#function unzip end
13137
 
13138
	/*
13139
	#函式說明:
13140
	#接收Range: bytes=0-499格式的header, 輸出檔案的片段或完整檔案.
13141
	#回傳結果:
13142
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13143
	#$result["error"],錯誤訊息.
13144
	#$result["function"],當前執行的函式名稱.
13145
	#必填參數:
13146
	#$conf["filePath"],字串,檔案的路徑.
13147
	$conf["filePath"]="";
13148
	#可省略參數:
13149
	#$conf["fileName"],字串,顯示的檔案名稱,預設為basename($conf["filePath"]);
13150
	#$conf["fileName"]="";
13151
	#參考資料:
13152
	#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/
13153
	#http://php.net/manual/en/function.filemtime.php
13154
	#http://php.net/manual/en/function.connection-status.php
13155
	#http://php.net/manual/en/function.fread.php
13156
	#備註:
13157
	#請勿在運行該函式前印出任何內容,這是要給用戶端接收的內容.
13158
	*/
13159
	public static function partDownload(&$conf=array()){
13160
 
13161
		#初始化要回傳的結果
13162
		$result=array();
13163
 
13164
		#取得當前執行的函數名稱
13165
		$result["function"]=__FUNCTION__;
13166
 
13167
		#如果沒有參數
13168
		if(func_num_args()==0){
13169
 
13170
			#設置執行失敗
13171
			$result["status"]="false";
13172
 
13173
			#設置執行錯誤訊息
13174
			$result["error"]="函數".$result["function"]."需要參數";
13175
 
13176
			#回傳結果
13177
			return $result;
13178
 
13179
		}#if end
13180
 
13181
		#取得參數
13182
		$result["argu"]=$conf;
13183
 
13184
		#如果 $conf 不為陣列
13185
		if(gettype($conf)!=="array"){
13186
 
13187
			#設置執行失敗
13188
			$result["status"]="false";
13189
 
13190
			#設置執行錯誤訊息
13191
			$result["error"][]="\$conf變數須為陣列形態";
13192
 
13193
			#如果傳入的參數為 null
13194
			if($conf===null){
13195
 
13196
				#設置執行錯誤訊息
13197
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13198
 
13199
				}#if end
13200
 
13201
			#回傳結果
13202
			return $result;
13203
 
13204
			}#if end
13205
 
13206
		#檢查參數
13207
		#函式說明:
13208
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13209
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13210
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13211
		#$result["function"],當前執行的函式名稱.
13212
		#$result["argu"],設置給予的參數.
13213
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13214
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13215
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13216
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13217
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13218
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13219
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13220
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13221
		#必填寫的參數:
13222
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13223
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13224
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13225
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13226
		#可以省略的參數:
13227
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13228
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePath");
13229
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13230
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
13231
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13232
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13233
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13234
		#$conf["canNotBeEmpty"]=array();
13235
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13236
		#$conf["canBeEmpty"]=array();
13237
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13238
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("fileName");
13239
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13240
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName");
13241
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13242
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13243
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13244
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13245
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13246
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13247
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13248
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13249
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13250
		#$conf["arrayCountEqualCheck"][]=array();
13251
		#參考資料來源:
13252
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13253
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13254
		unset($conf["variableCheck::checkArguments"]);
13255
 
13256
		#如果檢查參數失敗
13257
		if($checkArguments["status"]==="false"){
13258
 
13259
			#設置執行失敗
13260
			$result["status"]="false";
13261
 
13262
			#設置執行錯誤
13263
			$result["error"]=$checkArguments;
13264
 
13265
			#回傳結果
13266
			return $result;
13267
 
13268
			}#if end
13269
 
13270
		#如果檢查參數不通過
13271
		if($checkArguments["passed"]==="false"){
13272
 
13273
			#設置執行失敗
13274
			$result["status"]="false";
13275
 
13276
			#設置執行錯誤
13277
			$result["error"]=$checkArguments;
13278
 
13279
			#回傳結果
13280
			return $result;
13281
 
13282
			}#if end
13283
 
13284
		#如果沒有設置 $conf["fileName"]
13285
		if(!isset($conf["fileName"])){
13286
 
13287
			#取得檔案名稱
13288
			$filename=basename($conf["filePath"]);
13289
 
13290
			}#if end
13291
 
13292
		#反之
13293
		else{
13294
 
13295
			#取得設定好的檔案名稱
13296
			$filename=&$conf["fileName"];
13297
 
13298
			}#else end
13299
 
13300
		#取得檔案路徑
13301
		$location=$conf["filePath"];
13302
 
13303
		#取得mimetype
13304
		$mimetype=mime_content_type($location);
13305
 
13306
		#如果檔案不存在
13307
		if(!file_exists($location)){
13308
 
13309
			#提示找不到檔案
13310
			header("HTTP/1.1 404 Not Found");
13311
 
13312
			#設置執行失敗
13313
			$result["status"]="false";
13314
 
13315
			#設置錯誤訊息
13316
			$result["error"][]="檔案 ".$location." 不存在.";
13317
 
13318
			#回傳結果
13319
			return $result;
13320
 
13321
			}#if end
13322
 
13323
		#取得檔案的bytes長度
13324
		$size  = filesize($location);
13325
 
13326
		#取得檔案的最後變更日期
13327
		$time  = date('r', filemtime($location));
13328
 
13329
		#讀取檔案的2元碼內容
13330
		$fm = @fopen($location, 'rb');
13331
 
13332
		#如果開啟檔案失敗
13333
		if(!$fm){
13334
 
13335
			#提示錯誤
13336
			header("HTTP/1.1 505 Internal server error");
13337
 
13338
			#設置執行失敗
13339
			$result["status"]="false";
13340
 
13341
			#設置錯誤訊息
13342
			$result["error"][]="開啟檔案 ".$location." 失敗.";
13343
 
13344
			#回傳結果
13345
			return $result;
13346
 
13347
			}#if end
13348
 
13349
		#初始化要提供的bytes長度起始點
13350
		$begin  = 0;
13351
 
13352
		#初始化要提供的bytes長度結束點
13353
		$end  = $size - 1;
13354
 
13355
		#如果有接收到 'HTTP_RANGE' 的 header 訊息
13356
		if(isset($_SERVER['HTTP_RANGE'])){
13357
 
13358
			#接收到的範例
13359
			#Range: bytes=0-499 
13360
 
13361
			#取得要求的bytes位置範圍
13362
			sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d",$begin,$end);
13363
 
13364
			#如果 $begin 或 $end  有缺
13365
			if(!isset($begin) || !isset($end)){
13366
 
13367
				#設置執行失敗
13368
				$result["status"]="false";
13369
 
13370
				#設置錯誤訊息
13371
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13372
 
13373
				#回傳結果
13374
				return $result;
13375
 
13376
				}#if end
13377
 
13378
			#如果 $begin 沒有小於等於 $end
13379
			if(!($begin<=$end)){
13380
 
13381
				#設置執行失敗
13382
				$result["status"]="false";
13383
 
13384
				#設置錯誤訊息
13385
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13386
 
13387
				#回傳結果
13388
				return $result;
13389
 
13390
				}#if end
13391
 
13392
			}#if end
13393
 
13394
		#提示 200 ok
13395
		header('HTTP/1.1 200 OK');
13396
 
13397
		#提示 mimetype
13398
		header("Content-Type: $mimetype");
13399
 
13400
		#要先驗證cache中的資料,取得的內容放在快取的時間為0
13401
		header('Cache-Control: public, must-revalidate, max-age=0');
13402
 
13403
		#提示不要cache
13404
		header('Pragma: no-cache');  
13405
 
13406
		#提示接收的 Ranges 單位為 bytes
13407
		header('Accept-Ranges: bytes');
13408
 
13409
		#數值傳輸的內容長度為多少
13410
		header('Content-Length:' . (($end - $begin) + 1));
13411
 
13412
		#提示內容為檔案的哪邊到哪邊與總共的長度
13413
		header("Content-Range: bytes $begin-$end/$size");
13414
 
13415
		#提示檔案的名稱
13416
		header("Content-Disposition: inline; filename=$filename");
13417
 
13418
		#提示用2元碼傳輸
13419
		header("Content-Transfer-Encoding: binary");
13420
 
13421
		#提示檔案最後變更日期
13422
		header("Last-Modified: $time");
13423
 
13424
		#初始化當前位置
13425
		$cur  = $begin;
13426
 
13427
		#指定讀取的起始點為 $begin 
13428
		fseek($fm, $begin, 0);
13429
 
13430
		#讀取內容, 若不是檔案結尾, 且當前位置($cur)小於等於 本次要提供的長度結尾($end), 且connection_status為0
13431
		while(!feof($fm) && $cur<=$end && (connection_status()===0)){
13432
 
13433
			#一次最多印出 1024*16bytes 的長度,若剩下長度不足則只印出剩下的長度.
13434
			echo fread($fm, min(1024 * 16, ($end - $cur) + 1));
13435
 
13436
			#更改位置
13437
			$cur += 1024 * 16;
13438
 
13439
			}#while end
13440
 
13441
		}#function partDownload end
13442
 
13443
	/*
13444
	#函式說明:
13445
	#尋找檔案. 
13446
	#回傳結果:
13447
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13448
	#$result["error"],錯誤訊息.
13449
	#$result["warning"],警告訊息陣列.
13450
	#$result["function"],當前執行的函數名稱.
13451
	#$result["argu"],所使用的參數.
13452
	#$result["found"],是否有找到可以轉換的檔案,"true"代表有;"false"代表沒有.
13453
	#$result["content"],找到的檔案陣列.
13454
	#必填參數:
13455
	#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13456
	$conf["keyWord"]="";
13457
	#$conf["path"],字串陣列,虛擬硬碟檔案的搜尋路徑,預設為當前路徑.
13458
	$conf["path"]=array();
13459
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13460
	$conf["fileArgu"]=__FILE__;
13461
	#參考資料:
13462
	#http://php.net/manual/en/function.glob.php
13463
	#備註:
13464
	#無.
13465
	*/
13466
	public static function findFile(&$conf=array()){
13467
 
13468
		#初始化要回傳的結果
13469
		$result=array();
13470
 
13471
		#取得當前執行的函數名稱
13472
		$result["function"]=__FUNCTION__;
13473
 
13474
		#如果沒有參數
13475
		if(func_num_args()==0){
13476
 
13477
			#設置執行失敗
13478
			$result["status"]="false";
13479
 
13480
			#設置執行錯誤訊息
13481
			$result["error"]="函數".$result["function"]."需要參數";
13482
 
13483
			#回傳結果
13484
			return $result;
13485
 
13486
			}#if end		
13487
 
13488
		#取得參數
13489
		$result["argu"]=$conf;
13490
 
13491
		#如果 $conf 不為陣列
13492
		if(gettype($conf)!=="array"){
13493
 
13494
			#設置執行失敗
13495
			$result["status"]="false";
13496
 
13497
			#設置執行錯誤訊息
13498
			$result["error"][]="\$conf變數須為陣列形態";
13499
 
13500
			#如果傳入的參數為 null
13501
			if($conf===null){
13502
 
13503
				#設置執行錯誤訊息
13504
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13505
 
13506
				}#if end
13507
 
13508
			#回傳結果
13509
			return $result;
13510
 
13511
			}#if end
13512
 
13513
		#函式說明:
13514
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13515
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13516
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13517
		#$result["function"],當前執行的函式名稱.
13518
		#$result["argu"],設置給予的參數.
13519
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13520
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13521
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13522
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13523
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13524
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13525
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13526
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13527
		#必填寫的參數:
13528
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13529
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13530
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13531
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13532
		#可以省略的參數:
13533
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13534
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","keyWord","fileArgu");
13535
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13536
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");
13537
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13538
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13539
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13540
		#$conf["canNotBeEmpty"]=array();
13541
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13542
		#$conf["canBeEmpty"]=array();
13543
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13544
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13545
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13546
		#$conf["skipableVariableName"]=array();
13547
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13548
		#$conf["skipableVariableType"]=array();
13549
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13550
		#$conf["skipableVarDefaultValue"]=array("");
13551
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13552
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13553
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13554
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13555
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13556
		#$conf["arrayCountEqualCheck"][]=array();
13557
		#參考資料來源:
13558
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13559
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13560
		unset($conf["variableCheck::checkArguments"]);
13561
 
13562
		#如果檢查參數失敗
13563
		if($checkArguments["status"]==="false"){
13564
 
13565
			#設置執行失敗
13566
			$result["status"]="false";
13567
 
13568
			#設置執行失敗訊息
13569
			$result["error"]=$checkArguments;
13570
 
13571
			#回傳結果
13572
			return $result;
13573
 
13574
			}#if end
13575
 
13576
		#如果檢查參數不通過
13577
		if($checkArguments["passed"]==="false"){
13578
 
13579
			#設置執行失敗
13580
			$result["status"]="false";
13581
 
13582
			#設置執行失敗訊息
13583
			$result["error"]=$checkArguments;
13584
 
13585
			#回傳結果
13586
			return $result;
13587
 
13588
			}#if end
13589
 
13590
		#檢查要搜尋的路徑是否都存在
13591
		#函式說明:
13592
		#s檢查多個檔案與資料夾是否存在.
13593
		#回傳的結果:
13594
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13595
		#$result["error"],錯誤訊息陣列.
13596
		#$resutl["function"],當前執行的涵式名稱.
13597
		#$result["argu"],使用的參數.
13598
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13599
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
13600
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
13601
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
13602
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13603
		#必填參數:
13604
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
13605
		$conf["self::checkMultiFileExist"]["fileArray"]=$conf["path"];
13606
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13607
		$conf["self::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13608
		#可省略參數
13609
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
13610
		#$conf["disableWebSearch"]="false";
13611
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13612
		#$conf["userDir"]="true";
13613
		#參考資料來源:
13614
		#http://php.net/manual/en/function.file-exists.php
13615
		#http://php.net/manual/en/control-structures.foreach.php
13616
		#備註:
13617
		#函數file_exists檢查的路徑為檔案系統的路徑
13618
		$checkMultiFileExist=self::checkMultiFileExist($conf["self::checkMultiFileExist"]);
13619
		unset($conf["self::checkMultiFileExist"]);
13620
 
13621
		#如果檢查目錄存在失敗
13622
		if($checkMultiFileExist["status"]==="false"){
13623
 
13624
			#設置執行失敗
13625
			$result["status"]="false";
13626
 
13627
			#設置執行失敗訊息
13628
			$result["error"]=$checkMultiFileExist;
13629
 
13630
			#回傳結果
13631
			return $result;
13632
 
13633
			}#if end	
13634
 
13635
		#如果目錄不存在
13636
		if($checkMultiFileExist["status"]==="false"){
13637
 
13638
			#設置執行失敗
13639
			$result["status"]="false";
13640
 
13641
			#設置執行失敗訊息
13642
			$result["error"]=$checkMultiFileExist;
13643
 
13644
			#回傳結果
13645
			return $result;
13646
 
13647
			}#if end
13648
 
13649
		#如果有路徑不存在
13650
		if($checkMultiFileExist["allExist"]==="false"){
13651
 
13652
			#設置執行失敗
13653
			$result["status"]="false";
13654
 
13655
			#設置執行失敗訊息
13656
			$result["error"]=$checkMultiFileExist;
13657
 
13658
			#設置提示有路徑不存在的訊息
13659
			$result["warning"][]="參數path的路徑沒有每個都存在";
13660
 
13661
			#回傳結果
13662
			return $result;
13663
 
13664
			}#if end
13665
 
13666
		#預設沒有找到檔案
13667
		$result["found"]="false";	
13668
 
13669
		#針對每個要搜尋的路徑
13670
		foreach($conf["path"] as $path){
13671
 
13672
			#函式說明:
13673
			#用find指令尋找檔案
13674
			#回傳結果:
13675
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13676
			#$result["error"],錯誤訊息.
13677
			#$result["function"],當前執行的函數名稱.
13678
			#$result["argu"],所使用的參數.
13679
			#$result["found"],是否有找到符合的檔案,"true"代表有;"false"代表沒有.
13680
			#$result["content"],找到的檔案陣列.
13681
			#必填參數:
13682
			#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13683
			$conf["cmd::find"]["keyWord"]=$conf["keyWord"];	
13684
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13685
			$conf["cmd::find"]["fileArgu"]=$conf["fileArgu"];
13686
			#可省略參數:
13687
			#$conf["path"],字串,搜尋的路徑,預設為"/".
13688
			$conf["cmd::find"]["path"]=$path;
13689
			#$conf["fileOnly"],字串,"true"代表只要找檔案,"false"代表.
13690
			$conf["cmd::find"]["fileOnly"]="true";
13691
			#參考資料:
13692
			#http://php.net/manual/en/function.glob.php
13693
			$find=cmd::find($conf["cmd::find"]);
13694
			unset($conf["cmd::find"]);
13695
 
13696
			#如果尋找檔案失敗
13697
			if($find["status"]==="false"){
13698
 
13699
				#設置執行失敗
13700
				$result["status"]="false";
13701
 
13702
				#設置執行失敗訊息
13703
				$result["error"]=$find;
13704
 
13705
				#回傳結果
13706
				return $result;
13707
 
13708
				}#if end
13709
 
13710
			#如果有找到符合的檔案
13711
			if($find["found"]==="true"){
13712
 
13713
				#設置有找到檔案
13714
				$result["found"]="true";
13715
 
13716
				#針對每個找到的檔案
13717
				foreach($find["content"] as $filtedFile){
13718
 
13719
					#設置有找到的檔案
13720
					$result["content"][]=$filtedFile;
13721
 
13722
					}#foreach end
13723
 
13724
				}#if end
13725
 
13726
			}#foreach end		
13727
 
13728
		#設置執行正常
13729
		$result["status"]="true";
13730
 
13731
		#回傳結果
13732
		return $result;
13733
 
13734
		}#function findFile end
13735
 
13736
	/*
13737
	#函式說明:
13738
	#判斷檔案位於哪個分割區
13739
	#回傳結果:
13740
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13741
	#$result["error"],錯誤訊息.
13742
	#$result["function"],當前執行的函數名稱.
13743
	#$result["argu"],所使用的參數.
13744
	#$result["content"],找到的檔案所屬分割區資訊.
13745
	#必填參數:
13746
	#$conf["file"],字串,檔案的路徑與名稱.
13747
	$conf["file"]="";
13748
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13749
	$conf["fileArgu"]=__FILE__;
13750
	#可省略參數:
13751
	#無.
13752
	#參考資料:
13753
	#無.
13754
	#備註:
13755
	#無.
13756
	*/
13757
	public static function addrInMountPoint(&$conf=array()){
13758
 
13759
		#初始化要回傳的結果
13760
		$result=array();
13761
 
13762
		#取得當前執行的函數名稱
13763
		$result["function"]=__FUNCTION__;
13764
 
13765
		#如果沒有參數
13766
		if(func_num_args()==0){
13767
 
13768
			#設置執行失敗
13769
			$result["status"]="false";
13770
 
13771
			#設置執行錯誤訊息
13772
			$result["error"]="函數".$result["function"]."需要參數";
13773
 
13774
			#回傳結果
13775
			return $result;
13776
 
13777
			}#if end		
13778
 
13779
		#取得參數
13780
		$result["argu"]=$conf;
13781
 
13782
		#如果 $conf 不為陣列
13783
		if(gettype($conf)!=="array"){
13784
 
13785
			#設置執行失敗
13786
			$result["status"]="false";
13787
 
13788
			#設置執行錯誤訊息
13789
			$result["error"][]="\$conf變數須為陣列形態";
13790
 
13791
			#如果傳入的參數為 null
13792
			if($conf===null){
13793
 
13794
				#設置執行錯誤訊息
13795
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13796
 
13797
				}#if end
13798
 
13799
			#回傳結果
13800
			return $result;
13801
 
13802
			}#if end
13803
 
13804
		#函式說明:
13805
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13806
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13807
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13808
		#$result["function"],當前執行的函式名稱.
13809
		#$result["argu"],設置給予的參數.
13810
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13811
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13812
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13813
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13814
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13815
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13816
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13817
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13818
		#必填寫的參數:
13819
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13820
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13821
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13822
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13823
		#可以省略的參數:
13824
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13825
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
13826
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13827
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13828
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13829
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13830
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13831
		#$conf["canNotBeEmpty"]=array();
13832
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13833
		#$conf["canBeEmpty"]=array();
13834
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13835
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13836
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13837
		#$conf["skipableVariableName"]=array();
13838
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13839
		#$conf["skipableVariableType"]=array();
13840
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13841
		#$conf["skipableVarDefaultValue"]=array("");
13842
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13843
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13844
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13845
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13846
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13847
		#$conf["arrayCountEqualCheck"][]=array();
13848
		#參考資料來源:
13849
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13850
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13851
		unset($conf["variableCheck::checkArguments"]);
13852
 
13853
		#如果檢查參數失敗
13854
		if($checkArguments["status"]==="false"){
13855
 
13856
			#設置執行失敗
13857
			$result["status"]="false";
13858
 
13859
			#設置執行失敗訊息
13860
			$result["error"]=$checkArguments;
13861
 
13862
			#回傳結果
13863
			return $result;
13864
 
13865
			}#if end
13866
 
13867
		#如果檢查參數不通過
13868
		if($checkArguments["passed"]==="false"){
13869
 
13870
			#設置執行失敗
13871
			$result["status"]="false";
13872
 
13873
			#設置執行失敗訊息
13874
			$result["error"]=$checkArguments;
13875
 
13876
			#回傳結果
13877
			return $result;
13878
 
13879
			}#if end
13880
 
13881
		#函式說明:
13882
		#透過lsblk指令的輸出取得已經掛載的blk.
13883
		#回傳結果:
13884
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13885
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13886
		#$result["function"],當前執行的函式名稱.
13887
		#$result["content"],lsblk的輸出內容.
13888
		#必填參數:
13889
		#$conf["fileArgu"],字串,變數__FILE__的內容.
13890
		$conf["cmd::lsblk"]["fileArgu"]=$conf["fileArgu"];
13891
		#可省略參數:
13892
		#無.	
13893
		$lsblk=cmd::lsblk($conf["cmd::lsblk"]);
13894
		unset($conf["cmd::lsblk"]);
13895
 
13896
		#如果執行失敗
13897
		if($lsblk["status"]==="false"){
13898
 
13899
			#設置執行失敗
13900
			$result["status"]="false";
13901
 
13902
			#設置執行失敗訊息
13903
			$result["error"]=$lsblk;
13904
 
13905
			#回傳結果
13906
			return $result;
13907
 
13908
			}#if end
13909
 
13910
		#將 $conf["file"] 轉換成絕對路徑
13911
		#函式說明:
13912
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
13913
		#回傳結果:
13914
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
13915
		#$result["error"],錯誤訊息陣列.
13916
		#$result["function"],函數名稱. 
13917
		#$result["argu"],使用的參數.
13918
		#$result["content"],網址,若是在命令列執行,則為"null".
13919
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
13920
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
13921
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
13922
		#必填參數:
13923
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
13924
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["file"];
13925
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
13926
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
13927
		#可省略參數:
13928
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13929
		#$conf["userDir"]="true";
13930
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
13931
		unset($conf["fileAccess::getInternetAddress"]);
13932
 
13933
		#如果執行失敗
13934
		if($getInternetAddress["status"]==="false"){
13935
 
13936
			#設置執行失敗
13937
			$result["status"]="false";
13938
 
13939
			#設置執行失敗訊息
13940
			$result["error"]=$getInternetAddress;
13941
 
13942
			#回傳結果
13943
			return $result;
13944
 
13945
			}#if end	
13946
 
13947
		#使用絕對位置作為輸入字串
13948
		#函式說明:
13949
		#尋找字串是否存在對應的關鍵字,且符合的最常關鍵字為何?
13950
		#回傳結果:
13951
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13952
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13953
		#$result["function"],當前執行的函式名稱.
13954
		#$result["argu"],所使用的參數.
13955
		#$result["founded"],是否有找到關鍵字,"true"代表有找到,"false"代表沒有找到.
13956
		#$result["content"],最符合的字串完整內容.
13957
		#必填參數:
13958
		#$conf["input"],字串,要比對的字串陣列.
13959
		$conf["search::findLikelyStr"]["input"]=$getInternetAddress["fileSystemAbsoulutePosition"];
13960
		#$conf["keyWord"],字串陣列,要搜尋的關鍵字.
13961
		$conf["search::findLikelyStr"]["keyWord"]=$lsblk["content"]["MOUNTPOINT"];
13962
		$findLikelyStr=search::findLikelyStr($conf["search::findLikelyStr"]);
13963
		unset($conf["search::findLikelyStr"]);
13964
 
13965
		#如果執行失敗
13966
		if($findLikelyStr["status"]==="false"){
13967
 
13968
			#設置執行失敗
13969
			$result["status"]="false";
13970
 
13971
			#設置執行失敗訊息
13972
			$result["error"]=$findLikelyStr;
13973
 
13974
			#回傳結果
13975
			return $result;
13976
 
13977
			}#if end
13978
 
13979
		#如果找不到歸屬的分割區
13980
		if($findLikelyStr["found"]==="false"){
13981
 
13982
			#設置執行失敗
13983
			$result["status"]="false";
13984
 
13985
			#設置執行失敗訊息
13986
			$result["error"]=$findLikelyStr;
13987
 
13988
			#回傳結果
13989
			return $result;
13990
 
13991
			}#if end
13992
 
13993
		#設置歸屬的分割區資訊
13994
		$result["content"]=$findLikelyStr["content"];
13995
 
13996
		#設置執行正常
13997
		$result["status"]="true";
13998
 
13999
		#回傳結果
14000
		return $result;
14001
 
14002
		}#function addrInMountPoint end
14003
 
14004
	/*
14005
	#函式說明:
14006
	#取得檔案的副檔名
14007
	#回傳結果:
14008
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14009
	#$result["error"],錯誤訊息.
14010
	#$result["function"],當前執行的函數名稱.
14011
	#$result["argu"],所使用的參數.	
14012
	#$result["content"],副檔名.
14013
	#$result["name"],不含副檔的名稱.
14014
	#$result["fullName"],含副檔的名稱.
14015
	#$result["path"],檔案所處的路徑.
14016
	#必填參數:
14017
	#$conf["file"],字串,檔案的路徑與名稱.
14018
	$conf["file"]="";
14019
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14020
	$conf["fileArgu"]=__FILE__;
14021
	#可省略參數:
14022
	#無.
14023
	#參考資料:
14024
	#無.
14025
	#備註:
14026
	#無.
14027
	*/
14028
	public static function getExtension(&$conf=array()){
14029
 
14030
		#初始化要回傳的結果
14031
		$result=array();
14032
 
14033
		#取得當前執行的函數名稱
14034
		$result["function"]=__FUNCTION__;
14035
 
14036
		#如果沒有參數
14037
		if(func_num_args()==0){
14038
 
14039
			#設置執行失敗
14040
			$result["status"]="false";
14041
 
14042
			#設置執行錯誤訊息
14043
			$result["error"]="函數".$result["function"]."需要參數";
14044
 
14045
			#回傳結果
14046
			return $result;
14047
 
14048
			}#if end		
14049
 
14050
		#取得參數
14051
		$result["argu"]=$conf;
14052
 
14053
		#如果 $conf 不為陣列
14054
		if(gettype($conf)!=="array"){
14055
 
14056
			#設置執行失敗
14057
			$result["status"]="false";
14058
 
14059
			#設置執行錯誤訊息
14060
			$result["error"][]="\$conf變數須為陣列形態";
14061
 
14062
			#如果傳入的參數為 null
14063
			if($conf===null){
14064
 
14065
				#設置執行錯誤訊息
14066
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14067
 
14068
				}#if end
14069
 
14070
			#回傳結果
14071
			return $result;
14072
 
14073
			}#if end
14074
 
14075
		#函式說明:
14076
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14077
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14078
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14079
		#$result["function"],當前執行的函式名稱.
14080
		#$result["argu"],設置給予的參數.
14081
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14082
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14083
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14084
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14085
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14086
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14087
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14088
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14089
		#必填寫的參數:
14090
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14091
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14092
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14093
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14094
		#可以省略的參數:
14095
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14096
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14097
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14098
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14099
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14100
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14101
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14102
		#$conf["canNotBeEmpty"]=array();
14103
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14104
		#$conf["canBeEmpty"]=array();
14105
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14106
		#$conf["skipableVariableCanNotBeEmpty"]=array();
14107
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14108
		#$conf["skipableVariableName"]=array();
14109
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14110
		#$conf["skipableVariableType"]=array();
14111
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14112
		#$conf["skipableVarDefaultValue"]=array("");
14113
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14114
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14115
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14116
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14117
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14118
		#$conf["arrayCountEqualCheck"][]=array();
14119
		#參考資料來源:
14120
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14121
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14122
		unset($conf["variableCheck::checkArguments"]);
14123
 
14124
		#如果檢查參數失敗
14125
		if($checkArguments["status"]==="false"){
14126
 
14127
			#設置執行失敗
14128
			$result["status"]="false";
14129
 
14130
			#設置執行失敗訊息
14131
			$result["error"]=$checkArguments;
14132
 
14133
			#回傳結果
14134
			return $result;
14135
 
14136
			}#if end
14137
 
14138
		#如果檢查參數不通過
14139
		if($checkArguments["passed"]==="false"){
14140
 
14141
			#設置執行失敗
14142
			$result["status"]="false";
14143
 
14144
			#設置執行失敗訊息
14145
			$result["error"]=$checkArguments;
14146
 
14147
			#回傳結果
14148
			return $result;
14149
 
14150
			}#if end
14151
 
14152
		#初始化檔案的路徑
14153
		$result["path"]="./";
14154
 
14155
		#用 "/" 來分割字串
14156
		#函式說明:
14157
		#將固定格式的字串分開,並回傳分開的結果。
14158
		#回傳結果:
14159
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14160
		#$result["error"],錯誤訊息陣列
14161
		#$result["function"],當前執行的函數名稱.
14162
		#$result["oriStr"],要分割的原始字串內容
14163
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14164
		#$result["dataCounts"],爲總共分成幾段
14165
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
14166
		#必填參數:
14167
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["file"];#要處理的字串。
14168
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
14169
		#可省略參數:
14170
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14171
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14172
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14173
		unset($conf["stringProcess::spiltString"]);
14174
 
14175
		#如果檢查參數失敗
14176
		if($spiltString["status"]==="false"){
14177
 
14178
			#設置執行失敗
14179
			$result["status"]="false";
14180
 
14181
			#設置執行失敗訊息
14182
			$result["error"]=$spiltString;
14183
 
14184
			#回傳結果
14185
			return $result;
14186
 
14187
			}#if end
14188
 
14189
		#初始化含副檔名的檔案名稱
14190
		$result["fullName"]=$conf["file"];
14191
 
14192
		#如果有"/"存在
14193
		if($spiltString["found"]==="true"){
14194
 
14195
			#取得含副檔名的檔案名稱
14196
			$result["fullName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14197
 
14198
			#取得檔案的路徑
14199
			$result["path"]=substr($conf["file"],0,strlen($conf["file"])-strlen($result["fullName"]));
14200
 
14201
			}#if end
14202
 
14203
		#用 "." 來分割字串
14204
		#函式說明:
14205
		#將固定格式的字串分開,並回傳分開的結果。
14206
		#回傳結果:
14207
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14208
		#$result["error"],錯誤訊息陣列
14209
		#$result["function"],當前執行的函數名稱.
14210
		#$result["oriStr"],要分割的原始字串內容
14211
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14212
		#$result["dataCounts"],爲總共分成幾段
14213
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
14214
		#必填參數:
14215
		$conf["stringProcess::spiltString"]["stringIn"]=$result["fullName"];#要處理的字串。
14216
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
14217
		#可省略參數:
14218
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14219
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14220
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14221
		unset($conf["stringProcess::spiltString"]);
14222
 
14223
		#如果檢查參數失敗
14224
		if($spiltString["status"]==="false"){
14225
 
14226
			#設置執行失敗
14227
			$result["status"]="false";
14228
 
14229
			#設置執行失敗訊息
14230
			$result["error"]=$spiltString;
14231
 
14232
			#回傳結果
14233
			return $result;
14234
 
14235
			}#if end
14236
 
14237
		#預設副檔名為 ""
14238
		$result["content"]="";
14239
 
14240
		#預設不含副檔名的檔案名稱
14241
		$result["name"]=$result["fullName"];
14242
 
14243
		#如果有"."存在
14244
		if($spiltString["found"]==="true"){
14245
 
14246
			#取得含副檔名
14247
			$result["content"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14248
 
14249
			#取得不含副檔名的檔案名稱
14250
			$result["name"]=substr($result["fullName"],0,strlen($result["fullName"])-strlen($result["content"])-1);	
14251
 
14252
			}#if end
14253
 
14254
		#設置執行正常
14255
		$result["status"]="true";
14256
 
14257
		#回傳結果
14258
		return $result;
14259
 
14260
		}#function getExtension end
14261
 
14262
	/*
14263
	#函式說明:
14264
	#從檔案尾部開始讀取
14265
	#回傳結果:
14266
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14267
	#$result["error"],錯誤訊息.
14268
	#$result["function"],當前執行的函數名稱.
14269
	#$result["argu"],所使用的參數.	
14270
	#$result["content"],讀取到的內容陣列.
14271
	#$result["totalLineCount"],檔案的總共行數.
14272
	#$result["lines"],取得輸出的行數.
14273
	#$result["lineNum"],取得當前行數.
14274
	#必填參數:
14275
	#$conf["file"],字串,檔案的路徑與名稱.
14276
	$conf["file"]="";
14277
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14278
	$conf["fileArgu"]=__FILE__;
14279
	#可省略參數:
14280
	#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14281
	#$conf["web"]="false";
14282
	#$conf["line2start"],字串,從第幾列開始,預設為總行書減去linesPerTime+1.
14283
	#$conf["line2start"]="";
14284
	#$conf["linesPerTime"],字串,一次最多讀取幾列,預設爲10列.
14285
	#$conf["linesPerTime"]="10";	
14286
	#參考資料:
14287
	#無.
14288
	#備註:
14289
	#無.
14290
	*/
14291
	public static function tail(&$conf){
14292
 
14293
		#初始化要回傳的結果
14294
		$result=array();
14295
 
14296
		#取得當前執行的函數名稱
14297
		$result["function"]=__FUNCTION__;
14298
 
14299
		#如果沒有參數
14300
		if(func_num_args()==0){
14301
 
14302
			#設置執行失敗
14303
			$result["status"]="false";
14304
 
14305
			#設置執行錯誤訊息
14306
			$result["error"]="函數".$result["function"]."需要參數";
14307
 
14308
			#回傳結果
14309
			return $result;
14310
 
14311
			}#if end		
14312
 
14313
		#取得參數
14314
		$result["argu"]=$conf;
14315
 
14316
		#如果 $conf 不為陣列
14317
		if(gettype($conf)!=="array"){
14318
 
14319
			#設置執行失敗
14320
			$result["status"]="false";
14321
 
14322
			#設置執行錯誤訊息
14323
			$result["error"][]="\$conf變數須為陣列形態";
14324
 
14325
			#如果傳入的參數為 null
14326
			if($conf===null){
14327
 
14328
				#設置執行錯誤訊息
14329
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14330
 
14331
				}#if end
14332
 
14333
			#回傳結果
14334
			return $result;
14335
 
14336
			}#if end
14337
 
14338
		#函式說明:
14339
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14340
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14341
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14342
		#$result["function"],當前執行的函式名稱.
14343
		#$result["argu"],設置給予的參數.
14344
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14345
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14346
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14347
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14348
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14349
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14350
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14351
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14352
		#必填寫的參數:
14353
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14354
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14355
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14356
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14357
		#可以省略的參數:
14358
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14359
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14360
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14361
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14362
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14363
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14364
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14365
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu");
14366
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14367
		#$conf["canBeEmpty"]=array();
14368
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14369
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web","line2start","linesPerTime");
14370
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14371
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web","line2start","linesPerTime");
14372
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14373
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
14374
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14375
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,"10");
14376
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14377
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14378
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14379
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14380
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14381
		#$conf["arrayCountEqualCheck"][]=array();
14382
		#參考資料來源:
14383
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14384
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14385
		unset($conf["variableCheck::checkArguments"]);
14386
 
14387
		#如果檢查參數失敗
14388
		if($checkArguments["status"]==="false"){
14389
 
14390
			#設置執行失敗
14391
			$result["status"]="false";
14392
 
14393
			#設置執行失敗訊息
14394
			$result["error"]=$checkArguments;
14395
 
14396
			#回傳結果
14397
			return $result;
14398
 
14399
			}#if end
14400
 
14401
		#如果檢查參數不通過
14402
		if($checkArguments["passed"]==="false"){
14403
 
14404
			#設置執行失敗
14405
			$result["status"]="false";
14406
 
14407
			#設置執行失敗訊息
14408
			$result["error"]=$checkArguments;
14409
 
14410
			#回傳結果
14411
			return $result;
14412
 
14413
			}#if end
14414
 
14415
		#檢查檔案是否存在
14416
		#函式說明:
14417
		#檢查多個檔案與資料夾是否存在.
14418
		#回傳的結果:
14419
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
14420
		#$result["error"],錯誤訊息陣列.
14421
		#$resutl["function"],當前執行的涵式名稱.
14422
		#$result["argu"],使用的參數.
14423
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
14424
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
14425
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
14426
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
14427
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
14428
		#必填參數:
14429
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
14430
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
14431
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14432
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
14433
		#可省略參數
14434
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
14435
		#$conf["disableWebSearch"]="false";
14436
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
14437
		#$conf["userDir"]="true";
14438
		#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14439
		$conf["fileAccess::checkMultiFileExist"]["web"]=$conf["web"];
14440
		#參考資料來源:
14441
		#http://php.net/manual/en/function.file-exists.php
14442
		#http://php.net/manual/en/control-structures.foreach.php
14443
		#備註:
14444
		#函數file_exists檢查的路徑為檔案系統的路徑
14445
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
14446
		unset($conf["fileAccess::checkMultiFileExist"]);
14447
 
14448
		#如果執行失敗
14449
		if($checkMultiFileExist["status"]==="false"){
14450
 
14451
			#設置執行失敗
14452
			$result["status"]="false";
14453
 
14454
			#設置執行失敗訊息
14455
			$result["error"]=$checkMultiFileExist;
14456
 
14457
			#回傳結果
14458
			return $result;
14459
 
14460
			}#if end
14461
 
14462
		#如果檔案無法存取
14463
		if($checkMultiFileExist["allExist"]==="false"){
14464
 
14465
			#設置執行失敗
14466
			$result["status"]="false";
14467
 
14468
			#設置執行失敗訊息
14469
			$result["error"]=$checkMultiFileExist;
14470
 
14471
			#回傳結果
14472
			return $result;
14473
 
14474
			}#if end
14475
 
14476
		#取得檔案的行數
14477
		#函式說明:
14478
		#呼叫shell執行系統命令,並取得回傳的內容.
14479
		#回傳的結果:
14480
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14481
		#$result["error"],錯誤訊息陣列.
14482
		#$result["function"],當前執行的函數名稱.
14483
		#$result["argu"],使用的參數.
14484
		#$result["cmd"],執行的指令內容.
14485
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14486
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14487
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14488
		#$result["running"],是否還在執行.
14489
		#$result["pid"],pid.
14490
		#$result["statusCode"],執行結束後的代碼.
14491
		#必填的參數
14492
		#$conf["command"],字串,要執行的指令與.
14493
		$conf["external::callShell"]["command"]="cat";
14494
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14495
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14496
		#可省略參數:
14497
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14498
		$conf["external::callShell"]["argu"]=array($conf["file"],"|","wc","-l");
14499
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14500
		#$conf["arguIsAddr"]=array();	
14501
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14502
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14503
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14504
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14505
		#$conf["enablePrintDescription"]="true";
14506
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14507
		#$conf["printDescription"]="";
14508
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
14509
		$conf["external::callShell"]["escapeshellarg"]="true";
14510
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14511
		#$conf["username"]="";
14512
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14513
		#$conf["password"]="";
14514
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14515
		#$conf["useScript"]="";
14516
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14517
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14518
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14519
		#$conf["inBackGround"]="";
14520
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14521
		#$conf["getErr"]="false";
14522
		#備註:
14523
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14524
		#參考資料:
14525
		#exec=>http://php.net/manual/en/function.exec.php
14526
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14527
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14528
		$callShell=external::callShell($conf["external::callShell"]);
14529
		unset($conf["external::callShell"]);
14530
 
14531
		#如果檢查參數失敗
14532
		if($callShell["status"]==="false"){
14533
 
14534
			#設置執行失敗
14535
			$result["status"]="false";
14536
 
14537
			#設置執行失敗訊息
14538
			$result["error"]=$callShell;
14539
 
14540
			#回傳結果
14541
			return $result;
14542
 
14543
			}#if end
14544
 
14545
		#取得檔案總行數
14546
		$result["totalLineCount"]=$callShell["output"][0];
14547
 
14548
		#如果未設置 $conf["line2start"]
14549
		if(!isset($conf["line2start"])){
14550
 
14551
			#$conf["line2start"]為總行數減去一次要看的行數減1
14552
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14553
 
14554
			}#if end	
14555
 
14556
		#如果開始行數小於1		
14557
		if($conf["line2start"]<1){
14558
 
14559
			#$conf["line2start"]為總行數減去一次要看的行數減1
14560
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14561
 
14562
			}#if end
14563
 
14564
		#如果開始行數小於1		
14565
		if($conf["line2start"]<1){
14566
 
14567
			#$conf["line2start"]為1
14568
			$conf["line2start"]=1;
14569
 
14570
			}#if end
14571
 
14572
		#取得指定範圍的行數
14573
		#取得檔案的行數
14574
		#函式說明:
14575
		#呼叫shell執行系統命令,並取得回傳的內容.
14576
		#回傳的結果:
14577
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14578
		#$result["error"],錯誤訊息陣列.
14579
		#$result["function"],當前執行的函數名稱.
14580
		#$result["argu"],使用的參數.
14581
		#$result["cmd"],執行的指令內容.
14582
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14583
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14584
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14585
		#$result["running"],是否還在執行.
14586
		#$result["pid"],pid.
14587
		#$result["statusCode"],執行結束後的代碼.
14588
		#必填的參數
14589
		#$conf["command"],字串,要執行的指令與.
14590
		$conf["external::callShell"]["command"]="sed";
14591
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14592
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14593
		#可省略參數:
14594
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14595
		$conf["external::callShell"]["argu"]=array("-n",$conf["line2start"].",".($conf["line2start"]+$conf["linesPerTime"]-1)."p",$conf["file"]);
14596
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14597
		#$conf["arguIsAddr"]=array();	
14598
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14599
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14600
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14601
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14602
		#$conf["enablePrintDescription"]="true";
14603
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14604
		#$conf["printDescription"]="";
14605
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
14606
		$conf["external::callShell"]["escapeshellarg"]="true";
14607
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14608
		#$conf["username"]="";
14609
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14610
		#$conf["password"]="";
14611
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14612
		#$conf["useScript"]="";
14613
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14614
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14615
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14616
		#$conf["inBackGround"]="";
14617
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14618
		#$conf["getErr"]="false";
14619
		#備註:
14620
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14621
		#參考資料:
14622
		#exec=>http://php.net/manual/en/function.exec.php
14623
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14624
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14625
		$callShell=external::callShell($conf["external::callShell"]);
14626
		unset($conf["external::callShell"]);
14627
 
14628
		#如果檢查參數失敗
14629
		if($callShell["status"]==="false"){
14630
 
14631
			#設置執行失敗
14632
			$result["status"]="false";
14633
 
14634
			#設置執行失敗訊息
14635
			$result["error"]=$callShell;
14636
 
14637
			#回傳結果
14638
			return $result;
14639
 
14640
			}#if end
14641
 
14642
		#取得輸出的行數
14643
		$result["lines"]=count($callShell["output"]);
14644
 
14645
		#取得目前的輸出內容
14646
		$result["content"]=$callShell["output"];
14647
 
14648
		#取得當前行數
14649
		$result["lineNum"]=$conf["line2start"]+$result["lines"]-1;
14650
 
14651
		#如果當前行號小於總行數 
14652
		if($result["lineNum"]<$result["totalLineCount"]){
14653
 
14654
			#設置還有剩餘的內容
14655
			$result["left"]="true";
14656
 
14657
			}#if end
14658
 
14659
		#反之 
14660
		else{
14661
 
14662
			#設置無剩餘的內容
14663
			$result["left"]="false";
14664
 
14665
			}#else end
14666
 
14667
		#設置執行正常
14668
		$result["status"]="true";
14669
 
14670
		#回傳結果
14671
		return $result;
14672
 
14673
		}#function tail end
14674
 
14675
	/*
14676
	#函式說明:
14677
	#解析PHP檔案裡面的變數.
14678
	#回傳結果:
14679
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14680
	#$result["error"],錯誤訊息.
14681
	#$result["function"],當前執行的函數名稱.
14682
	#$result["argu"],所使用的參數.	
14683
	#$result["content"],找到的變數內容陣列,若有多個變數則會用array來表示.
14684
	#必填參數:
14685
	#$conf["file"],字串,檔案的路徑與名稱.
14686
	$conf["file"]="";
14687
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14688
	$conf["fileArgu"]=__FILE__;
14689
	#$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".
14690
	$conf["varName"]=array();
14691
	#可省略參數:
14692
	#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".
14693
	#$conf["web"]="true";
14694
	#參考資料:
14695
	#https://www.php.net/manual/en/function.parse-str.php
14696
	#備註:
14697
	#無.
14698
	*/
14699
	public static function parseVaraiableInPHPfile(&$conf){
14700
 
14701
		#初始化要回傳的結果
14702
		$result=array();
14703
 
14704
		#取得當前執行的函數名稱
14705
		$result["function"]=__FUNCTION__;
14706
 
14707
		#如果沒有參數
14708
		if(func_num_args()==0){
14709
 
14710
			#設置執行失敗
14711
			$result["status"]="false";
14712
 
14713
			#設置執行錯誤訊息
14714
			$result["error"]="函數".$result["function"]."需要參數";
14715
 
14716
			#回傳結果
14717
			return $result;
14718
 
14719
			}#if end		
14720
 
14721
		#取得參數
14722
		$result["argu"]=$conf;
14723
 
14724
		#如果 $conf 不為陣列
14725
		if(gettype($conf)!=="array"){
14726
 
14727
			#設置執行失敗
14728
			$result["status"]="false";
14729
 
14730
			#設置執行錯誤訊息
14731
			$result["error"][]="\$conf變數須為陣列形態";
14732
 
14733
			#如果傳入的參數為 null
14734
			if($conf===null){
14735
 
14736
				#設置執行錯誤訊息
14737
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14738
 
14739
				}#if end
14740
 
14741
			#回傳結果
14742
			return $result;
14743
 
14744
			}#if end
14745
 
14746
		#函式說明:
14747
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14748
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14749
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14750
		#$result["function"],當前執行的函式名稱.
14751
		#$result["argu"],設置給予的參數.
14752
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14753
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14754
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14755
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14756
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14757
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14758
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14759
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14760
		#必填寫的參數:
14761
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14762
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14763
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14764
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14765
		#可以省略的參數:
14766
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14767
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu","varName");
14768
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14769
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","array");
14770
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14771
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14772
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14773
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu","varName");
14774
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14775
		#$conf["canBeEmpty"]=array();
14776
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14777
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
14778
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14779
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
14780
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14781
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
14782
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14783
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
14784
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14785
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14786
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14787
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14788
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14789
		#$conf["arrayCountEqualCheck"][]=array();
14790
		#參考資料來源:
14791
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14792
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14793
		unset($conf["variableCheck::checkArguments"]);
14794
 
14795
		#如果檢查參數失敗
14796
		if($checkArguments["status"]==="false"){
14797
 
14798
			#設置執行失敗
14799
			$result["status"]="false";
14800
 
14801
			#設置執行失敗訊息
14802
			$result["error"]=$checkArguments;
14803
 
14804
			#回傳結果
14805
			return $result;
14806
 
14807
			}#if end
14808
 
14809
		#如果檢查參數不通過
14810
		if($checkArguments["passed"]==="false"){
14811
 
14812
			#設置執行失敗
14813
			$result["status"]="false";
14814
 
14815
			#設置執行失敗訊息
14816
			$result["error"]=$checkArguments;
14817
 
14818
			#回傳結果
14819
			return $result;
14820
 
14821
			}#if end
14822
 
14823
		#初始化儲存解析出來的變數內容
14824
		$result["content"]=array();
14825
 
14826
		#讀取檔案
14827
		#函式說明:
14828
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
14829
		#回傳的變數說明:
14830
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
14831
		#$result["error"],錯誤訊息提示.
14832
		#$result["warning"],警告訊息.
14833
		#$result["function"],當前執行的函數名稱.
14834
		#$result["fileContent"],爲檔案的內容陣列.
14835
		#$result["lineCount"],爲檔案內容總共的行數.
14836
		#$result["fullContent"],為檔案的完整內容.
14837
		#$result["base64data"],為檔案的base64內容.
14838
		#$result["mimeType"],為檔案的mime type.
14839
		#必填參數:
14840
		#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
14841
		$conf["ileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
14842
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14843
		$conf["ileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
14844
		#可省略參數:
14845
		#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
14846
		$conf["ileAccess::getFileContent"]["web"]=$conf["web"];
14847
		#參考資料:
14848
		#file(),取得檔案內容的行數.
14849
		#file=>http:#php.net/manual/en/function.file.php
14850
		#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
14851
		#filesize=>http://php.net/manual/en/function.filesize.php
14852
		$getFileContent=fileAccess::getFileContent($conf["ileAccess::getFileContent"]);
14853
		unset($conf["ileAccess::getFileContent"]);
14854
 
14855
		#如果讀取檔案失敗
14856
		if($getFileContent["status"]==="false"){
14857
 
14858
			#設置執行失敗
14859
			$result["status"]="false";
14860
 
14861
			#設置執行失敗訊息
14862
			$result["error"]=$getFileContent;
14863
 
14864
			#回傳結果
14865
			return $result;
14866
 
14867
			}#if end
14868
 
14869
		#針對每列檔案內容
14870
		foreach($getFileContent["fileContent"] as $line){
14871
 
14872
			#針對每個要搜尋的變數
14873
			foreach($conf["varName"] as $keyWord){
14874
 
14875
				#如果關鍵字小於被搜尋的字串長度
14876
				if( strlen($line) < strlen($keyWord)+1 ){
14877
 
14878
					#跳過
14879
					continue;
14880
 
14881
					}#if end
14882
 
14883
				#函式說明:
14884
				#取得符合特定字首與字尾的字串
14885
				#回傳結果:
14886
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
14887
				#$result["function"],當前執行的函數名稱.
14888
				#$result["error"],錯誤訊息陣列.
14889
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
14890
				#$result["returnString"],爲符合字首條件的字串內容。
14891
				#$result["argu"],使用的參數.
14892
				#必填參數:
14893
				#$conf["checkString"],字串,要檢查的字串.
14894
				$conf["search::getMeetConditionsString"]["checkString"]=$line;
14895
				#可省略參數:
14896
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
14897
				$conf["search::getMeetConditionsString"]["frontWord"]="$".$keyWord;
14898
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
14899
				$conf["search::getMeetConditionsString"]["tailWord"]=";";
14900
				#參考資料:
14901
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
14902
				$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
14903
				unset($conf["search::getMeetConditionsString"]);
14904
 
14905
				#如果失敗
14906
				if($getMeetConditionsString["status"]==="false"){
14907
 
14908
					#設置執行失敗
14909
					$result["status"]="false";
14910
 
14911
					#設置執行失敗訊息
14912
					$result["error"]=$getMeetConditionsString;
14913
 
14914
					#回傳結果
14915
					return $result;
14916
 
14917
					}#if end	
14918
 
14919
				#如果有找到關鍵字
14920
				if($getMeetConditionsString["founded"]==="true"){
14921
 
14922
					#剔除變數名稱
14923
					#函式說明:
14924
					#將字串特定關鍵字與其前面的內容剔除
14925
					#回傳結果:
14926
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14927
					#$result["error"],錯誤訊息陣列.
14928
					#$result["warning"],警告訊息鎮列.
14929
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
14930
					#$result["function"],當前執行的函數名稱.
14931
					#$result["oriStr"],要處理的原始字串內容.
14932
					#$result["content"],處理好的的字串內容.	
14933
					#必填參數:
14934
					#$conf["stringIn"],字串,要處理的字串.
14935
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$line;
14936
					#$conf["keyWord"],字串,特定字串.
14937
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="$".$keyWord;
14938
					#可省略參數:
14939
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14940
					#$conf["recursive"]="true";
14941
					#參考資料:
14942
					#無.
14943
					#備註:
14944
					#無.
14945
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
14946
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
14947
 
14948
					#如果執行失敗
14949
					if($delStrBeforeKeyWord["status"]==="false"){
14950
 
14951
						#設置執行失敗
14952
						$result["status"]="false";
14953
 
14954
						#設置執行失敗訊息
14955
						$result["error"]=$delStrBeforeKeyWord;
14956
 
14957
						#回傳結果
14958
						return $result;
14959
 
14960
						}#if end
14961
 
14962
					#如果沒有找到應該存在的php變數
14963
					if($delStrBeforeKeyWord["founded"]==="false"){
14964
 
14965
						#設置執行失敗
14966
						$result["status"]="false";
14967
 
14968
						#設置執行失敗訊息
14969
						$result["error"]=$delStrBeforeKeyWord;
14970
 
14971
						#回傳結果
14972
						return $result;
14973
 
14974
						}#if end
14975
 
14976
					#剔除 "=" 前面的內容
14977
					#函式說明:
14978
					#將字串特定關鍵字與其前面的內容剔除
14979
					#回傳結果:
14980
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14981
					#$result["error"],錯誤訊息陣列.
14982
					#$result["warning"],警告訊息鎮列.
14983
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
14984
					#$result["function"],當前執行的函數名稱.
14985
					#$result["oriStr"],要處理的原始字串內容.
14986
					#$result["content"],處理好的的字串內容.	
14987
					#必填參數:
14988
					#$conf["stringIn"],字串,要處理的字串.
14989
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
14990
					#$conf["keyWord"],字串,特定字串.
14991
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="=";
14992
					#可省略參數:
14993
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14994
					#$conf["recursive"]="true";
14995
					#參考資料:
14996
					#無.
14997
					#備註:
14998
					#無.
14999
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15000
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
15001
 
15002
					#如果執行失敗
15003
					if($delStrBeforeKeyWord["status"]==="false"){
15004
 
15005
						#設置執行失敗
15006
						$result["status"]="false";
15007
 
15008
						#設置執行失敗訊息
15009
						$result["error"]=$delStrBeforeKeyWord;
15010
 
15011
						#回傳結果
15012
						return $result;
15013
 
15014
						}#if end
15015
 
15016
					#如果沒有找“=”關鍵字
15017
					if($delStrBeforeKeyWord["founded"]==="false"){
15018
 
15019
						#跳過
15020
						continue;
15021
 
15022
						}#if end
15023
 
15024
					#剔除 value 前面的空白
15025
					#函式說明:
15026
					#將字串特定關鍵字與其前面的內容剔除
15027
					#回傳結果:
15028
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15029
					#$result["error"],錯誤訊息陣列.
15030
					#$result["warning"],警告訊息鎮列.
15031
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15032
					#$result["function"],當前執行的函數名稱.
15033
					#$result["oriStr"],要處理的原始字串內容.
15034
					#$result["content"],處理好的的字串內容.	
15035
					#必填參數:
15036
					#$conf["stringIn"],字串,要處理的字串.
15037
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
15038
					#$conf["keyWord"],字串,特定字串.
15039
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
15040
					#可省略參數:
15041
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
15042
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15043
					#參考資料:
15044
					#無.
15045
					#備註:
15046
					#無.
15047
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15048
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
15049
 
15050
					#如果執行失敗
15051
					if($delStrBeforeKeyWord["status"]==="false"){
15052
 
15053
						#設置執行失敗
15054
						$result["status"]="false";
15055
 
15056
						#設置執行失敗訊息
15057
						$result["error"]=$delStrBeforeKeyWord;
15058
 
15059
						#回傳結果
15060
						return $result;
15061
 
15062
						}#if end
15063
 
15064
					#取得找到的變數
15065
					eval("\$result[\"content\"][\"".$keyWord."\"][]=".$delStrBeforeKeyWord["content"]);
15066
 
15067
					}#if end
15068
 
15069
				}#foreach end
15070
 
15071
			}#foreach end
15072
 
15073
		#設置執行正常
15074
		$result["status"]="true";
15075
 
15076
		#回傳結果
15077
		return $result;
15078
 
15079
		}#function parseVaraiableInPHPfile end
15080
 
15081
	/*
15082
	#函式說明:
15083
	#開啟特定目錄,取得底下的檔案路徑清單.
15084
	#回傳結果:
15085
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15086
	#$result["error"],錯誤訊息.
15087
	#$result["function"],當前執行的函數名稱.
15088
	#$result["argu"],所使用的參數.
15089
	#$result["content"],讀取到的內容陣列.
15090
	#$result["content"][$i],第$i+1個結果.
15091
	#$result["content"][$i]["name"],第$i+1個名稱.
15092
	#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.
15093
	#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.
15094
	#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).
15095
	#必填參數:
15096
	#$conf["path"],字串,要取得檔案資訊的所屬路徑.
15097
	$conf["path"]="";
15098
	#可省略參數:
15099
	#無.
15100
	#參考資料
15101
	#無.
15102
	#備註:
15103
	#無.
15104
	*/
15105
	public static function listInfo(&$conf){
15106
 
15107
		#初始化要回傳的結果
15108
		$result=array();
15109
 
15110
		#取得當前執行的函數名稱
15111
		$result["function"]=__FUNCTION__;
15112
 
15113
		#如果沒有參數
15114
		if(func_num_args()==0){
15115
 
15116
			#設置執行失敗
15117
			$result["status"]="false";
15118
 
15119
			#設置執行錯誤訊息
15120
			$result["error"]="函數".$result["function"]."需要參數";
15121
 
15122
			#回傳結果
15123
			return $result;
15124
 
15125
			}#if end		
15126
 
15127
		#取得參數
15128
		$result["argu"]=$conf;
15129
 
15130
		#如果 $conf 不為陣列
15131
		if(gettype($conf)!=="array"){
15132
 
15133
			#設置執行失敗
15134
			$result["status"]="false";
15135
 
15136
			#設置執行錯誤訊息
15137
			$result["error"][]="\$conf變數須為陣列形態";
15138
 
15139
			#如果傳入的參數為 null
15140
			if($conf===null){
15141
 
15142
				#設置執行錯誤訊息
15143
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15144
 
15145
				}#if end
15146
 
15147
			#回傳結果
15148
			return $result;
15149
 
15150
			}#if end
15151
 
15152
		#函式說明:
15153
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15154
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15155
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15156
		#$result["function"],當前執行的函式名稱.
15157
		#$result["argu"],設置給予的參數.
15158
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15159
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15160
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15161
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15162
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15163
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15164
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15165
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15166
		#必填寫的參數:
15167
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15168
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
15169
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15170
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15171
		#可以省略的參數:
15172
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15173
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15174
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15175
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15176
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15177
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15178
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15179
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
15180
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15181
		#$conf["canBeEmpty"]=array();
15182
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15183
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
15184
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15185
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
15186
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15187
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
15188
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15189
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
15190
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15191
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15192
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15193
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15194
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15195
		#$conf["arrayCountEqualCheck"][]=array();
15196
		#參考資料來源:
15197
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15198
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15199
		unset($conf["variableCheck::checkArguments"]);
15200
 
15201
		#如果檢查參數失敗
15202
		if($checkArguments["status"]==="false"){
15203
 
15204
			#設置執行失敗
15205
			$result["status"]="false";
15206
 
15207
			#設置執行失敗訊息
15208
			$result["error"]=$checkArguments;
15209
 
15210
			#回傳結果
15211
			return $result;
15212
 
15213
			}#if end
15214
 
15215
		#如果檢查參數不通過
15216
		if($checkArguments["passed"]==="false"){
15217
 
15218
			#設置執行失敗
15219
			$result["status"]="false";
15220
 
15221
			#設置執行失敗訊息
15222
			$result["error"]=$checkArguments;
15223
 
15224
			#回傳結果
15225
			return $result;
15226
 
15227
			}#if end
15228
 
15229
		#初始化儲存解析出來的變數內容
15230
		$result["content"]=array();
15231
 
15232
		#取得特定位置的資訊
15233
		$pathInfo=@dir($conf["path"]);
15234
 
15235
		#如果取得路徑資訊失敗
15236
		if($pathInfo===false){
15237
 
15238
			#設置執行失敗
15239
			$result["status"]="false";
15240
 
15241
			#設置執行失敗訊息
15242
			$result["error"][]="無法存取路徑(".$conf["path"].")";
15243
 
15244
			#回傳結果
15245
			return $result;
15246
 
15247
			}#if end
15248
 
15249
		#讀取底下一個檔案,暫存到 $tmpItem 裡面,且當結果不為 false 時進入迴圈.
15250
		while(false !== $tmpItem = $pathInfo->read()){
15251
 
15252
			#宣告儲存資訊的變數
15253
			$item=array();
15254
 
15255
			#儲存名稱
15256
			$item["name"]=$tmpItem;
15257
 
15258
			#預設不為資料夾
15259
			$item["dir"]="false";
15260
 
15261
			#若為資料夾
15262
			if(is_dir($conf["path"]."/".$tmpItem)){
15263
 
15264
				#設置為"true"
15265
				$item["dir"]="true";
15266
 
15267
				}#if end
15268
 
15269
			#取得檔案識別器
15270
			$finfo = finfo_open(FILEINFO_MIME);
15271
 
15272
			#取得 info
15273
			$item["info"]=@finfo_file($finfo,$conf["path"]."/".$tmpItem);
15274
 
15275
			#取得檔案大小
15276
			$item["size"]=filesize($conf["path"]."/".$tmpItem);
15277
 
15278
			#close connection
15279
			finfo_close($finfo);
15280
 
15281
			#記錄該檔案資訊
15282
			$result["content"][]=$item;
15283
 
15284
			}#while end
15285
 
15286
		#設置執行正常
15287
		$result["status"]="true";
15288
 
15289
		#回傳結果
15290
		return $result;
15291
 
15292
		}#function listInfo end
15293
 
15294
	/*
15295
	#函式說明:
15296
	#取得目錄底下的詳細資訊.
15297
	#回傳結果:
15298
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15299
	#$result["error"],錯誤訊息.
15300
	#$result["function"],當前執行的函數名稱.
15301
	#$result["size"],該清單的大小,單位為bytes.
15302
	#$result["dataCount"],該清單的長度.
15303
	#$result["path"],字串,檢視的路徑,必為"/"結尾.
15304
	#$result["content"],指定目錄底下的所有檔案資訊.
15305
	#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
15306
	#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.
15307
	#$result["content"][$i]["permission"],第$i個節點權限.
15308
	#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
15309
	#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
15310
	#$result["content"][$i]["bytes"],第$i個節點大小.
15311
	#$result["content"][$i]["date"],第$i個節點最後變更日期.
15312
	#$result["content"][$i]["time"],第$i個節點最後異動時間.
15313
	#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
15314
	#$result["content"][$i]["timezone"],第$i個節點的時區.
15315
	#$result["content"][$i]["name"],第$i個節點的名稱.
15316
	#$result["content"][$i]["secondName"],第$i個節點為檔案時,若有附檔名,會記錄在這.
15317
	#$result["content"][$i]["mimeType"],第$i個節點為檔案且可以讀取時,會有 mime type 可取得.
15318
	#必填參數:
15319
	#$conf["path"],字串,要檢視的路徑,若非"/"結尾,會自動補上.
15320
	$conf["path"]="";
15321
	#可省略參數:
15322
	#無.
15323
	#參考資料:
15324
	#https://www.businessweekly.com.tw/careers/Blog/14307
15325
	#備註:
15326
	#無.
15327
	*/
15328
	public static function ls(&$conf){
15329
 
15330
		#初始化要回傳的結果
15331
		$result=array();
15332
 
15333
		#取得當前執行的函數名稱
15334
		$result["function"]=__FUNCTION__;
15335
 
15336
		#如果沒有參數
15337
		if(func_num_args()==0){
15338
 
15339
			#設置執行失敗
15340
			$result["status"]="false";
15341
 
15342
			#設置執行錯誤訊息
15343
			$result["error"]="函數".$result["function"]."需要參數";
15344
 
15345
			#回傳結果
15346
			return $result;
15347
 
15348
			}#if end
15349
 
15350
		#取得參數
15351
		$result["argu"]=$conf;
15352
 
15353
		#如果 $conf 不為陣列
15354
		if(gettype($conf)!=="array"){
15355
 
15356
			#設置執行失敗
15357
			$result["status"]="false";
15358
 
15359
			#設置執行錯誤訊息
15360
			$result["error"][]="\$conf變數須為陣列形態";
15361
 
15362
			#如果傳入的參數為 null
15363
			if(is_null($conf)){
15364
 
15365
				#設置執行錯誤訊息
15366
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15367
 
15368
				}#if end
15369
 
15370
			#回傳結果
15371
			return $result;
15372
 
15373
			}#if end
15374
 
15375
		#函式說明:
15376
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
15377
		#回傳結果:
15378
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15379
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15380
		#$result["simpleError"],簡單表示的錯誤訊息.
15381
		#$result["function"],當前執行的函式名稱.
15382
		#$result["argu"],設置給予的參數.
15383
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15384
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15385
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15386
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15387
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15388
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15389
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15390
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15391
		#必填參數:
15392
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15393
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15394
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15395
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15396
		#可省略參數:
15397
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15398
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15399
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15400
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15401
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15402
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15403
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15404
		#$conf["canNotBeEmpty"]=array();
15405
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15406
		#$conf["canBeEmpty"]=array();
15407
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15408
		#$conf["skipableVariableCanNotBeEmpty"]=array();
15409
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15410
		#$conf["skipableVariableName"]=array();
15411
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15412
		#$conf["skipableVariableType"]=array();
15413
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15414
		#$conf["skipableVarDefaultValue"]=array("");
15415
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15416
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15417
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15418
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15419
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15420
		#$conf["arrayCountEqualCheck"][]=array();
15421
		#參考資料:
15422
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15423
		#備註:
15424
		#無.
15425
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15426
		unset($conf["variableCheck::checkArguments"]);
15427
 
15428
		#如果執行失敗
15429
		if($checkArguments["status"]==="false"){
15430
 
15431
			#設置執行錯誤
15432
			$result["status"]="false";
15433
 
15434
			#設置錯誤訊息
15435
			$result["error"]=$checkArguments;
15436
 
15437
			#回傳結果
15438
			return $result;
15439
 
15440
			}#if end
15441
 
15442
		#如果參數檢查不通過
15443
		if($checkArguments["passed"]==="false"){
15444
 
15445
			#設置執行錯誤
15446
			$result["status"]="false";
15447
 
15448
			#設置錯誤訊息
15449
			$result["error"]=$checkArguments;
15450
 
15451
			#回傳結果
15452
			return $result;
15453
 
15454
			}#if end
15455
 
15456
		#確認 $conf["path"] 是否為 "/" 結尾
15457
		#函式說明:
15458
		#取得符合特定字首與字尾的字串
15459
		#回傳結果:
15460
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
15461
		#$result["function"],當前執行的函數名稱.
15462
		#$result["error"],錯誤訊息陣列.
15463
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
15464
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
15465
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
15466
		#$result["argu"],使用的參數.
15467
		#必填參數:
15468
		#$conf["checkString"],字串,要檢查的字串.
15469
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
15470
		#可省略參數:
15471
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
15472
		#$conf["frontWord"]="";
15473
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
15474
		$conf["search::getMeetConditionsString"]["tailWord"]="/";
15475
		#參考資料:
15476
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
15477
		#備註:
15478
		#無.
15479
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
15480
		unset($conf["search::getMeetConditionsString"]);
15481
 
15482
		#如果執行失敗
15483
		if($getMeetConditionsString["status"]==="false"){
15484
 
15485
			#設置執行錯誤
15486
			$result["status"]="false";
15487
 
15488
			#設置錯誤訊息
15489
			$result["error"]=$getMeetConditionsString;
15490
 
15491
			#回傳結果
15492
			return $result;
15493
 
15494
			}#if end
15495
 
15496
		#如果沒有 "/" 結尾
15497
		if($getMeetConditionsString["founded"]==="false"){
15498
 
15499
			#於結尾加上 "/"
15500
			$conf["path"]=$conf["path"]."/";
15501
 
15502
			}#if end
15503
 
15504
		#記錄真正的路徑
15505
		$result["path"]=$conf["path"];
15506
 
15507
		#函式說明:
15508
		#呼叫shell執行系統命令,並取得回傳的內容.
15509
		#回傳結果:
15510
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15511
		#$result["error"],錯誤訊息陣列.
15512
		#$result["function"],當前執行的函數名稱.
15513
		#$result["argu"],使用的參數.
15514
		#$result["cmd"],執行的指令內容.
15515
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
15516
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
15517
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
15518
		#$result["running"],是否還在執行.
15519
		#$result["pid"],pid.
15520
		#$result["statusCode"],執行結束後的代碼.
15521
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
15522
		#必填參數:
15523
		#$conf["command"],字串,要執行的指令.
15524
		$conf["external::callShell"]["command"]="ls";
15525
		#$conf["fileArgu"],字串,變數__FILE__的內容.
15526
		$conf["external::callShell"]["fileArgu"]=__FILE__;
15527
		#可省略參數:
15528
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
15529
		$conf["external::callShell"]["argu"]=array("-al","--full-time","-t","-B",$conf["path"]);
15530
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
15531
		#$conf["arguIsAddr"]=array();
15532
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
15533
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
15534
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
15535
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
15536
		#$conf["enablePrintDescription"]="true";
15537
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
15538
		#$conf["printDescription"]="";
15539
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
15540
		$conf["external::callShell"]["escapeshellarg"]="true";
15541
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
15542
		#$conf["thereIsShellVar"]=array();
15543
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
15544
		#$conf["username"]="";
15545
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
15546
		#$conf["password"]="";
15547
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
15548
		#$conf["useScript"]="";
15549
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
15550
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
15551
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
15552
		#$conf["inBackGround"]="";
15553
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
15554
		#$conf["getErr"]="false";
15555
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
15556
		#$conf["doNotRun"]="false";
15557
		#參考資料:
15558
		#exec=>http://php.net/manual/en/function.exec.php
15559
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
15560
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
15561
		#備註:
15562
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
15563
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
15564
		$callShell=external::callShell($conf["external::callShell"]);
15565
		unset($conf["external::callShell"]);
15566
 
15567
		#debug
15568
		#var_dump(__FILE__,__LINE__,$callShell);
15569
 
15570
		#如果執行失敗
15571
		if($callShell["status"]==="false"){
15572
 
15573
			#設置執行錯誤
15574
			$result["status"]="false";
15575
 
15576
			#設置錯誤訊息
15577
			$result["error"]=$callShell;
15578
 
15579
			#回傳結果
15580
			return $result;
15581
 
15582
			}#if end
15583
 
15584
		#初始化儲存檔案資訊為空
15585
		$result["content"]=array();
15586
 
15587
		#針對每行輸出
15588
		foreach($callShell["output"] as $index=>$line){
15589
 
15590
			#如果是第一筆
15591
			if($index===0){
15592
 
15593
				#取得資料筆數
15594
				$result["dataCount"]=explode(" ",$line)[0];
15595
 
15596
				#換下一輪
15597
				continue;
15598
 
15599
				}#if end
15600
 
15601
			#函式說明:
15602
			#將固定格式的字串分開,並回傳分開的結果.
15603
			#回傳結果:
15604
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15605
			#$result["error"],錯誤訊息陣列
15606
			#$result["function"],當前執行的函數名稱.
15607
			#$result["argu"],使用的參數.
15608
			#$result["oriStr"],要分割的原始字串內容
15609
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15610
			#$result["dataCounts"],爲總共分成幾段
15611
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15612
			#必填參數:
15613
			#$conf["stringIn"],字串,要處理的字串.
15614
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15615
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15616
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";
15617
			#可省略參數:
15618
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15619
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15620
			#參考資料:
15621
			#無.
15622
			#備註:
15623
			#無.
15624
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15625
			unset($conf["stringProcess::spiltString"]);
15626
 
15627
			#如果執行失敗
15628
			if($spiltString["status"]==="false"){
15629
 
15630
				#設置執行錯誤
15631
				$result["status"]="false";
15632
 
15633
				#設置錯誤訊息
15634
				$result["error"]=$spiltString;
15635
 
15636
				#回傳結果
15637
				return $result;
15638
 
15639
				}#if end
15640
 
15641
			#如果沒有分割用的" "
15642
			if($spiltString["found"]==="false"){
15643
 
15644
				#設置執行錯誤
15645
				$result["status"]="false";
15646
 
15647
				#設置錯誤訊息
15648
				$result["error"]=$spiltString;
15649
 
15650
				#回傳結果
15651
				return $result;
15652
 
15653
				}#if end
15654
 
15655
			#如果分割好的數量小於8
15656
			if($spiltString["dataCounts"]<8){
15657
 
15658
				#設置執行錯誤
15659
				$result["status"]="false";
15660
 
15661
				#設置錯誤訊息
15662
				$result["error"]=$spiltString;
15663
 
15664
				#回傳結果
15665
				return $result;
15666
 
15667
				}#if end
15668
 
15669
			#初始化要儲存的檔案資訊陣列
15670
			$fileInfo=array();
15671
 
15672
			#取得 節點類型、權限
15673
			$fileInfo["nType&permission"]=$spiltString["dataArray"][0];
15674
 
15675
			#剔除結尾的 "."
15676
			$fileInfo["nType&permission"]=substr($fileInfo["nType&permission"],0,strlen($fileInfo["nType&permission"])-1);
15677
 
15678
			#取得節點類型
15679
			$fileInfo["nType"]=$fileInfo["nType&permission"][0];
15680
 
15681
			#取得節點權限
15682
			$fileInfo["permission"]=substr($fileInfo["nType&permission"],1);
15683
 
15684
			#取得擁有者賬號
15685
			$fileInfo["ownByUser"]=$spiltString["dataArray"][2];
15686
 
15687
			#取得群組擁有者群組
15688
			$fileInfo["ownByGroup"]=$spiltString["dataArray"][3];
15689
 
15690
			#取得size
15691
			$fileInfo["bytes"]=$spiltString["dataArray"][4];
15692
 
15693
			#取得最後異動日期 
15694
			$fileInfo["date"]=$spiltString["dataArray"][5];
15695
 
15696
			#取得最後異動時間
15697
			$fileInfo["time"]=explode(".",$spiltString["dataArray"][6])[0];
15698
 
15699
			#取得最後異動的詳細時間
15700
			$fileInfo["timeDetail"]=$spiltString["dataArray"][6];
15701
 
15702
			#取得timezone資訊
15703
			$fileInfo["timezone"]=$spiltString["dataArray"][7];
15704
 
15705
			#函式說明:
15706
			#將固定格式的字串分開,並回傳分開的結果.
15707
			#回傳結果:
15708
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15709
			#$result["error"],錯誤訊息陣列
15710
			#$result["function"],當前執行的函數名稱.
15711
			#$result["argu"],使用的參數.
15712
			#$result["oriStr"],要分割的原始字串內容
15713
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15714
			#$result["dataCounts"],爲總共分成幾段
15715
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15716
			#必填參數:
15717
			#$conf["stringIn"],字串,要處理的字串.
15718
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15719
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15720
			$conf["stringProcess::spiltString"]["spiltSymbol"]=$fileInfo["date"]." ".$fileInfo["timeDetail"]." ".$fileInfo["timezone"];
15721
			#可省略參數:
15722
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15723
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15724
			#參考資料:
15725
			#無.
15726
			#備註:
15727
			#無.
15728
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15729
			unset($conf["stringProcess::spiltString"]);
15730
 
15731
			#如果執行失敗
15732
			if($spiltString["status"]==="false"){
15733
 
15734
				#設置執行錯誤
15735
				$result["status"]="false";
15736
 
15737
				#設置錯誤訊息
15738
				$result["error"]=$spiltString;
15739
 
15740
				#回傳結果
15741
				return $result;
15742
 
15743
				}#if end
15744
 
15745
			#如果沒有分割用的" "
15746
			if($spiltString["found"]==="false"){
15747
 
15748
				#設置執行錯誤
15749
				$result["status"]="false";
15750
 
15751
				#設置錯誤訊息
15752
				$result["error"]=$spiltString;
15753
 
15754
				#回傳結果
15755
				return $result;
15756
 
15757
				}#if end
15758
 
15759
			#如果分割好的數量小於8
15760
			if($spiltString["dataCounts"]<2){
15761
 
15762
				#設置執行錯誤
15763
				$result["status"]="false";
15764
 
15765
				#設置錯誤訊息
15766
				$result["error"]=$spiltString;
15767
 
15768
				#回傳結果
15769
				return $result;
15770
 
15771
				}#if end
15772
 
15773
			#取得節點名稱,剔除開頭的空白.
15774
			$fileInfo["name"]=substr($spiltString["dataArray"][1],1);
15775
 
15776
			#排除 "." 跟 ".."
15777
			if($fileInfo["name"]==="." || $fileInfo["name"]===".."){
15778
 
15779
				#跳過
15780
				continue;
15781
 
15782
				}#if end
15783
 
15784
			#如果是檔案
15785
			if($fileInfo["nType"]==="-"){
15786
 
15787
				#取得mime type
15788
				$fileInfo["mimeType"]=@mime_content_type($conf["path"].$fileInfo["name"]);
15789
 
15790
				#如果讀取失敗
15791
				if($fileInfo["mimeType"]===false){
15792
 
15793
					#通常為沒有權限
15794
 
15795
					#跳過該檔案
15796
					continue;
15797
 
15798
					}#if end
15799
 
15800
				#確認檔案名稱中間含是否有 "."
15801
				#函式說明:
15802
				#取得關鍵字在字串的哪個位置(字首,字尾,中間)
15803
				#回傳結果:
15804
				#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
15805
				#$result["error"],錯誤訊息陣列.
15806
				#$result["function"],當前執行的函數名稱.
15807
				#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".
15808
				#$result["argu"],傳入的參數.
15809
				#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
15810
				#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
15811
				#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
15812
				#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.
15813
				#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.
15814
				#必填參數:
15815
				#$conf["inputStr"],字串,被搜尋的字串.
15816
				$conf["search::findKeyWordPosition"]["inputStr"]=$fileInfo["name"];
15817
				#$conf["keyWord"],字串,關鍵字.
15818
				$conf["search::findKeyWordPosition"]["keyWord"]=".";
15819
				#可省略參數:
15820
				#無.
15821
				#參考資料:
15822
				#http://php.net/manual/en/function.strpos.php
15823
				#備註:
15824
				#無.
15825
				$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
15826
				unset($conf["search::findKeyWordPosition"]);
15827
 
15828
				#如果執行失敗
15829
				if($findKeyWordPosition["status"]==="false"){
15830
 
15831
					#設置執行錯誤
15832
					$result["status"]="false";
15833
 
15834
					#設置錯誤訊息
15835
					$result["error"]=$spiltString;
15836
 
15837
					#回傳結果
15838
					return $result;
15839
 
15840
					}#if end
15841
 
15842
				#如果含有 "." 存在
15843
				if($findKeyWordPosition["found"]==="true"){
15844
 
15845
					#如果 "." 是在中間,不是在尾巴.
15846
					if($findKeyWordPosition["center"]==="true" && $findKeyWordPosition["tail"]==="false"){
15847
 
15848
						#取得 "." 之後的內容
15849
						#函式說明:
15850
						#將字串特定關鍵字與其前面的內容剔除
15851
						#回傳結果:
15852
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15853
						#$result["error"],錯誤訊息陣列.
15854
						#$result["warning"],警告訊息鎮列.
15855
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15856
						#$result["function"],當前執行的函數名稱.
15857
						#$result["argu"],使用的參數.
15858
						#$result["oriStr"],要處理的原始字串內容.
15859
						#$result["content"],處理好的的字串內容.
15860
						#$result["deleted"],被移除的內容.
15861
						#必填參數:
15862
						#$conf["stringIn"],字串,要處理的字串.
15863
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileInfo["name"];
15864
						#$conf["keyWord"],字串,特定字串.
15865
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";
15866
						#可省略參數:
15867
						#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
15868
						$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15869
						#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
15870
						#$conf["lastResult"]=$delStrBeforeKeyWord;
15871
						#參考資料:
15872
						#無.
15873
						#備註:
15874
						#無.
15875
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15876
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
15877
 
15878
						#如果執行失敗
15879
						if($delStrBeforeKeyWord["status"]==="false"){
15880
 
15881
							#設置執行錯誤
15882
							$result["status"]="false";
15883
 
15884
							#設置錯誤訊息
15885
							$result["error"]=$spiltString;
15886
 
15887
							#回傳結果
15888
							return $result;
15889
 
15890
							}#if end
15891
 
15892
						#如果該存在的 "." 不存在
15893
						if($delStrBeforeKeyWord["founded"]==="false"){
15894
 
15895
							#設置執行錯誤
15896
							$result["status"]="false";
15897
 
15898
							#設置錯誤訊息
15899
							$result["error"]=$spiltString;
15900
 
15901
							#回傳結果
15902
							return $result;
15903
 
15904
							}#if end
15905
 
15906
						#取得附檔名
15907
						$fileInfo["secondName"]=$delStrBeforeKeyWord["content"];
15908
 
15909
						}#if end
15910
 
15911
					}#if end
15912
 
15913
				}#if end
15914
 
15915
			#儲存檔案資訊
15916
			$result["content"][]=$fileInfo;
15917
 
15918
			}#foreach end
15919
 
15920
		#設置清單的長度
15921
		$result["dataCount"]=count($result["content"]);
15922
 
15923
		#設置執行正常
15924
		$result["status"]="true";
15925
 
15926
		#回傳結果
15927
		return $result;
15928
 
15929
		}#function ls end
15930
 
15931
	/*
15932
	#函式說明:
15933
	#將 ~ 轉換為家目錄路徑
15934
	#回傳結果:
15935
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15936
	#$result["error"],錯誤訊息.
15937
	#$result["function"],當前執行的函數名稱.
15938
	#$result["content"],轉換好的內容.
15939
	#必填參數:
15940
	#$conf["fileArgu"],字串,變數__FILE__的內容.
15941
	$conf["fileArgu"]=__FILE__;
15942
	#可省略參數:
15943
	#無.
15944
	#參考資料:
15945
	#https://www.businessweekly.com.tw/careers/Blog/14307
15946
	#備註:
15947
	#無.
15948
	*/
15949
	public static function tildeToPath(&$conf){
15950
 
15951
		#初始化要回傳的結果
15952
		$result=array();
15953
 
15954
		#取得當前執行的函數名稱
15955
		$result["function"]=__FUNCTION__;
15956
 
15957
		#如果沒有參數
15958
		if(func_num_args()==0){
15959
 
15960
			#設置執行失敗
15961
			$result["status"]="false";
15962
 
15963
			#設置執行錯誤訊息
15964
			$result["error"]="函數".$result["function"]."需要參數";
15965
 
15966
			#回傳結果
15967
			return $result;
15968
 
15969
			}#if end		
15970
 
15971
		#取得參數
15972
		$result["argu"]=$conf;
15973
 
15974
		#如果 $conf 不為陣列
15975
		if(gettype($conf)!=="array"){
15976
 
15977
			#設置執行失敗
15978
			$result["status"]="false";
15979
 
15980
			#設置執行錯誤訊息
15981
			$result["error"][]="\$conf變數須為陣列形態";
15982
 
15983
			#如果傳入的參數為 null
15984
			if($conf===null){
15985
 
15986
				#設置執行錯誤訊息
15987
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15988
 
15989
				}#if end
15990
 
15991
			#回傳結果
15992
			return $result;
15993
 
15994
			}#if end
15995
 
15996
		#函式說明:
15997
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15998
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15999
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16000
		#$result["function"],當前執行的函式名稱.
16001
		#$result["argu"],設置給予的參數.
16002
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16003
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16004
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16005
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16006
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16007
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16008
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16009
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16010
		#必填寫的參數:
16011
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16012
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16013
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16014
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16015
		#可以省略的參數:
16016
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16017
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
16018
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16019
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
16020
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16021
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16022
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16023
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16024
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16025
		#$conf["canBeEmpty"]=array();
16026
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16027
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
16028
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16029
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
16030
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16031
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
16032
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16033
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
16034
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16035
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16036
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16037
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16038
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16039
		#$conf["arrayCountEqualCheck"][]=array();
16040
		#參考資料來源:
16041
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16042
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16043
		unset($conf["variableCheck::checkArguments"]);
16044
 
16045
		#如果檢查參數失敗
16046
		if($checkArguments["status"]==="false"){
16047
 
16048
			#設置執行失敗
16049
			$result["status"]="false";
16050
 
16051
			#設置執行失敗訊息
16052
			$result["error"]=$checkArguments;
16053
 
16054
			#回傳結果
16055
			return $result;
16056
 
16057
			}#if end
16058
 
16059
		#如果檢查參數不通過
16060
		if($checkArguments["passed"]==="false"){
16061
 
16062
			#設置執行失敗
16063
			$result["status"]="false";
16064
 
16065
			#設置執行失敗訊息
16066
			$result["error"]=$checkArguments;
16067
 
16068
			#回傳結果
16069
			return $result;
16070
 
16071
			}#if end
16072
 
16073
		#函式說明:
16074
		#呼叫shell執行系統命令,並取得回傳的內容.
16075
		#回傳結果:
16076
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16077
		#$result["error"],錯誤訊息陣列.
16078
		#$result["function"],當前執行的函數名稱.
16079
		#$result["argu"],使用的參數.
16080
		#$result["cmd"],執行的指令內容.
16081
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16082
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16083
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16084
		#$result["running"],是否還在執行.
16085
		#$result["pid"],pid.
16086
		#$result["statusCode"],執行結束後的代碼.
16087
		#必填參數:
16088
		#$conf["command"],字串,要執行的指令與.
16089
		$conf["external::callShell"]["command"]="echo";
16090
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16091
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16092
		#可省略參數:
16093
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16094
		$conf["external::callShell"]["argu"]=array("~");
16095
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16096
		#$conf["arguIsAddr"]=array();
16097
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16098
		#$conf["plainArgu"]=array();
16099
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16100
		#$conf["useApostrophe"]=array();
16101
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16102
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16103
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16104
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16105
		#$conf["enablePrintDescription"]="true";
16106
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16107
		#$conf["printDescription"]="";
16108
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16109
		$conf["external::callShell"]["escapeshellarg"]="true";
16110
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16111
		#$conf["thereIsShellVar"]=array();
16112
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16113
		#$conf["username"]="";
16114
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16115
		#$conf["password"]="";
16116
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16117
		#$conf["useScript"]="";
16118
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16119
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16120
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16121
		#$conf["inBackGround"]="";
16122
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16123
		#$conf["getErr"]="false";
16124
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16125
		#$conf["doNotRun"]="false";
16126
		#參考資料:
16127
		#exec=>http://php.net/manual/en/function.exec.php
16128
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16129
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16130
		#備註:
16131
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16132
		$callShell=external::callShell($conf["external::callShell"]);
16133
		unset($conf["external::callShell"]);
16134
 
16135
		#如果執行失敗
16136
		if($callShell["status"]==="false"){
16137
 
16138
			#設置執行失敗
16139
			$result["status"]="false";
16140
 
16141
			#設置執行失敗訊息
16142
			$result["error"]=$callShell;
16143
 
16144
			#回傳結果
16145
			return $result;
16146
 
16147
			}#if end
16148
 
16149
		#如果沒有預期的輸出
16150
		if(!isset($callShell["output"][0])){
16151
 
16152
			#設置執行失敗
16153
			$result["status"]="false";
16154
 
16155
			#設置執行失敗訊息
16156
			$result["error"][]="沒有得到預期的輸出";
16157
 
16158
			#設置執行失敗訊息
16159
			$result["error"][]=$callShell;
16160
 
16161
			#回傳結果
16162
			return $result;
16163
 
16164
			}#if end
16165
 
16166
		#取得輸出
16167
		$result["content"]=$callShell["output"][0];
16168
 
16169
		#設置執行正常
16170
		$result["status"]="true";
16171
 
16172
		#回傳結果
16173
		return $result;
16174
 
16175
		}#function tildeToPath end
16176
 
16177
	/*
16178
	#函式說明:
16179
	#建立軟連結.
16180
	#回傳結果:
16181
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16182
	#$result["error"],錯誤訊息.
16183
	#$result["function"],當前執行的函數名稱.
16184
	#$result["content"],軟連結的資訊.
16185
	#$result["cmd"],執行的指令陣列.
16186
	#必填參數:
16187
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16188
	$conf["fileArgu"]=__FILE__;
16189
	#$conf["linkTo"],字串,軟連結要指向哪邊.
16190
	$conf["linkTo"]="";
16191
	#可省略參數:
16192
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16193
	#$conf["path"]="";
16194
	#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
16195
	#$conf["name"]="";
16196
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16197
	#$conf["overWrite"]="true";
16198
	#參考資料:
16199
	#無.
16200
	#備註:
16201
	#無.
16202
	*/
16203
	public static function createLink(&$conf){
16204
 
16205
		#初始化要回傳的結果
16206
		$result=array();
16207
 
16208
		#取得當前執行的函數名稱
16209
		$result["function"]=__FUNCTION__;
16210
 
16211
		#如果沒有參數
16212
		if(func_num_args()==0){
16213
 
16214
			#設置執行失敗
16215
			$result["status"]="false";
16216
 
16217
			#設置執行錯誤訊息
16218
			$result["error"]="函數".$result["function"]."需要參數";
16219
 
16220
			#回傳結果
16221
			return $result;
16222
 
16223
			}#if end		
16224
 
16225
		#取得參數
16226
		$result["argu"]=$conf;
16227
 
16228
		#如果 $conf 不為陣列
16229
		if(gettype($conf)!=="array"){
16230
 
16231
			#設置執行失敗
16232
			$result["status"]="false";
16233
 
16234
			#設置執行錯誤訊息
16235
			$result["error"][]="\$conf變數須為陣列形態";
16236
 
16237
			#如果傳入的參數為 null
16238
			if($conf===null){
16239
 
16240
				#設置執行錯誤訊息
16241
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16242
 
16243
				}#if end
16244
 
16245
			#回傳結果
16246
			return $result;
16247
 
16248
			}#if end
16249
 
16250
		#函式說明:
16251
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16252
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16253
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16254
		#$result["function"],當前執行的函式名稱.
16255
		#$result["argu"],設置給予的參數.
16256
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16257
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16258
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16259
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16260
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16261
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16262
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16263
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16264
		#必填寫的參數:
16265
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16266
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16267
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16268
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16269
		#可以省略的參數:
16270
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16271
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkTo");
16272
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16273
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16274
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16275
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16276
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16277
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16278
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16279
		#$conf["canBeEmpty"]=array();
16280
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16281
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16282
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16283
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16284
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16285
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
16286
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16287
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false");
16288
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16289
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16290
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16291
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16292
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16293
		#$conf["arrayCountEqualCheck"][]=array();
16294
		#參考資料來源:
16295
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16296
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16297
		unset($conf["variableCheck::checkArguments"]);
16298
 
16299
		#如果檢查參數失敗
16300
		if($checkArguments["status"]==="false"){
16301
 
16302
			#設置執行失敗
16303
			$result["status"]="false";
16304
 
16305
			#設置執行失敗訊息
16306
			$result["error"]=$checkArguments;
16307
 
16308
			#回傳結果
16309
			return $result;
16310
 
16311
			}#if end
16312
 
16313
		#如果檢查參數不通過
16314
		if($checkArguments["passed"]==="false"){
16315
 
16316
			#設置執行失敗
16317
			$result["status"]="false";
16318
 
16319
			#設置執行失敗訊息
16320
			$result["error"]=$checkArguments;
16321
 
16322
			#回傳結果
16323
			return $result;
16324
 
16325
			}#if end
16326
 
16327
		#如果是相對位置
16328
		if(!(strpos($conf["linkTo"],"/")===0)){
16329
 
16330
			#將 $conf["linkTo"] 轉換為針對產生位置的相對位置.
16331
			#函式說明:
16332
			#將多個路徑字串變成相對於當前路徑的相對路徑字串
16333
			#回傳結果:
16334
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16335
			#$result["error"],錯誤訊息陣列.
16336
			#$result["function"],函數名稱. 
16337
			#$result["argu"],使用的參數.
16338
			#$result["content"],字串陣列,多個轉換好的相對路徑字串.
16339
			#必填參數:
16340
			#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
16341
			$conf["fileAccess::getRelativePath"]["path"]=array($conf["linkTo"]);
16342
			#$conf["fileArgu"],字串,當前路徑.
16343
			$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
16344
			#可省略參數:
16345
			#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
16346
			$conf["fileAccess::getRelativePath"]["baseFrom"]=$conf["path"];
16347
			#參考資料:
16348
			#無.
16349
			#備註:
16350
			#無.
16351
			$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
16352
			unset($conf["fileAccess::getRelativePath"]);
16353
 
16354
			#如果執行失敗
16355
			if($getRelativePath["status"]==="false"){
16356
 
16357
				#設置執行失敗
16358
				$result["status"]="false";
16359
 
16360
				#設置執行失敗訊息
16361
				$result["error"]=$getRelativePath;
16362
 
16363
				#回傳結果
16364
				return $result;
16365
 
16366
				}#if end
16367
 
16368
			/*
16369
			#break point
16370
			var_dump($conf);
16371
			var_dump($getRelativePath);
16372
			exit;
16373
			*/
16374
 
16375
			#取得執行的指令
16376
			$result["cmd"][]=$getRelativePath["cmd"];
16377
 
16378
			#取得正確的相對位置
16379
			$conf["linkTo"]=$getRelativePath["content"][0];
16380
 
16381
			}#if end
16382
 
16383
		#初始化給 ln 指令的參數
16384
		$paramsForLn=array("-s",$conf["linkTo"]);
16385
 
16386
		#函式說明:
16387
		#將字串特定關鍵字與其前面的內容剔除
16388
		#回傳結果:
16389
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16390
		#$result["error"],錯誤訊息陣列.
16391
		#$result["warning"],警告訊息鎮列.
16392
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
16393
		#$result["function"],當前執行的函數名稱.
16394
		#$result["oriStr"],要處理的原始字串內容.
16395
		#$result["content"],處理好的的字串內容.	
16396
		#必填參數:
16397
		#$conf["stringIn"],字串,要處理的字串.
16398
		$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$conf["linkTo"];
16399
		#$conf["keyWord"],字串,特定字串.
16400
		$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";
16401
		#可省略參數:
16402
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
16403
		$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
16404
		#參考資料:
16405
		#無.
16406
		#備註:
16407
		#無.
16408
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
16409
		unset($conf["stringProcess::delStrBeforeKeyWord"]);
16410
 
16411
		#var_dump(__LINE__." ".print_r($delStrBeforeKeyWord,true));
16412
 
16413
		#如果執行失敗
16414
		if($delStrBeforeKeyWord["status"]==="false"){
16415
 
16416
			#設置執行失敗
16417
			$result["status"]="false";
16418
 
16419
			#設置執行失敗訊息
16420
			$result["error"]=$delStrBeforeKeyWord;
16421
 
16422
			#回傳結果
16423
			return $result;
16424
 
16425
			}#if end
16426
 
16427
		#如果沒有找到 "/"
16428
		if($delStrBeforeKeyWord["founded"]==="false"){
16429
 
16430
			#設置 預設的 軟連名稱
16431
			$softLink=$conf["linkTo"];
16432
 
16433
			}#if end
16434
 
16435
		#反之有 "/"
16436
		else{
16437
 
16438
			#設置 預設的 軟連結名稱
16439
			$softLink=$delStrBeforeKeyWord["content"];
16440
 
16441
			}#else end
16442
 
16443
		/*
16444
		#break point
16445
		var_dump(__LINE__." ".$softLink);
16446
		exit;
16447
		*/
16448
 
16449
		#預設欲建立的軟連結名稱
16450
		$createdSoftLink=$softLink;
16451
 
16452
		#如果有設置 path
16453
		if(isset($conf["path"])){
16454
 
16455
			#確認 path 存在
16456
			#函式說明:
16457
			#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
16458
			#回傳結果:
16459
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16460
			#$result["error"],錯誤訊息陣列
16461
			#$result["warning"],警告訊息陣列
16462
			#必填參數:
16463
			#$conf["dirPositionAndName"]="";#新建的位置與名稱
16464
			$conf["fileAccess::createNewFolder"]["dirPositionAndName"]=$conf["path"];
16465
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16466
			$conf["fileAccess::createNewFolder"]["fileArgu"]=$conf["fileArgu"];
16467
			#可省略參數:
16468
			#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
16469
			#$conf["dirPermission"]="";
16470
			#參考資料:
16471
			#mkdir=>http://php.net/manual/en/function.mkdir.php
16472
			#chmod=>http://php.net/manual/en/function.chmod.php
16473
			#參考資料:
16474
			#無.
16475
			#備註:
16476
			#同 function createFolderAfterCheck.
16477
			$createNewFolder=fileAccess::createNewFolder($conf["fileAccess::createNewFolder"]);
16478
			unset($conf["fileAccess::createNewFolder"]);
16479
 
16480
			#如果執行失敗
16481
			if($createNewFolder["status"]==="false"){
16482
 
16483
				#設置執行失敗
16484
				$result["status"]="false";
16485
 
16486
				#設置執行失敗訊息
16487
				$result["error"]=$createNewFolder;
16488
 
16489
				#回傳結果
16490
				return $result;
16491
 
16492
				}#if end
16493
 
16494
			#var_dump(__LINE__." ".print_r($conf,true));
16495
 
16496
			#預設要加 slash
16497
			$slash="/";
16498
 
16499
			#如果 path 為 "/" 結尾
16500
			if($conf["path"][strlen($conf["path"])-1]==="/"){
16501
 
16502
				#不用 slash
16503
				$slash="";
16504
 
16505
				}#if end
16506
 
16507
			#如果有設置 name
16508
			if(isset($conf["name"])){
16509
 
16510
				#指定軟連結要放在哪邊
16511
				$paramsForLn[]=$conf["path"].$slash.$conf["name"];
16512
 
16513
				#更新欲建立的軟連結名稱
16514
				$createdSoftLink=$conf["path"].$slash.$conf["name"];
16515
 
16516
				/*
16517
				#break point
16518
				var_dump($conf["path"],$softLink,$createdSoftLink);
16519
				exit;
16520
				*/
16521
 
16522
				}#if end
16523
 
16524
			#反之
16525
			else{
16526
 
16527
				#指定軟連結要放在哪邊
16528
				$paramsForLn[]=$conf["path"];
16529
 
16530
				#更新欲建立的軟連結名稱
16531
				$createdSoftLink=$conf["path"].$slash.$softLink;
16532
 
16533
				/*
16534
				#break point
16535
				var_dump($conf["path"],$softLink,$createdSoftLink);
16536
				exit;
16537
				*/
16538
 
16539
				}#else end
16540
 
16541
			#var_dump($createdSoftLink);
16542
 
16543
			}#if end
16544
 
16545
		#反之如果有設置 name
16546
		else if(isset($conf["name"])){
16547
 
16548
			#指定軟連結的名稱
16549
			$paramsForLn[]=$conf["name"];
16550
 
16551
			#更新欲建立的軟連結名稱
16552
			$createdSoftLink=$conf["name"];
16553
 
16554
			#var_dump(__LINE__." ".$createdSoftLink);
16555
 
16556
			}#if end
16557
 
16558
		/*
16559
		# break point
16560
		var_dump($createdSoftLink);
16561
		exit;
16562
		*/
16563
 
16564
		#如果要覆蓋既有的目標
16565
		if($conf["overWrite"]==="true"){
16566
 
16567
			#函式說明:
16568
			#移除檔案
16569
			#回傳結果:
16570
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
16571
			#$result["error"],錯誤訊息陣列
16572
			#$result["warning"],警告訊息陣列
16573
			#$result["function"],當前執行的函數名稱
16574
			#必填參數:
16575
			#$conf["fileAddress"],字串,要移除檔案的位置.
16576
			$conf["fileAccess::delFile"]["fileAddress"]=$createdSoftLink;
16577
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
16578
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
16579
			#可省略參數:
16580
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
16581
			#$conf["commentsArray"]=array("");
16582
			#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
16583
			$conf["fileAccess::delFile"]["allowDelSymlink"]="true";
16584
			#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
16585
			$conf["fileAccess::delFile"]["allowDelFolder"]="true";
16586
			#參考資料:
16587
			#無.
16588
			#備註:
16589
			#無.
16590
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
16591
			unset($conf["fileAccess::delFile"]);	
16592
 
16593
			/*
16594
			#break point
16595
			var_dump($delFile);
16596
			exit;
16597
			*/
16598
 
16599
			#如果執行失敗
16600
			if($delFile["status"]==="false"){
16601
 
16602
				#設置執行失敗
16603
				$result["status"]="false";
16604
 
16605
				#設置執行失敗訊息
16606
				$result["error"]=$delFile;
16607
 
16608
				#回傳結果
16609
				return $result;
16610
 
16611
				}#if end
16612
 
16613
			}#if end
16614
 
16615
		#函式說明:
16616
		#呼叫shell執行系統命令,並取得回傳的內容.
16617
		#回傳結果:
16618
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16619
		#$result["error"],錯誤訊息陣列.
16620
		#$result["function"],當前執行的函數名稱.
16621
		#$result["argu"],使用的參數.
16622
		#$result["cmd"],執行的指令內容.
16623
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16624
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16625
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16626
		#$result["running"],是否還在執行.
16627
		#$result["pid"],pid.
16628
		#$result["statusCode"],執行結束後的代碼.
16629
		#必填參數:
16630
		#$conf["command"],字串,要執行的指令與.
16631
		$conf["external::callShell"]["command"]="ln";
16632
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16633
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16634
		#可省略參數:
16635
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16636
		$conf["external::callShell"]["argu"]=$paramsForLn;
16637
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16638
		#$conf["arguIsAddr"]=array();
16639
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16640
		#$conf["plainArgu"]=array();
16641
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16642
		#$conf["useApostrophe"]=array();
16643
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16644
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16645
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16646
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16647
		#$conf["enablePrintDescription"]="true";
16648
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16649
		#$conf["printDescription"]="";
16650
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16651
		$conf["external::callShell"]["escapeshellarg"]="true";
16652
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16653
		#$conf["thereIsShellVar"]=array();
16654
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16655
		#$conf["username"]="";
16656
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16657
		#$conf["password"]="";
16658
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16659
		#$conf["useScript"]="";
16660
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16661
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16662
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16663
		#$conf["inBackGround"]="";
16664
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16665
		$conf["external::callShell"]["getErr"]="true";
16666
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16667
		#$conf["doNotRun"]="false";
16668
		#參考資料:
16669
		#exec=>http://php.net/manual/en/function.exec.php
16670
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16671
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16672
		#備註:
16673
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16674
		$callShell=external::callShell($conf["external::callShell"]);
16675
		unset($conf["external::callShell"]);
16676
 
16677
		#如果執行失敗
16678
		if($callShell["status"]==="false"){
16679
 
16680
			#設置執行失敗
16681
			$result["status"]="false";
16682
 
16683
			#設置執行失敗訊息
16684
			$result["error"]=$callShell;
16685
 
16686
			#回傳結果
16687
			return $result;
16688
 
16689
			}#if end
16690
 
16691
		#保存執行的指令
16692
		$result["cmd"][]=$callShell["cmd"];
16693
 
16694
		#初始化給 ls 指令的參數
16695
		$paramsForLs=array("-l",$paramsForLn[count($paramsForLn)-1]);
16696
 
16697
		#取得軟連結的資訊
16698
		#函式說明:
16699
		#呼叫shell執行系統命令,並取得回傳的內容.
16700
		#回傳結果:
16701
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16702
		#$result["error"],錯誤訊息陣列.
16703
		#$result["function"],當前執行的函數名稱.
16704
		#$result["argu"],使用的參數.
16705
		#$result["cmd"],執行的指令內容.
16706
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16707
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16708
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16709
		#$result["running"],是否還在執行.
16710
		#$result["pid"],pid.
16711
		#$result["statusCode"],執行結束後的代碼.
16712
		#必填參數:
16713
		#$conf["command"],字串,要執行的指令與.
16714
		$conf["external::callShell"]["command"]="ls";
16715
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16716
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16717
		#可省略參數:
16718
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16719
		$conf["external::callShell"]["argu"]=$paramsForLs;
16720
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16721
		#$conf["arguIsAddr"]=array();
16722
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16723
		#$conf["plainArgu"]=array();
16724
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16725
		#$conf["useApostrophe"]=array();
16726
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16727
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16728
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16729
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16730
		#$conf["enablePrintDescription"]="true";
16731
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16732
		#$conf["printDescription"]="";
16733
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16734
		$conf["external::callShell"]["escapeshellarg"]="true";
16735
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16736
		#$conf["thereIsShellVar"]=array();
16737
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16738
		#$conf["username"]="";
16739
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16740
		#$conf["password"]="";
16741
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16742
		#$conf["useScript"]="";
16743
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16744
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16745
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16746
		#$conf["inBackGround"]="";
16747
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16748
		$conf["external::callShell"]["getErr"]="true";
16749
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16750
		#$conf["doNotRun"]="false";
16751
		#參考資料:
16752
		#exec=>http://php.net/manual/en/function.exec.php
16753
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16754
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16755
		#備註:
16756
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16757
		$callShell=external::callShell($conf["external::callShell"]);
16758
		unset($conf["external::callShell"]);
16759
 
16760
		#如果執行失敗
16761
		if($callShell["status"]==="false"){
16762
 
16763
			#設置執行失敗
16764
			$result["status"]="false";
16765
 
16766
			#設置執行失敗訊息
16767
			$result["error"]=$callShell;
16768
 
16769
			#回傳結果
16770
			return $result;
16771
 
16772
			}#if end
16773
 
16774
		#保存執行的指令
16775
		$result["cmd"][]=$callShell["cmd"];
16776
 
16777
		#取得軟連結的資訊
16778
		$result["content"]=$callShell["output"];
16779
 
16780
		#設置執行正常
16781
		$result["status"]="true";
16782
 
16783
		#回傳結果
16784
		return $result;
16785
 
16786
		}#function createLink end
16787
 
16788
	/*
16789
	#函式說明:
16790
	#針對特定目錄下的內容建立軟連結.
16791
	#回傳結果:
16792
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16793
	#$result["error"],錯誤訊息.
16794
	#$result["function"],當前執行的函數名稱.
16795
	#$result["content"],字串陣列,每個建立的軟連結資訊.
16796
	#必填參數:
16797
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16798
	$conf["fileArgu"]=__FILE__;
16799
	#$conf["linkToDir"],字串,軟連結要指向哪個目錄底下的內容.
16800
	$conf["linkToDir"]="";
16801
	#可省略參數:
16802
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16803
	#$conf["path"]="";
16804
	#$conf["name"],字串陣列,軟連結的名稱,預設為 "linkToDir" 目錄底下的檔案或目錄名稱.若要指定特定檔案目錄的軟連結名稱,則可以用 $conf["name"][]=array("原始名稱","新的名稱"); 來指定.
16805
	#$conf["name"]=array(array("oriName","newName"));
16806
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16807
	#$conf["overWrite"]="true";
16808
	#參考資料:
16809
	#無.
16810
	#備註:
16811
	#無.
16812
	*/
16813
	public static function createMultiLinkInDir(&$conf){
16814
 
16815
		#初始化要回傳的結果
16816
		$result=array();
16817
 
16818
		#取得當前執行的函數名稱
16819
		$result["function"]=__FUNCTION__;
16820
 
16821
		#如果沒有參數
16822
		if(func_num_args()==0){
16823
 
16824
			#設置執行失敗
16825
			$result["status"]="false";
16826
 
16827
			#設置執行錯誤訊息
16828
			$result["error"]="函數".$result["function"]."需要參數";
16829
 
16830
			#回傳結果
16831
			return $result;
16832
 
16833
			}#if end		
16834
 
16835
		#取得參數
16836
		$result["argu"]=$conf;
16837
 
16838
		#如果 $conf 不為陣列
16839
		if(gettype($conf)!=="array"){
16840
 
16841
			#設置執行失敗
16842
			$result["status"]="false";
16843
 
16844
			#設置執行錯誤訊息
16845
			$result["error"][]="\$conf變數須為陣列形態";
16846
 
16847
			#如果傳入的參數為 null
16848
			if($conf===null){
16849
 
16850
				#設置執行錯誤訊息
16851
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16852
 
16853
				}#if end
16854
 
16855
			#回傳結果
16856
			return $result;
16857
 
16858
			}#if end
16859
 
16860
		#檢查參數
16861
		#函式說明:
16862
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16863
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16864
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16865
		#$result["function"],當前執行的函式名稱.
16866
		#$result["argu"],設置給予的參數.
16867
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16868
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16869
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16870
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16871
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16872
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16873
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16874
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16875
		#必填寫的參數:
16876
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16877
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16878
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16879
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16880
		#可以省略的參數:
16881
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16882
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkToDir");
16883
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16884
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16885
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16886
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16887
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16888
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16889
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16890
		#$conf["canBeEmpty"]=array();
16891
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16892
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16893
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16894
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16895
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16896
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
16897
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16898
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".",null,"false");
16899
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16900
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16901
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16902
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16903
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16904
		#$conf["arrayCountEqualCheck"][]=array();
16905
		#參考資料來源:
16906
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16907
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16908
		unset($conf["variableCheck::checkArguments"]);
16909
 
16910
		#如果檢查參數失敗
16911
		if($checkArguments["status"]==="false"){
16912
 
16913
			#設置執行失敗
16914
			$result["status"]="false";
16915
 
16916
			#設置執行失敗訊息
16917
			$result["error"]=$checkArguments;
16918
 
16919
			#回傳結果
16920
			return $result;
16921
 
16922
			}#if end
16923
 
16924
		#如果檢查參數不通過
16925
		if($checkArguments["passed"]==="false"){
16926
 
16927
			#設置執行失敗
16928
			$result["status"]="false";
16929
 
16930
			#設置執行失敗訊息
16931
			$result["error"]=$checkArguments;
16932
 
16933
			#回傳結果
16934
			return $result;
16935
 
16936
			}#if end
16937
 
16938
		#函式說明:
16939
		#取得目錄底下所有目錄與檔案清單.
16940
		#回傳結果:
16941
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16942
		#$result["error"],錯誤訊息陣列.
16943
		#$result["function"],函數名稱.
16944
		#$result["content"],陣列,目錄底下的檔案與子目錄.
16945
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
16946
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
16947
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
16948
		#$result["position"],目前的位置.
16949
		#必填參數:
16950
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
16951
		$conf["fileAccess::getList"]["position"]=$conf["linkToDir"];
16952
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16953
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
16954
		#可省略參數:
16955
		#無
16956
		#參考資料:
16957
		#opendir=>http://php.net/manual/en/function.opendir.php
16958
		#is_dir=>http://php.net/manual/en/function.is-dir.php
16959
		#備註:
16960
		#無.
16961
		$getList=fileAccess::getList($conf["fileAccess::getList"]);
16962
		unset($conf["fileAccess::getList"]);
16963
 
16964
		#如果檢查參數失敗
16965
		if($getList["status"]==="false"){
16966
 
16967
			#設置執行失敗
16968
			$result["status"]="false";
16969
 
16970
			#設置執行失敗訊息
16971
			$result["error"]=$getList;
16972
 
16973
			#回傳結果
16974
			return $result;
16975
 
16976
			}#if end
16977
 
16978
		#針對目標目錄底下的所有檔案
16979
		foreach($getList["content"] as $oriName){
16980
 
16981
			#如果有設定 $conf["name"]
16982
			if(isset($conf["name"])){
16983
 
16984
				#預設不指定新的軟連結名稱
16985
				unset($newSoftLinkName);
16986
 
16987
				#針對每個原始目標的名稱
16988
				foreach($conf["name"] as $customName){
16989
 
16990
					#如果是指定的目標
16991
					if($oriName["name"]===$customName[0]){
16992
 
16993
						#設置新的軟連結名稱
16994
						$newSoftLinkName=$customName[1];
16995
 
16996
						}#if end
16997
 
16998
					}#foreach end
16999
 
17000
				}#if end
17001
 
17002
			#建立軟連結
17003
			#函式說明:
17004
			#建立軟連結.
17005
			#回傳結果:
17006
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17007
			#$result["error"],錯誤訊息.
17008
			#$result["function"],當前執行的函數名稱.
17009
			#$result["content"],軟連結的資訊.
17010
			#必填參數:
17011
			#$conf["fileArgu"],字串,變數__FILE__的內容.
17012
			$conf["fileAccess::createLink"]["fileArgu"]=$conf["fileArgu"];
17013
			#$conf["linkTo"],字串,軟連結要指向哪邊.
17014
			$conf["fileAccess::createLink"]["linkTo"]=$conf["linkToDir"]."/".$oriName["name"];
17015
			#可省略參數:
17016
			#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
17017
			$conf["fileAccess::createLink"]["path"]=$conf["path"];
17018
 
17019
			#如果有新的軟連結名稱
17020
			if(isset($newSoftLinkName)){
17021
 
17022
				#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
17023
				$conf["fileAccess::createLink"]["name"]=$newSoftLinkName;
17024
 
17025
				}#if end
17026
 
17027
			#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
17028
			$conf["fileAccess::createLink"]["overWrite"]=$conf["overWrite"];
17029
 
17030
			#參考資料:
17031
			#無.
17032
			#備註:
17033
			#無.
17034
			$createLink=fileAccess::createLink($conf["fileAccess::createLink"]);
17035
			unset($conf["fileAccess::createLink"]);
17036
 
17037
			#var_dump(__LINE__." ".print_r($createLink,true));
17038
 
17039
			#如果檢查參數失敗
17040
			if($createLink["status"]==="false"){
17041
 
17042
				#設置執行失敗
17043
				$result["status"]="false";
17044
 
17045
				#設置執行失敗訊息
17046
				$result["error"]=$createLink;
17047
 
17048
				#回傳結果
17049
				return $result;
17050
 
17051
				}#if end
17052
 
17053
			#儲存建立好的軟連結資訊
17054
			$result["content"][]=$createLink["content"];
17055
 
17056
			}#foreach end
17057
 
17058
		#設置執行正常
17059
		$result["status"]="true";
17060
 
17061
		#回傳結果
17062
		return $result;
17063
 
17064
		}#function createMultiLink end
17065
 
17066
	/*
17067
	#函式說明:
17068
	#更新檔案的內容.
17069
	#回傳結果:
17070
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17071
	#$result["error"],錯誤訊息.
17072
	#$result["function"],當前執行的函數名稱.
17073
	#$result["content"],軟連結的資訊.
17074
	#必填參數:
17075
	#$conf["fileArgu"],字串,變數__FILE__的內容.
17076
	$conf["fileArgu"]=__FILE__;
17077
	#$conf["file"],字串,要更新的檔案位置與名稱.
17078
	$conf["file"]="";
17079
	#可省略參數:
17080
	#$conf["overWriteWith"],字串陣列,要置換成什麼樣的內容,每個元素代表一行內容.
17081
	#$conf["overWriteWith"]=array();
17082
	#$conf["replaceWith"],字串陣列,要將什麼內容置換成什麼內容.
17083
	#$conf["replaceWith"]=array(array("ori content","new content"),array("ori content","new content"),...);
17084
	#$conf["replaceLike"],字串,預設為"false",代表要完全符合關鍵字才能進行整行替換;反之為"true".
17085
	#$conf["replaceLike"]="false";
17086
	#$conf["addToTailWhenNoMatch"],字串,預設為"false"不做事;若為"true",則代表若使用 "replaceWith" 參數但沒有符合條件的內容出現,則新增到檔案的尾端.
17087
	#$conf["addToTailWhenNoMatch"]="false";
17088
	#$conf["addToTailBeforeThat"],字串,當 "replaceWith" 參數有使用,且 "addToTailWhenNoMatch" 為 "true" 時,若有使用該參數,則會從尾端尋找符合條件的行內容,然後將 沒有符合 "replaceWith" 條件的內容新增在此之前.
17089
	#$conf["addToTailBeforeThat"]="?\>";
17090
	#參考資料:
17091
	#無.
17092
	#備註:
17093
	#無.
17094
	*/
17095
	public static function updateFile(&$conf){
17096
 
17097
		#初始化要回傳的結果
17098
		$result=array();
17099
 
17100
		#取得當前執行的函數名稱
17101
		$result["function"]=__FUNCTION__;
17102
 
17103
		#如果沒有參數
17104
		if(func_num_args()==0){
17105
 
17106
			#設置執行失敗
17107
			$result["status"]="false";
17108
 
17109
			#設置執行錯誤訊息
17110
			$result["error"]="函數".$result["function"]."需要參數";
17111
 
17112
			#回傳結果
17113
			return $result;
17114
 
17115
			}#if end		
17116
 
17117
		#取得參數
17118
		$result["argu"]=$conf;
17119
 
17120
		#如果 $conf 不為陣列
17121
		if(gettype($conf)!=="array"){
17122
 
17123
			#設置執行失敗
17124
			$result["status"]="false";
17125
 
17126
			#設置執行錯誤訊息
17127
			$result["error"][]="\$conf變數須為陣列形態";
17128
 
17129
			#如果傳入的參數為 null
17130
			if($conf===null){
17131
 
17132
				#設置執行錯誤訊息
17133
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17134
 
17135
				}#if end
17136
 
17137
			#回傳結果
17138
			return $result;
17139
 
17140
			}#if end
17141
 
17142
		#檢查參數
17143
		#函式說明:
17144
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
17145
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17146
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
17147
		#$result["function"],當前執行的函式名稱.
17148
		#$result["argu"],設置給予的參數.
17149
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17150
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17151
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17152
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17153
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17154
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17155
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17156
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17157
		#必填寫的參數:
17158
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
17159
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
17160
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
17161
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
17162
		#可以省略的參數:
17163
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
17164
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","file");
17165
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
17166
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
17167
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17168
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
17169
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17170
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
17171
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17172
		#$conf["canBeEmpty"]=array();
17173
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17174
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
17175
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17176
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
17177
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
17178
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","string","string","string");
17179
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17180
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"false");
17181
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17182
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17183
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17184
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17185
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17186
		#$conf["arrayCountEqualCheck"][]=array();
17187
		#參考資料來源:
17188
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17189
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17190
		unset($conf["variableCheck::checkArguments"]);
17191
 
17192
		#如果檢查參數失敗
17193
		if($checkArguments["status"]==="false"){
17194
 
17195
			#設置執行失敗
17196
			$result["status"]="false";
17197
 
17198
			#設置執行失敗訊息
17199
			$result["error"]=$checkArguments;
17200
 
17201
			#回傳結果
17202
			return $result;
17203
 
17204
			}#if end
17205
 
17206
		#如果檢查參數不通過
17207
		if($checkArguments["passed"]==="false"){
17208
 
17209
			#設置執行失敗
17210
			$result["status"]="false";
17211
 
17212
			#設置執行失敗訊息
17213
			$result["error"]=$checkArguments;
17214
 
17215
			#回傳結果
17216
			return $result;
17217
 
17218
			}#if end
17219
 
17220
		#檢查檔案是否存在
17221
		#函式說明:
17222
		#檢查多個檔案與資料夾是否存在.
17223
		#回傳的結果:
17224
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
17225
		#$result["error"],錯誤訊息陣列.
17226
		#$resutl["function"],當前執行的涵式名稱.
17227
		#$result["argu"],使用的參數.
17228
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
17229
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
17230
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
17231
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
17232
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
17233
		#必填參數:
17234
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
17235
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
17236
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17237
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
17238
		#可省略參數:
17239
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
17240
		$conf["disableWebSearch"]="true";
17241
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
17242
		$conf["userDir"]="false";
17243
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
17244
		$conf["web"]="false";
17245
		#參考資料:
17246
		#http://php.net/manual/en/function.file-exists.php
17247
		#http://php.net/manual/en/control-structures.foreach.php
17248
		#備註:
17249
		#函數file_exists檢查的路徑為檔案系統的路徑
17250
		#$result["varName"][$i]結果未實作
17251
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
17252
		unset($conf["fileAccess::checkMultiFileExist"]);
17253
 
17254
		#如果檢查參數失敗
17255
		if($checkMultiFileExist["status"]==="false"){
17256
 
17257
			#設置執行失敗
17258
			$result["status"]="false";
17259
 
17260
			#設置執行失敗訊息
17261
			$result["error"]=$checkMultiFileExist;
17262
 
17263
			#回傳結果
17264
			return $result;
17265
 
17266
			}#if end
17267
 
17268
		#如果目標檔案不存在
17269
		if($checkMultiFileExist["allExist"]==="false"){
17270
 
17271
			#設置執行失敗
17272
			$result["status"]="false";
17273
 
17274
			#設置執行失敗訊息
17275
			$result["error"]=$checkMultiFileExist;
17276
 
17277
			#回傳結果
17278
			return $result;
17279
 
17280
			}#if end
17281
 
17282
		#如果有設置 overWriteWith
17283
		if(isset($conf["overWriteWith"])){
17284
 
17285
			#函式說明:
17286
			#將多行字串寫入到檔案
17287
			#回傳結果:
17288
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17289
			#$result["error"],錯誤訊息陣列.
17290
			#$result["function"],當前執行函數的名稱.
17291
			#必填參數:
17292
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17293
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17294
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17295
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["overWriteWith"];
17296
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17297
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17298
			#可省略參數:
17299
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17300
			#參考資料:
17301
			#無.
17302
			#備註:
17303
			#無.
17304
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17305
			unset($conf["fileAccess::writeMultiLine"]);
17306
 
17307
			#如果執行失敗
17308
			if($writeMultiLine["status"]==="false"){
17309
 
17310
				#設置執行失敗
17311
				$result["status"]="false";
17312
 
17313
				#設置執行失敗訊息
17314
				$result["error"]=$writeMultiLine;
17315
 
17316
				#回傳結果
17317
				return $result;
17318
 
17319
				}#if end
17320
 
17321
			}#if end
17322
 
17323
		#如果有設置 "replaceWith"
17324
		if(isset($conf["replaceWith"])){
17325
 
17326
			#取得檔案的內容
17327
			#函式說明:
17328
			#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
17329
			#回傳的變數說明:
17330
			#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
17331
			#$result["error"],錯誤訊息提示.
17332
			#$result["warning"],警告訊息.
17333
			#$result["function"],當前執行的函數名稱.
17334
			#$result["fileContent"],爲檔案的內容陣列.
17335
			#$result["lineCount"],爲檔案內容總共的行數.
17336
			#$result["fullContent"],為檔案的完整內容.
17337
			#$result["base64data"],為檔案的base64內容.
17338
			#$result["mimeType"],為檔案的mime type.
17339
			#必填參數:
17340
			#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
17341
			$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
17342
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17343
			$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
17344
			#可省略參數:
17345
			#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
17346
			$conf["fileAccess::getFileContent"]["web"]="false";
17347
			#參考資料:
17348
			#file(),取得檔案內容的行數.
17349
			#file=>http:#php.net/manual/en/function.file.php
17350
			#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
17351
			#filesize=>http://php.net/manual/en/function.filesize.php
17352
			#參考資料:
17353
			#無.
17354
			#備註:
17355
			#無.
17356
			$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
17357
			unset($conf["fileAccess::getFileContent"]);
17358
 
17359
			#如果執行失敗
17360
			if($getFileContent["status"]==="false"){
17361
 
17362
				#設置執行失敗
17363
				$result["status"]="false";
17364
 
17365
				#設置執行失敗訊息
17366
				$result["error"]=$getFileContent;
17367
 
17368
				#回傳結果
17369
				return $result;
17370
 
17371
				}#if end
17372
 
17373
			#取得原始檔案的每行內容
17374
			$oriFileContentByLine=&$getFileContent["fileContent"];
17375
 
17376
			#針對每個 replaceWith 條件
17377
			foreach($conf["replaceWith"] as $replaceInfo){
17378
 
17379
				#預設尚未找到符合的關鍵字
17380
				$foundKeyWord=false;
17381
 
17382
				#取得要替換的目標字串
17383
				$oriStr=$replaceInfo[0];
17384
 
17385
				#取得要替換成的字串內容
17386
				$newStr=$replaceInfo[1];
17387
 
17388
				#針對每行原始內容
17389
				foreach($oriFileContentByLine as $index => $line){
17390
 
17391
					#函式說明:
17392
					#檢查字串裡面有無指定的關鍵字
17393
					#回傳結果:
17394
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
17395
					#$result["error"],錯誤訊息
17396
					#$result["function"],當前執行的函數名稱.
17397
					#$result["argu"],使用的參數.
17398
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
17399
					#$result["keyWordCount"],找到的關鍵字數量.
17400
					#必填參數:
17401
					#$conf["keyWord"],字串,想要搜尋的關鍵字.
17402
					$conf["search::findKeyWord"]["keyWord"]=$oriStr;
17403
					#$conf["string"],字串,要被搜尋的字串內容
17404
					$conf["search::findKeyWord"]["string"]=$line;
17405
					#可省略參數:
17406
 
17407
					#如果要完全符合關鍵字
17408
					if($conf["replaceLike"]==="false"){
17409
 
17410
						#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
17411
						$conf["search::findKeyWord"]["completeEqual"]="true";
17412
 
17413
						}#if end
17414
 
17415
					#參考資料:
17416
					#無.
17417
					#備註:
17418
					#無.
17419
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
17420
					unset($conf["search::findKeyWord"]);
17421
 
17422
					#如果執行失敗
17423
					if($findKeyWord["status"]==="false"){
17424
 
17425
						#設置執行失敗
17426
						$result["status"]="false";
17427
 
17428
						#設置執行失敗訊息
17429
						$result["error"]=$findKeyWord;
17430
 
17431
						#回傳結果
17432
						return $result;
17433
 
17434
						}#if end
17435
 
17436
					#如果有找到關鍵字
17437
					if($findKeyWord["founded"]==="true"){
17438
 
17439
						#更新該行內容
17440
						$oriFileContentByLine[$index]=$newStr;
17441
 
17442
						#設置有找到符合的關鍵字
17443
						$foundKeyWord=true;
17444
 
17445
						}#if end
17446
 
17447
					}#foreach end
17448
 
17449
				#如果沒有找到關鍵字
17450
				if($foundKeyWord===false){
17451
 
17452
					#如果要新增內容
17453
					if($conf["addToTailWhenNoMatch"]==="true"){
17454
 
17455
						#如果有設置 addToTailBeforeThat
17456
						if(isset($conf["addToTailBeforeThat"])){
17457
 
17458
							#預設沒有找到符合的關鍵字
17459
							$foundKeyWord=false;
17460
 
17461
							#初始化要記錄要 append 回去的各行內容.
17462
							$linesToAppend=array();
17463
 
17464
							#倒敘,針對每行內容
17465
							for($i=count($oriFileContentByLine)-1;$i>=0;$i--){
17466
 
17467
								#儲存要 append 回去的行內容
17468
								$linesToAppend[]=$oriFileContentByLine[$i];
17469
 
17470
								#如果找到關鍵字了
17471
								if($oriFileContentByLine[$i]===$conf["addToTailBeforeThat"]){
17472
 
17473
									#設置有找到符合的關鍵字
17474
									$foundKeyWord=true;
17475
 
17476
									#更新該行內容
17477
									$oriFileContentByLine[$i]=$line;
17478
 
17479
									#倒敘陣列
17480
									$linesToAppend=array_reverse($linesToAppend);
17481
 
17482
									#針對每行要 append 回去的內容
17483
									foreach($linesToAppend as $lineToAppend){
17484
 
17485
										#append 行內容
17486
										$oriFileContentByLine[]=$lineToAppend;
17487
 
17488
										}#foreach end
17489
 
17490
									}#if end
17491
 
17492
								}#for end
17493
 
17494
							#如果沒有找到關鍵字
17495
							if($foundKeyWord===false){
17496
 
17497
								#設置執行失敗
17498
								$result["status"]="false";
17499
 
17500
								#設置錯誤訊息
17501
								$result["error"]="can't find \"".$conf["addToTailBeforeThat"]."\" to insert before it.";
17502
 
17503
								#回傳結果
17504
								return $result;
17505
 
17506
								}#if end
17507
 
17508
							}#if end
17509
 
17510
						}#if end
17511
 
17512
					}#if end
17513
 
17514
				}#foreach end
17515
 
17516
			#函式說明:
17517
			#將多行字串寫入到檔案
17518
			#回傳結果:
17519
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17520
			#$result["error"],錯誤訊息陣列.
17521
			#$result["function"],當前執行函數的名稱.
17522
			#必填參數:
17523
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17524
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17525
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17526
			$conf["fileAccess::writeMultiLine"]["inputString"]=$oriFileContentByLine;
17527
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17528
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17529
			#可省略參數:
17530
			#$conf["fileAccess::writeMultiLine"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17531
			#參考資料:
17532
			#無.
17533
			#備註:
17534
			#無.
17535
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17536
			unset($conf["fileAccess::writeMultiLine"]);
17537
 
17538
			#如果執行失敗
17539
			if($writeMultiLine["status"]==="false"){
17540
 
17541
				#設置執行失敗
17542
				$result["status"]="false";
17543
 
17544
				#設置執行失敗訊息
17545
				$result["error"]=$writeMultiLine;
17546
 
17547
				#回傳結果
17548
				return $result;
17549
 
17550
				}#if end
17551
 
17552
			}#if end
17553
 
17554
		#設置執行正常
17555
		$result["status"]="true";
17556
 
17557
		#回傳結果
17558
		return $result;
17559
 
17560
		}#function updateFile end
17561
 
17562
	/*
17563
	#函式說明:
17564
	#輔助使用PHP內建的chmod函式.
17565
	#回傳結果:
17566
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17567
	#$result["error"],錯誤訊息.
17568
	#$result["function"],當前執行的函式名稱.
17569
	#$result["argu"],使用的參數.
17570
	#$result["cmd"],執行的指令.
17571
	#$result["content"],執行的結果陣列,如果參數 "recursive" 跟 "excludeSelf" 都有設定的話,就會回傳該結果.
17572
	#必填參數:
17573
	#$conf["mode"],字串,要變成什麼權限.
17574
	$conf["mode"]="";
17575
	#$conf["target"],字串,需要變更權限的目標.
17576
	$conf["target"]="";
17577
	#可省略參數:
17578
	#無.
17579
	#參考資料:
17580
	#無.
17581
	#備註:
17582
	#無.
17583
	*/
17584
	public static function chmod(&$conf){
17585
 
17586
		#初始化要回傳的結果
17587
		$result=array();
17588
 
17589
		#取得當前執行的函數名稱
17590
		$result["function"]=__FUNCTION__;
17591
 
17592
		#如果沒有參數
17593
		if(func_num_args()==0){
17594
 
17595
			#設置執行失敗
17596
			$result["status"]="false";
17597
 
17598
			#設置執行錯誤訊息
17599
			$result["error"]="函數".$result["function"]."需要參數";
17600
 
17601
			#回傳結果
17602
			return $result;
17603
 
17604
			}#if end
17605
 
17606
		#取得參數
17607
		$result["argu"]=$conf;
17608
 
17609
		#如果 $conf 不為陣列
17610
		if(gettype($conf)!=="array"){
17611
 
17612
			#設置執行失敗
17613
			$result["status"]="false";
17614
 
17615
			#設置執行錯誤訊息
17616
			$result["error"][]="\$conf變數須為陣列形態";
17617
 
17618
			#如果傳入的參數為 null
17619
			if(is_null($conf)){
17620
 
17621
				#設置執行錯誤訊息
17622
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17623
 
17624
				}#if end
17625
 
17626
			#回傳結果
17627
			return $result;
17628
 
17629
			}#if end
17630
 
17631
		#函式說明:
17632
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
17633
		#回傳結果:
17634
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17635
		#$result["error"],執行不正常結束的錯訊息陣列.
17636
		#$result["simpleError"],簡單表示的錯誤訊息.
17637
		#$result["function"],當前執行的函式名稱.
17638
		#$result["argu"],設置給予的參數.
17639
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17640
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17641
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17642
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17643
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17644
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17645
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17646
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17647
		#必填參數:
17648
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
17649
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
17650
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
17651
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
17652
		#可省略參數:
17653
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
17654
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mode","target");
17655
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
17656
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
17657
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17658
		#$conf["canBeEmptyString"]="false";
17659
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17660
		#$conf["canNotBeEmpty"]=array();
17661
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17662
		#$conf["canBeEmpty"]=array();
17663
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17664
		#$conf["skipableVariableCanNotBeEmpty"]=array();
17665
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17666
		#$conf["skipableVariableName"]=array();
17667
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
17668
		#$conf["skipableVariableType"]=array();
17669
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17670
		#$conf["skipableVarDefaultValue"]=array("");
17671
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17672
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17673
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17674
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17675
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17676
		#$conf["arrayCountEqualCheck"][]=array();
17677
		#參考資料:
17678
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17679
		#備註:
17680
		#無.
17681
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17682
		unset($conf["variableCheck::checkArguments"]);
17683
 
17684
		#如果檢查參數失敗
17685
		if($checkArguments["status"]==="false"){
17686
 
17687
			#設置執行失敗
17688
			$result["status"]="false";
17689
 
17690
			#設置錯誤資訊
17691
			$result["error"]=$checkArguments;
17692
 
17693
			#回傳結果
17694
			return $result;
17695
 
17696
			}#if end
17697
 
17698
		#如果檢查參數不通過
17699
		if($checkArguments["passed"]==="false"){
17700
 
17701
			#設置執行失敗
17702
			$result["status"]="false";
17703
 
17704
			#設置錯誤資訊
17705
			$result["error"]=$checkArguments;
17706
 
17707
			#回傳結果
17708
			return $result;
17709
 
17710
			}#if end
17711
 
17712
		#將$conf["mode"]轉換為10進位的整數
17713
		$conf["mode"]=(int)base_convert($conf["mode"],8,10);
17714
 
17715
		#變更 target 的檔案權限為代碼
17716
		$chmod=chmod($conf["target"],$conf["mode"]); 
17717
 
17718
		#如果改變檔案權限失敗
17719
		if($chmod===false){
17720
 
17721
			#設置執行失敗
17722
			$result["status"]="false";
17723
 
17724
			#設置錯誤訊息
17725
			$result["error"][]="改變 ".$conf["target"]." 檔案的權限資訊為 ".$conf["mode"]." 失敗,通常只有系統帳戶才能變更之.";
17726
 
17727
			#回傳結果
17728
			return $result;	
17729
 
17730
			}#if end
17731
 
17732
		#設置執行正常
17733
		$result["status"]="true";
17734
 
17735
		#回傳結果
17736
		return $result;
17737
 
17738
		}#function chmod end
17739
 
17740
	}#class fileAccess end
17741
 
17742
?>