Subversion Repositories php-qbpwcf

Rev

Rev 42 | Rev 200 | 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
 
42 liveuser 1396
				#取得詳細的錯誤訊息
1397
				$result["error"][]=$fileCheckResult;
1398
 
3 liveuser 1399
				#回傳結果
1400
				return $result;
1401
 
1402
				}#else end
1403
 
1404
			}#if end
1405
 
1406
		#針對每行內容
1407
		for($i=0;$i<count($fileContent);$i++){
1408
 
1409
			#剔除字串尾的換行符號
1410
			$fileContent[$i]=rtrim($fileContent[$i]);
1411
 
1412
			#如果要移除開頭的空白
1413
			if($conf["autoDeleteSpaceOnEachLineStart"]==="true"){
1414
 
1415
				#如果開頭是空格
1416
				while(strpos($fileContent[$i]," ")===0){
1417
 
1418
					#函式說明:
1419
					#將字串特定關鍵字與其前面的內容剔除
1420
					#回傳結果:
1421
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1422
					#$result["error"],錯誤訊息陣列.
1423
					#$result["warning"],警告訊息鎮列.
1424
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1425
					#$result["function"],當前執行的函數名稱.
1426
					#$result["argu"],使用的參數.
1427
					#$result["oriStr"],要處理的原始字串內容.
1428
					#$result["content"],處理好的的字串內容.	
1429
					#必填參數:
1430
					#$conf["stringIn"],字串,要處理的字串.
1431
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileContent[$i];
1432
					#$conf["keyWord"],字串,特定字串.
1433
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
1434
					#可省略參數:
1435
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
1436
					#$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
1437
					#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
1438
					#$conf["lastResult"]=$delStrBeforeKeyWord;
1439
					#參考資料:
1440
					#無.
1441
					#備註:
1442
					#無.
1443
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
1444
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
1445
 
1446
					#如果建立檔案失敗
1447
					if($delStrBeforeKeyWord["status"]=="false"){
1448
 
1449
						#設置執行錯誤識別
1450
						$result["status"]="false";
1451
 
1452
						#設置執行錯誤訊息
1453
						$result["error"]=$delStrBeforeKeyWord;
1454
 
1455
						#回傳結果
1456
						return $result;
1457
 
1458
						}#if end
1459
 
1460
					#取得剔除開頭空格後的內容
1461
					$fileContent[$i]=$delStrBeforeKeyWord["content"];
1462
 
1463
					}#while end
1464
 
1465
				}#if end
1466
 
1467
			}#for end
1468
 
1469
		#取得總共有幾行
1470
		$lineCount=count($fileContent);
1471
 
1472
		#將檔案內容的陣列放進 $result 陣列變數裏面
1473
		$result["fileContent"]=$fileContent;
1474
 
1475
		#建立暫存檔案
1476
		$tmpFile=tempnam("/tmp", "qbpwcf");
1477
 
1478
		#讀取要取得的檔案內容
1479
		$content=file_get_contents($fileAbAddr);
1480
 
1481
		#debug
1482
		#var_dump(__FILE__,__LINE__,$content);
1483
 
1484
		#開啟暫存檔案(寫入模式)
1485
		$file=fopen($tmpFile,'w');
1486
 
1487
		#寫入讀取到的內容
1488
		fwrite($file,$content);
1489
 
1490
		#關閉暫存檔案
1491
		fclose($file);
1492
 
1493
		#取得檔案的 mime 類型
1494
		$mimeType=mime_content_type($tmpFile);
1495
 
1496
		#設置檔案的mime類型
1497
		$result["mimeType"]=$mimeType;
1498
 
1499
		#取得檔案的內容為字串
1500
		$result["fullContent"]=file_get_contents($tmpFile);
1501
 
1502
		#debug
1503
		#var_dump(__FILE__,__LINE__,$result["fullContent"]);
1504
 
1505
		#取得檔案的base64data
1506
		$result["base64data"]="data:".$result["mimeType"].";base64,".base64_encode($result["fullContent"]);
1507
 
1508
		#移除暫存檔案
1509
		unlink($tmpFile);
1510
 
1511
		#將檔案內容的行數放進 $result 陣列變數裏面
1512
		$result["lineCount"]=$lineCount;
1513
 
1514
		#執行到這邊代表執行成功
1515
		$result["status"]="true";
1516
 
1517
		#回傳結果
1518
		return $result;
1519
 
1520
		}#function getFileContent end
1521
 
1522
	/*
1523
	#函式說明:
1524
	#依據逗號分隔抓取檔案的內容,結果會回傳一個陣列
1525
	#回傳結果:	
1526
	#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
1527
	#$result["error"],錯誤訊息提示.
1528
	#$result["function"],函數名稱.
1529
	#$result["lineCount"]爲總共有幾行
1530
	#$result["lineContent"][i]["dataCounts"],爲第 i+1 行總共有幾個字串
1531
	#$result["lineContent"][0][i],爲第1行第 i+1 個分割好的字串
1532
	#$result["lineContent"][1][i],爲第2行第 i+1 個分割好的字串
1533
	#必填參數:
1534
	#$conf["filePositionAndName"],字串,要抓取的檔案位置與名稱
1535
	$conf["filePositionAndName"]="";
1536
	#可省略參數:
1537
	#$conf["spiltSign"],字串,爲要用來分割字串的符號,可省略,預設爲「,」
1538
	#$conf["spiltSign"]="";
1539
	#參考資料:
1540
	#無.
1541
	#備註:
1542
	#無.
1543
	*/
1544
	public static function getFileContentSpiltBySomething($conf){
1545
 
1546
		#初始化要回傳的內容
1547
		$result=array();
1548
 
1549
		#取得當前執行函數名稱
1550
		$result["function"]=__FUNCTION__;
1551
 
1552
		#如果 $conf 不為陣列
1553
		if(gettype($conf)!="array"){
1554
 
1555
			#設置執行失敗
1556
			$result["status"]="false";
1557
 
1558
			#設置執行錯誤訊息
1559
			$result["error"][]="\$conf變數須為陣列形態";
1560
 
1561
			#如果傳入的參數為 null
1562
			if($conf==null){
1563
 
1564
				#設置執行錯誤訊息
1565
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1566
 
1567
				}#if end
1568
 
1569
			#回傳結果
1570
			return $result;
1571
 
1572
			}#if end
1573
 
1574
		#如果 $conf["spiltSign"] 爲空,則預設爲","。
1575
		if(!isset($conf["spiltSign"])){
1576
 
1577
			$conf["spiltSign"]=",";
1578
 
1579
			}#if end
1580
 
1581
		#依據行號抓取所有的內容
1582
		#函式說明:
1583
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1584
		#回傳的變數說明:
1585
		#$result["fileContent"],爲檔案的內容陣列
1586
		#$result["lineCount"],爲檔案內容總共的行數
1587
		#必填參數:
1588
		$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["filePositionAndName"];#爲檔案的位置以及名稱
1589
		#參考資料:
1590
		#file():取得檔案內容的行數
1591
		#http:#php.net/manual/en/function.file.php
1592
		$fileContent=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
1593
		unset($conf["fileAccess"]["getFileContent"]);
1594
 
1595
		#如果取得檔案內容失敗
1596
		if($fileContent["status"]=="false"){
1597
 
1598
			#設置執行失敗
1599
			$result["status"]="false";
1600
 
1601
			#設置執行錯誤訊息
1602
			$result["error"]=$fileContent;
1603
 
1604
			#回傳結果
1605
			return $result;
1606
 
1607
			}#if end
1608
 
1609
		#迴圈,有幾行資料就執行幾次
1610
		for($i=0;$i<$fileContent["lineCount"];$i++){
1611
 
1612
			#將該行內容用逗號分隔
1613
			$conf["stringProcess"]["spiltString"]["stringIn"]=$fileContent["fileContent"][$i];#要處理的字串。
1614
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=$conf["spiltSign"];#爲以哪個符號作爲分割
1615
			$lineSpiltResult[$i]=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
1616
			unset($conf["stringProcess"]["spiltString"]);	
1617
 
1618
			#如果分割字串失敗
1619
			if($lineSpiltResult[$i]["status"]=="false"){
1620
 
1621
				#設置執行失敗
1622
				$result["status"]="false";
1623
 
1624
				#設置執行錯誤訊息
1625
				$result["error"]=$lineSpiltResult[$i];
1626
 
1627
				#回傳結果
1628
				return $result;
1629
 
1630
				}#if end
1631
 
1632
			}#for end
1633
 
1634
		#取得
1635
		$result["lineContent"]=$lineSpiltResult;
1636
 
1637
		#取得資料的行數
1638
		$result["lineCount"]=$fileContent["lineCount"];
1639
 
1640
		#回傳結果
1641
		return $result;
1642
 
1643
		}#function getFileContentSpiltBySomething end
1644
 
1645
	/*
1646
	#函式說明:
1647
	#檢查多個檔案與資料夾是否存在.
1648
	#回傳的結果:
1649
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1650
	#$result["error"],錯誤訊息陣列.
1651
	#$resutl["function"],當前執行的涵式名稱.
1652
	#$result["argu"],使用的參數.
1653
	#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
1654
	#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
1655
	#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
1656
	#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
1657
	#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1658
	#必填參數:
1659
	#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
1660
	$conf["fileArray"]=array();
1661
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1662
	$conf["fileArgu"]=__FILE__;
1663
	#可省略參數:
1664
	#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
1665
	#$conf["disableWebSearch"]="false";
1666
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
1667
	#$conf["userDir"]="true";
1668
	#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
1669
	#$conf["web"]="true";
1670
	#參考資料:
1671
	#http://php.net/manual/en/function.file-exists.php
1672
	#http://php.net/manual/en/control-structures.foreach.php
1673
	#備註:
1674
	#函數file_exists檢查的路徑為檔案系統的路徑
1675
	#$result["varName"][$i]結果未實作
1676
	*/
1677
	public static function checkMultiFileExist(&$conf){
1678
 
1679
		#初始化要回傳的變數
1680
		$result=array();
1681
 
1682
		#設置當前執行的涵式
1683
		$result["function"]=__FUNCTION__;
1684
 
1685
		#如果 $conf 不為陣列
1686
		if(gettype($conf)!="array"){
1687
 
1688
			#設置執行失敗
1689
			$result["status"]="false";
1690
 
1691
			#設置執行錯誤訊息
1692
			$result["error"][]="\$conf變數須為陣列形態";
1693
 
1694
			#如果傳入的參數為 null
1695
			if($conf==null){
1696
 
1697
				#設置執行錯誤訊息
1698
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1699
 
1700
				}#if end
1701
 
1702
			#回傳結果
1703
			return $result;
1704
 
1705
			}#if end
1706
 
1707
		#取得使用的參數
1708
		$result["argu"]=$conf;
1709
 
1710
		#檢查參數
1711
		#函式說明:
1712
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1713
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1714
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1715
		#$result["function"],當前執行的函式名稱.
1716
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1717
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1718
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1719
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1720
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1721
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1722
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1723
		#必填寫的參數:
1724
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1725
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1726
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1727
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArray","fileArgu");
1728
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1729
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
1730
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1731
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1732
		#可以省略的參數:
1733
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1734
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1735
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1736
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("disableWebSearch","userDir","web");
1737
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1738
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
1739
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1740
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","true","true");
1741
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1742
		#$conf["arrayCountEqualCheck"][]=array();
1743
		#參考資料來源:
1744
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1745
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1746
		unset($conf["variableCheck::checkArguments"]);
1747
 
1748
		#如果 $checkArguments["status"] 等於 "false"
1749
		if($checkArguments["status"]=="false"){
1750
 
1751
			#設置錯誤識別
1752
			$result["status"]="false";
1753
 
1754
			#設置錯誤訊息
1755
			$result["error"]=$checkArguments;
1756
 
1757
			#回傳結果
42 liveuser 1758
			return $result;
3 liveuser 1759
 
1760
			}#if end
1761
 
1762
		#如果 $checkArguments["passed"] 等於 "false"
1763
		if($checkArguments["passed"]=="false"){
1764
 
1765
			#設置錯誤識別
1766
			$result["status"]="false";
1767
 
1768
			#設置錯誤訊息
1769
			$result["error"]=$checkArguments;
1770
 
1771
			#回傳結果
42 liveuser 1772
			return $result;
3 liveuser 1773
 
1774
			}#if end
1775
 
1776
		#初始化儲存每個檔案是否存在的陣列變數
1777
		$result["varName"]=array();
1778
		$result["varExist"]=array();
1779
 
1780
		#針對每個要檢查的檔案
1781
		foreach($conf["fileArray"] as $i=>$varName){
1782
 
1783
			#儲存要判斷是否存在的物件
1784
			$result["varName"][]=$varName;
1785
 
1786
			#函式說明:
1787
			#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
1788
			#回傳結果:
1789
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1790
			#$result["error"],錯誤訊息陣列.
1791
			#$result["function"],函數名稱. 
1792
			#$result["argu"],使用的參數.
1793
			#$result["content"],網址,若是在命令列執行,則為"null".
1794
			#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
1795
			#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
1796
			#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
1797
			#必填參數:
1798
			#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
1799
			$conf["fileAccess::getInternetAddressV2"]["address"]=$varName;
1800
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1801
			$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
1802
			#可省略參數:
1803
			$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
1804
			#備註:
1805
			#建構中,fileSystemRelativePosition尚未實作.
1806
			$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
1807
			unset($conf["fileAccess::getInternetAddressV2"]);
1808
 
1809
			#如果轉換成絕對路徑失敗
1810
			if($getInternetAddressV2["status"]=="false"){
1811
 
1812
				#設置錯誤識別
1813
				$result["status"]="false";
1814
 
1815
				#設置錯誤訊息
1816
				$result["error"]=$getInternetAddressV2;
1817
 
1818
				#回傳結果
1819
				return $result;
1820
 
1821
				}#if end
1822
 
1823
			#傳參考
1824
			$getInternetAddress=&$getInternetAddressV2;
1825
 
1826
			#如果沒有檔案的絕對路徑位置
1827
			if(!isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1828
 
1829
				#置換成給予的參數網址
1830
				$conf["fileArray"][$i]=$getInternetAddress["content"];
1831
 
1832
				#設置無法從檔案系統找到
1833
				$exist=FALSE;
1834
 
1835
				}#if end
1836
 
1837
			#反之取得
1838
			else{
1839
 
1840
				#轉換好的絕對路徑
1841
				$conf["fileArray"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
1842
 
42 liveuser 1843
				#無窮迴圈
1844
				while(true){
3 liveuser 1845
 
42 liveuser 1846
					#判斷該檔案是否存在
1847
					$exist=file_exists($conf["fileArray"][$i]);
3 liveuser 1848
 
42 liveuser 1849
					#如果不存在
1850
					if($exist===false){
1851
 
1852
						#無窮迴圈
1853
						while(true){
1854
 
1855
							#當要檢查的目標是 link 時
1856
							if(is_link($conf["fileArray"][$i])){
1857
 
1858
								#取得link的路徑
1859
								$conf["fileArray"][$i]=readlink($conf["fileArray"][$i]);
1860
 
1861
								#結束連結的判斷,回到判斷目標是否存在的地方.
1862
								continue 2;
1863
 
1864
								}#if end
1865
 
1866
							#結束連結的判斷
1867
							break;
1868
 
1869
							}#while end
1870
 
1871
						}#if end
1872
 
1873
					#結束到判斷目標是否存在
1874
					break;
3 liveuser 1875
 
42 liveuser 1876
					}#while end
3 liveuser 1877
 
1878
				}#else end
1879
 
1880
			#如果 $exist 等於 false (檔案不存在) 且 沒有停用網路搜尋功能
1881
			if($exist===FALSE && $conf["disableWebSearch"]==="false"){
1882
 
1883
				#將目標轉換成網址
1884
				#函式說明:
1885
				#將檔案的位置名稱變成網址
1886
				#回傳結果:
1887
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1888
				#$result["error"],錯誤訊息陣列.
1889
				#$result["function"],函數名稱. 
1890
				#$result["content"],網址.
1891
				#必填參數:
1892
				#$conf["address"],字串,檔案的相對位置.
1893
				$conf["fileAccess::getInternetAddress"]["address"]=$conf["fileArray"][$i];
1894
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1895
				$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
1896
				$getInternetAddress=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddress"]);
1897
				unset($conf["fileAccess::getInternetAddress"]);
1898
 
1899
				#如果轉換失敗
1900
				if($getInternetAddress["status"]=="false"){
1901
 
1902
					#設置錯誤識別
1903
					$result["status"]="false";
1904
 
1905
					#設置錯誤訊息
1906
					$result["error"]=$getInternetAddress;
1907
 
1908
					#回傳結果
1909
					return $result;	
1910
 
1911
					}#if end
1912
 
1913
				#函式說明:
1914
				#運行curl cmd
1915
				#回傳結果:
1916
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1917
				#$result["error"],錯誤訊息陣列.
1918
				#$result["function"],當前執行的函式名稱.
1919
				#$result["content"],取得的回應內容.
1920
				#$result["cookie"],cookie檔案的位置與名稱.
1921
				#$result["cmd"],執行的command.
1922
				#$result["argu],使用的參數.
1923
				#必填參數:
1924
				#$conf["url"],字串,目標url.
1925
				$conf["catchWebContent::curlCmd"]["url"]=$getInternetAddress["content"];
1926
				#$conf["fileArgu"],字串,變數__FILE__的內容.
1927
				$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];
1928
				#可省略參數:
1929
				#$conf["header"],字串陣列,要傳送的header.
1930
				#$conf["header"]=array();
1931
				#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
1932
				#$conf["allowAnySSLcertificate"]="";
1933
				#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
1934
				#$conf["postVar"]=array();
1935
				#$conf["rawPost"]="字串",要傳送的raw post內容.
1936
				#$conf["rawPost"]="";
1937
				#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
1938
				#$conf["urlEncode"]="false";
1939
				#$conf["agent"],字串,user agent的名稱.
1940
				#$conf["agent"]="";
1941
				#$conf["cookie"],字串,cookie位置與檔案位置.
1942
				#$conf["cookie"]="";
1943
				#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
1944
				#$conf["forceNewCookie"]="";
1945
				$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
1946
				unset($conf["catchWebContent::curlCmd"]);
1947
 
1948
				#如果抓取資料失敗
1949
				if($curlCmd["status"]==="false"){
1950
 
1951
					#設置錯誤識別
1952
					$result["status"]="false";
1953
 
1954
					#設置錯誤訊息
1955
					$result["error"]=$curlCmd;
1956
 
1957
					#回傳結果
1958
					return $result;
1959
 
1960
					}#if end
1961
 
1962
				#反之檔案存在網路上
1963
				else{
1964
 
1965
					#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1966
					$result["varName"][$i]=$getInternetAddress["content"];
1967
 
1968
					#如果存在檔案路徑的絕對位置
1969
					if(isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1970
 
42 liveuser 1971
						#設置該檔案的絕對路徑位置
3 liveuser 1972
						$result["varNameFullPath"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
42 liveuser 1973
 
3 liveuser 1974
						}#if end
1975
 
1976
					#反之代表輸入參數是網址	
1977
					else{
1978
 
1979
						#設置該檔案的網址
1980
						$result["varNameWebPath"][$i]=$getInternetAddress["content"];
1981
 
1982
						}#else end
1983
 
1984
					#設置有無找到的識別
1985
					$result["varExist"][$i]=$curlCmd["founded"];
1986
 
1987
					}#else end
1988
 
1989
				}#if end
1990
 
1991
			#反之檔案不存在,且停用網路搜尋.
1992
			else if($exist===FALSE){
1993
 
1994
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1995
				$result["varName"][$i]=$conf["fileArray"][$i];
1996
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
1997
				$result["varExist"][$i]="false";
1998
 
1999
				#設置全部檔案都存在的識別變數為 "false"
2000
				$result["allExist"]="false";
2001
 
2002
				}#if end
2003
 
2004
			#反之代表檔案存在
2005
			else{
2006
 
2007
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
2008
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
2009
 
2010
				#如果 web 參數為 "true"
2011
				if($conf["web"]==="true"){
2012
 
2013
					#設置網路上的位置
2014
					$result["varNameWebPath"][$i]=$getInternetAddress["content"];
2015
 
2016
					}#if end
2017
 
2018
				$result["varExist"][$i]="true";
2019
 
2020
				}#else end
2021
 
2022
			}#foreach end
2023
 
2024
		#如果所有檔案與資料夾都找到的識別變數不存在
2025
		if(!isset($result["allExist"])){
2026
 
2027
			#設置全部檔案與資料夾都有找到
2028
			$result["allExist"]="true";
2029
 
2030
			}#if end
2031
 
2032
		#執行到這邊代表執行正常
2033
		$result["status"]="true";
2034
 
2035
		#回傳結果
2036
		return $result;
2037
 
2038
		}#function checkMutiFileExist
2039
 
2040
	/*
2041
	#函式說明:
2042
	#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
2043
	#回傳結果:
2044
	#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
2045
	#$result["error"],錯誤訊息陣列.
2046
	#$result["function"],當前執行的函數名稱.
2047
	#$result["argu"],使用的參數.
2048
	#$result["createdFileName"],建立好的檔案名稱.
2049
	#$result["createdFilePath"],檔案建立的路徑.
2050
	#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
2051
	#必填參數:
2052
	#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
2053
	$conf["checkedFileAndPath"]="";
2054
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2055
	$conf["fileArgu"]=__FILE__;
2056
	#可省略參數:
2057
	#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.
2058
	#$conf["filenameExtensionStartPoint"]="";
2059
	#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".
2060
	#$conf["repeatNameRule"]="";
2061
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2062
	#$conf["web"]="false";
2063
	#參考資料:
2064
	#無.
2065
	#備註:
2066
	#如果要在/tmp底下建立檔案,若在apache環境下則會被作業系統特殊處理,即不等於實際上的路徑.
2067
	*/
2068
	public static function createFileAfterCheck(&$conf){
2069
 
2070
		#初始化要回傳的結果
2071
		$result=array();
2072
 
2073
		#設置當前執行的涵式
2074
		$result["function"]=__FUNCTION__;
2075
 
2076
		#如果 $conf 不為陣列
2077
		if(gettype($conf)!="array"){
2078
 
2079
			#設置執行失敗
2080
			$result["status"]="false";
2081
 
2082
			#設置執行錯誤訊息
2083
			$result["error"][]="\$conf變數須為陣列形態";
2084
 
2085
			#如果傳入的參數為 null
2086
			if($conf==null){
2087
 
2088
				#設置執行錯誤訊息
2089
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2090
 
2091
				}#if end
2092
 
2093
			#回傳結果
2094
			return $result;
2095
 
2096
			}#if end
2097
 
2098
		#取得參數
2099
		$result["argu"]=$conf;
2100
 
2101
		#檢查參數
2102
		#函式說明:
2103
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2104
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2105
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2106
		#$result["function"],當前執行的函式名稱.
2107
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2108
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2109
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2110
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2111
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2112
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2113
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2114
		#必填寫的參數:
2115
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2116
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2117
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2118
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","checkedFileAndPath");
2119
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2120
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2121
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2122
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2123
		#可以省略的參數:
2124
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2125
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2126
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2127
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("filenameExtensionStartPoint","repeatNameRule","web");
2128
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2129
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
2130
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2131
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1","(\$i)","false");
2132
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2133
		#$conf["arrayCountEqualCheck"][]=array();
2134
		#參考資料來源:
2135
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2136
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2137
		unset($conf["variableCheck::checkArguments"]);
2138
 
2139
		#如果 $checkArguments["status"] 等於 "false"
2140
		if($checkArguments["status"]=="false"){
2141
 
2142
			#設置錯誤識別
2143
			$result["status"]="false";
2144
 
2145
			#設置錯誤訊息
2146
			$result["error"]=$checkArguments;
2147
 
2148
			#回傳結果
2149
			return $result;				
2150
 
2151
			}#if end
2152
 
2153
		#如果 $checkArguments["passed"] 等於 "false"
2154
		if($checkArguments["passed"]=="false"){
2155
 
2156
			#設置錯誤識別
2157
			$result["status"]="false";
2158
 
2159
			#設置錯誤訊息
2160
			$result["error"]=$checkArguments;
2161
 
2162
			#回傳結果
2163
			return $result;				
2164
 
2165
			}#if end	
2166
 
2167
		#確保要建立檔案的路徑
2168
		#函式說明:
2169
		#確保路徑存在.
2170
		#回傳結果:
2171
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2172
		#$result["error"],錯誤訊息陣列.
2173
		#$resutl["function"],當前執行的涵式名稱.
2174
		#$result["path"],建立好的路徑字串.
2175
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
2176
		#必填參數:
2177
		#$conf["path"],要檢查的路徑
2178
		$conf["fileAccess::validatePath"]["path"]=$conf["checkedFileAndPath"];		
2179
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2180
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2181
		#可省略參數:
2182
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2183
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2184
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2185
		#$conf["dirPermission"]="";
2186
		$conf["fileAccess::validatePath"]["web"]=$conf["web"];
2187
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2188
		unset($conf["fileAccess::validatePath"]);	
2189
 
2190
		#debug
2191
		#var_dump($validatePath);
2192
		#exit;	
2193
 
2194
		#如果確保路徑失敗
2195
		if($validatePath["status"]==="false"){
2196
 
2197
			#設置錯誤識別
2198
			$result["status"]="false";
2199
 
2200
			#設置錯誤訊息
2201
			$result["error"]=$validatePath;
2202
 
2203
			#回傳結果
2204
			return $result;
2205
 
2206
			}#if end
2207
 
2208
		#取得要建立的檔案名稱
2209
		$createdFileName=$validatePath["fileName"];
2210
 
2211
		#取得要建立的路徑			
2212
		$createdFilePath=$validatePath["path"];
2213
 
2214
		#透過無窮迴圈嘗試建立不同編號的檔案
2215
		for($i=0;$i>-1;$i++){
2216
 
2217
			#如果 $i 為 0
2218
			if($i==0){
2219
 
2220
				#檢查該檔案是否存在
2221
				#函式說明:
2222
				#檢查多個檔案與資料夾是否存在.
2223
				#回傳的結果:
2224
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2225
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2226
				#必填參數:
2227
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2228
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2229
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2230
				#參考資料來源:
2231
				#http://php.net/manual/en/function.file-exists.php
2232
				#http://php.net/manual/en/control-structures.foreach.php
2233
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2234
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2235
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2236
 
2237
				#debug
2238
				#var_dump($checkResult);
2239
				#exit;
2240
 
2241
				#如果檢查檔案是否存在失敗
2242
				if($checkResult["status"]=="false"){
2243
 
2244
					#設置執行失敗
2245
					$result["status"]="false";
2246
 
2247
					#設置錯誤訊息
2248
					$result["error"]=$checkResult;
2249
 
2250
					#回傳結果
2251
					return $result;
2252
 
2253
					}#if end
2254
 
2255
				#如果 $createFilePath.$createdFileName 檔案存在
2256
				if($checkResult["varExist"][0]=="true"){
2257
 
2258
					#跳過這次迴圈
2259
					continue;
2260
 
2261
					}#if end
2262
 
2263
				#反之代表 $createFilePath.$createdFileName 檔案不存在
2264
				else{
2265
 
2266
					#嘗試建立該檔案
2267
					#函式說明:
2268
					#將字串寫入到檔案
2269
					#回傳結果:
2270
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2271
					#$result["error"],錯誤訊息陣列.
2272
					#必填參數:
2273
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2274
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2275
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2276
					#可省略參數:
2277
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2278
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2279
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2280
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2281
 
2282
					#如果 $fileCreateResult["status"] 等於 "true"
2283
					if($fileCreateResult["status"]=="true"){
2284
 
2285
						#代表檔案建立成功
2286
 
2287
						#更新建立的檔案名稱
2288
						$result["createdFileName"]=$createdFileName;
2289
 
2290
						#設置新建立的檔案名稱與路徑
2291
						$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2292
 
2293
						#設置新建立的檔與路徑
2294
						$result["createdFilePath"]=$createdFilePath;
2295
 
2296
						#跳出迴圈
2297
						break;
2298
 
2299
						}#if end
2300
 
2301
					#反之代表檔案建立失敗
2302
					else{
2303
 
2304
						#設置錯誤識別
2305
						$result["status"]="false";
2306
 
2307
						#設置錯誤訊息
2308
						$result["error"]=$fileCreateResult;
2309
 
2310
						#回傳結果
2311
						return $result;
2312
 
2313
						}#else end
2314
 
2315
					}#else end	
2316
 
2317
				}#if end
2318
 
2319
			#反之代表有相同檔名存在
2320
			else{					
2321
 
2322
				#用「.」分割檔案名稱
2323
				#函式說明:
2324
				#將固定格式的字串分開,並回傳分開的結果。
2325
				#回傳結果:
2326
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2327
				#$result["error"],錯誤訊息陣列
2328
				#$result["function"],當前執行的函數名稱.
2329
				#$result["oriStr"],要分割的原始字串內容
2330
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2331
				#$result["dataCounts"],爲總共分成幾段
2332
				#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
2333
				#必填參數:
2334
				$conf["stringProcess::spiltString"]["stringIn"]=$createdFileName;#要處理的字串。
2335
				$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
2336
				#可省略參數:
2337
				#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2338
				$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2339
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2340
				unset($conf["stringProcess::spiltString"]);					
2341
 
2342
				#如果分割檔案名稱失敗
2343
				if($spiltString["status"]=="false"){
2344
 
2345
					#設置執行失敗
2346
					$result["status"]="false";
2347
 
2348
					#設置錯誤訊息
2349
					$result["error"]=$spiltString;
2350
 
2351
					#回傳結果
2352
					return $result;
2353
 
2354
					}#if end
2355
 
2356
				#初始化儲存建立的檔案名稱
2357
				$createdFileName="";
2358
 
2359
				#初始化儲存編號的變數
2360
				$no="";
2361
 
2362
				#如果沒有dot存在
2363
				if($spiltString["found"]=="false"){
2364
 
2365
					#解析 $conf["repeatNameRule"],用 \$i 分割.
2366
					#函式說明:
2367
					#將固定格式的字串分開,並回傳分開的結果。
2368
					#回傳結果:
2369
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2370
					#$result["error"],錯誤訊息陣列
2371
					#$result["function"],當前執行的函數名稱.
2372
					#$result["oriStr"],要分割的原始字串內容
2373
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2374
					#$result["dataCounts"],爲總共分成幾段
2375
					#必填參數:
2376
					$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2377
					$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2378
					#可省略參數:
2379
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2380
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2381
					$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2382
					unset($conf["stringProcess::spiltString"]);					
2383
 
2384
					#如果分割檔案名稱失敗
2385
					if($noString["status"]=="false"){
2386
 
2387
						#設置執行失敗
2388
						$result["status"]="false";
2389
 
2390
						#設置錯誤訊息
2391
						$result["error"]=$noString;
2392
 
2393
						#回傳結果
2394
						return $result;
2395
 
2396
						}#if end
2397
 
2398
					#如果 編號規則字串 分割出來的段數為2
2399
					if($noString["dataCounts"]==2){
2400
 
2401
						#組合編號
2402
						$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2403
 
2404
						}#if end
2405
 
2406
					#反之 號規則字串 分割出來的段數為1
2407
					else if($noString["dataCounts"]==1){
2408
 
2409
						#判斷 "\$i" 在開頭或結尾
2410
						#函式說明:
2411
						#取得關鍵字在字串的哪個位置
2412
						#回傳結果:
2413
						#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2414
						#$result["error"],錯誤訊息陣列.
2415
						#$result["function"],當前執行的函數名稱.
2416
						#$result["argu"],傳入的參數.
2417
						#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2418
						#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2419
						#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2420
						#必填參數:
2421
						#$conf["inputStr"],字串,被搜尋的字串.
2422
						$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2423
						#$conf["keyWord"],字串,關鍵字.
2424
						$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2425
						#參考資料:
2426
						#http://php.net/manual/en/function.strpos.php
2427
						$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2428
						unset($conf["search::findKeyWordPosition"]);
2429
 
2430
						#如果取得關鍵字位置失敗
2431
						if($findKeyWordPosition["status"]=="false"){
2432
 
2433
							#設置執行失敗
2434
							$result["status"]="false";
2435
 
2436
							#設置錯誤訊息
2437
							$result["error"]=$findKeyWordPosition;
2438
 
2439
							#回傳結果
2440
							return $result;
2441
 
2442
							}#if end
2443
 
2444
						#如果關鍵字在開頭
2445
						if($findKeyWordPosition["head"]=="true"){
2446
 
2447
							#組合編號
2448
							$no=$i.$noString["dataArray"][0];
2449
 
2450
							}#if end
2451
 
2452
						#反之如果關鍵字在結尾
2453
						else if($findKeyWordPosition["tail"]=="true"){
2454
 
2455
							#組合編號
2456
							$no=$noString["dataArray"][0].$i;
2457
 
2458
							}#if end
2459
 
2460
						#其他情況
2461
						else{
2462
 
2463
							#設置執行失敗
2464
							$result["status"]="false";
2465
 
2466
							#設置錯誤訊息
2467
							$result["error"]=$findKeyWordPosition;
2468
 
2469
							#設置額外的錯誤訊息
2470
							$result["error"][]="非預期的結果";
2471
 
2472
							#回傳結果
2473
							return $result;
2474
 
2475
							}#else end
2476
 
2477
						}#if end
2478
 
2479
					#反之 編號規則字串 分割出來的段數為0
2480
					else if($noString["dataCounts"]==0){
2481
 
2482
						#組合編號
2483
						$no=$j;
2484
 
2485
						}#if end
2486
 
2487
					#其他結果
2488
					else{
2489
 
2490
						#設置執行失敗
2491
						$result["status"]="false";
2492
 
2493
						#設置錯誤訊息
2494
						$result["error"]=$noString;
2495
 
2496
						#設置額外的錯誤訊息
2497
						$result["error"][]="非預期的結果";
2498
 
2499
						#回傳結果
2500
						return $result;
2501
 
2502
						}#else end	
2503
 
2504
					#串接編號到檔案名稱上
2505
					$createdFileName=$validatePath["fileName"].$no;
2506
 
2507
					}#if end
2508
 
2509
				#反之有dot存在	
2510
				else{
2511
 
2512
					#依據 $spiltString["dataCounts"] 值來組裝新的檔案名稱
2513
					for($j=0;$j<$spiltString["dataCounts"];$j++){
2514
 
2515
						#如果是副檔名的前一段內容
2516
						if(($conf["filenameExtensionStartPoint"]+1)==($spiltString["dataCounts"]-$j)){
2517
 
2518
							#解析 $conf["repeatNameRule"],用 \$i 分割.
2519
							#函式說明:
2520
							#將固定格式的字串分開,並回傳分開的結果。
2521
							#回傳結果:
2522
							#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2523
							#$result["error"],錯誤訊息陣列
2524
							#$result["function"],當前執行的函數名稱.
2525
							#$result["oriStr"],要分割的原始字串內容
2526
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2527
							#$result["dataCounts"],爲總共分成幾段
2528
							#必填參數:
2529
							$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2530
							$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2531
							#可省略參數:
2532
							#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2533
							$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2534
							$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2535
							unset($conf["stringProcess::spiltString"]);					
2536
 
2537
							#如果分割檔案名稱失敗
2538
							if($noString["status"]=="false"){
2539
 
2540
								#設置執行失敗
2541
								$result["status"]="false";
2542
 
2543
								#設置錯誤訊息
2544
								$result["error"]=$noString;
2545
 
2546
								#回傳結果
2547
								return $result;
2548
 
2549
								}#if end
2550
 
2551
							#如果 編號規則字串 分割出來的段數為2
2552
							if($noString["dataCounts"]==2){
2553
 
2554
								#組合編號
2555
								$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2556
 
2557
								}#if end
2558
 
2559
							#反之 號規則字串 分割出來的段數為1
2560
							else if($noString["dataCounts"]==1){
2561
 
2562
								#判斷 "\$i" 在開頭或結尾
2563
								#函式說明:
2564
								#取得關鍵字在字串的哪個位置
2565
								#回傳結果:
2566
								#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2567
								#$result["error"],錯誤訊息陣列.
2568
								#$result["function"],當前執行的函數名稱.
2569
								#$result["argu"],傳入的參數.
2570
								#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2571
								#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2572
								#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2573
								#必填參數:
2574
								#$conf["inputStr"],字串,被搜尋的字串.
2575
								$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2576
								#$conf["keyWord"],字串,關鍵字.
2577
								$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2578
								#參考資料:
2579
								#http://php.net/manual/en/function.strpos.php
2580
								$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2581
								unset($conf["search::findKeyWordPosition"]);
2582
 
2583
								#如果取得關鍵字位置失敗
2584
								if($findKeyWordPosition["status"]=="false"){
2585
 
2586
									#設置執行失敗
2587
									$result["status"]="false";
2588
 
2589
									#設置錯誤訊息
2590
									$result["error"]=$findKeyWordPosition;
2591
 
2592
									#回傳結果
2593
									return $result;
2594
 
2595
									}#if end
2596
 
2597
								#如果關鍵字在開頭
2598
								if($findKeyWordPosition["head"]=="true"){
2599
 
2600
									#組合編號
2601
									$no=$i.$noString["dataArray"][0];
2602
 
2603
									}#if end
2604
 
2605
								#反之如果關鍵字在結尾
2606
								else if($findKeyWordPosition["tail"]=="true"){
2607
 
2608
									#組合編號
2609
									$no=$noString["dataArray"][0].$i;
2610
 
2611
									}#if end
2612
 
2613
								#其他情況
2614
								else{
2615
 
2616
									#設置執行失敗
2617
									$result["status"]="false";
2618
 
2619
									#設置錯誤訊息
2620
									$result["error"]=$findKeyWordPosition;
2621
 
2622
									#設置額外的錯誤訊息
2623
									$result["error"][]="非預期的結果";
2624
 
2625
									#回傳結果
2626
									return $result;
2627
 
2628
									}#else end
2629
 
2630
								}#if end
2631
 
2632
							#反之 編號規則字串 分割出來的段數為0
2633
							else if($noString["dataCounts"]==0){
2634
 
2635
								#組合編號
2636
								$no=$j;
2637
 
2638
								}#if end
2639
 
2640
							#其他結果
2641
							else{
2642
 
2643
								#設置執行失敗
2644
								$result["status"]="false";
2645
 
2646
								#設置錯誤訊息
2647
								$result["error"]=$noString;
2648
 
2649
								#設置額外的錯誤訊息
2650
								$result["error"][]="非預期的結果";
2651
 
2652
								#回傳結果
2653
								return $result;
2654
 
2655
								}#else end	
2656
 
2657
							#串接編號到檔案名稱上
2658
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].$no;
2659
 
2660
							#如果不是最後一段
2661
							if($j!=$spiltString["dataCounts"]-1){
2662
 
2663
								#串接並加上 dot
2664
								$createdFileName=$createdFileName.".";
2665
 
2666
								}#if end
2667
 
2668
							}#if end
2669
 
2670
						#反之如果不是最後一段
2671
						else if($j!=$spiltString["dataCounts"]-1){
2672
 
2673
							#串接並加上 dot
2674
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].".";
2675
 
2676
							}#if end
2677
 
2678
						#反之是最後一段	
2679
						else{
2680
 
2681
							#串接並加上 dot
2682
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j];
2683
 
2684
							}#else end
2685
 
2686
						}#for end
2687
 
2688
					}#else end
2689
 
2690
				#檢查加上編號的檔案是否存在
2691
				#函式說明:
2692
				#檢查多個檔案與資料夾是否存在.
2693
				#回傳的結果:
2694
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2695
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
2696
				#必填參數:
2697
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2698
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2699
				#參考資料來源:
2700
				#http://php.net/manual/en/function.file-exists.php
2701
				#http://php.net/manual/en/control-structures.foreach.php
2702
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2703
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2704
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2705
 
2706
				#如果檢查檔案是否存在失敗
2707
				if($checkResult["status"]=="false"){
2708
 
2709
					#設置執行失敗
2710
					$result["status"]="false";
2711
 
2712
					#設置錯誤訊息
2713
					$result["error"]=$checkResult;
2714
 
2715
					#回傳結果
2716
					return $result;
2717
 
2718
					}#if end						
2719
 
2720
				#如果 $checkResult["varExist"][0] 等於 "true"
2721
				if($checkResult["varExist"][0]=="true"){						
2722
 
2723
					#取得要建立的檔案名稱
2724
					$createdFileName=$validatePath["fileName"];
2725
 
2726
					#跳到下個迴圈
2727
					continue;
2728
 
2729
					}#if end
2730
 
2731
				#反之代表 $createFilePath.$createdFileName."(".$i.")" 檔檔案不存在
2732
				else{
2733
 
2734
					#嘗試建立該檔案
2735
					#函式說明:
2736
					#將字串寫入到檔案
2737
					#回傳結果:
2738
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2739
					#$result["error"],錯誤訊息陣列.
2740
					#必填參數:
2741
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2742
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2743
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
2744
					#可省略參數:
2745
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2746
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2747
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2748
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2749
 
2750
					#如果 $fileCreateResult["status"] 等於 "true"
2751
					if($fileCreateResult["status"]=="true"){
2752
 
2753
						#代表檔案建立成功
2754
 
2755
						#更新建立的檔案名稱
2756
						$result["createdFileName"]=$createdFileName;
2757
 
2758
						#跳出迴圈
2759
						break;
2760
 
2761
						}#if end
2762
 
2763
					#反之代表檔案建立失敗
2764
					else{
2765
 
2766
						#設置錯誤識別
2767
						$result["status"]="false";
2768
 
2769
						#設置錯誤訊息
2770
						$result["error"]=$fileCreateResult;
2771
 
2772
						#回傳結果
2773
						return $result;
2774
 
2775
						}#else end
2776
 
2777
					}#else end
2778
 
2779
				}#else end
2780
 
2781
			}#for end
2782
 
2783
		#如果不存在建立的檔案名稱
2784
		if(!isset($result["createdFileName"])){
2785
 
2786
			#設置錯誤識別
2787
			$result["status"]="false";
2788
 
2789
			#設置錯誤訊息
2790
			$result["error"][]="建立的檔案名稱不存在";
2791
 
2792
			#回傳結果
2793
			return $result;
2794
 
2795
			}#if end	
2796
 
2797
		#執行到這邊代表執行成功
2798
		$result["status"]="true";
2799
 
2800
		#設置新建立的檔案名稱與路徑
2801
		$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2802
 
2803
		#設置新建立的檔與路徑
2804
		$result["createdFilePath"]=$createdFilePath;
2805
 
2806
		#回傳結果
2807
		return $result;
2808
 
2809
		}#fucntion createFileAfterCheck end
2810
 
2811
	/*
2812
	#函式說明:
2813
	#將檔案內容清空
2814
	#回傳結果:
2815
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2816
	#$result["error"],錯誤訊息陣列
2817
	#必填參數:
2818
	#$conf["fileAddr"],字串,要清空的檔案位置與名稱.
2819
	$conf["fileAddr"]="";
2820
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2821
	$conf["fileArgu"]=__FILE__;
2822
	#可省略參數:
2823
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2824
	#$conf["web"]="false";
2825
	#參考資料:
2826
	#無.
2827
	#備註:
2828
	#無.
2829
	*/
2830
	public static function emptyFile(&$conf){
2831
 
2832
		#初始化要回傳的結果
2833
		$result=array();
2834
 
2835
		#設置當前執行的涵式
2836
		$result["function"]=__FUNCTION__;
2837
 
2838
		#如果 $conf 不為陣列
2839
		if(gettype($conf)!="array"){
2840
 
2841
			#設置執行失敗
2842
			$result["status"]="false";
2843
 
2844
			#設置執行錯誤訊息
2845
			$result["error"][]="\$conf變數須為陣列形態";
2846
 
2847
			#如果傳入的參數為 null
2848
			if($conf==null){
2849
 
2850
				#設置執行錯誤訊息
2851
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2852
 
2853
				}#if end
2854
 
2855
			#回傳結果
2856
			return $result;
2857
 
2858
			}#if end
2859
 
2860
		#取得參數
2861
		$result["argu"]=$conf;
2862
 
2863
		#檢查參數
2864
		#函式說明:
2865
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2866
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2867
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2868
		#$result["function"],當前執行的函式名稱.
2869
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2870
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2871
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2872
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2873
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2874
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2875
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2876
		#必填寫的參數:
2877
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2878
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2879
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2880
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddr");
2881
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2882
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2883
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2884
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2885
		#可以省略的參數:
2886
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2887
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2888
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2889
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
2890
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2891
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
2892
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2893
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
2894
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2895
		#$conf["arrayCountEqualCheck"][]=array();
2896
		#參考資料來源:
2897
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2898
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2899
		unset($conf["variableCheck::checkArguments"]);
2900
 
2901
		#如果 $checkArguments["status"] 等於 "false"
2902
		if($checkArguments["status"]=="false"){
2903
 
2904
			#設置錯誤識別
2905
			$result["status"]="false";
2906
 
2907
			#設置錯誤訊息
2908
			$result["error"]=$checkArguments;
2909
 
2910
			#回傳結果
2911
			return $result;				
2912
 
2913
			}#if end
2914
 
2915
		#如果 $checkArguments["passed"] 等於 "false"
2916
		if($checkArguments["passed"]=="false"){
2917
 
2918
			#設置錯誤識別
2919
			$result["status"]="false";
2920
 
2921
			#設置錯誤訊息
2922
			$result["error"]=$checkArguments;
2923
 
2924
			#回傳結果
2925
			return $result;				
2926
 
2927
			}#if end	
2928
 
2929
		#函式說明:
2930
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
2931
		#回傳結果:
2932
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2933
		#$result["error"],錯誤訊息陣列.
2934
		#$result["function"],函數名稱. 
2935
		#$result["argu"],使用的參數.
2936
		#$result["content"],網址,若是在命令列執行,則為"null".
2937
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
2938
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
2939
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
2940
		#必填參數:
2941
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
2942
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["fileAddr"];
2943
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
2944
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
2945
		#可省略參數:
2946
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2947
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
2948
		#備註:
2949
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
2950
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
2951
		unset($conf["fileAccess::getInternetAddressV2"]);
2952
 
2953
		#如果確保路徑失敗
2954
		if($getInternetAddressV2["status"]==="false"){
2955
 
2956
			#設置錯誤識別
2957
			$result["status"]="false";
2958
 
2959
			#設置錯誤訊息
2960
			$result["error"]=$getInternetAddressV2;
2961
 
2962
			#回傳結果
2963
			return $result;
2964
 
2965
			}#if end
2966
 
2967
		#更新檔案路徑
2968
		$conf["fileAddr"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
2969
 
2970
		#確保要建立檔案的路徑
2971
		#函式說明:
2972
		#確保路徑存在.
2973
		#回傳結果:
2974
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2975
		#$result["error"],錯誤訊息陣列.
2976
		#$resutl["function"],當前執行的涵式名稱.
2977
		#$result["path"],建立好的路徑字串.
2978
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
2979
		#必填參數:
2980
		#$conf["path"],要檢查的路徑
2981
		$conf["fileAccess::validatePath"]["path"]=$conf["fileAddr"];		
2982
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2983
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2984
		#可省略參數:
2985
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2986
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2987
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2988
		#$conf["dirPermission"]="";
2989
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2990
		$conf["fileAccess::validatePath"]["web"]="false";
2991
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2992
		unset($conf["fileAccess::validatePath"]);	
2993
 
2994
		#如果確保路徑失敗
2995
		if($validatePath["status"]==="false"){
2996
 
2997
			#設置錯誤識別
2998
			$result["status"]="false";
2999
 
3000
			#設置錯誤訊息
3001
			$result["error"]=$validatePath;
3002
 
3003
			#回傳結果
3004
			return $result;
3005
 
3006
			}#if end
3007
 
3008
		#清空檔案
3009
		#函式說明:
3010
		#將字串寫入到檔案
3011
		#回傳結果:
3012
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
3013
		#$result["error"],錯誤訊息陣列.
3014
		#$result["function"],當前執行的函數名稱.
3015
		#$result["fileInfo"],實際上寫入的檔案資訊陣列.
3016
		#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
3017
		#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
3018
		#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
3019
		#$result["argu"],使用的參數.
3020
		#必填參數:
3021
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3022
		$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
3023
		#可省略參數:
3024
		#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
3025
		#$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];
3026
		$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];;
3027
		#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
3028
		#$conf["inputString"]="";
3029
		#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
3030
		#$conf["writeMethod"]="a";
3031
		#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
3032
		#$conf["checkRepeat"]="";
3033
		#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
3034
		#$conf["filenameExtensionStartPoint"]="";
3035
		#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
3036
		#$conf["repeatNameRule"]="";
3037
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3038
		$conf["fileAccess::writeTextIntoFile"]["web"]="false";
3039
		$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
3040
		unset($conf["fileAccess::writeTextIntoFile"]);
3041
 
3042
		#如果確保路徑失敗
3043
		if($writeTextIntoFile["status"]==="false"){
3044
 
3045
			#設置錯誤識別
3046
			$result["status"]="false";
3047
 
3048
			#設置錯誤訊息
3049
			$result["error"]=$writeTextIntoFile;
3050
 
3051
			#回傳結果
3052
			return $result;
3053
 
3054
			}#if end
3055
 
3056
		#設置執行正常
3057
		$result["status"]="true";
3058
 
3059
		#儲存建立的結果
3060
		$result["content"]=$writeTextIntoFile;
3061
 
3062
		#回傳結果
3063
		return $result;
3064
 
3065
		}#function emptyFile end
3066
 
3067
	/*
3068
	#函式說明:
3069
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
3070
	#回傳結果:
3071
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3072
	#$result["error"],錯誤訊息陣列
3073
	#$result["warning"],警告訊息陣列
3074
	#必填參數:
3075
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3076
	$conf["dirPositionAndName"]="";
3077
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3078
	$conf["fileArgu"]=__FILE__;
3079
	#可省略參數:
3080
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3081
	#$conf["dirPermission"]="";
3082
	#參考資料:
3083
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3084
	#chmod=>http://php.net/manual/en/function.chmod.php
3085
	#參考資料:
3086
	#無.
3087
	#備註:
3088
	#同 function createFolderAfterCheck.
3089
	*/
3090
	public static function createNewFolder(&$conf){
3091
 
3092
		/*
3093
		#函式說明:
3094
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
3095
		#回傳的結果:
3096
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
3097
		#$result["error"],錯誤訊息陣列.
3098
		#$result["function"],當前執行的函數名稱.
3099
		#$result["createdFileName"],建立好的檔案名稱.
3100
		#$result["createdFilePath"],檔案建立的路徑.
3101
		#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
3102
		#必填參數:
3103
		#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
3104
		$conf["checkedFileAndPath"]="";
3105
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3106
		$conf["fileArgu"]=__FILE__;
3107
		*/
3108
		return fileAccess::createFolderAfterCheck($conf);
3109
		unset($conf);
3110
 
3111
		}#function createNewFolder end
3112
 
3113
	/*
3114
	#函式說明:
3115
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
3116
	#回傳結果:
3117
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3118
	#$result["error"],錯誤訊息陣列
3119
	#$result["warning"],警告訊息陣列
3120
	#$result["argu"],使用的參數.
3121
	#$result["content"],建立的目錄路徑.
3122
	#必填參數:
3123
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3124
	$conf["dirPositionAndName"]="";
3125
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3126
	$conf["fileArgu"]=__FILE__;
3127
	#可省略參數:
3128
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3129
	#$conf["dirPermission"]="";
3130
	#$conf["web"],"false"代表在檔案系統環境,"true"代表在網頁稀系統環境.
3131
	#$conf["web"]="false";
3132
	#參考資料:
3133
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3134
	#chmod=>http://php.net/manual/en/function.chmod.php
3135
	#備註:
3136
	#無.
3137
	*/
3138
	public static function createFolderAfterCheck(&$conf){
3139
 
3140
		#初始化要回傳的結果
3141
		$result=array();
3142
 
3143
		#初始化警告訊息陣列
3144
		$result["warning"]=array();
3145
 
3146
		#記錄當前執行的函數名稱
3147
		$result["function"]=__FUNCTION__;
3148
 
3149
		#如果 $conf 不為陣列
3150
		if(gettype($conf)!="array"){
3151
 
3152
			#設置執行失敗
3153
			$result["status"]="false";
3154
 
3155
			#設置執行錯誤訊息
3156
			$result["error"][]="\$conf變數須為陣列形態";
3157
 
3158
			#如果傳入的參數為 null
3159
			if($conf==null){
3160
 
3161
				#設置執行錯誤訊息
3162
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3163
 
3164
				}#if end
3165
 
3166
			#回傳結果
3167
			return $result;
3168
 
3169
			}#if end
3170
 
3171
		#取得參數
3172
		$result["argu"]=$conf;
3173
 
3174
		#檢查參數
3175
		#函式說明:
3176
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3177
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3178
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3179
		#$result["function"],當前執行的函式名稱.
3180
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3181
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3182
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3183
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3184
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3185
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3186
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3187
		#必填寫的參數:
3188
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3189
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3190
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3191
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dirPositionAndName");
3192
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3193
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3194
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3195
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3196
		#可以省略的參數:
3197
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3198
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3199
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3200
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dirPermission","web");
3201
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3202
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
3203
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3204
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("0770","false");
3205
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3206
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
3207
		#參考資料來源:
3208
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3209
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3210
		unset($conf["variableCheck::checkArguments"]);
3211
 
3212
		#如果 $checkArguments["status"] 等於 "false"
3213
		if($checkArguments["status"]==="false"){
3214
 
3215
			#設置 $result["status"] 為 "false"
3216
			$result["status"]="false";
3217
 
3218
			#設置 $result["error"]
3219
			$result["error"]=$checkArguments;
3220
 
3221
			#回傳結果
3222
			return $result;
3223
 
3224
			}#if end
3225
 
3226
		#如果 $checkArguments["passed"] 等於 "false"
3227
		if($checkArguments["passed"]==="false"){
3228
 
3229
			#設置 $result["status"] 為 "false"
3230
			$result["status"]="false";
3231
 
3232
			#設置 $result["error"]
3233
			$result["error"]=$checkArguments;
3234
 
3235
			#回傳結果
3236
			return $result;
3237
 
3238
			}#if end			
3239
 
3240
		#函式說明:
3241
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
3242
		#回傳結果:
3243
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3244
		#$result["error"],錯誤訊息陣列.
3245
		#$result["function"],函數名稱. 
3246
		#$result["argu"],使用的參數.
3247
		#$result["content"],網址,若是在命令列執行,則為"null".
3248
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
3249
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
3250
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
3251
		#必填參數:
3252
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
3253
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["dirPositionAndName"];
3254
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3255
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
3256
		#可省略參數:
3257
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3258
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
3259
		#備註:
3260
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
3261
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
3262
		unset($conf["fileAccess::getInternetAddressV2"]);
3263
 
3264
		#如果 $getInternetAddressV2["status"] 等於 "false"
3265
		if($getInternetAddressV2["status"]==="false"){
3266
 
3267
			#設置 $result["status"] 為 "false"
3268
			$result["status"]="false";
3269
 
3270
			#設置 $result["error"]
3271
			$result["error"]=$getInternetAddressV2;
3272
 
3273
			#回傳結果
3274
			return $result;
3275
 
3276
			}#if end
3277
 
3278
		#取得絕對位置
3279
		$conf["dirPositionAndName"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
3280
 
3281
		#用「/」分割要建立的路徑
3282
		#函式說明:
3283
		#將固定格式的字串分開,並回傳分開的結果。
3284
		#回傳結果:
3285
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3286
		#$result["error"],錯誤訊息陣列
3287
		#$result["function"],當前執行的函數名稱.
3288
		#$result["oriStr"],要分割的原始字串內容
3289
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
3290
		#$result["dataCounts"],爲總共分成幾段
3291
		#必填參數:
3292
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["dirPositionAndName"];
3293
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
3294
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
3295
		unset($conf["stringProcess::spiltString"]);	
3296
 
3297
		#如果分割失敗
3298
		if($spiltString["status"]=="false"){
3299
 
3300
			#設置 $result["status"] 為 "false"
3301
			$result["status"]="false";
3302
 
3303
			#設置 $result["error"]
3304
			$result["error"]=$spiltString;
3305
 
3306
			#回傳結果
3307
			return $result;
3308
 
3309
			}#if end
3310
 
3311
		$checkedPath="";
3312
 
3313
		#依據切割成的路徑片段數目
3314
		for($i=0;$i<$spiltString["dataCounts"];$i++){
3315
 
3316
			$checkedPath=$checkedPath."/".$spiltString["dataArray"][$i];
3317
 
3318
			#檢查路徑是否存在
3319
			#函式說明:
3320
			#檢查多個檔案與資料夾是否存在.
3321
			#回傳的結果:
3322
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3323
			#$result["error"],錯誤訊息陣列.
3324
			#$resutl["function"],當前執行的涵式名稱.
3325
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3326
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
3327
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
3328
			#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
3329
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3330
			#必填參數:
3331
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
3332
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($checkedPath);
3333
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3334
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3335
			#可省略參數
3336
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3337
			#$conf["disableWebSearch"]="false";
3338
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3339
			#$conf["userDir"]="true";
3340
			#參考資料來源:
3341
			#http://php.net/manual/en/function.file-exists.php
3342
			#http://php.net/manual/en/control-structures.foreach.php
3343
			#備註:
3344
			#函數file_exists檢查的路徑為檔案系統的路徑
3345
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
3346
 
3347
			#如果檢查資料夾路徑失敗
3348
			if($checkMultiFileExist["status"]=="false"){
3349
 
3350
				#設置 $result["status"] 為 "false"
3351
				$result["status"]="false";
3352
 
3353
				#設置 $result["error"]
3354
				$result["error"]=$spiltString;
3355
 
3356
				#回傳結果
3357
				return $result;
3358
 
3359
				}#if end
3360
 
3361
			#如果目錄不存在
3362
			if($checkMultiFileExist["allExist"]=="false"){
3363
 
3364
				#如果有這個名稱的東西存在
3365
				if(file_exists($checkedPath)){
3366
 
3367
					#如果目錄存在
3368
					if(is_dir($checkedPath)){
3369
 
3370
						#目錄已經存在換下一層
3371
						continue;
3372
 
3373
						}#if end
3374
 
3375
					}#if end
3376
 
3377
				#建立目錄
3378
				$mkdir=@mkdir($checkedPath,0770);
3379
 
3380
				#如果建立目錄失敗
3381
				#參考資料:
3382
				#http://php.net/manual/en/function.mkdir.php
3383
				if($mkdir===false){
3384
 
3385
					#設置 $result["status"] 為 "false"
3386
					$result["status"]="false";
3387
 
3388
					#設置 $result["error"]
3389
					$result["error"][]="建立目錄「".$checkedPath."」失敗";
3390
 
3391
					#回傳結果
3392
					return $result;
3393
 
3394
					}#if end
3395
 
3396
				#更改目錄的權限為 0770
3397
				chmod($checkedPath,0770);
3398
 
3399
				}#if end
3400
 
3401
			}#for end
3402
 
3403
		#取得建立好的目錄
3404
		$result["content"]=$checkedPath;	
3405
 
3406
		#執行到這邊代表執行成功
3407
		$result["status"]="true";
3408
 
3409
		#回傳結果
3410
		return $result;
3411
 
3412
		}#function createFolderAfterCheck end
3413
 
3414
	/*
3415
	#函式說明:
3416
	#移除檔案
3417
	#回傳結果:
3418
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3419
	#$result["error"],錯誤訊息陣列.
3420
	#$result["warning"],警告訊息陣列.
3421
	#$result["function"],當前執行的函數名稱.
3422
	#$result["argu"],當前函式使用的參數.
3423
	#必填參數:
3424
	#$conf["fileAddress"],字串,要移除檔案的位置.
3425
	$conf["fileAddress"]="";
3426
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3427
	$conf["fileArgu"]=__FILE__;
3428
	#可省略參數:
3429
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3430
	#$conf["commentsArray"]=array("");
3431
	#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
3432
	#$conf["allowDelSymlink"]="true";
3433
	#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
3434
	#$conf["allowDelFolder"]="true";
3435
	#參考資料:
3436
	#無.
3437
	#備註:
3438
	#無.
3439
	*/		
3440
	public static function delFile(&$conf){
3441
 
3442
		#初始化要回傳的結果
3443
		$result=array();
3444
 
3445
		#設置當其函數名稱
3446
		$result["function"]=__FUNCTION__;
3447
 
3448
		#如果 $conf 不為陣列
3449
		if(gettype($conf)!="array"){
3450
 
3451
			#設置執行失敗
3452
			$result["status"]="false";
3453
 
3454
			#設置執行錯誤訊息
3455
			$result["error"][]="\$conf變數須為陣列形態";
3456
 
3457
			#如果傳入的參數為 null
3458
			if($conf==null){
3459
 
3460
				#設置執行錯誤訊息
3461
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3462
 
3463
				}#if end
3464
 
3465
			#回傳結果
3466
			return $result;
3467
 
3468
			}#if end
3469
 
3470
		#取得參數
3471
		$result["argu"]=$conf;
3472
 
3473
		#檢查參數
3474
		#函式說明:
3475
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3476
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3477
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3478
		#$result["function"],當前執行的函式名稱.
3479
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3480
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3481
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3482
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3483
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3484
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3485
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3486
		#必填寫的參數:
3487
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3488
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3489
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3490
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3491
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3492
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3493
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3494
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3495
		#可以省略的參數:
3496
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3497
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3498
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3499
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","allowDelSymlink","allowDelFolder");
3500
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3501
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
3502
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3503
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
3504
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3505
		#$conf["arrayCountEqualCheck"][]=array();
3506
		#參考資料來源:
3507
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3508
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3509
		unset($conf["variableCheck::checkArguments"]);
3510
 
3511
		#如果檢查失敗
3512
		if($checkResult["status"]=="false"){
3513
 
3514
			#設置錯誤識別
3515
			$result["status"]="false";
3516
 
3517
			#設置錯誤訊息
3518
			$result["error"]=$checkResult;
3519
 
3520
			#回傳結果
3521
			return $result;
3522
 
3523
			}#if end
3524
 
3525
		#如果檢查不通過
3526
		if($checkResult["passed"]=="false"){
3527
 
3528
			#設置錯誤識別
3529
			$result["status"]="false";
3530
 
3531
			#設置錯誤訊息
3532
			$result["error"]=$checkResult;
3533
 
3534
			#回傳結果
3535
			return $result;
3536
 
3537
			}#if end
3538
 
3539
		#如果 $conf["commentsArray"] 有設定
3540
		if(isset($conf["commentsArray"])){
3541
 
3542
			#印出提示文字
3543
			#函式說明:
3544
			#印出多行文字,結尾自動換行.
3545
			#回傳的結果:
3546
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3547
			#$result["function"],當前執行的函數名稱.
3548
			#$result["error"],錯誤訊息陣列.
3549
			#必填參數:
3550
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
3551
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
3552
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
3553
			unset($conf["cmd::echoMultiLine"]);
3554
 
3555
			#如果印出提示文字失敗
3556
			if($echoMultiLine["status"]=="false"){
3557
 
3558
				#設置執行失敗
3559
				$result["status"]="false";
3560
 
3561
				#設置執行錯誤訊息
3562
				$result["error"]=$echoMultiLine;
3563
 
3564
				#回傳結果
3565
				return $result;
3566
 
3567
				}#if end
3568
 
3569
			}#if end
3570
 
3571
		#檢查要移除的檔案是否存在
3572
		#函式說明:
3573
		#檢查多個檔案與資料夾是否存在.
3574
		#回傳的結果:
3575
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3576
		#$result["error"],錯誤訊息陣列.
3577
		#$resutl["function"],當前執行的涵式名稱.
3578
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3579
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3580
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3581
		#必填參數:
3582
		$conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["fileAddress"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
3583
		#$conf["fileAccess.checkMultiFileExist"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3584
		$conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3585
		#可省略參數:
3586
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3587
		#$conf["disableWebSearch"]="false";
3588
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3589
		#$conf["userDir"]="true";
3590
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
3591
		$conf["fileAccess.checkMultiFileExist"]["web"]="false";
3592
		#參考資料來源:
3593
		#http://php.net/manual/en/function.file-exists.php
3594
		#http://php.net/manual/en/control-structures.foreach.php
3595
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3596
		unset($conf["fileAccess.checkMultiFileExist"]);
3597
 
3598
		#var_dump($checkResult);
3599
 
3600
		#如果檢查檔案是否存在失敗
3601
		if($checkResult["status"]==="false"){
3602
 
3603
			#設置執行失敗
3604
			$result["status"]="false";
3605
 
3606
			#回傳錯誤訊息
3607
			$result["error"]=$checkResult;
3608
 
3609
			#回傳結果
3610
			return $result;
3611
 
3612
			}#if end
3613
 
3614
		#如果目標檔案不存在
3615
		if($checkResult["varExist"][0]==="false"){
3616
 
3617
			#設置錯誤識別
3618
			$result["status"]="true";
3619
 
3620
			#回傳錯誤訊息
3621
			$result["warning"][]="要移除的檔案不存在";
3622
 
3623
			#回傳結果
3624
			return $result;
3625
 
3626
			}#if end
3627
 
3628
		#如果要移除的目標是檔案
3629
		if(is_file($conf["fileAddress"])){
3630
 
3631
			#移除檔案,並回傳移除的結果
3632
			$eraseResult=(@unlink($conf["fileAddress"]));
3633
 
3634
			#如果 $eraseResult 等於 false
3635
			if($eraseResult===false){
3636
 
3637
				#設置錯誤識別
3638
				$result["status"]="false";
3639
 
3640
				#回傳錯誤訊息
3641
				$result["error"][]="檔案移除失敗";
3642
 
3643
				#回傳結果
3644
				return $result;
3645
 
3646
				}#if end
3647
 
3648
			}#if end
3649
 
3650
		#反之要移除的目標是目錄
3651
		else if(is_dir($conf["fileAddress"])){
3652
 
3653
			#如果允許移除目錄
3654
			if($conf["allowDelFolder"]==="true"){
3655
 
3656
				#移除目錄跟底下的內容
3657
				w函式說明:
3658
				#呼叫shell執行系統命令,並取得回傳的內容.
3659
				#回傳結果:
3660
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3661
				#$result["error"],錯誤訊息陣列.
3662
				#$result["function"],當前執行的函數名稱.
3663
				#$result["argu"],使用的參數.
3664
				#$result["cmd"],執行的指令內容.
3665
				#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
3666
				#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
3667
				#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
3668
				#$result["running"],是否還在執行.
3669
				#$result["pid"],pid.
3670
				#$result["statusCode"],執行結束後的代碼.
3671
				#必填參數:
3672
				#$conf["command"],字串,要執行的指令.
3673
				$conf["external::callShell"]["command"]="rm";
3674
				#$conf["fileArgu"],字串,變數__FILE__的內容.
3675
				$conf["external::callShell"]["fileArgu"]=__FILE__;
3676
				#可省略參數:
3677
				#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
3678
				$conf["external::callShell"]["argu"]=array("-rf",$conf["fileAddress"]);
3679
				#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
3680
				#$conf["arguIsAddr"]=array();
3681
				#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
3682
				#$conf["plainArgu"]=array();
3683
				#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
3684
				#$conf["useApostrophe"]=array();
3685
				#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
3686
				#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
3687
				#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
3688
				#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
3689
				#$conf["enablePrintDescription"]="true";
3690
				#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
3691
				#$conf["printDescription"]="";
3692
				#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
3693
				$conf["external::callShell"]["escapeshellarg"]="true";
3694
				#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
3695
				#$conf["thereIsShellVar"]=array();
3696
				#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
3697
				#$conf["username"]="";
3698
				#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
3699
				#$conf["password"]="";
3700
				#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
3701
				#$conf["useScript"]="";
3702
				#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
3703
				#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
3704
				#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
3705
				#$conf["inBackGround"]="";
3706
				#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
3707
				#$conf["getErr"]="false";
3708
				#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
3709
				#$conf["doNotRun"]="false";
3710
				#參考資料:
3711
				#exec=>http://php.net/manual/en/function.exec.php
3712
				#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
3713
				#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
3714
				#備註:
3715
				#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
3716
				#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
3717
				$callShell=external::callShell($conf["external::callShell"]);
3718
				unset($conf["external::callShell"]);
3719
 
3720
				#如果執行失敗
3721
				if($callShell["status"]==="false"){
3722
 
3723
					#設置錯誤識別
3724
					$result["status"]="false";
3725
 
3726
					#回傳錯誤訊息
3727
					$result["error"]=$callShell;
3728
 
3729
					#回傳結果
3730
					return $result;
3731
 
3732
					}#if end
3733
 
3734
				}#if end	
3735
 
3736
			#反之不允許
3737
			else{
3738
 
3739
				#設置錯誤識別
3740
				$result["status"]="false";
3741
 
3742
				#回傳錯誤訊息
3743
				$result["error"][]="不允許移除目錄";
3744
 
3745
				#回傳結果
3746
				return $result;
3747
 
3748
				}#else end
3749
 
3750
			}#if end
3751
 
3752
		#反之
3753
		else{
3754
 
3755
			#可能為 軟連結
3756
 
3757
			#如果允許移除
3758
			if($conf["allowDelSymlink"]==="true"){
3759
 
3760
				#移除檔案,並回傳移除的結果
3761
				$eraseResult=(@unlink($conf["fileAddress"]));
3762
 
3763
				#如果 $eraseResult 等於 false
3764
				if($eraseResult===false){
3765
 
3766
					#設置錯誤識別
3767
					$result["status"]="false";
3768
 
3769
					#回傳錯誤訊息
3770
					$result["error"][]="檔案移除失敗";
3771
 
3772
					#回傳結果
3773
					return $result;
3774
 
3775
					}#if end
3776
 
3777
				}#if end
3778
 
3779
			#反之
3780
			else{
3781
 
3782
				#設置錯誤識別
3783
				$result["status"]="false";
3784
 
3785
				#設置錯誤訊息
3786
				$result["error"][]="不允許移除 檔案、目錄 以外類型的目標";
3787
 
3788
				#回傳結果
3789
				return $result;
3790
 
3791
				}#else end
3792
 
3793
			}#else end
3794
 
3795
		#執行到這邊代表執行正常.
3796
		$result["status"]="true";
3797
 
3798
		#回傳結果
3799
		return $result;
3800
 
3801
		}#function delFile end
3802
 
3803
	/*
3804
	#函式說明:
3805
	#移除多個檔案
3806
	#回傳結果:
3807
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3808
	#$result["error"],錯誤訊息陣列
3809
	#$result["function"],當前執行的函數名稱.
3810
	#$result["argu"],使用的參數.
3811
	#$result["content"],陣列,移除各個檔案的結果.
3812
	#必填參數:
3813
	#$conf["fileAddress"],字串陣列,要移除檔案的位置.
3814
	$conf["fileAddress"]=array("");
3815
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3816
	$conf["fileArgu"]=__FILE__;
3817
	#可省略參數:
3818
	#無.
3819
	#參考資料:
3820
	#無.
3821
	#備註:
3822
	#無.
3823
	*/		
3824
	public static function delMultiFile(&$conf){
3825
 
3826
		#初始化要回傳的結果
3827
		$result=array();
3828
 
3829
		#設置當其函數名稱
3830
		$result["function"]=__FUNCTION__;
3831
 
3832
		#如果 $conf 不為陣列
3833
		if(gettype($conf)!="array"){
3834
 
3835
			#設置執行失敗
3836
			$result["status"]="false";
3837
 
3838
			#設置執行錯誤訊息
3839
			$result["error"][]="\$conf變數須為陣列形態";
3840
 
3841
			#如果傳入的參數為 null
3842
			if($conf==null){
3843
 
3844
				#設置執行錯誤訊息
3845
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3846
 
3847
				}#if end
3848
 
3849
			#回傳結果
3850
			return $result;
3851
 
3852
			}#if end
3853
 
3854
		#取得使用的參數.
3855
		$result["argu"]=$conf;
3856
 
3857
		#檢查參數
3858
		#函式說明:
3859
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3860
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3861
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3862
		#$result["function"],當前執行的函式名稱.
3863
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3864
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3865
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3866
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3867
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3868
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3869
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3870
		#必填寫的參數:
3871
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3872
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3873
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3874
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3875
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3876
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
3877
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3878
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3879
		#可以省略的參數:
3880
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3881
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3882
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3883
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
3884
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3885
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3886
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3887
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3888
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3889
		#$conf["arrayCountEqualCheck"][]=array();
3890
		#參考資料來源:
3891
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3892
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3893
		unset($conf["variableCheck::checkArguments"]);
3894
 
3895
		#如果檢查失敗
3896
		if($checkResult["status"]=="false"){
3897
 
3898
			#設置錯誤識別
3899
			$result["status"]="false";
3900
 
3901
			#設置錯誤訊息
3902
			$result["error"]=$checkResult;
3903
 
3904
			#回傳結果
3905
			return $result;
3906
 
3907
			}#if end
3908
 
3909
		#如果檢查不通過
3910
		if($checkResult["passed"]=="false"){
3911
 
3912
			#設置錯誤識別
3913
			$result["status"]="false";
3914
 
3915
			#設置錯誤訊息
3916
			$result["error"]=$checkResult;
3917
 
3918
			#回傳結果
3919
			return $result;
3920
 
3921
			}#if end
3922
 
3923
		#針對每個要移除的檔案
3924
		foreach($conf["fileAddress"] as $fileAddr){
3925
 
3926
			#函式說明:
3927
			#移除檔案
3928
			#回傳結果:
3929
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3930
			#$result["error"],錯誤訊息陣列
3931
			#$result["warning"],警告訊息陣列
3932
			#$result["function"],當前執行的函數名稱
3933
			#必填參數:
3934
			#$conf["fileAddress"],字串,要移除檔案的位置.
3935
			$conf["fileAccess::delFile"]["fileAddress"]=$fileAddr;
3936
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3937
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
3938
			#可省略參數:
3939
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3940
			#$conf["commentsArray"]=array("");
3941
			#備註:
3942
			#無.
3943
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
3944
			unset($conf["fileAccess::delFile"]);
3945
 
3946
			#如果檢查失敗
3947
			if($delFile["status"]==="false"){
3948
 
3949
				#設置錯誤識別
3950
				$result["status"]="false";
3951
 
3952
				#設置錯誤訊息
3953
				$result["error"]=$delFile;
3954
 
3955
				#回傳結果
3956
				return $result;
3957
 
3958
				}#if end
3959
 
3960
			#取得移除檔案的結果
3961
			$result["content"][]=$delFile;
3962
 
3963
			}#foreach end
3964
 
3965
		#設置執行正常
3966
		$result["status"]="true";
3967
 
3968
		#回傳結果
3969
		return $result;
3970
 
3971
		}#function delMultiFile end
3972
 
3973
	/*
3974
	#函式說明:
3975
	#確保路徑存在.
3976
	#回傳結果:
3977
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3978
	#$result["error"],錯誤訊息陣列.
3979
	#$resutl["function"],當前執行的涵式名稱.
3980
	#$result["path"],建立好的路徑字串.
3981
	#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
3982
	#$result["argu"],使用的參數.
3983
	#必填參數:
3984
	#$conf["path"],要檢查的路徑
3985
	$conf["path"]="";		
3986
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3987
	$conf["fileArgu"]=__FILE__;
3988
	#可省略參數:
3989
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
3990
	#$conf["haveFileName"]="false";
3991
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人無法使用.
3992
	#$conf["dirPermission"]="";
3993
	#$conf["web"],是否為檔案系統,"true"為網頁路徑,"false"為網頁系統,預設為"false".
3994
	#$conf["web"]="";
3995
	#參考資料:
3996
	#無.
3997
	#備註:
3998
	#無.
3999
	*/ 
4000
	public static function validatePath(&$conf){
4001
 
4002
		#初始化要回傳的結果
4003
		$result=array();
4004
 
4005
		#設置當其函數名稱
4006
		$result["function"]=__FUNCTION__;
4007
 
4008
		#如果 $conf 不為陣列
4009
		if(gettype($conf)!="array"){
4010
 
4011
			#設置執行失敗
4012
			$result["status"]="false";
4013
 
4014
			#設置執行錯誤訊息
4015
			$result["error"][]="\$conf變數須為陣列形態";
4016
 
4017
			#如果傳入的參數為 null
4018
			if($conf==null){
4019
 
4020
				#設置執行錯誤訊息
4021
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4022
 
4023
				}#if end
4024
 
4025
			#回傳結果
4026
			return $result;
4027
 
4028
			}#if end
4029
 
4030
		#取得使用的參數
4031
		$result["argu"]=$conf;	
4032
 
4033
		#檢查參數
4034
		#函式說明:
4035
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4036
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4037
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4038
		#$result["function"],當前執行的函式名稱.
4039
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4040
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4041
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4042
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4043
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4044
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4045
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4046
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4047
		#必填寫的參數:
4048
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4049
		$conf["variableCheck::checkArgument"]["varInput"]=&$conf;
4050
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4051
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableName"]=array("path","fileArgu");
4052
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4053
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableType"]=array("string","string");
4054
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4055
		$conf["variableCheck::checkArgument"]["referenceVarKey"]="variableCheck::checkArgument";
4056
		#可以省略的參數:
4057
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4058
		$conf["variableCheck::checkArgument"]["canBeEmptyString"]="false";
4059
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4060
		$conf["variableCheck::checkArgument"]["skipableVariableCanNotBeEmpty"]=array("haveFileName","dirPermission","web");
4061
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4062
		$conf["variableCheck::checkArgument"]["skipableVariableName"]=array("haveFileName","dirPermission","web");
4063
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4064
		$conf["variableCheck::checkArgument"]["skipableVariableType"]=array("string","string","string");
4065
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4066
		$conf["variableCheck::checkArgument"]["skipableVarDefaultValue"]=array("false","0770","false");
4067
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4068
		#$conf["arrayCountEqualCheck"][]=array();
4069
		#參考資料來源:
4070
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4071
		$checkArgument=variableCheck::checkArguments($conf["variableCheck::checkArgument"]);
4072
		unset($conf["variableCheck::checkArgument"]);
4073
 
4074
		#如果檢查過程出錯
4075
		if($checkArgument["status"]==="false"){
4076
 
4077
			#設置執行失敗
4078
			$result["status"]="false";
4079
 
4080
			#設置執行錯誤訊息
4081
			$result["error"]=$checkArgument;
4082
 
4083
			#回傳結果
4084
			return $result;
4085
 
4086
			}#if end
4087
 
4088
		#如果檢查不通過
4089
		if($checkArgument["passed"]==="false"){
4090
 
4091
			#設置執行失敗
4092
			$result["status"]="false";
4093
 
4094
			#設置執行錯誤訊息
4095
			$result["error"]=$checkArgument;
4096
 
4097
			#回傳結果
4098
			return $result;
4099
 
4100
			}#if end
4101
 
4102
		#函式說明:
4103
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
4104
		#回傳結果:
4105
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4106
		#$result["error"],錯誤訊息陣列.
4107
		#$result["function"],函數名稱. 
4108
		#$result["argu"],使用的參數.
4109
		#$result["content"],網址,若是在命令列執行,則為"null".
4110
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
4111
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
4112
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
4113
		#必填參數:
4114
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
4115
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["path"];
4116
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
4117
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
4118
		#可省略參數:
4119
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
4120
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
4121
		#備註:
4122
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
4123
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
4124
		unset($conf["fileAccess::getInternetAddressV2"]);	
4125
 
4126
		#如果檢查過程出錯
4127
		if($getInternetAddressV2["status"]=="false"){
4128
 
4129
			#設置執行失敗
4130
			$result["status"]="false";
4131
 
4132
			#設置執行錯誤訊息
4133
			$result["error"]=$getInternetAddressV2;
4134
 
4135
			#回傳結果
4136
			return $result;
4137
 
4138
			}#if end		
4139
 
4140
		#取得轉換好的絕對路徑
4141
		$result["path"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
4142
 
4143
		#debug
4144
		#var_dump($getInternetAddressV2);exit;
4145
 
4146
		#如果 路徑 含有檔案名稱
4147
		if($conf["haveFileName"]==="true"){
4148
 
4149
			#預設要加回去的結束字串為空字串
4150
			$endStr="";
4151
 
4152
			#如果開頭跟結尾都是 "'"
4153
			if( strpos($result["path"],"'")===0 && strpos($result["path"],"'")===(strlen($result["path"])-1) ){
4154
 
4155
				#設置要加回去的結束字串
4156
				$endStr="'";
4157
 
4158
				}#if end
4159
 
4160
			#函式說明:
4161
			#將固定格式的字串分開,並回傳分開的結果。
4162
			#回傳結果:
4163
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4164
			#$result["error"],錯誤訊息陣列
4165
			#$result["function"],當前執行的函數名稱.
4166
			#$result["argu"],使用的參數.
4167
			#$result["oriStr"],要分割的原始字串內容
4168
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4169
			#$result["dataCounts"],爲總共分成幾段
4170
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4171
			#必填參數:
4172
			#$conf["stringIn"],字串,要處理的字串.
4173
			$conf["stringProcess::spiltString"]["stringIn"]=$result["path"];
4174
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4175
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4176
			#可省略參數:
4177
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4178
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
4179
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4180
			unset($conf["stringProcess::spiltString"]);
4181
 
4182
			#如果檢查過程出錯
4183
			if($spiltString["status"]==="false"){
4184
 
4185
				#設置執行失敗
4186
				$result["status"]="false";
4187
 
4188
				#設置執行錯誤訊息
4189
				$result["error"]=$spiltString;
4190
 
4191
				#回傳結果
4192
				return $result;
4193
 
4194
				}#if end
4195
 
4196
			#初始化儲存 path
4197
			$path="";
4198
 
4199
			#針對n-1段的內容
4200
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
4201
 
4202
				#串接路徑
4203
				$path=$path."/".$spiltString["dataArray"][$i];
4204
 
4205
				}#for end
4206
 
4207
			#如果路徑為空
4208
			if($path===""){
4209
 
4210
				#則與設為根目錄
4211
				$path="/";
4212
 
4213
				}#if end
4214
 
4215
			#設置檔案名稱
4216
			$result["fileName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
4217
 
4218
			#取得不含檔案名稱的路徑
4219
			$conf["path"]=$path.$endStr;
4220
 
4221
			#取得不含檔案名稱的路徑
4222
			$result["path"]=$path.$endStr;
4223
 
4224
			}#if end
4225
 
4226
		#函式說明:
4227
		#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
4228
		#回傳結果:
4229
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4230
		#$result["error"],錯誤訊息陣列
4231
		#必填參數:
4232
		$conf["fileAccess::createFolderAfterCheck"]["dirPositionAndName"]=$conf["path"];#新建的位置與名稱
4233
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4234
		$conf["fileAccess::createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];
4235
		#可省略參數:
4236
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
4237
		$conf["fileAccess::createFolderAfterCheck"]["dirPermission"]=$conf["dirPermission"];
4238
		$conf["fileAccess::createFolderAfterCheck"]["web"]="false";
4239
		#參考資料:
4240
		#mkdir=>http://php.net/manual/en/function.mkdir.php
4241
		#chmod=>http://php.net/manual/en/function.chmod.php
4242
		$createFolderAfterCheck=fileAccess::createFolderAfterCheck($conf["fileAccess::createFolderAfterCheck"]);
4243
		unset($conf["fileAccess::createFolderAfterCheck"]);
4244
 
4245
		#如果建立路徑過程出錯
4246
		if($createFolderAfterCheck["status"]==="false"){
4247
 
4248
			#設置執行失敗
4249
			$result["status"]="false";
4250
 
4251
			#設置執行錯誤訊息
4252
			$result["error"]=$createFolderAfterCheck;
4253
 
4254
			#回傳結果
4255
			return $result;
4256
 
4257
			}#if end
4258
 
4259
		#如果有警告訊息
4260
		if(count($createFolderAfterCheck["warning"])>0){
4261
 
4262
			#取得警告訊息
4263
			$result["error"]=$createFolderAfterCheck["warning"];
4264
 
4265
			#設置執行失敗
4266
			$result["status"]="false";
4267
 
4268
			#回傳結果
4269
			return $result;
4270
 
4271
			}#if end
4272
 
4273
		#執行到這邊代表成功
4274
		$result["status"]="true";
4275
 
4276
		#回傳結果
4277
		return $result;
4278
 
4279
		}#function validatePath end
4280
 
4281
	/*
4282
	#函式說明:
4283
	#解析路徑的每個層級.
4284
	#回傳結果:
4285
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4286
	#$result["error"],錯誤訊息陣列.
4287
	#$resutl["function"],當前執行的涵式名稱.
4288
	#$result["argu"],使用的參數.
4289
	#$result["content"],解析出來的路徑階層.
4290
	#必填參數:
4291
	#$conf["path"],要檢查的路徑
4292
	$conf["path"]="";
4293
	#可省略參數:
4294
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4295
	#$conf["haveFileName"]="false";
4296
	#參考資料:
4297
	#無.
4298
	#備註:
4299
	#無.
4300
	*/
4301
	public static function parsePath(&$conf){
4302
 
4303
		#初始化要回傳的內容
4304
		$result=array();
4305
 
4306
		#取得當前執行的函數名稱
4307
		$result["function"]=__FUNCTION__;
4308
 
4309
		#如果 $conf 不為陣列
4310
		if(gettype($conf)!="array"){
4311
 
4312
			#設置執行失敗
4313
			$result["status"]="false";
4314
 
4315
			#設置執行錯誤訊息
4316
			$result["error"][]="\$conf變數須為陣列形態";
4317
 
4318
			#如果傳入的參數為 null
4319
			if($conf==null){
4320
 
4321
				#設置執行錯誤訊息
4322
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4323
 
4324
				}#if end
4325
 
4326
			#回傳結果
4327
			return $result;
4328
 
4329
			}#if end
4330
 
4331
		#記錄使用的參數
4332
		$result["argu"]=$conf;
4333
 
4334
		#檢查參數
4335
		#函式說明:
4336
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4337
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4338
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4339
		#$result["function"],當前執行的函式名稱.
4340
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4341
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4342
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4343
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4344
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4345
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4346
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4347
		#必填寫的參數:
4348
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4349
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4350
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4351
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
4352
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4353
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4354
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4355
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4356
		#可以省略的參數:
4357
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4358
		#$conf["canBeEmptyString"]="false";
4359
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4360
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4361
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4362
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4363
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4364
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4365
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4366
		#$conf["arrayCountEqualCheck"][]=array();
4367
		#參考資料來源:
4368
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4369
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4370
		unset($conf["variableCheck::checkArguments"]);
4371
 
4372
		#如果檢查有誤
4373
		if($checkResult["status"]=="false"){
4374
 
4375
			#設置錯誤識別
4376
			$result["status"]="false";
4377
 
4378
			#設置錯誤訊息
4379
			$result["error"]=$checkResult;
4380
 
4381
			#回傳結果
4382
			return $result;
4383
 
4384
			}#if end
4385
 
4386
		#如果檢查不通過
4387
		if($checkResult["passed"]=="false"){
4388
 
4389
			#設置錯誤識別
4390
			$result["status"]="false";
4391
 
4392
			#設置錯誤訊息
4393
			$result["error"]=$checkResult;
4394
 
4395
			#回傳結果
4396
			return $result;
4397
 
4398
			}#if end
4399
 
4400
		#函式說明:
4401
		#將固定格式的字串分開,並回傳分開的結果.
4402
		#回傳結果:
4403
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4404
		#$result["error"],錯誤訊息陣列
4405
		#$result["function"],當前執行的函數名稱.
4406
		#$result["argu"],使用的參數.
4407
		#$result["oriStr"],要分割的原始字串內容
4408
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4409
		#$result["dataCounts"],爲總共分成幾段
4410
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4411
		#必填參數:
4412
		#$conf["stringIn"],字串,要處理的字串.
4413
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];
4414
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4415
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4416
		#可省略參數:
4417
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4418
		#$conf["allowEmptyStr"]="false";
4419
		#參考資料:
4420
		#無.
4421
		#備註:
4422
		#無.
4423
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4424
		unset($conf["stringProcess::spiltString"]);
4425
 
4426
		#如果檢查有誤
4427
		if($spiltString["status"]==="false"){
4428
 
4429
			#設置錯誤識別
4430
			$result["status"]="false";
4431
 
4432
			#設置錯誤訊息
4433
			$result["error"]=$spiltString;
4434
 
4435
			#回傳結果
4436
			return $result;
4437
 
4438
			}#if end
4439
 
4440
		#確認是否為絕對路徑
4441
		#函式說明:
4442
		#取得符合特定字首與字尾的字串
4443
		#回傳結果:
4444
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4445
		#$result["function"],當前執行的函數名稱.
4446
		#$result["error"],錯誤訊息陣列.
4447
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4448
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4449
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4450
		#$result["argu"],使用的參數.
4451
		#必填參數:
4452
		#$conf["checkString"],字串,要檢查的字串.
4453
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
4454
		#可省略參數:
4455
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4456
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
4457
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4458
		#$conf["search::getMeetConditionsString"]["tailWord"]="";
4459
		#參考資料:
4460
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4461
		#備註:
4462
		#無.
4463
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4464
		unset($conf["search::getMeetConditionsString"]);
4465
 
4466
		#如果檢查有誤
4467
		if($getMeetConditionsString["status"]==="false"){
4468
 
4469
			#設置錯誤識別
4470
			$result["status"]="false";
4471
 
4472
			#設置錯誤訊息
4473
			$result["error"]=$getMeetConditionsString;
4474
 
4475
			#回傳結果
4476
			return $result;
4477
 
4478
			}#if end
4479
 
4480
		#如果是絕對路徑
4481
		if($getMeetConditionsString["founded"]==="true"){
4482
 
4483
			#初始化路徑為 "/"
4484
			$result["content"][]="/";
4485
 
4486
			}#if end
4487
 
4488
		#針對每個切割出來的路徑階層
4489
		foreach($spiltString["dataArray"] as $index => $dir){
4490
 
4491
			#如果路徑結尾含有檔案名稱
4492
			if($conf["haveFileName"]==="true"){
4493
 
4494
				#如果是最後一段
4495
				if($index===$spiltString["dataCounts"]-1){
4496
 
4497
					#忽略
4498
					continue;
4499
 
4500
					}#if end
4501
 
4502
				}#if end
4503
 
4504
			#後面加上 資料夾名稱 跟 "/"
4505
			$newPath=$dir."/";
4506
 
4507
			#如果有 content
4508
			if(isset($result["content"])){
4509
 
4510
				#如果有上個資料夾
4511
				if(isset($result["content"][count($result["content"])-1])){
4512
 
4513
					#後面加上 上個資料夾名稱 加上資料夾名稱 跟 "/"
4514
					$newPath=$result["content"][count($result["content"])-1].$dir."/";
4515
 
4516
					}#if end
4517
 
4518
				}#if end
4519
 
4520
			#並新增置結果
4521
			$result["content"][]=$newPath;
4522
 
4523
			}#foreach end
4524
 
4525
		#var_dump($result["content"]);
4526
 
4527
		#設置執行正常
4528
		$result["status"]="true";
4529
 
4530
		#回傳結果
4531
		return $result;
4532
 
4533
		}#function parsePath end
4534
 
4535
	/*
4536
	#函式說明:
4537
	#檢查路徑是否存在.
4538
	#回傳結果:
4539
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4540
	#$result["error"],錯誤訊息陣列.
4541
	#$resutl["function"],當前執行的涵式名稱.
4542
	#$result["argu"],使用的參數.
4543
	#$result["found"],路徑是否存在,"true"代表存在,"false"代表不存在.
4544
	#$result["content"],每個階層路徑的檢查結果,每個元素有檢查的路徑"path"跟是否有存在或可存取的識別"found".
4545
	#必填參數:
4546
	#$conf["path"],要檢查的路徑
4547
	$conf["path"]="";
4548
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4549
	$conf["fileArgu"]=__FILE__;
4550
	#可省略參數:
4551
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4552
	#$conf["haveFileName"]="false";
4553
	#參考資料:
4554
	#無.
4555
	#備註:
4556
	#無.
4557
	*/
4558
	public static function checkPathExist(&$conf){
4559
 
4560
		#初始化要回傳的內容
4561
		$result=array();
4562
 
4563
		#取得當前執行的函數名稱
4564
		$result["function"]=__FUNCTION__;
4565
 
4566
		#如果 $conf 不為陣列
4567
		if(gettype($conf)!="array"){
4568
 
4569
			#設置執行失敗
4570
			$result["status"]="false";
4571
 
4572
			#設置執行錯誤訊息
4573
			$result["error"][]="\$conf變數須為陣列形態";
4574
 
4575
			#如果傳入的參數為 null
4576
			if($conf==null){
4577
 
4578
				#設置執行錯誤訊息
4579
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4580
 
4581
				}#if end
4582
 
4583
			#回傳結果
4584
			return $result;
4585
 
4586
			}#if end
4587
 
4588
		#記錄使用的參數
4589
		$result["argu"]=$conf;
4590
 
4591
		#檢查參數
4592
		#函式說明:
4593
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4594
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4595
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4596
		#$result["function"],當前執行的函式名稱.
4597
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4598
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4599
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4600
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4601
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4602
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4603
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4604
		#必填寫的參數:
4605
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4606
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4607
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4608
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
4609
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4610
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
4611
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4612
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4613
		#可以省略的參數:
4614
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4615
		#$conf["canBeEmptyString"]="false";
4616
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4617
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4618
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4619
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4620
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4621
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4622
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4623
		#$conf["arrayCountEqualCheck"][]=array();
4624
		#參考資料來源:
4625
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4626
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4627
		unset($conf["variableCheck::checkArguments"]);
4628
 
4629
		#如果檢查有誤
4630
		if($checkResult["status"]=="false"){
4631
 
4632
			#設置錯誤識別
4633
			$result["status"]="false";
4634
 
4635
			#設置錯誤訊息
4636
			$result["error"]=$checkResult;
4637
 
4638
			#回傳結果
4639
			return $result;
4640
 
4641
			}#if end
4642
 
4643
		#如果檢查不通過
4644
		if($checkResult["passed"]=="false"){
4645
 
4646
			#設置錯誤識別
4647
			$result["status"]="false";
4648
 
4649
			#設置錯誤訊息
4650
			$result["error"]=$checkResult;
4651
 
4652
			#回傳結果
4653
			return $result;
4654
 
4655
			}#if end
4656
 
4657
		#函式說明:
4658
		#解析路徑的每個層級.
4659
		#回傳結果:
4660
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4661
		#$result["error"],錯誤訊息陣列.
4662
		#$resutl["function"],當前執行的涵式名稱.
4663
		#$result["argu"],使用的參數.
4664
		#$result["content"],解析出來的路徑階層.
4665
		#必填參數:
4666
		#$conf["path"],要檢查的路徑
4667
		$conf["fileAccess::parsePath"]["path"]=$conf["path"];
4668
		#可省略參數:
4669
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4670
		$conf["fileAccess::parsePath"]["haveFileName"]=$conf["haveFileName"];
4671
		#參考資料:
4672
		#無.
4673
		#備註:
4674
		#無.
4675
		$parsePath=fileAccess::parsePath($conf["fileAccess::parsePath"]);
4676
		unset($conf["fileAccess::parsePath"]);
4677
 
4678
		#如果檢查有誤
4679
		if($parsePath["status"]==="false"){
4680
 
4681
			#設置錯誤識別
4682
			$result["status"]="false";
4683
 
4684
			#設置錯誤訊息
4685
			$result["error"]=$parsePath;
4686
 
4687
			#回傳結果
4688
			return $result;
4689
 
4690
			}#if end
4691
 
4692
		#函式說明:
4693
		#檢查多個檔案與資料夾是否存在.
4694
		#回傳的結果:
4695
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4696
		#$result["error"],錯誤訊息陣列.
4697
		#$resutl["function"],當前執行的涵式名稱.
4698
		#$result["argu"],使用的參數.
4699
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
4700
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
4701
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
4702
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
4703
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
4704
		#必填參數:
4705
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
4706
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$parsePath["content"];
4707
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4708
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
4709
		#可省略參數:
4710
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
4711
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="true";
4712
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
4713
		$conf["fileAccess::checkMultiFileExist"]["userDir"]="false";
4714
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
4715
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
4716
		#參考資料:
4717
		#http://php.net/manual/en/function.file-exists.php
4718
		#http://php.net/manual/en/control-structures.foreach.php
4719
		#備註:
4720
		#函數file_exists檢查的路徑為檔案系統的路徑
4721
		#$result["varName"][$i]結果未實作
4722
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
4723
		unset($conf["fileAccess::checkMultiFileExist"]);
4724
 
4725
		#如果執行異常
4726
		if($checkMultiFileExist["status"]==="false"){
4727
 
4728
			#設置錯誤識別
4729
			$result["status"]="false";
4730
 
4731
			#設置錯誤訊息
4732
			$result["error"]=$checkMultiFileExist;
4733
 
4734
			#回傳結果
4735
			return $result;
4736
 
4737
			}#if end
4738
 
4739
		#如果有路徑無法存取
4740
		if($checkMultiFileExist["allExist"]==="false"){
4741
 
4742
			#設置執行正常識別
4743
			$result["status"]="true";
4744
 
4745
			#設置路徑找不到
4746
			$result["found"]="false";
4747
 
4748
			#針對每個路徑的搜尋結果
4749
			foreach($checkMultiFileExist["varExist"] as $index => $found){
4750
 
4751
				#設置路徑尋找結果
4752
				$result["content"][]=array("found"=>$found,"path"=>$checkMultiFileExist["varNameFullPath"][$index]);
4753
 
4754
				}#foreach end
4755
 
4756
			#回傳結果
4757
			return $result;
4758
 
4759
			}#if end
4760
 
4761
		#設置路徑有找到
4762
		$result["found"]="true";
4763
 
4764
		#設置執行正常識別
4765
		$result["status"]="true";
4766
 
4767
		#回傳結果
4768
		return $result;
4769
 
4770
		}#function checkPathExist end
4771
 
4772
	/*	
4773
	#函式說明:
4774
	#demo建立pdf檔
4775
	#必填參數:
4776
	#無
4777
	#可省略參數:
4778
	#無
4779
	#參考資料:
4780
	#tcpdf=>http://www.tcpdf.org/examples.php
4781
	#備註:
4782
	#開發中,需要安裝 php-tcpdf 套件.
4783
	*/
4784
	public static function demoCreateTcPdfFile(){
4785
 
4786
		#避免 TCPDF ERROR: Some data has already been output, can't send PDF file 錯誤產生
4787
		ob_end_clean();
4788
 
4789
		#create new PDF document
4790
		$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
4791
 
4792
		#set document information
4793
		$pdf->SetCreator(PDF_CREATOR);
4794
		$pdf->SetAuthor('qbpwc');
4795
		$pdf->SetTitle('pdf sample title');
4796
		$pdf->SetSubject('pdf sample subject');
4797
		$pdf->SetKeywords('pdf, sample, tcpdf, qbpwc');
4798
 
4799
		#set default header data
4800
		$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
4801
		$pdf->setFooterData(array(0,64,0), array(0,64,128));
4802
 
4803
		#set header and footer fonts
4804
		$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
4805
		$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
4806
 
4807
		#set default monospaced font
4808
		$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
4809
 
4810
		#set margins
4811
		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
4812
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
4813
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
4814
 
4815
		#set auto page breaks
4816
		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
4817
 
4818
		#set image scale factor
4819
		$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
4820
 
4821
		#set some language-dependent strings (optional)
4822
		if (@file_exists(dirname(__FILE__).'/lang/eng.php')){
4823
 
4824
			require_once(dirname(__FILE__).'/lang/eng.php');
4825
 
4826
			$pdf->setLanguageArray($l);
4827
 
4828
			}#if end
4829
 
4830
		#set default font subsetting mode
4831
		$pdf->setFontSubsetting(true);
4832
 
4833
		#Set font
4834
		#dejavusans is a UTF-8 Unicode font, if you only need to
4835
		#print standard ASCII chars, you can use core fonts like
4836
		#helvetica or times to reduce file size.
4837
		$pdf->SetFont('dejavusans', '', 14, '', true);
4838
 
4839
		#Add a page
4840
		#This method has several options, check the source code documentation for more information.
4841
		$pdf->AddPage();
4842
 
4843
		#set text shadow effect
4844
		$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));
4845
 
4846
		#Set some content to print
4847
		$html="<h5>Hello World!</h5>";
4848
 
4849
		// Print text using writeHTMLCell()
4850
		$pdf->writeHTMLCell(0,0,'','',$html,0,1,0,true,'',true);
4851
 
4852
		// Close and output PDF document
4853
		// This method has several options, check the source code documentation for more information.
4854
		$pdf->Output('fileAccessT/example_001.pdf','I');
4855
 
4856
		}#function demoCreateTcPdfFile end
4857
 
4858
	/*
4859
	#函式說明:
4860
	#取得檔案路徑字串的路徑與檔案的名稱與檔案副檔名
4861
	#回傳的結果:
4862
	#$result["status"],執行是否正常,"true"正常,"false"代表不正常.
4863
	#$result["error"],錯誤訊息.
4864
	#$result["function"],當前執行的函式名稱.
4865
	#$result["filePath"],路徑字串.
4866
	#$result["fileName"],檔案名稱字串.
4867
	#$result["fileExtention"],檔案的副檔名.
4868
	#$result["fullFileName"],含副檔名的檔案名稱.
4869
	#$result["fullFilePathAndName"],完整的檔案路徑(含副檔名).
4870
	#必填參數:
4871
	#$conf["fileAddressAndName"],字串,檔案名稱與其路徑.
4872
	$conf["fileAddressAndName"]="";
4873
	#可省略參數:
4874
	#無.
4875
	#參考資料:
4876
	#無.
4877
	#備註:
4878
	#無.
4879
	*/
4880
	public static function getFileAddressAndNameAndFileExtention(&$conf){
4881
 
4882
		#初始化要回傳的參數
4883
		$result=array();
4884
 
4885
		#取得當前執行函數名稱
4886
		$result["function"]=__FUNCTION__;
4887
 
4888
		#如果 $conf 不為陣列
4889
		if(gettype($conf)!="array"){
4890
 
4891
			#設置執行失敗
4892
			$result["status"]="false";
4893
 
4894
			#設置執行錯誤訊息
4895
			$result["error"][]="\$conf變數須為陣列形態";
4896
 
4897
			#如果傳入的參數為 null
4898
			if($conf==null){
4899
 
4900
				#設置執行錯誤訊息
4901
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4902
 
4903
				}#if end
4904
 
4905
			#回傳結果
4906
			return $result;
4907
 
4908
			}#if end
4909
 
4910
		#檢查參數
4911
		#函式說明:
4912
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4913
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4914
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4915
		#$result["function"],當前執行的函式名稱.
4916
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4917
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4918
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4919
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4920
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4921
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4922
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4923
		#必填寫的參數:
4924
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4925
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4926
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4927
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileAddressAndName");
4928
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
4929
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4930
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4931
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4932
		#可以省略的參數:
4933
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4934
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4935
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4936
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("outputAddress","noDownload");
4937
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4938
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4939
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4940
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".bin/".$conf["cppAddress"].".bin","true");
4941
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4942
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
4943
		#參考資料來源:
4944
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4945
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4946
		unset($conf["variableCheck::checkArguments"]);
4947
 
4948
		#如果 $checkArguments["status"] 等於 "false"
4949
		if($checkArguments["status"]=="false"){
4950
 
4951
			#設置 $result["status"] 為 "false"
4952
			$result["status"]="false";
4953
 
4954
			#設置 $result["error"]
4955
			$result["error"]=$checkArguments;
4956
 
4957
			#回傳結果
4958
			return $result;
4959
 
4960
			}#if end
4961
 
4962
		#如果 $checkArguments["passed"] 等於 "false"
4963
		if($checkArguments["passed"]=="false"){
4964
 
4965
			#設置 $result["status"] 為 "false"
4966
			$result["status"]="false";
4967
 
4968
			#設置 $result["error"]
4969
			$result["error"]=$checkArguments;
4970
 
4971
			#回傳結果
4972
			return $result;
4973
 
4974
			}#if end
4975
 
4976
		#確認路徑是否為絕對路徑
4977
		#函式說明:
4978
		#取得符合特定字首與字尾的字串
4979
		#回傳結果:
4980
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4981
		#$result["function"],當前執行的函數名稱.
4982
		#$result["error"],錯誤訊息陣列.
4983
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4984
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4985
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4986
		#$result["argu"],使用的參數.
4987
		#必填參數:
4988
		#$conf["checkString"],字串,要檢查的字串.
4989
		$conf["fileAccess::getMeetConditionsString"]["checkString"]=$conf["fileAddressAndName"];
4990
		#可省略參數:
4991
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4992
		$conf["fileAccess::getMeetConditionsString"]["frontWord"]="/";
4993
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4994
		#$conf["tailWord"]="";
4995
		#參考資料:
4996
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4997
		#備註:
4998
		#無.
4999
		$getMeetConditionsString=search::getMeetConditionsString($conf["fileAccess::getMeetConditionsString"]);
5000
		unset($conf["fileAccess::getMeetConditionsString"]);
5001
 
5002
		#如果執行出錯
5003
		if($getMeetConditionsString["status"]==="false"){
5004
 
5005
			#設置錯誤識別
5006
			$result["status"]="false";
5007
 
5008
			#設置錯誤訊息
5009
			$result["error"]=$getMeetConditionsString;
5010
 
5011
			#回傳結果
5012
			return $result;
5013
 
5014
			}#if end
5015
 
5016
		#預設參數 $conf["fileAddressAndName"] 不為 "/" 開始
5017
		$fileAddressAndNameStarFromRoot="true";
5018
 
5019
		#如果是 "/" 開頭
5020
		if($getMeetConditionsString["founded"]==="false"){
5021
 
5022
			#設置參數 $conf["fileAddressAndName"] 為 "/" 開始
5023
			$fileAddressAndNameStarFromRoot="true";
5024
 
5025
			}#if end
5026
 
5027
		#檢查是否有路徑資訊 
5028
		#函式說明:
5029
		#將固定格式的字串分開,並回傳分開的結果。
5030
		#回傳的參數:
5031
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5032
		#$result["error"],錯誤訊息陣列
5033
		#$result["oriStr"],要分割的原始字串內容
5034
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5035
		#$result["dataCounts"],爲總共分成幾段
5036
		#必填參數:
5037
		$conf["stringProcess"]["spiltString"]["stringIn"]=$conf["fileAddressAndName"];#要處理的字串。
5038
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
5039
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5040
		unset($conf["stringProcess"]["spiltString"]);
5041
 
5042
		#如果 $spiledResult["status"] 等於 "false"
5043
		if($spiledResult["status"]==="false"){
5044
 
5045
			#設置錯誤識別
5046
			$result["status"]="false";
5047
 
5048
			#設置錯誤訊息
5049
			$result["error"]=$spiledResult;
5050
 
5051
			#回傳結果
5052
			return $result;
5053
 
5054
			}#if end
5055
 
5056
		#如果 $spiledResult["dataCounts"] 大於 1
5057
		if($spiledResult["dataCounts"]>1){
5058
 
5059
			#代表有路徑字串
5060
 
5061
			#初始化路徑字串暫存變數
5062
			$tempPathStr="";
5063
 
5064
			#如果是絕對路徑
5065
			if($fileAddressAndNameStarFromRoot==="true"){
5066
 
5067
				#加上根目錄
5068
				$tempPathStr=$tempPathStr."/";
5069
 
5070
				}#if end
5071
 
5072
			#取得路徑字串
5073
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5074
 
5075
				#串連片段路徑字串
5076
				$tempPathStr=$tempPathStr.$spiledResult["dataArray"][$i]."/";
5077
 
5078
				}#for end
5079
 
5080
			#取得檔案的路徑
5081
			$result["filePath"]=$tempPathStr;
5082
 
5083
			}#if end
5084
 
5085
		#反之 $spiledResult["dataCounts"] 等於 1
5086
		else{
5087
 
5088
			#檔案的路徑設為""
5089
			$result["filePath"]="";
5090
 
5091
			}#else end
5092
 
5093
		#取得檔案名稱(含副檔名)
5094
		$result["fullFileName"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5095
 
5096
		#取得副檔名
5097
		#函式說明:
5098
		#將固定格式的字串分開,並回傳分開的結果。
5099
		#回傳的參數:
5100
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5101
		#$result["error"],錯誤訊息陣列
5102
		#$result["oriStr"],要分割的原始字串內容
5103
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5104
		#$result["dataCounts"],爲總共分成幾段
5105
		#必填參數:
5106
		$conf["stringProcess"]["spiltString"]["stringIn"]=$result["fullFileName"];#要處理的字串。
5107
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
5108
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5109
		unset($conf["stringProcess"]["spiltString"]);
5110
 
5111
		#如果 $spiledResult["status"] 等於 "false"
5112
		if($spiledResult["status"]=="false"){
5113
 
5114
			#設置錯誤識別
5115
			$result["status"]="false";
5116
 
5117
			#設置錯誤訊息
5118
			$result["error"]=$spiledResult;
5119
 
5120
			#回傳結果
5121
			return $result;
5122
 
5123
			}#if end
5124
 
5125
		#如果 $spiledResult["dataCounts"] 大於 1
5126
		if($spiledResult["dataCounts"]>1){
5127
 
5128
			#代表有副檔名
5129
 
5130
			#初始化檔名字串暫存變數
5131
			$tempFileNameStr="";
5132
 
5133
			#取得路徑字串
5134
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5135
 
5136
				#如果是最後一個小黑點前面的字串片段
5137
				if($i==$spiledResult["dataCounts"]-2){
5138
 
5139
					#串連片段路徑字串
5140
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i];
5141
 
5142
					}#if end
5143
 
5144
				#反之不是最後一個小黑點前面的字串片段
5145
				else{
5146
 
5147
					#串連片段路徑字串(含小黑點)
5148
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i].".";
5149
 
5150
					}#else end
5151
 
5152
				}#for end
5153
 
5154
			#取得檔名
5155
			$result["fileName"]=$tempFileNameStr;
5156
 
5157
			#取得副檔名
5158
			$result["fileExtention"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5159
 
5160
			}#if end
5161
 
5162
		#反之 $spiledResult["dataCounts"] 等於 1
5163
		else{
5164
 
5165
			#檔案的副檔名設為""
5166
			$result["fileExtention"]="";
5167
 
5168
			#取得檔案的名稱
5169
			$result["fileName"]=$spiledResult["dataArray"][0];
5170
 
5171
			}#else end
5172
 
5173
		#如果 $result["fileExtention"] 不等於 ""
5174
		if($result["fileExtention"]!=""){
5175
 
5176
			#將副檔名用小黑點跟檔案名稱連在一塊
5177
			$result["fullFileName"]=$result["fileName"].".".$result["fileExtention"];
5178
 
5179
			}#if end
5180
 
5181
		#反之代表沒有副檔名
5182
		else{
5183
 
5184
			#取得含副檔名的檔案名稱
5185
			$result["fullFileName"]=$result["fileName"].$result["fileExtention"];
5186
 
5187
			}#else end
5188
 
5189
		#完整的檔案路徑(含副檔名).
5190
		$result["fullFilePathAndName"]=$result["filePath"].$result["fullFileName"];
5191
 
5192
		#設置執行正常的識別
5193
		$result["status"]="true";
5194
 
5195
		#回傳結果
5196
		return $result;
5197
 
5198
		}#funciton getFileAddressAndNameAndFileExtention end
5199
 
5200
	/*
5201
	#函式說明:
5202
	#將資料夾或檔案打包成tar檔案
5203
	#回傳結果:
5204
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5205
	#$result["function"],當前執行的函數名稱
5206
	#$result["error"],錯誤訊息.
5207
	#$result["content"],檔案輸出後的位置與名稱.
5208
	#必填參數:
5209
	#$conf["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5210
	$conf["packetTarget"]=array("");
5211
	#$conf["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5212
	$conf["createdTarFile"]="";
5213
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5214
	$conf["fileArgu"]=__FILE__;
5215
	#可省略參數:
5216
	#無.
5217
	#參考資料:
5218
	#無.
5219
	#備註:
5220
	#無.
5221
	*/
5222
	public static function makeTarFile(&$conf){
5223
 
5224
		#初始化要回傳的內容
5225
		$result=array();
5226
 
5227
		#記錄當前執行的函數名稱
5228
		$result["function"]=__FUNCTION__;
5229
 
5230
		#如果 $conf 不為陣列
5231
		if(gettype($conf)!="array"){
5232
 
5233
			#設置執行失敗
5234
			$result["status"]="false";
5235
 
5236
			#設置執行錯誤訊息
5237
			$result["error"][]="\$conf變數須為陣列形態";
5238
 
5239
			#如果傳入的參數為 null
5240
			if($conf==null){
5241
 
5242
				#設置執行錯誤訊息
5243
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5244
 
5245
				}#if end
5246
 
5247
			#回傳結果
5248
			return $result;
5249
 
5250
			}#if end
5251
 
5252
		#檢查參數
5253
		#函式說明:
5254
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5255
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5256
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5257
		#$result["function"],當前執行的函式名稱.
5258
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5259
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5260
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5261
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5262
		#必填寫的參數:
5263
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5264
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5265
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5266
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","packetTarget","createdTarFile");
5267
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5268
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5269
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5270
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5271
		#可以省略的參數:
5272
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5273
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5274
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5275
		#$conf["skipableVariableName"]=array();
5276
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5277
		#$conf["skipableVariableType"]=array();
5278
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5279
		#$conf["skipableVarDefaultValue"]=array("");
5280
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5281
		#$conf["arrayCountEqualCheck"][]=array();
5282
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5283
		unset($conf["variableCheck::checkArguments"]);
5284
 
5285
		#若檢查失敗
5286
		if($checkResult["status"]=="false"){
5287
 
5288
			#設置執行失敗
5289
			$result["status"]="false";
5290
 
5291
			#設置執行錯誤訊息
5292
			$result["error"]=$checkResult;
5293
 
5294
			#回傳結果
5295
			return $result;
5296
 
5297
			}#if end
5298
 
5299
		#若檢查不通過
5300
		if($checkResult["passed"]=="false"){
5301
 
5302
			#設置執行失敗
5303
			$result["status"]="false";
5304
 
5305
			#設置執行錯誤訊息
5306
			$result["error"]=$checkResult;
5307
 
5308
			#回傳結果
5309
			return $result;
5310
 
5311
			}#if end
5312
 
5313
		#初始化打包要用的tar指令參數
5314
		$paramsArray=array("-cvf",$conf["createdTarFile"].".tar");
5315
 
5316
		#檢查要打包的檔案是否存在
5317
		#函式說明:
5318
		#檢查多個檔案與資料夾是否存在.
5319
		#回傳的結果:
5320
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5321
		#$result["error"],錯誤訊息陣列.
5322
		#$resutl["function"],當前執行的涵式名稱.
5323
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5324
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5325
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5326
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5327
		#必填參數:
5328
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5329
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$conf["packetTarget"];
5330
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5331
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5332
		#可省略參數
5333
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5334
		#$conf["disableWebSearch"]="false";
5335
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5336
		#$conf["userDir"]="true";
5337
		#參考資料來源:
5338
		#http://php.net/manual/en/function.file-exists.php
5339
		#http://php.net/manual/en/control-structures.foreach.php
5340
		#備註:
5341
		#函數file_exists檢查的路徑為檔案系統的路徑
5342
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5343
		unset($conf["fileAccess::checkMultiFileExist"]);
5344
 
5345
		#如果檢查要打包的檔案失敗
5346
		if($checkMultiFileExist["status"]=="false"){
5347
 
5348
			#設置執行失敗
5349
			$result["status"]="false";
5350
 
5351
			#設置執行錯誤訊息
5352
			$result["error"]=$checkMultiFileExist;
5353
 
5354
			#回傳結果
5355
			return $result;
5356
 
5357
			}#if end
5358
 
5359
		#如果要打包的檔案有缺
5360
		if($checkMultiFileExist["allExist"]=="false"){
5361
 
5362
			#設置執行失敗
5363
			$result["status"]="false";
5364
 
5365
			#設置執行錯誤訊息
5366
			$result["error"]=$checkMultiFileExist;
5367
 
5368
			#回傳結果
5369
			return $result;
5370
 
5371
			}#if end
5372
 
5373
		#有幾個要打包的目標就執行幾次
5374
		for($i=0;$i<count($conf["packetTarget"]);$i++){
5375
 
5376
			#串接上要打包的檔案或資料夾
5377
			$paramsArray[]=$conf["packetTarget"][$i];
5378
 
5379
			}#for end
5380
 
5381
		#函式說明:
5382
		#呼叫shell執行系統命令,並取得回傳的內容.
5383
		#回傳結果:
5384
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5385
		#$result["error"],錯誤訊息陣列.
5386
		#$result["function"],當前執行的函數名稱.
5387
		#$result["argu"],使用的參數.
5388
		#$result["cmd"],執行的指令內容.
5389
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
5390
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
5391
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
5392
		#$result["running"],是否還在執行.
5393
		#$result["pid"],pid.
5394
		#$result["statusCode"],執行結束後的代碼.
5395
		#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
5396
		#必填參數:
5397
		#$conf["command"],字串,要執行的指令.
5398
		$conf["external::callShell"]["command"]="tar";
5399
		#$conf["fileArgu"],字串,變數__FILE__的內容.
5400
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5401
		#可省略參數:
5402
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5403
		$conf["external::callShell"]["argu"]=$paramsArray;
5404
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
5405
		#$conf["arguIsAddr"]=array();
5406
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
5407
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
5408
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
5409
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5410
		#$conf["enablePrintDescription"]="true";
5411
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
5412
		#$conf["printDescription"]="";
5413
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
5414
		$conf["external::callShell"]["escapeshellarg"]="true";
5415
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
5416
		#$conf["thereIsShellVar"]=array();
5417
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
5418
		#$conf["username"]="";
5419
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
5420
		#$conf["password"]="";
5421
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
5422
		#$conf["useScript"]="";
5423
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
5424
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
5425
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
5426
		#$conf["inBackGround"]="";
5427
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
5428
		#$conf["getErr"]="false";
5429
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
5430
		#$conf["doNotRun"]="false";
5431
		#參考資料:
5432
		#exec=>http://php.net/manual/en/function.exec.php
5433
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
5434
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
5435
		#備註:
5436
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
5437
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
5438
		$conf["external::callShell"]=external::callShell($conf["external::callShell"]);
5439
		unset($conf["external::callShell"]);
5440
 
5441
		#如果執行shell失敗
5442
		if($callShell["status"]=="false"){
5443
 
5444
			#設置執行失敗
5445
			$result["status"]="false";
5446
 
5447
			#設置執行錯誤訊息
5448
			$result["error"]=$callShell;
5449
 
5450
			#回傳結果
5451
			return $result;
5452
 
5453
			}#if end
5454
 
5455
		#打包好的檔案位置與名稱
5456
		$result["content"]=$conf["createdTarFile"].".tar";
5457
 
5458
		#執行到這邊代表執行正常
5459
		$result["status"]="true";
5460
 
5461
		#回傳結果
5462
		return $result;
5463
 
5464
		}#function makeTarFile end
5465
 
5466
	/*
5467
	#函式說明:
5468
	#將一個檔案壓縮成xz檔案
5469
	#回傳結果:
5470
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5471
	#$result["function"],當前執行的函數名稱
5472
	#$result["error"],錯誤訊息.
5473
	#$result["content"],檔案輸出後的位置與名稱.
5474
	#必填參數:
5475
	#$conf["compressTarget"],字串,要打包的每個資料夾與檔案位置
5476
	$conf["compressTarget"]="";
5477
	#$conf["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5478
	$conf["createdXzFile"]="";
5479
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5480
	$conf["fileArgu"]=__FILE__;
5481
	#可省略參數:
5482
	#無.
5483
	#參考資料:
5484
	#無.
5485
	#備註:
5486
	#無.
5487
	*/
5488
	public static function makeXzFile(&$conf){
5489
 
5490
		#初始化要回傳的內容
5491
		$result=array();
5492
 
5493
		#記錄當前執行的函數名稱
5494
		$result["function"]=__FUNCTION__;
5495
 
5496
		#如果 $conf 不為陣列
5497
		if(gettype($conf)!="array"){
5498
 
5499
			#設置執行失敗
5500
			$result["status"]="false";
5501
 
5502
			#設置執行錯誤訊息
5503
			$result["error"][]="\$conf變數須為陣列形態";
5504
 
5505
			#如果傳入的參數為 null
5506
			if($conf==null){
5507
 
5508
				#設置執行錯誤訊息
5509
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5510
 
5511
				}#if end
5512
 
5513
			#回傳結果
5514
			return $result;
5515
 
5516
			}#if end
5517
 
5518
		#檢查參數
5519
		#函式說明:
5520
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5521
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5522
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5523
		#$result["function"],當前執行的函式名稱.
5524
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5525
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5526
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5527
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5528
		#必填寫的參數:
5529
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5530
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5531
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5532
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdXzFile");
5533
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5534
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
5535
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5536
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5537
		#可以省略的參數:
5538
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5539
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5540
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5541
		#$conf["skipableVariableName"]=array();
5542
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5543
		#$conf["skipableVariableType"]=array();
5544
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5545
		#$conf["skipableVarDefaultValue"]=array("");
5546
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5547
		#$conf["arrayCountEqualCheck"][]=array();
5548
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5549
		unset($conf["variableCheck::checkArguments"]);
5550
 
5551
		#若檢查失敗
5552
		if($checkResult["status"]=="false"){
5553
 
5554
			#設置執行失敗
5555
			$result["status"]="false";
5556
 
5557
			#設置執行錯誤訊息
5558
			$result["error"]=$checkResult;
5559
 
5560
			#回傳結果
5561
			return $result;
5562
 
5563
			}#if end
5564
 
5565
		#若檢查不通過
5566
		if($checkResult["passed"]=="false"){
5567
 
5568
			#設置執行失敗
5569
			$result["status"]="false";
5570
 
5571
			#設置執行錯誤訊息
5572
			$result["error"]=$checkResult;
5573
 
5574
			#回傳結果
5575
			return $result;
5576
 
5577
			}#if end
5578
 
5579
		#檢查要用xz壓縮的檔案是否存在
5580
		#函式說明:
5581
		#檢查多個檔案與資料夾是否存在.
5582
		#回傳的結果:
5583
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5584
		#$result["error"],錯誤訊息陣列.
5585
		#$resutl["function"],當前執行的涵式名稱.
5586
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5587
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5588
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5589
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5590
		#必填參數:
5591
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5592
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["compressTarget"]);
5593
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5594
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5595
		#可省略參數
5596
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5597
		#$conf["disableWebSearch"]="false";
5598
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5599
		#$conf["userDir"]="true";
5600
		#參考資料來源:
5601
		#http://php.net/manual/en/function.file-exists.php
5602
		#http://php.net/manual/en/control-structures.foreach.php
5603
		#備註:
5604
		#函數file_exists檢查的路徑為檔案系統的路徑
5605
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5606
		unset($conf["fileAccess::checkMultiFileExist"]);
5607
 
5608
		#如果檢查要用xz壓縮的檔案失敗
5609
		if($checkMultiFileExist["status"]=="false"){
5610
 
5611
			#設置執行失敗
5612
			$result["status"]="false";
5613
 
5614
			#設置執行錯誤訊息
5615
			$result["error"]=$checkMultiFileExist;
5616
 
5617
			#回傳結果
5618
			return $result;
5619
 
5620
			}#if end
5621
 
5622
		#如果要用xz壓縮的檔案有缺
5623
		if($checkMultiFileExist["allExist"]=="false"){
5624
 
5625
			#設置執行失敗
5626
			$result["status"]="false";
5627
 
5628
			#設置執行錯誤訊息
5629
			$result["error"]=$checkMultiFileExist;
5630
 
5631
			#回傳結果
5632
			return $result;
5633
 
5634
			}#if end
5635
 
5636
		#壓縮要用的xz語法
5637
		#函式說明:
5638
		#呼叫shell執行系統命令,並取得回傳的內容.
5639
		#回傳的結果:
5640
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5641
		#$result["error"],錯誤訊息陣列
5642
		#$result["output"],爲執行完二元碼後的輸出陣列
5643
		#必填的參數
5644
		$conf["external::callShell"]["command"]="xz";#要執行的指令與參數
5645
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5646
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5647
		#可省略參數:
5648
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5649
		$conf["external::callShell"]["argu"]=array("-v","-v","-z","-c",$conf["compressTarget"],">",$conf["createdXzFile"].".xz ");
5650
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5651
		#$conf["enablePrintDescription"]="true";
5652
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
5653
		#$conf["printDescription"]="";
5654
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
5655
		$conf["external::callShell"]["escapeshellarg"]="true";
5656
		#參考資料:
5657
		#http://php.net/manual/en/function.exec.php
5658
		$callShell=external::callShell($conf["external::callShell"]);
5659
		unset($conf["external::callShell"]);
5660
 
5661
		#如果執行shell失敗
5662
		if($callShell["status"]=="false"){
5663
 
5664
			#設置執行失敗
5665
			$result["status"]="false";
5666
 
5667
			#設置執行錯誤訊息
5668
			$result["error"]=$callShell;
5669
 
5670
			#回傳結果
5671
			return $result;
5672
 
5673
			}#if end
5674
 
5675
		#壓縮好的檔案位置與名稱
5676
		$result["content"]=$conf["createdXzFile"].".xz";
5677
 
5678
		#執行到這邊代表執行正常
5679
		$result["status"]="status";
5680
 
5681
		#回傳結果
5682
		return $result;
5683
 
5684
		}#function makeXzFile end
5685
 
5686
	/*
5687
	#函式說明:
5688
	#將資料夾或檔案打包壓縮成tar.xz檔案
5689
	#回傳結果:
5690
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5691
	#$result["function"],當前執行的函數名稱
5692
	#$result["error"],錯誤訊息.
5693
	#$result["content"],檔案輸出後的位置與名稱.
5694
	#必填參數:
5695
	#$conf["compressTarget"],陣列,要打包壓縮的每個資料夾與檔案位置
5696
	$conf["compressTarget"]=array();
5697
	#$conf["createdTarXzFile"],字串,打包壓縮好的檔案要放在哪裡,副檔名.tar.xz會自動加上.
5698
	$conf["createdTarXzFile"]="";
5699
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5700
	$conf["fileArgu"]=__FILE__;
5701
	#可省略參數:
5702
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
5703
	#$conf["commentsArray"]=array("");
5704
	#$conf["includeDotStart"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「.」開頭的檔案目錄,預設為"false",不包含,"true"為要包含.
5705
	#$conf["includeDotStart"]="false";
5706
	#$conf["includeWaveEnd"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「~」結尾的檔案.預設為"false",不包含,"true"為要包含.
5707
	#$conf["includeWaveEnd"]="false";
5708
	#參考資料:
5709
	#無.
5710
	#備註:
5711
	#建議加上 --exclude-backups, --exclude-caches-all 	
5712
	*/
5713
	public static function makeTarXzFile(&$conf){
5714
 
5715
		#初始化要回傳的內容
5716
		$result=array();
5717
 
5718
		#記錄當前執行的函數名稱
5719
		$result["function"]=__FUNCTION__;
5720
 
5721
		#如果 $conf 不為陣列
5722
		if(gettype($conf)!="array"){
5723
 
5724
			#設置執行失敗
5725
			$result["status"]="false";
5726
 
5727
			#設置執行錯誤訊息
5728
			$result["error"][]="\$conf變數須為陣列形態";
5729
 
5730
			#如果傳入的參數為 null
5731
			if($conf==null){
5732
 
5733
				#設置執行錯誤訊息
5734
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5735
 
5736
				}#if end
5737
 
5738
			#回傳結果
5739
			return $result;
5740
 
5741
			}#if end
5742
 
5743
		#檢查參數
5744
		#函式說明:
5745
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5746
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5747
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5748
		#$result["function"],當前執行的函式名稱.
5749
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5750
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5751
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5752
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5753
		#必填寫的參數:
5754
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5755
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5756
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5757
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdTarXzFile");
5758
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5759
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5760
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5761
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5762
		#可以省略的參數:
5763
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5764
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5765
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5766
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","includeDotStart","includeWaveEnd");
5767
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5768
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
5769
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5770
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
5771
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5772
		#$conf["arrayCountEqualCheck"][]=array();
5773
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5774
		unset($conf["variableCheck::checkArguments"]);
5775
 
5776
		#若檢查失敗
5777
		if($checkResult["status"]=="false"){
5778
 
5779
			#設置執行失敗
5780
			$result["status"]="false";
5781
 
5782
			#設置執行錯誤訊息
5783
			$result["error"]=$checkResult;
5784
 
5785
			#回傳結果
5786
			return $result;
5787
 
5788
			}#if end
5789
 
5790
		#若檢查不通過
5791
		if($checkResult["passed"]=="false"){
5792
 
5793
			#設置執行失敗
5794
			$result["status"]="false";
5795
 
5796
			#設置執行錯誤訊息
5797
			$result["error"]=$checkResult;
5798
 
5799
			#回傳結果
5800
			return $result;
5801
 
5802
			}#if end
5803
 
5804
		#如果 $conf["commentsArray"] 有設定
5805
		if(isset($conf["commentsArray"])){
5806
 
5807
			#印出提示文字
5808
			#函式說明:
5809
			#印出多行文字,結尾自動換行.
5810
			#回傳的結果:
5811
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
5812
			#$result["function"],當前執行的函數名稱.
5813
			#$result["error"],錯誤訊息陣列.
5814
			#必填參數:
5815
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
5816
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
5817
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
5818
			unset($conf["cmd::echoMultiLine"]);
5819
 
5820
			#如果印出提示文字失敗
5821
			if($echoMultiLine["status"]=="false"){
5822
 
5823
				#設置執行失敗
5824
				$result["status"]="false";
5825
 
5826
				#設置執行錯誤訊息
5827
				$result["error"]=$echoMultiLine;
5828
 
5829
				#回傳結果
5830
				return $result;
5831
 
5832
				}#if end
5833
 
5834
			}#if end	
5835
 
5836
		#解析要處理的檔案路徑
5837
		#函式說明:
5838
		#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
5839
		#回傳結果:
5840
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5841
		#$result["error"],錯誤訊息陣列.
5842
		#$result["function"],函數名稱. 
5843
		#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
5844
		#$result["pathCount"],整數,有幾個路徑.
5845
		#必填參數:
5846
		#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
5847
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["path"]=$conf["compressTarget"];
5848
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5849
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
5850
		#可省略參數:
5851
		#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
5852
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["includeDotStart"]==="true"?"false":"true";
5853
		#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
5854
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["includeWaveEnd"]==="true"?"false":"true";
5855
		$realPathArray=fileAccess::resolveMultiPostionStringWhichContainStarSymbol($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5856
		unset($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5857
 
5858
		#如果解析路徑失敗
5859
		if($realPathArray["status"]=="false"){
5860
 
5861
			#設置執行失敗
5862
			$result["status"]="false";
5863
 
5864
			#設置執行錯誤訊息
5865
			$result["error"]=$realPathArray;
5866
 
5867
			#回傳結果
5868
			return $result;
5869
 
5870
			}#if end
5871
 
5872
		#取得解析好的檔案路徑陣列
5873
		$conf["compressTarget"]=$realPathArray["content"];	
5874
 
5875
		#將路徑轉換成相對路徑
5876
		#函式說明:
5877
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
5878
		#回傳結果:
5879
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5880
		#$result["error"],錯誤訊息陣列.
5881
		#$result["function"],函數名稱. 
5882
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
5883
		#必填參數:
5884
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
5885
		$conf["fileAccess::getRelativePath"]["path"]=$conf["compressTarget"];
5886
		#$conf["fileArgu"],字串,當前路徑.
5887
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
5888
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
5889
		unset($conf["fileAccess::getRelativePath"]);
5890
 
5891
		#如果轉換失敗
5892
		if($getRelativePath["status"]=="false"){
5893
 
5894
			#設置執行失敗
5895
			$result["status"]="false";
5896
 
5897
			#設置執行錯誤訊息
5898
			$result["error"]=$getRelativePat;
5899
 
5900
			#回傳結果
5901
			return $result;
5902
 
5903
			}#if end	
5904
 
5905
		#打包成tar檔
5906
		#函式說明:
5907
		#將資料夾或檔案打包成tar檔案
5908
		#回傳的結果:
5909
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5910
		#$result["function"],當前執行的函數名稱
5911
		#$result["error"],錯誤訊息.
5912
		#$result["content"],檔案輸出後的位置與名稱.
5913
		#必填參數:
5914
		#$conf["fileAccess::makeTarFile"]["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5915
		$conf["fileAccess::makeTarFile"]["packetTarget"]=$getRelativePath["content"];
5916
		#$conf["fileAccess::makeTarFile"]["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5917
		$conf["fileAccess::makeTarFile"]["createdTarFile"]=$conf["createdTarXzFile"];
5918
		#$conf["fileAccess::makeTarFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5919
		$conf["fileAccess::makeTarFile"]["fileArgu"]=$conf["fileArgu"];
5920
		$makeTarFile=fileAccess::makeTarFile($conf["fileAccess::makeTarFile"]);
5921
		unset($conf["fileAccess::makeTarFile"]);
5922
 
5923
		#如果打包失敗
5924
		if($makeTarFile["status"]=="false"){
5925
 
5926
			#設置執行不正常
5927
			$result["status"]="false";
5928
 
5929
			#設置錯誤訊息
5930
			$result["error"]=$makeTarFile;
5931
 
5932
			#回傳結果
5933
			return $result;
5934
 
5935
			}#if end
5936
 
5937
		#壓縮成xz檔
5938
		#函式說明:
5939
		#將一個檔案壓縮成xz檔案
5940
		#回傳的結果:
5941
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5942
		#$result["function"],當前執行的函數名稱
5943
		#$result["error"],錯誤訊息.
5944
		#$result["content"],檔案輸出後的位置與名稱.
5945
		#必填參數:
5946
		#$conf["fileAccess::makeXzFile"]["compressTarget"],字串,要打包的每個資料夾與檔案位置
5947
		$conf["fileAccess::makeXzFile"]["compressTarget"]=$makeTarFile["content"];
5948
		#$conf["fileAccess::makeXzFile"]["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5949
		$conf["fileAccess::makeXzFile"]["createdXzFile"]=$makeTarFile["content"];
5950
		#$conf["fileAccess::makeXzFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5951
		$conf["fileAccess::makeXzFile"]["fileArgu"]=$conf["fileArgu"];
5952
		$makeXzFile=fileAccess::makeXzFile($conf["fileAccess::makeXzFile"]);
5953
		unset($conf["fileAccess::makeXzFile"]);
5954
 
5955
		#如果壓縮失敗
5956
		if($makeXzFile["status"]=="false"){
5957
 
5958
			#設置執行不正常
5959
			$result["status"]="false";
5960
 
5961
			#設置錯誤訊息
5962
			$result["error"]=$makeXzFile;
5963
 
5964
			#回傳結果
5965
			return $result;
5966
 
5967
			}#if end
5968
 
5969
		#移除tar檔案
5970
		#函式說明:
5971
		#移除檔案
5972
		#回傳結果:
5973
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
5974
		#$result["error"],錯誤訊息陣列
5975
		#$result["warning"],警告訊息陣列
5976
		#$result["function"],當前執行的函數名稱
5977
		#必填參數:
5978
		$conf["fileAccess::delFile"]["fileAddress"]=$makeTarFile["content"];#要移除檔案的位置
5979
		#$conf["fileAccess::delFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5980
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
5981
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
5982
		unset($conf["fileAccess::delFile"]);
5983
 
5984
		#如果移除tar檔案失敗
5985
		if($delFile["status"]=="false"){
5986
 
5987
			#設置執行不正常
5988
			$result["status"]="false";
5989
 
5990
			#設置錯誤訊息
5991
			$result["error"]=$delFile;
5992
 
5993
			#回傳結果
5994
			return $result;
5995
 
5996
			}#if end
5997
 
5998
		#取得壓縮好的檔案位置與名稱
5999
		$result["content"]=$makeXzFile["content"];
6000
 
6001
		#執行到這邊代表執行正常
6002
		$result["status"]="true";
6003
 
6004
		#回傳結果
6005
		return $result;
6006
 
6007
		}#function makeTarXzFile end
6008
 
6009
	/*
6010
	#函式說明:
6011
	#移動檔案
6012
	#回傳結果:
6013
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6014
	#$result["function"],當前執行的函數名稱
6015
	#$result["error"],錯誤訊息.
6016
	#$result["content"],檔案輸出後的位置與名稱.
6017
	#必填參數:
6018
	#$conf["from"],字串,要移動的檔案名稱與位置.
6019
	$conf["from"]="";
6020
	#$conf["to"],字串,要移動到的位置與名稱
6021
	$conf["to"]="";
6022
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6023
	$conf["fileArgu"]=__FILE__;
6024
	#可省略參數:
6025
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
6026
	#$conf["commentsArray"]=array("");
6027
	#參考資料:
6028
	#無.
6029
	#備註:
6030
	#無.
6031
	*/
6032
	public static function mv(&$conf){
6033
 
6034
		#初始化要回傳的結果
6035
		$result=array();
6036
 
6037
		#取得當前執行的函數名稱
6038
		$result["function"]=__FUNCTION__;
6039
 
6040
		#如果 $conf 不為陣列
6041
		if(gettype($conf)!="array"){
6042
 
6043
			#設置執行失敗
6044
			$result["status"]="false";
6045
 
6046
			#設置執行錯誤訊息
6047
			$result["error"][]="\$conf變數須為陣列形態";
6048
 
6049
			#如果傳入的參數為 null
6050
			if($conf==null){
6051
 
6052
				#設置執行錯誤訊息
6053
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6054
 
6055
				}#if end
6056
 
6057
			#回傳結果
6058
			return $result;
6059
 
6060
			}#if end
6061
 
6062
		#檢查參數
6063
		#函式說明:
6064
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6065
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6066
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6067
		#$result["function"],當前執行的函式名稱.
6068
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6069
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6070
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6071
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6072
		#必填寫的參數:
6073
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6074
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
6075
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6076
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("from","to","fileArgu");
6077
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
6078
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
6079
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6080
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
6081
		#可以省略的參數:
6082
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
6083
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
6084
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
6085
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
6086
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
6087
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
6088
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6089
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
6090
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
6091
		#$conf["arrayCountEqualCheck"][]=array();
6092
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
6093
		unset($conf["variableCheck::checkArguments"]);
6094
 
6095
		#若檢查失敗
6096
		if($checkResult["status"]=="false"){
6097
 
6098
			#設置執行失敗
6099
			$result["status"]="false";
6100
 
6101
			#設置執行錯誤訊息
6102
			$result["error"]=$checkResult;
6103
 
6104
			#回傳結果
6105
			return $result;
6106
 
6107
			}#if end
6108
 
6109
		#若檢查不通過
6110
		if($checkResult["passed"]=="false"){
6111
 
6112
			#設置執行失敗
6113
			$result["status"]="false";
6114
 
6115
			#設置執行錯誤訊息
6116
			$result["error"]=$checkResult;
6117
 
6118
			#回傳結果
6119
			return $result;
6120
 
6121
			}#if end
6122
 
6123
		#如果 $conf["commentsArray"] 有設定
6124
		if(isset($conf["commentsArray"])){
6125
 
6126
			#印出提示文字
6127
			#函式說明:
6128
			#印出多行文字,結尾自動換行.
6129
			#回傳的結果:
6130
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
6131
			#$result["function"],當前執行的函數名稱.
6132
			#$result["error"],錯誤訊息陣列.
6133
			#必填參數:
6134
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
6135
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
6136
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
6137
			unset($conf["cmd::echoMultiLine"]);
6138
 
6139
			#如果印出提示文字失敗
6140
			if($echoMultiLine["status"]=="false"){
6141
 
6142
				#設置執行失敗
6143
				$result["status"]="false";
6144
 
6145
				#設置執行錯誤訊息
6146
				$result["error"]=$echoMultiLine;
6147
 
6148
				#回傳結果
6149
				return $result;
6150
 
6151
				}#if end
6152
 
6153
			}#if end	
6154
 
6155
		#檢查要移動的檔案是否存在
6156
		#函式說明:
6157
		#檢查多個檔案與資料夾是否存在.
6158
		#回傳的結果:
6159
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6160
		#$result["error"],錯誤訊息陣列.
6161
		#$resutl["function"],當前執行的涵式名稱.
6162
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6163
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6164
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
6165
		#必填參數:
6166
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["from"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6167
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6168
		#參考資料來源:
6169
		#http://php.net/manual/en/function.file-exists.php
6170
		#http://php.net/manual/en/control-structures.foreach.php
6171
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6172
		unset($conf["fileAccess::checkMultiFileExist"]);
6173
 
6174
		#如果檢查失敗
6175
		if($checkMultiFileExist["status"]=="false"){
6176
 
6177
			#設置執行失敗
6178
			$result["status"]="false";
6179
 
6180
			#設置執行錯誤訊息
6181
			$result["error"]=$checkMultiFileExist;
6182
 
6183
			#回傳結果
6184
			return $result;
6185
 
6186
			}#if end	
6187
 
6188
		#如果來源檔案不存在
6189
		if($checkMultiFileExist["allExist"]=="false"){
6190
 
6191
			#設置執行失敗
6192
			$result["status"]="false";
6193
 
6194
			#設置執行錯誤訊息
6195
			$result["error"][]="檔案「".$conf["from"]."」不存在";
6196
 
6197
			#回傳結果
6198
			return $result;
6199
 
6200
			}#if end
6201
 
6202
		#函式說明:
6203
		#呼叫shell執行系統命令,並取得回傳的內容.
6204
		#回傳的結果:
6205
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6206
		#$result["error"],錯誤訊息陣列
6207
		#$result["output"],爲執行完二元碼後的輸出陣列
6208
		#必填的參數
6209
		$conf["external::callShell"]["command"]="mv";#要執行的指令與參數
6210
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"]; #__FILE__的內容
6211
		#可省略參數:
6212
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
6213
		$conf["external::callShell"]["argu"]=array("-v",$conf["from"],$conf["to"]);
6214
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
6215
		#$conf["external::callShell"]["enablePrintDescription"]="true";
6216
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
6217
		#$conf["printDescription"]="";
6218
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
6219
		$conf["external::callShell"]["escapeshellarg"]="true";
6220
		#參考資料:
6221
		#http://php.net/manual/en/function.exec.php
6222
		$callShell=external::callShell($conf["external::callShell"]);
6223
		unset($conf["external::callShell"]);
6224
 
6225
		#如果移動檔案失敗
6226
		if($callShell["status"]=="false"){
6227
 
6228
			#設置執行失敗
6229
			$result["status"]="false";
6230
 
6231
			#設置執行錯誤訊息
6232
			$result["error"]=$callShell;
6233
 
6234
			#回傳結果
6235
			return $result;
6236
 
6237
			}#if end
6238
 
6239
		#執行到這邊代表正常
6240
		$result["status"]="true";
6241
 
6242
		#儲存移動後的位置與名稱
6243
		$result["content"]=$conf["to"];
6244
 
6245
		#回傳結果
6246
		return $result;
6247
 
6248
		}#function mv end
6249
 
6250
	/*
6251
	#函式說明:
6252
	#取得目錄底下所有目錄與檔案的樹狀結構.
6253
	#回傳結果:
6254
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6255
	#$result["error"],錯誤訊息陣列.
6256
	#$result["function"],函數名稱.
6257
	#$result["position"],根目錄位置.
6258
	#$result["content"],陣列,檔案目錄的樹狀結構.
6259
	#$result["content"][$i]["name"],根目錄底下第$i+1個檔案或目錄的名稱
6260
	#$result["content"][$i]["folder"],根目錄底下第$i+1個名稱是目錄("true")還是檔案("false").
6261
	#$result["content"][$i]["position"],根目錄底下第$i+1個名稱或目錄的位置.
6262
	#$result["content"][$i]["ownerPerm"],根目錄底下第$i+1個使用者的權限.
6263
	#$result["content"][$i]["groupPerm"],根目錄底下第$i+1個群組使用者的權限.
6264
	#$result["content"][$i]["otherPerm"],根目錄底下第$i+1個其他使用者的權限.
6265
	#$result["content"][$i]["ownerName"],根目錄底下第$i+1個擁有者賬戶.
6266
	#$result["content"][$i]["groupName"],根目錄底下第$i+1個群組擁有者賬戶.
6267
	#$result["content"][$i]["next"][$j]["name"],第$i+1個為目錄的名稱的目錄底下第$j+1個檔案或目錄的名稱
6268
	#$result["content"][$i]["next"][$j]["folder"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱是目錄("true")還是檔案("false").
6269
	#$result["content"][$i]["next"][$j]["position"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱或目錄的位置.
6270
	#$result["content"][$i]["next"][$j]["ownerPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個使用者的權限.
6271
	#$result["content"][$i]["next"][$j]["groupPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組使用者的權限.
6272
	#$result["content"][$i]["next"][$j]["otherPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個其他使用者的權限.
6273
	#$result["content"][$i]["next"][$j]["ownerName"],第$i+1個為目錄的名稱的目錄底下第$j+1個擁有者賬戶.
6274
	#$result["content"][$i]["next"][$j]["groupName"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組擁有者賬戶.
6275
	#以此類推...		
6276
	#必填參數:
6277
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6278
	$conf["position"]="";
6279
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6280
	$conf["fileArgu"]=__FILE__;
6281
	#可省略參數:
6282
	#無.
6283
	#參考資料:
6284
	#無.
6285
	#備註:
6286
	#無.
6287
	*/
6288
	public static function getListTree(&$conf){
6289
 
6290
		#初始化要回傳的結果
6291
		$result=array();
6292
 
6293
		#設置當其函數名稱
6294
		$result["function"]=__FUNCTION__;
6295
 
6296
		#如果 $conf 不為陣列
6297
		if(gettype($conf)!="array"){
6298
 
6299
			#設置執行失敗
6300
			$result["status"]="false";
6301
 
6302
			#設置執行錯誤訊息
6303
			$result["error"][]="\$conf變數須為陣列形態";
6304
 
6305
			#如果傳入的參數為 null
6306
			if($conf==null){
6307
 
6308
				#設置執行錯誤訊息
6309
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6310
 
6311
				}#if end
6312
 
6313
			#回傳結果
6314
			return $result;
6315
 
6316
			}#if end
6317
 
6318
		#檢查必填參數
6319
		#函式說明:
6320
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6321
		#回傳的結果:
6322
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6323
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6324
		#$result["function"],當前執行的函式名稱.
6325
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6326
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6327
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6328
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6329
		#必填寫的參數:
6330
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6331
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6332
		#可以省略的參數:
6333
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6334
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6335
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6336
		unset($conf["variableCheck.isexistMulti"]);
6337
 
6338
		#如果檢查失敗
6339
		if($checkResult["status"]=="false"){
6340
 
6341
			#設置錯誤識別
6342
			$result["status"]="false";
6343
 
6344
			#設置錯誤訊息
6345
			$result["error"]=$checkResult;
6346
 
6347
			#回傳結果
6348
			return $result;
6349
 
6350
			}#if end
6351
 
6352
		#如果檢查不通過
6353
		if($checkResult["passed"]=="false"){
6354
 
6355
			#設置錯誤識別
6356
			$result["status"]="false";
6357
 
6358
			#設置錯誤訊息
6359
			$result["error"]=$checkResult;
6360
 
6361
			#回傳結果
6362
			return $result;
6363
 
6364
			}#if end
6365
 
6366
		#如果目錄不為 . 與 ..
6367
		if(basename($conf["position"])!="." && basename($conf["position"])!=".."){
6368
 
6369
			#檢查目錄是否存在
6370
			#函式說明:
6371
			#檢查多個檔案與資料夾是否存在.
6372
			#回傳的結果:
6373
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6374
			#$result["error"],錯誤訊息陣列.
6375
			#$resutl["function"],當前執行的涵式名稱.
6376
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6377
			#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6378
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
6379
			#必填參數:
6380
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["position"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6381
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6382
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6383
			#參考資料來源:
6384
			#http://php.net/manual/en/function.file-exists.php
6385
			#http://php.net/manual/en/control-structures.foreach.php
6386
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6387
			unset($conf["fileAccess::checkMultiFileExist"]);
6388
 
6389
			#如果檢查目錄失敗
6390
			if($checkMultiFileExist["status"]=="false"){
6391
 
6392
				#設置錯誤識別
6393
				$result["status"]="false";
6394
 
6395
				#設置錯誤訊息
6396
				$result["error"]=$checkMultiFileExist;
6397
 
6398
				#回傳結果
6399
				return $result;
6400
 
6401
				}#if end	
6402
 
6403
			#如果目錄不存在
6404
			if($checkMultiFileExist["varExist"][0]=="false"){
6405
 
6406
				#設置錯誤識別
6407
				$result["status"]="false";
6408
 
6409
				#設置錯誤訊息
6410
				$result["error"]=$checkMultiFileExist;
6411
 
6412
				#回傳結果
6413
				return $result;
6414
 
6415
				}#if end	
6416
 
6417
			}#if end
6418
 
6419
		#取得根目錄的樹狀結構
6420
		#函式說明:
6421
		#取得目錄底下所有目錄與檔案清單.
6422
		#回傳結果:
6423
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6424
		#$result["error"],錯誤訊息陣列.
6425
		#$result["function"],函數名稱.
6426
		#$result["content"],陣列,目錄底下的檔案與子目錄.
6427
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6428
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6429
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6430
		#$result["position"],目前的位置.
6431
		#必填參數:
6432
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6433
		$conf["fileAccess::getList"]["position"]=$conf["position"];
6434
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6435
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
6436
		#可省略參數:
6437
		#無
6438
		#參考資料來源:
6439
		#opendir=>http://php.net/manual/en/function.opendir.php
6440
		#is_dir=>http://php.net/manual/en/function.is-dir.php
6441
		$rootList=fileAccess::getList($conf["fileAccess::getList"]);
6442
		unset($conf["fileAccess::getList"]);	
6443
 
6444
		#如果取得根目錄底下的資料失敗
6445
		if($rootList["status"]=="false"){
6446
 
6447
			#設置錯誤識別
6448
			$result["status"]="false";
6449
 
6450
			#設置錯誤訊息
6451
			$result["error"]=$rootList;
6452
 
6453
			#回傳結果
6454
			return $result;
6455
 
6456
			}#if end
6457
 
6458
		#取得當前目錄	
6459
		$result["position"]=$rootList["position"];	
6460
 
6461
		#取得根目錄層級可以看到的檔案與目錄
6462
		$result["content"]=$rootList["content"];
6463
 
6464
		#如果當前目錄有檔案與子目錄
6465
		if(isset($result["content"])){
6466
 
6467
			#當前層級有幾個檔案目錄就執行幾次
6468
			for($i=0;$i<count($result["content"]);$i++){
6469
 
6470
				#如果該單位是目錄
6471
				if($result["content"][$i]["folder"]=="true"){
6472
 
6473
					#呼叫當前函數,取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6474
					#函式說明:
6475
					#取得目錄底下所有目錄與檔案的樹狀結構.
6476
					#回傳結果:
6477
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6478
					#$result["error"],錯誤訊息陣列.
6479
					#$result["function"],函數名稱.
6480
					#$result["content"],陣列,檔案目錄的樹狀結構.
6481
					#$result["total"],根目錄底下有多少目錄與檔案
6482
					#必填參數:
6483
					#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6484
					$conf["fileAccess::getListTree"]["position"]=$conf["position"]."/".$result["content"][$i]["name"];
6485
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6486
					$conf["fileAccess::getListTree"]["fileArgu"]=$conf["fileArgu"];
6487
					#可省略參數:
6488
					#無
6489
					$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6490
					unset($conf["fileAccess::getListTree"]);
6491
 
6492
					#如果取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊失敗
6493
					if($getListTree["status"]=="false"){
6494
 
6495
						#設置錯誤識別
6496
						$result["status"]="false";
6497
 
6498
						#設置錯誤訊息
6499
						$result["error"]=$getListTree;
6500
 
6501
						#回傳結果
6502
						return $result;
6503
 
6504
						}#if end
6505
 
6506
					#如果 $conf["position"]."/".$result["content"][$i]["name"] 目錄有檔案與子目錄
6507
					if(isset($getListTree["content"])){	
6508
 
6509
						#取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6510
						$result["content"][$i]["next"]=$getListTree["content"];
6511
 
6512
						}#if end
6513
 
6514
					#取得當前目錄	
6515
					$result["content"][$i]["position"]=$rootList["position"];	
6516
 
6517
					}#if end
6518
 
6519
				}#for end
6520
 
6521
			}#if end
6522
 
6523
		#執行到這邊代表執行正常
6524
		$result["status"]="true";
6525
 
6526
		#回傳結果
6527
		return $result;
6528
 
6529
		}#function getListTree end
6530
 
6531
	/*
6532
	#函式說明:
6533
	#取得目錄底下所有目錄與檔案清單.
6534
	#回傳結果:
6535
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6536
	#$result["error"],錯誤訊息陣列.
6537
	#$result["function"],函數名稱.
6538
	#$result["content"],陣列,目錄底下的檔案與子目錄.
6539
	#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6540
	#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6541
	#$result["content"][$i]["ownerPerm"],字串,使用者的權限.
6542
	#$result["content"][$i]["groupPerm"],字串,群組使用者的權限.
6543
	#$result["content"][$i]["otherPerm"],字串,其他使用者的權限.
6544
	#$result["content"][$i]["ownerName"],字串,擁有者賬戶.
6545
	#$result["content"][$i]["groupName"],字串,群組擁有者賬戶.
6546
	#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6547
	#$result["position"],目前的位置.
6548
	#必填參數:
6549
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6550
	$conf["position"]="";
6551
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6552
	$conf["fileArgu"]=__FILE__;
6553
	#可省略參數:
6554
	#無
6555
	#參考資料:
6556
	#opendir=>http://php.net/manual/en/function.opendir.php
6557
	#is_dir=>http://php.net/manual/en/function.is-dir.php
6558
	#備註:
6559
	#無.
6560
	*/
6561
	public static function getList(&$conf){
6562
 
6563
		#初始化要回傳的結果
6564
		$result=array();
6565
 
6566
		#設置當其函數名稱
6567
		$result["function"]=__FUNCTION__;
6568
 
6569
		#初始化記載檔案目錄名單的陣列
6570
		$result["content"]=array();
6571
 
6572
		#如果 $conf 不為陣列
6573
		if(gettype($conf)!="array"){
6574
 
6575
			#設置執行失敗
6576
			$result["status"]="false";
6577
 
6578
			#設置執行錯誤訊息
6579
			$result["error"][]="\$conf變數須為陣列形態";
6580
 
6581
			#如果傳入的參數為 null
6582
			if($conf==null){
6583
 
6584
				#設置執行錯誤訊息
6585
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6586
 
6587
				}#if end
6588
 
6589
			#回傳結果
6590
			return $result;
6591
 
6592
			}#if end
6593
 
6594
		#檢查必填參數
6595
		#函式說明:
6596
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6597
		#回傳的結果:
6598
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6599
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6600
		#$result["function"],當前執行的函式名稱.
6601
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6602
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6603
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6604
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6605
		#必填寫的參數:
6606
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6607
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6608
		#可以省略的參數:
6609
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6610
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6611
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6612
		unset($conf["variableCheck.isexistMulti"]);
6613
 
6614
		#如果檢查失敗
6615
		if($checkResult["status"]=="false"){
6616
 
6617
			#設置錯誤識別
6618
			$result["status"]="false";
6619
 
6620
			#設置錯誤訊息
6621
			$result["error"]=$checkResult;
6622
 
6623
			#回傳結果
6624
			return $result;
6625
 
6626
			}#if end
6627
 
6628
		#如果檢查不通過
6629
		if($checkResult["passed"]==="false"){
6630
 
6631
			#設置錯誤識別
6632
			$result["status"]="false";
6633
 
6634
			#設置錯誤訊息
6635
			$result["error"]=$checkResult;
6636
 
6637
			#回傳結果
6638
			return $result;
6639
 
6640
			}#if end
6641
 
6642
		#檢查目標路徑是否為「/」開頭的路徑
6643
		#函式說明:
6644
		#取得符合特定字首與字尾的字串
6645
		#回傳結果:
6646
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
6647
		#$result["function"],當前執行的函數名稱.
6648
		#$result["error"],錯誤訊息陣列.
6649
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
6650
		#$result["returnString"],爲符合字首條件的字串內容。
6651
		#必填參數:
6652
		#$conf["checkString"],字串,要檢查的字串.
6653
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["position"];
6654
		#可省略參數:
6655
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
6656
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
6657
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
6658
		#$conf["tailWord"]="";
6659
		#參考資料:
6660
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
6661
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
6662
		unset($conf["search::getMeetConditionsString"]);
6663
 
6664
		#如果檢查關鍵字失敗
6665
		if($getMeetConditionsString["status"]=="false"){
6666
 
6667
			#設置錯誤識別
6668
			$result["status"]="false";
6669
 
6670
			#設置錯誤訊息
6671
			$result["error"]=$getMeetConditionsString;
6672
 
6673
			#回傳結果
6674
			return $result;
6675
 
6676
			}#if end					
6677
 
6678
		#如果目標路徑不為「/」開頭的路徑,則為相對路徑
6679
		if($getMeetConditionsString["founded"]=="false"){
6680
 
6681
			#取得目標位置的路徑
6682
			#函式說明:
6683
			#將檔案的位置名稱變成網址
6684
			#回傳結果:
6685
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6686
			#$result["error"],錯誤訊息陣列.
6687
			#$result["function"],函數名稱. 
6688
			#$result["content"],網址.
6689
			#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
6690
			#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
6691
			#必填參數:
6692
			#$conf["address"],字串,檔案的相對位置.
6693
			$conf["fileAccess::getInternetAddress"]["address"]=$conf["position"];
6694
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
6695
			$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
6696
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
6697
			#$conf["fileAccess::getInternetAddress"]["userDir"]="true";
6698
			$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
6699
			unset($conf["fileAccess::getInternetAddress"]);	
6700
 
6701
			#如果將檔案的位置名稱變成網址失敗
6702
			if($getInternetAddress["status"]=="false"){
6703
 
6704
				#設置錯誤識別
6705
				$result["status"]="false";
6706
 
6707
				#設置錯誤訊息
6708
				$result["error"]=$getInternetAddress;
6709
 
6710
				#回傳結果
6711
				return $result;
6712
 
6713
				}#if end	
6714
 
6715
			#置換目標位置為檔案系統路徑的絕對位置
6716
			$conf["position"]=$getInternetAddress["fileSystemAbsoulutePosition"];
6717
 
6718
			}#if end						
6719
 
6720
		#如果目標是資料夾	
6721
		if(is_dir($conf["position"])) {
6722
 
6723
			#設置為資料夾
6724
			$result["folder"]="true";
6725
 
6726
			#如果開啟資料夾成功
6727
			if($dh=opendir($conf["position"])){
6728
 
6729
				#初始化計數變數
6730
				$count=0;
6731
 
6732
				#如果資料夾裡面有檔案
6733
				while(($fileName=readdir($dh))!==false){
6734
 
6735
					#debug
6736
					#echo "有檔案";
6737
 
6738
					#如果名稱是「.」或「..」
6739
					if($fileName=="." || $fileName==".."){
6740
 
6741
						#則跳過
6742
						continue;
6743
 
6744
						}#if end
6745
 
6746
					#取得檔案或子目錄名稱
6747
					$result["content"][$count]["name"]=$fileName;					
6748
 
6749
					#取得詳細資訊
6750
					#函式說明:
6751
					#取得節點的資訊.
6752
					#回傳結果:
6753
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6754
					#$result["error"],錯誤訊息陣列.
6755
					#$result["function"],函數名稱. 
6756
					#$result["content"],檔案資訊陣列.
6757
					#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
6758
					#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
6759
					#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
6760
					#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
6761
					#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
6762
					#$result["content"]["ownerName"],檔案擁有着資訊.
6763
					#$result["content"]["groupName"],檔案所屬擁有着資訊.
6764
					#$result["content"]["size"],檔案大小.
6765
					#$result["content"]["modifyDate"],檔案變更年月日.
6766
					#$result["content"]["modifyTime"],檔案變更時分秒.
6767
					#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
6768
					#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
6769
					#必填參數:
6770
					#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
6771
					$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];
6772
					#$conf["file"],字串,要查看擁有者資訊的檔案.
6773
					$conf["fileAccess::fileInfo"]["file"]=$conf["position"]."/".$fileName;
6774
					#可省略參數:
6775
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
6776
					$conf["fileAccess::fileInfo"]["web"]="false";
6777
					#參考資料:
6778
					#fileowner=>http://php.net/manual/en/function.fileowner.php
6779
					#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
6780
					#備註:
6781
					#無.
6782
					$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);
6783
					unset($conf["fileAccess::fileInfo"]);
6784
 
6785
					#如果執行失敗
6786
					if($fileInfo["status"]=="false"){
6787
 
6788
						#設置錯誤識別
6789
						$result["status"]="false";
6790
 
6791
						#設置錯誤訊息
6792
						$result["error"]=$fileInfo;
6793
 
6794
						#回傳結果
6795
						return $result;
6796
 
6797
						}#if end
6798
 
6799
					#設置是否為資料夾
6800
					$result["content"][$count]["folder"]=$fileInfo["content"]["is_folder"];
6801
 
6802
					#設置使用者的權限
6803
					$result["content"][$count]["ownerPerm"]=$fileInfo["content"]["ownerPerm"];
6804
 
6805
					#設置群組的權限
6806
					$result["content"][$count]["groupPerm"]=$fileInfo["content"]["groupPerm"];
6807
 
6808
					#設置其他使用者的權限
6809
					$result["content"][$count]["otherPerm"]=$fileInfo["content"]["otherPerm"];
6810
 
6811
					#設置其擁有者賬戶
6812
					$result["content"][$count]["ownerName"]=$fileInfo["content"]["ownerName"];
6813
 
6814
					#設置其群組擁有者賬戶
6815
					$result["content"][$count]["groupName"]=$fileInfo["content"]["groupName"];
6816
 
6817
					#計數加1
6818
					$count++;
6819
 
6820
					}#while
6821
 
6822
				#關閉資料夾
6823
				closedir($dh);
6824
 
6825
				}#if end
6826
 
6827
			#開啟資料夾失敗	
6828
			else{
6829
 
6830
				#設置執行失敗
6831
				$result["status"]="false";
6832
 
6833
				#設置執行錯誤訊息
6834
				$result["error"][]="開啟資料夾「".$conf["position"]."」失敗";
6835
 
6836
				#回傳結果
6837
				return $result;
6838
 
6839
				}#else end
6840
 
6841
			}#if end
6842
 
6843
		#反之是檔案
6844
		else{
6845
 
6846
			#設置不為目錄
6847
			$result["folder"]="false";
6848
 
6849
			}#else end
6850
 
6851
		#取得目前位置
6852
		$result["position"]=$conf["position"];	
6853
 
6854
		#執行到這邊代表執行正常
6855
		$result["status"]="true";
6856
 
6857
		#回傳結果
6858
		return $result;	
6859
 
6860
		}#function getList end
6861
 
6862
	/*
6863
	#函式說明:
6864
	#取得目錄底下所有目錄與檔案的樹狀結構.
6865
	#回傳結果:
6866
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6867
	#$result["error"],錯誤訊息陣列.
6868
	#$result["function"],函數名稱.
6869
	#$result["content"],陣列,檔案目錄的樹狀結構.
6870
	#必填參數:
6871
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6872
	$conf["position"]="";
6873
	#可省略參數:
6874
	#無.
6875
	#參考資料:
6876
	#無.
6877
	#備註:
6878
	#無.
6879
	*/
6880
	public static function exportListTree(&$conf){
6881
 
6882
		#初始化要回傳的結果
6883
		$result=array();
6884
 
6885
		#設置當其函數名稱
6886
		$result["function"]=__FUNCTION__;
6887
 
6888
		#如果 $conf 不為陣列
6889
		if(gettype($conf)!="array"){
6890
 
6891
			#設置執行失敗
6892
			$result["status"]="false";
6893
 
6894
			#設置執行錯誤訊息
6895
			$result["error"][]="\$conf變數須為陣列形態";
6896
 
6897
			#如果傳入的參數為 null
6898
			if($conf==null){
6899
 
6900
				#設置執行錯誤訊息
6901
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6902
 
6903
				}#if end
6904
 
6905
			#回傳結果
6906
			return $result;
6907
 
6908
			}#if end
6909
 
6910
		#檢查必填參數
6911
		#函式說明:
6912
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6913
		#回傳的結果:
6914
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6915
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6916
		#$result["function"],當前執行的函式名稱.
6917
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6918
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6919
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6920
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6921
		#必填寫的參數:
6922
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6923
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6924
		#可以省略的參數:
6925
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6926
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6927
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6928
		unset($conf["variableCheck.isexistMulti"]);
6929
 
6930
		#如果檢查失敗
6931
		if($checkResult["status"]=="false"){
6932
 
6933
			#設置錯誤識別
6934
			$result["status"]="false";
6935
 
6936
			#設置錯誤訊息
6937
			$result["error"]=$checkResult;
6938
 
6939
			#回傳結果
6940
			return $result;
6941
 
6942
			}#if end
6943
 
6944
		#如果檢查不通過
6945
		if($checkResult["passed"]=="false"){
6946
 
6947
			#設置錯誤識別
6948
			$result["status"]="false";
6949
 
6950
			#設置錯誤訊息
6951
			$result["error"]=$checkResult;
6952
 
6953
			#回傳結果
6954
			return $result;
6955
 
6956
			}#if end
6957
 
6958
		#函式說明:
6959
		#取得目錄底下所有目錄與檔案的樹狀結構.
6960
		#回傳結果:
6961
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6962
		#$result["error"],錯誤訊息陣列.
6963
		#$result["function"],函數名稱.
6964
		#$result["content"],陣列,檔案目錄的樹狀結構.
6965
		#必填參數:
6966
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6967
		$conf["fileAccess::getListTree"]["position"]=$conf["position"];
6968
		#可省略參數:
6969
		#無
6970
		#備註:
6971
		#若檔案與目錄的名稱含有「[」與「]」與「(」與「)」將會無法取得其目錄底下的內容	
6972
		#若檔案與目錄的名稱含有「 」將會無法檢查檔案是否存在
6973
		#改用opendir()函數應該可以解決大部分的bug.
6974
		$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6975
		unset($conf["fileAccess::getListTree"]);
6976
 
6977
		#如果取得 目標目錄底下所有目錄與檔案的樹狀結構 失敗
6978
		if($getListTree["status"]==="false"){
6979
 
6980
			#設置錯誤識別
6981
			$result["status"]="false";
6982
 
6983
			#設置錯誤訊息
6984
			$result["error"]=$getListTree;
6985
 
6986
			#回傳結果
6987
			return $result;
6988
 
6989
			}#if end
6990
 
6991
		#目標目錄底下有幾個
6992
 
6993
		}#function exportListTree end
6994
 
6995
	/*
6996
	#函式說明:
6997
	#解壓縮tar.xz檔案,解壓縮完畢後,tar.xz檔案會被移除.
6998
	#回傳結果:
6999
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7000
	#$result["error"],錯誤訊息陣列.
7001
	#$result["function"],函數名稱. 
7002
	#必填參數:
7003
	#$conf["tarXzFile"],字串變數,壓縮檔的位置與名稱,副檔名".tar.xz"會自動補上.
7004
	$conf["tarXzFile"]="";
7005
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
7006
	$conf["fileArgu"]=__FILE__;
7007
	#可省略參數:
7008
	#$conf["extractTo"],字串,要解壓縮到哪邊,預設為當前路徑"."
7009
	#$conf["extractTo"]=".";
7010
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
7011
	#$conf["commentsArray"]=array("");
7012
	#參考資料:
7013
	#無.
7014
	#備註:
7015
	#無.
7016
	*/
7017
	public static function unpackTarXzFile(&$conf){
7018
 
7019
		#初始化要回傳的內容
7020
		$result=array();
7021
 
7022
		#記錄當前執行的函數名稱
7023
		$result["function"]=__FUNCTION__;
7024
 
7025
		#如果 $conf 不為陣列
7026
		if(gettype($conf)!="array"){
7027
 
7028
			#設置執行失敗
7029
			$result["status"]="false";
7030
 
7031
			#設置執行錯誤訊息
7032
			$result["error"][]="\$conf變數須為陣列形態";
7033
 
7034
			#如果傳入的參數為 null
7035
			if($conf==null){
7036
 
7037
				#設置執行錯誤訊息
7038
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7039
 
7040
				}#if end
7041
 
7042
			#回傳結果
7043
			return $result;
7044
 
7045
			}#if end
7046
 
7047
		#檢查參數
7048
		#函式說明:
7049
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7050
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7051
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7052
		#$result["function"],當前執行的函式名稱.
7053
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7054
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7055
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7056
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7057
		#必填寫的參數:
7058
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7059
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7060
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7061
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","tarXzFile");
7062
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7063
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7064
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7065
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7066
		#可以省略的參數:
7067
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7068
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7069
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7070
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","extractTo");
7071
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7072
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");
7073
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7074
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,".");
7075
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7076
		#$conf["arrayCountEqualCheck"][]=array();
7077
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7078
		unset($conf["variableCheck::checkArguments"]);
7079
 
7080
		#若檢查失敗
7081
		if($checkResult["status"]=="false"){
7082
 
7083
			#設置執行失敗
7084
			$result["status"]="false";
7085
 
7086
			#設置執行錯誤訊息
7087
			$result["error"]=$checkResult;
7088
 
7089
			#回傳結果
7090
			return $result;
7091
 
7092
			}#if end
7093
 
7094
		#若檢查不通過
7095
		if($checkResult["passed"]=="false"){
7096
 
7097
			#設置執行失敗
7098
			$result["status"]="false";
7099
 
7100
			#設置執行錯誤訊息
7101
			$result["error"]=$checkResult;
7102
 
7103
			#回傳結果
7104
			return $result;
7105
 
7106
			}#if end
7107
 
7108
		#如果 $conf["commentsArray"] 有設定
7109
		if(isset($conf["commentsArray"])){
7110
 
7111
			#印出提示文字
7112
			#函式說明:
7113
			#印出多行文字,結尾自動換行.
7114
			#回傳的結果:
7115
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
7116
			#$result["function"],當前執行的函數名稱.
7117
			#$result["error"],錯誤訊息陣列.
7118
			#必填參數:
7119
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
7120
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
7121
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
7122
			unset($conf["cmd::echoMultiLine"]);
7123
 
7124
			#如果印出提示文字失敗
7125
			if($echoMultiLine["status"]=="false"){
7126
 
7127
				#設置執行失敗
7128
				$result["status"]="false";
7129
 
7130
				#設置執行錯誤訊息
7131
				$result["error"]=$echoMultiLine;
7132
 
7133
				#回傳結果
7134
				return $result;
7135
 
7136
				}#if end
7137
 
7138
			}#if end
7139
 
7140
		#檢查要移動的檔案是否存在
7141
		#函式說明:
7142
		#檢查多個檔案與資料夾是否存在.
7143
		#回傳的結果:
7144
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
7145
		#$result["error"],錯誤訊息陣列.
7146
		#$resutl["function"],當前執行的涵式名稱.
7147
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
7148
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
7149
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
7150
		#必填參數:
7151
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["tarXzFile"].".tar.xz");#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
7152
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
7153
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
7154
		#參考資料來源:
7155
		#http://php.net/manual/en/function.file-exists.php
7156
		#http://php.net/manual/en/control-structures.foreach.php
7157
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
7158
		unset($conf["fileAccess::checkMultiFileExist"]);
7159
 
7160
		#如果檢查失敗
7161
		if($checkMultiFileExist["status"]=="false"){
7162
 
7163
			#設置執行失敗
7164
			$result["status"]="false";
7165
 
7166
			#設置執行錯誤訊息
7167
			$result["error"]=$checkMultiFileExist;
7168
 
7169
			#回傳結果
7170
			return $result;
7171
 
7172
			}#if end	
7173
 
7174
		#如果來源檔案不存在
7175
		if($checkMultiFileExist["allExist"]=="false"){
7176
 
7177
			#設置執行失敗
7178
			$result["status"]="false";
7179
 
7180
			#設置執行錯誤訊息
7181
			$result["error"][]="檔案「".$conf["tarXzFile"].".tar.xz」不存在";
7182
 
7183
			#回傳結果
7184
			return $result;
7185
 
7186
			}#if end
7187
 
7188
		#進行解壓縮xz檔
7189
		#函式說明:
7190
		#呼叫shell執行系統命令,並取得回傳的內容.
7191
		#回傳的結果:
7192
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7193
		#$result["error"],錯誤訊息陣列.
7194
		#$result["function"],當前執行的函數名稱.
7195
		#$result["cmd"],執行的指令內容.
7196
		#$result["output"],爲執行完二元碼後的輸出陣列.
7197
		#必填的參數
7198
		#$conf["command"],字串,要執行的指令與.
7199
		$conf["fileAccess::callShell"]["command"]="xz -v -v -d -f ".$conf["tarXzFile"].".tar.xz";
7200
		#可省略參數:
7201
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7202
		#$conf["fileAccess::callShell"]["argu"]=array();
7203
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7204
		#$conf["enablePrintDescription"]="true";
7205
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7206
		#$conf["printDescription"]="";
7207
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7208
		#$conf["escapeshellarg"]="true";
7209
		#備註:
7210
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7211
		#參考資料:
7212
		#exec=>http://php.net/manual/en/function.exec.php
7213
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7214
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7215
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7216
		unset($conf["fileAccess::callShell"]);
7217
 
7218
		#如果解壓縮xz檔案失敗
7219
		if($callShell["status"]=="false"){
7220
 
7221
			#設置執行失敗
7222
			$result["status"]="false";
7223
 
7224
			#設置執行錯誤訊息
7225
			$result["error"]=$callShell;
7226
 
7227
			#回傳結果
7228
			return $result;
7229
 
7230
			}#if end
7231
 
7232
		#解壓縮tar檔
7233
		#函式說明:
7234
		#呼叫shell執行系統命令,並取得回傳的內容.
7235
		#回傳的結果:
7236
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7237
		#$result["error"],錯誤訊息陣列.
7238
		#$result["function"],當前執行的函數名稱.
7239
		#$result["cmd"],執行的指令內容.
7240
		#$result["output"],爲執行完二元碼後的輸出陣列.
7241
		#必填的參數
7242
		#$conf["command"],字串,要執行的指令與.
7243
		$conf["fileAccess::callShell"]["command"]="tar";
7244
		#可省略參數:
7245
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7246
		$conf["fileAccess::callShell"]["argu"]=array("-xvf",$conf["tarXzFile"]."tar",$conf["extractTo"]);
7247
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7248
		#$conf["enablePrintDescription"]="true";
7249
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7250
		#$conf["printDescription"]="";
7251
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7252
		$conf["fileAccess::callShell"]["escapeshellarg"]="true";
7253
		#備註:
7254
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7255
		#參考資料:
7256
		#exec=>http://php.net/manual/en/function.exec.php
7257
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7258
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7259
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7260
		unset($conf["fileAccess::callShell"]);
7261
 
7262
		#如果解壓縮xz檔案失敗
7263
		if($callShell["status"]=="false"){
7264
 
7265
			#設置執行失敗
7266
			$result["status"]="false";
7267
 
7268
			#設置執行錯誤訊息
7269
			$result["error"]=$callShell;
7270
 
7271
			#回傳結果
7272
			return $result;
7273
 
7274
			}#if end
7275
 
7276
		#移除tar檔
7277
		#函式說明:
7278
		#移除檔案
7279
		#回傳結果:
7280
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7281
		#$result["error"],錯誤訊息陣列
7282
		#$result["warning"],警告訊息陣列
7283
		#$result["function"],當前執行的函數名稱
7284
		#必填參數:
7285
		$conf["fileAccess::delFile"]["fileAddress"]=$conf["tarXzFile"].".tar";#要移除檔案的位置
7286
		#可省略參數:
7287
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7288
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
7289
		#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
7290
		#$conf["commentsArray"]=array("");
7291
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
7292
		unset($conf["fileAccess::delFile"]);	
7293
 
7294
		#如果移除檔案失敗
7295
		if($delFile["status"]=="false"){
7296
 
7297
			#設置執行失敗
7298
			$result["status"]="false";
7299
 
7300
			#設置執行錯誤訊息
7301
			$result["error"]=$delFile;
7302
 
7303
			#回傳結果
7304
			return $result;
7305
 
7306
			}#if end	
7307
 
7308
		#執行到這邊代表執行正常
7309
		$result["status"]="true";
7310
 
7311
		#回傳結果
7312
		return $result;
7313
 
7314
		}#function unpackTarXzFile end
7315
 
7316
	/*
7317
	#函式說明:
7318
	#用data:mimeType;base64,fileVar的形式來提供檔案的連結,亦即檔案儲存在變數裡面.
7319
	#回傳結果:
7320
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7321
	#$result["error"],錯誤訊息
7322
	#$result["content"],檔案變數的內容
7323
	#$result["fileTypeName"],副檔名,ex:「.tar.xz」.
7324
	#$result["function"],當前執行的函數名稱 
7325
	#必填參數:
7326
	#$conf["filePosition"],要轉存成2元碼的檔案位置與名稱
7327
	$conf["filePosition"]="";
7328
	#$conf["mimeType"],2元碼的內容是什麼
7329
	$conf["mimeType"]="";
7330
	#可省略參數:
7331
	#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
7332
	#$conf["compressType"]="base64";
7333
	#$conf["delFile"],讀取完檔案後,要移除檔案嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
7334
	#$conf["delFile"]="false";
7335
	#參考資料:
7336
	#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
7337
	#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
7338
	#備註:
7339
	#無.
7340
	*/
7341
	public static function data(&$conf){
7342
 
7343
		#初始化要回傳的內容
7344
		$result=array();
7345
 
7346
		#取得當前執行的函數名稱
7347
		$result["function"]=__FUNCTION__;
7348
 
7349
		#如果 $conf 不為陣列
7350
		if(gettype($conf)!="array"){
7351
 
7352
			#設置執行失敗
7353
			$result["status"]="false";
7354
 
7355
			#設置執行錯誤訊息
7356
			$result["error"][]="\$conf變數須為陣列形態";
7357
 
7358
			#如果傳入的參數為 null
7359
			if($conf==null){
7360
 
7361
				#設置執行錯誤訊息
7362
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7363
 
7364
				}#if end
7365
 
7366
			#回傳結果
7367
			return $result;
7368
 
7369
			}#if end
7370
 
7371
		#檢查參數
7372
		#函式說明:
7373
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7374
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7375
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7376
		#$result["function"],當前執行的函式名稱.
7377
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7378
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7379
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7380
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7381
		#必填寫的參數:
7382
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7383
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7384
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7385
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePosition");
7386
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7387
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
7388
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7389
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7390
		#可以省略的參數:
7391
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7392
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7393
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7394
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
7395
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7396
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
7397
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7398
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
7399
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7400
		#$conf["arrayCountEqualCheck"][]=array();
7401
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7402
		unset($conf["variableCheck::checkArguments"]);
7403
 
7404
		#如果檢查參數失敗
7405
		if($checkResult["status"]=="false"){
7406
 
7407
			#設置執行失敗
7408
			$result["status"]="false";
7409
 
7410
			#設置錯誤訊息
7411
			$result["error"]=$checkResult;
7412
 
7413
			#回傳結果
7414
			return $result;
7415
 
7416
			}#if end
7417
 
7418
		#如果檢查參數不通過
7419
		if($checkResult["passed"]=="false"){
7420
 
7421
			#設置執行失敗
7422
			$result["status"]="false";
7423
 
7424
			#設置錯誤訊息
7425
			$result["error"]=$checkResult;
7426
 
7427
			#回傳結果
7428
			return $result;
7429
 
7430
			}#if end
7431
 
7432
		#依據檔案名稱取得副檔名 $result["fileTypeName"]
7433
		#函式說明:
7434
		#將固定格式的字串分開,並回傳分開的結果。
7435
		#回傳的參數:
7436
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7437
		#$result["error"],錯誤訊息陣列
7438
		#$result["function"],當前執行的函數名稱.
7439
		#$result["oriStr"],要分割的原始字串內容
7440
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7441
		#$result["dataCounts"],爲總共分成幾段
7442
		#必填參數:
7443
		$conf["stringProcess::spiltString"]["stringIn"]=basename($conf["filePosition"]);#要處理的字串。
7444
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
7445
		#備註:
7446
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
7447
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7448
		unset($conf["stringProcess::spiltString"]);
7449
 
7450
		#如果分割字串失敗
7451
		if($spiltString["status"]=="false"){
7452
 
7453
			#設置執行失敗
7454
			$result["status"]="false";
7455
 
7456
			#設置錯誤訊息
7457
			$result["error"]=$spiltString;
7458
 
7459
			#回傳結果
7460
			return $result;
7461
 
7462
			}#if end
7463
 
7464
		#初始化副檔名
7465
		$result["fileTypeName"]="";	
7466
 
7467
		#如果只有一段代表沒有副檔名
7468
		if($spiltString["dataCounts"]==1){
7469
 
7470
			#副檔名設置為 "unknow"
7471
			$result["fileTypeName"]="unknow";
7472
 
7473
			}#if end
7474
 
7475
		#不符合以上條件,但至少有兩段
7476
		else if($spiltString["dataCounts"]>=2){
7477
 
7478
			#執行 $spiltString["dataCounts"] 減一次的迴圈
7479
			for($i=1;$i<$spiltString["dataCounts"];$i++){
7480
 
7481
				#串接副檔名
7482
				$result["fileTypeName"]=$result["fileTypeName"].".".$spiltString["dataArray"][$i];
7483
 
7484
				}#for end
7485
 
7486
			}#if end
7487
 
7488
		#讀取檔案內容
7489
		$fileBin=file_get_contents($conf["filePosition"],"rb");
7490
 
7491
		#編碼檔案
7492
		$base64fileBin=base64_encode($fileBin);
7493
 
7494
		#如果 $conf["delFile"] 等於 "true"
7495
		if($conf["delFile"]=="true"){
7496
 
7497
			#移除檔案
7498
			#函式說明:
7499
			#移除檔案
7500
			#回傳結果:
7501
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7502
			#$result["error"],錯誤訊息陣列
7503
			#$result["warning"],警告訊息陣列
7504
			#$result["function"],當前執行的函數名稱
7505
			#必填參數:
7506
			$conf["fileAccess::delFile"]["fileAddress"]=$conf["filePosition"];#要移除檔案的位置
7507
			$del=fileAccess::delFile($conf["fileAccess::delFile"]);
7508
			unset($conf["fileAccess::delFile"]);
7509
 
7510
			#如果移除圖片失敗
7511
			if($del["status"]=="false"){
7512
 
7513
				#設置執行失敗
7514
				$result["status"]="false";
7515
 
7516
				#設置錯誤訊息
7517
				$result["error"]=$del;
7518
 
7519
				#回傳結果
7520
				return $result;
7521
 
7522
				}#if end
7523
 
7524
			}#if end
7525
 
7526
		#放置檔案的語法
7527
		$result["content"]="data:".$conf["mimeType"].";".$conf["compressType"].",".$base64fileBin;
7528
 
7529
		#執行到這邊代表執行正常
7530
		$result["status"]="true";
7531
 
7532
		#回傳結果
7533
		return $result;
7534
 
7535
		}#function data end
7536
 
7537
	/*
7538
	#函式說明:
7539
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7540
	#回傳結果:
7541
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7542
	#$result["error"],錯誤訊息陣列.
7543
	#$result["function"],函數名稱. 
7544
	#$result["argu"],使用的參數.
7545
	#$result["content"],網址,若是在命令列執行,則為"null".
7546
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7547
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
7548
	#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
7549
	#必填參數:
7550
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7551
	$conf["address"]="";
7552
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7553
	$conf["fileArgu"]=__FILE__;
7554
	#可省略參數:
7555
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
7556
	#$conf["userDir"]="true";
7557
	#參考資料:
7558
	#無.
7559
	#備註:
7560
	#無.
7561
	*/
7562
	public static function getInternetAddress(&$conf){
66 liveuser 7563
 
3 liveuser 7564
		#初始化要回傳的變數
7565
		$result=array();
7566
 
7567
		#記錄當前執行的函數名稱
7568
		$result["function"]=__FUNCTION__;
7569
 
7570
		#如果 $conf 不為陣列
7571
		if(gettype($conf)!="array"){
7572
 
7573
			#設置執行失敗
7574
			$result["status"]="false";
7575
 
7576
			#設置執行錯誤訊息
7577
			$result["error"][]="\$conf變數須為陣列形態";
7578
 
7579
			#如果傳入的參數為 null
7580
			if($conf==null){
7581
 
7582
				#設置執行錯誤訊息
7583
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7584
 
7585
				}#if end
7586
 
7587
			#回傳結果
7588
			return $result;
7589
 
7590
			}#if end
7591
 
7592
		#取得使用的參數
7593
		$result["argu"]=$conf;
7594
 
7595
		#檢查參數
7596
		#函式說明:
7597
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7598
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7599
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7600
		#$result["function"],當前執行的函式名稱.
7601
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7602
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7603
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7604
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7605
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7606
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7607
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
7608
		#必填寫的參數:
7609
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7610
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7611
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7612
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
7613
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7614
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7615
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7616
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7617
		#可以省略的參數:
7618
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7619
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7620
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7621
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("userDir");
7622
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7623
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
7624
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7625
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
7626
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7627
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
7628
		#參考資料來源:
7629
		#array_keys=>http://php.net/manual/en/function.array-keys.php
7630
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7631
		unset($conf["variableCheck::checkArguments"]);
7632
 
7633
		#如果檢查失敗
7634
		if($checkResult["status"]==="false"){
7635
 
7636
			#設置錯誤狀態
7637
			$result["status"]="false";
7638
 
7639
			#設置錯誤提示
7640
			$result["error"]=$checkResult;
7641
 
7642
			#回傳結果
7643
			return $result;
7644
 
7645
			}#if end
7646
 
7647
		#如果檢查不通過
7648
		if($checkResult["passed"]==="false"){
7649
 
7650
			#設置錯誤狀態
7651
			$result["status"]="false";
7652
 
7653
			#設置錯誤提示
7654
			$result["error"]=$checkResult;
7655
 
7656
			#回傳結果
7657
			return $result;
7658
 
7659
			}#if end
7660
 
7661
		#如果是本來就是網址了
7662
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
7663
 
7664
			#設置執行正常
7665
			$result["status"]="true";
7666
 
7667
			#取得網址
7668
			$result["content"]=$conf["address"];
7669
 
7670
			#回傳結果
7671
			return $result;			
7672
 
7673
			}#if end	
7674
 
7675
		#解析 $conf["fileArgu"]
7676
		#函式說明:
7677
		#將固定格式的字串分開,並回傳分開的結果。
7678
		#回傳的參數:
7679
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7680
		#$result["error"],錯誤訊息陣列
7681
		#$result["function"],當前執行的函數名稱.
7682
		#$result["oriStr"],要分割的原始字串內容
7683
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7684
		#$result["dataCounts"],爲總共分成幾段
7685
		#必填參數:
7686
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7687
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7688
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7689
		unset($conf["stringProcess::spiltString"]); 
7690
 
7691
		#如果分割字串失敗
7692
		if($spiltString["status"]==="false"){
7693
 
7694
			#設置錯誤狀態
7695
			$result["status"]="false";
7696
 
7697
			#設置錯誤提示
7698
			$result["error"]=$spiltString;
7699
 
7700
			#回傳結果
7701
			return $result;
7702
 
7703
			}#if end
7704
 
7705
		#函式說明:
7706
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
7707
		#回傳結果:
7708
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7709
		#$result["error"],錯誤訊息陣列.
7710
		#$result["function"],函數名稱. 
7711
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
7712
		#必填參數:
7713
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
7714
		$conf["fileAccess::getRelativePath"]["path"]=array($conf["address"]);
7715
		#$conf["fileArgu"],字串,當前路徑.
7716
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
7717
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
7718
		unset($conf["fileAccess::getRelativePath"]);
7719
 
7720
		#如果取得相對位置失敗
7721
		if($getRelativePath["status"]==="false"){
7722
 
7723
			#設置錯誤狀態
7724
			$result["status"]="false";
7725
 
7726
			#設置錯誤提示
7727
			$result["error"]=$getRelativePath;
7728
 
7729
			#回傳結果
7730
			return $result;
7731
 
7732
			}#if end			
7733
 
7734
		#取得轉換成相對路徑的位置
7735
		$result["fileSystemRelativePosition"]=$getRelativePath["content"][0];
7736
 
7737
		#解析 $conf["fileArgu"]
7738
		#函式說明:
7739
		#將固定格式的字串分開,並回傳分開的結果。
7740
		#回傳的參數:
7741
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7742
		#$result["error"],錯誤訊息陣列
7743
		#$result["function"],當前執行的函數名稱.
7744
		#$result["oriStr"],要分割的原始字串內容
7745
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7746
		#$result["dataCounts"],爲總共分成幾段
7747
		#必填參數:
7748
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7749
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7750
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7751
		unset($conf["stringProcess::spiltString"]); 
7752
 
7753
		#如果分割字串失敗
7754
		if($spiltString["status"]==="false"){
7755
 
7756
			#設置錯誤狀態
7757
			$result["status"]="false";
7758
 
7759
			#設置錯誤提示
7760
			$result["error"]=$spiltString;
7761
 
7762
			#回傳結果
7763
			return $result;
7764
 
7765
			}#if end
7766
 
7767
		#debug
7768
		#var_dump($spiltString);
7769
		#var_dump($_SERVER);
7770
 
7771
		#初始化檔案在伺服器上的檔案系統位置
7772
		$result["fileSystemAbsoulutePosition"]="/";
7773
 
7774
		#將最後一段捨棄
7775
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7776
 
7777
			$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$spiltString["dataArray"][$i]."/";
7778
 
7779
			}#for end				
7780
 
7781
		#取得非直觀的絕對位置
7782
		$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$result["fileSystemRelativePosition"];
7783
 
7784
		#將檔案的相對路徑進行整理,變成可以直接讀的路徑.
7785
		#函式說明:
7786
		#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
7787
		#回傳的結果:
7788
		#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
7789
		#$result["function"],當前執行的函數.
7790
		#$result["error"],錯誤訊息陣列.
7791
		#$result["changedPath"],處理完後回傳的目錄字串.
7792
		#$result["oriPath"],原始的路徑字串
7793
		#必填參數:
7794
		#$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"],字串,要處理的檔案目錄字串.
7795
		$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$result["fileSystemAbsoulutePosition"];
7796
		$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
7797
		unset($conf["stringProcess::changeDirByDotDotSolidus"]);
7798
 
7799
		#如果處理失敗
7800
		if($changeDirByDotDotSolidus["status"]==="false"){
7801
 
7802
			#設置錯誤狀態
7803
			$result["status"]="false";
7804
 
7805
			#設置錯誤提示
7806
			$result["error"]=$changeDirByDotDotSolidus;
7807
 
7808
			#回傳結果
7809
			return $result;
7810
 
7811
			}#if end
7812
 
7813
		#改變為易讀的絕對路徑
7814
		$result["fileSystemAbsoulutePosition"]=$changeDirByDotDotSolidus["changedPath"];	
7815
 
7816
		#如果 $conf["userDir"] 為 "true"
7817
		if($conf["userDir"]==="true"){
7818
 
7819
			#重設為 絕對路徑 [/~家目錄名稱」
7820
			$result["webPathFromRoot"]="/~".$spiltString["dataArray"][1];
7821
 
7822
			#從第四段到倒數第二段,將其內容合併
7823
			for($i=3;$i<$spiltString["dataCounts"]-1;$i++){
7824
 
7825
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7826
 
7827
				}#for end
7828
 
7829
			}#if end
7830
 
7831
		#反之 $conf["userDir"] 為 "false",
7832
		else{
7833
 
7834
			#重設為 ""
7835
			$result["webPathFromRoot"]="";
7836
 
7837
			#可能的根目錄層級 - start 
7838
 
7839
			#解析 $conf["fileArgu"]
7840
			#函式說明:
7841
			#將固定格式的字串分開,並回傳分開的結果。
7842
			#回傳的參數:
7843
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7844
			#$result["error"],錯誤訊息陣列
7845
			#$result["function"],當前執行的函數名稱.
7846
			#$result["oriStr"],要分割的原始字串內容
7847
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7848
			#$result["dataCounts"],爲總共分成幾段
7849
			#必填參數:
7850
			$conf["stringProcess::spiltString"]["stringIn"]=$_SERVER["PHP_SELF"];#要處理的字串。
7851
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7852
			$keyWord=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7853
			unset($conf["stringProcess::spiltString"]); 
7854
 
7855
			#如果處理失敗
7856
			if($keyWord["status"]==="false"){
7857
 
7858
				#設置錯誤狀態
7859
				$result["status"]="false";
7860
 
7861
				#設置錯誤提示
7862
				$result["error"]=$keyWord;
7863
 
7864
				#回傳結果
7865
				return $result;
7866
 
7867
				}#if end
7868
 
7869
			#取得關鍵字
7870
			$keyWord=$keyWord["dataArray"][0];
7871
 
7872
			#預設層級為4層
7873
			$layer=4;
7874
 
7875
			#檢查每個絕對路徑片段
7876
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7877
 
7878
				#如果路徑片段等於 $keyWord
7879
				if($spiltString["dataArray"][$i]===$keyWord){
7880
 
7881
					#取得層級
7882
					$layer=$i;
7883
 
7884
					#跳出迴圈
7885
					break;
7886
 
7887
					}#if end
7888
 
7889
				}#for end
7890
 
7891
			#可能的根目錄層級 - end
7892
 
7893
			#網頁於檔案系統中的存放路徑可能為「/var/www/html」,從第四段到倒數第二段,將其內容合併
7894
			for($i=$layer;$i<$spiltString["dataCounts"]-1;$i++){
7895
 
7896
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7897
 
7898
				}#for end
7899
 
7900
			}#else end
7901
 
7902
		#加上檔案的路徑
7903
		$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$conf["address"];			
7904
 
7905
		#取得檔案位於網頁伺服器的絕對位置
7906
		#函式說明:
7907
		#取得用戶端的資訊,並依據需要寫入到資料表裡面
7908
		#回傳結果:
7909
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
7910
		#$result["error"],錯誤訊息.
7911
		#$result["function"],檔前執行的函數名稱.
7912
		#$result["userBrowserType"],爲使用者的瀏覽器資訊
7913
		#$result["userIp"],爲使用者的IP
7914
		#$result["serverIp"],為伺服器的IP
7915
		#$result["scheme"],通訊協定
7916
		#$result["serverPort"],伺服器給對外下載網頁的port
7917
		#$result["requestUri"],爲使用者要求的網址
7918
		#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
7919
		#$result["clientRequestIP"],用戶端要求的ip與port
7920
		#必填參數:
7921
		$conf["csInformation::getConnectionInfo"]["getAccount"]="false";#是否要取得帳號
7922
		#可省略參數:
7923
		#$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]
7924
		#$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存
7925
		#$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。
7926
		#$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。
7927
		#$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7928
		#$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7929
		#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,
7930
			#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
7931
			#寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間
7932
			#$conf["saveToDb"]設為"true",則該參數為必填。
7933
		#$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7934
		$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
7935
		unset($conf["csInformation::getConnectionInfo"]);	
7936
 
7937
		#如果取得連線資訊失敗
7938
		if($getConnectionInfo["status"]==="false"){
7939
 
7940
			#設置錯誤狀態
7941
			$result["status"]="false";
7942
 
7943
			#設置錯誤提示
7944
			$result["error"]=$getConnectionInfo;
7945
 
7946
			#回傳結果
7947
			return $result;
7948
 
7949
			}#if end
7950
 
7951
		#如果運行環境為 "web"
7952
		if($getConnectionInfo["mode"]=="web"){
7953
 
7954
			#為絕對路徑加上通訊協定與ip與port
7955
			#$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["serverIp"].":".$getConnectionInfo["serverPort"].$result["webPathFromRoot"];	
7956
 
7957
			#為絕對路徑加上用戶端通訊協定與ip與port	
7958
			$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["clientRequestIP"].$result["webPathFromRoot"];
7959
 
7960
			}#if end
7961
 
7962
		#反之如果為 "cmd" 環境
7963
		else{
7964
 
7965
			$result["content"]="null";
7966
 
7967
			}#else end
7968
 
7969
		#設置執行正常
7970
		$result["status"]="true";
7971
 
7972
		#回傳結果
7973
		return $result;
7974
 
7975
		}#function getInternetAddress end
7976
 
7977
	/*
7978
	#函式說明:
7979
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7980
	#回傳結果:
7981
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7982
	#$result["error"],錯誤訊息陣列.
7983
	#$result["function"],函數名稱. 
7984
	#$result["argu"],使用的參數.
7985
	#$result["content"],網址,若是在命令列執行,則為"null".
7986
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7987
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
7988
	#必填參數:
7989
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7990
	$conf["address"]="";
7991
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7992
	$conf["fileArgu"]=__FILE__;
7993
	#可省略參數:
7994
	#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
7995
	#$conf["web"]="true";
7996
	#參考資料:
7997
	#無.
7998
	#備註:
7999
	#無.
8000
	*/
8001
	public static function getInternetAddressV2(&$conf){
8002
 
8003
		#初始化要回傳的變數
8004
		$result=array();
8005
 
8006
		#記錄當前執行的函數名稱
8007
		$result["function"]=__FUNCTION__;
8008
 
8009
		#取得參數
8010
		$result["argu"]=$conf;
8011
 
8012
		#檢查參數
8013
		#函式說明:
8014
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8015
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8016
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8017
		#$result["function"],當前執行的函式名稱.
8018
		#$result["argu"],設置給予的參數.
8019
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8020
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8021
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8022
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
8023
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
8024
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8025
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8026
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8027
		#必填寫的參數:
8028
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8029
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8030
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8031
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8032
		#可以省略的參數:
8033
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8034
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
8035
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
8036
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8037
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
8038
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8039
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
8040
		#$conf["canNotBeEmpty"]=array();
8041
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
8042
		#$conf["canBeEmpty"]=array();
8043
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
8044
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
8045
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8046
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
8047
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
8048
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
8049
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8050
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
8051
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
8052
		#$conf["disallowAllSkipableVarIsEmpty"]="";
8053
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
8054
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
8055
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8056
		#$conf["arrayCountEqualCheck"][]=array();
8057
		#參考資料來源:
8058
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8059
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8060
		unset($conf["variableCheck::checkArguments"]);
8061
 
8062
		#如果檢查失敗
8063
		if($checkArguments["status"]==="false"){
8064
 
8065
			#設置錯誤狀態
8066
			$result["status"]="false";
8067
 
8068
			#設置錯誤提示
8069
			$result["error"]=$checkArguments;
8070
 
8071
			#回傳結果
8072
			return $result;
8073
 
8074
			}#if end
8075
 
8076
		#如果檢查不通過
8077
		if($checkArguments["passed"]==="false"){
8078
 
8079
			#設置錯誤狀態
8080
			$result["status"]="false";
8081
 
8082
			#設置錯誤提示
8083
			$result["error"]=$checkArguments;
8084
 
8085
			#回傳結果
8086
			return $result;
8087
 
8088
			}#if end
8089
 
8090
		#如果是本來就是網址了
8091
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
8092
 
8093
			#取得網址
8094
			$result["content"]=$conf["address"];
8095
 
8096
			}#if end
8097
 
8098
		#反之是絕對或相對路徑
8099
		else{
8100
 
8101
			#確認 $conf["address"] 是否為 escaped 後的內容
8102
			#函式說明:
8103
			#判斷字串是否一定需要經過escapeshellarg才能為單一shell參數,並回傳可以成為單一shell參數的結果.
8104
			#回傳結果:
8105
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8106
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
8107
			#$result["function"],當前執行的函式名稱.
8108
			#$result["argu"],使用的參數.
8109
			#$result["content"],字串,單一shell參數.
8110
			#$result["escaped"],字串,"true"代表content為 escape後的結果;反之為"false".
8111
			#$result["urlEncodeStr"],字串,未被escape過的單一shell參數被url encode後的結果.
8112
			#必填參數:
8113
			#$conf["str"],字串,認為要為單一 shell參數的字串.
8114
			$conf["stringProcess::toSingleShellArg"]["str"]=$conf["address"];
8115
			#可省略參數:
8116
			#無.
8117
			#參考資料:
8118
			#無.
8119
			#備註:
8120
			#無.
8121
			$toSingleShellArg=stringProcess::toSingleShellArg($conf["stringProcess::toSingleShellArg"]);
8122
			unset($conf["stringProcess::toSingleShellArg"]);
8123
 
8124
			#如果執行失敗
8125
			if($toSingleShellArg["status"]==="false"){
8126
 
8127
				#設置錯誤狀態
8128
				$result["status"]="false";
8129
 
8130
				#設置錯誤提示
8131
				$result["error"]=$toSingleShellArg;
8132
 
8133
				#回傳結果
8134
				return $result;
8135
 
8136
				}#if end
8137
 
8138
			#取得不含escape字元的address參數
8139
			$conf["address"]=urldecode($toSingleShellArg["urlEncodeStr"]);
8140
 
8141
			#不是絕對位置
8142
			if(strpos($conf["address"],"/")!==0){
8143
 
8144
				#如果有這些參數
8145
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8146
 
8147
					#網址
8148
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8149
 
8150
					}#if end
8151
 
8152
				#反之
8153
				else{
8154
 
8155
					#網址設置為 null
8156
					$result["content"]=null;
8157
 
8158
					}#else
8159
 
8160
				}#if end
8161
 
8162
			#反之是絕對位置
8163
			else{
8164
 
8165
				#移除開頭的 "/"
8166
				$conf["address"]=substr($conf["address"],1);
8167
 
8168
				#如果有這些參數
8169
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8170
 
8171
					#網址
8172
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8173
 
8174
					}#if end
8175
 
8176
				#反之
8177
				else{
8178
 
8179
					#網址設置為 null
8180
					$result["content"]=null;
8181
 
8182
					}#else
8183
 
8184
				}#else end
8185
 
8186
			#取得 doc root;
8187
			$docRoot=$_SERVER['DOCUMENT_ROOT'];
8188
 
8189
			#如果不是網路環境
8190
			if($conf["web"]==="false"){
8191
 
8192
				#不採用 docRoot
8193
				$docRoot="";
8194
 
8195
				}#if end
8196
 
8197
			#如果不存在 DOCUMENT_ROOT 變數或 web 參數為 "false" 且為相對位置.
8198
			if( ($_SERVER['DOCUMENT_ROOT']==="" || $conf["web"]==="false") && (strpos($result["argu"]["address"],"/")!==0) ){
8199
 
8200
				#執行 "pwd" 取得當前位置
8201
				exec("pwd",$output,$status);
8202
 
8203
				#預設為`pwd`的結果加"/"
8204
				$docRoot=$output[0]."/";
8205
 
8206
				}#if end	
8207
 
8208
			#如果是絕對位置
8209
			else if(strpos($result["argu"]["address"],"/")===0){
8210
 
8211
				#補回 "/" 
8212
				$conf["address"]="/".$conf["address"];
8213
 
8214
				}#if end
8215
 
8216
			#針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
8217
			$result["fileSystemAbsoulutePosition"]=$docRoot.$conf["address"];
8218
 
8219
			}#else end
8220
 
8221
		#設置執行正常
8222
		$result["status"]="true";	
8223
 
8224
		#回傳結果
8225
		return $result;
8226
 
8227
		}#function getInternetAddressV2 end
8228
 
8229
	/*
8230
	#函式說明:
8231
	#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
8232
	#回傳結果:
8233
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8234
	#$result["error"],錯誤訊息陣列.
8235
	#$result["function"],函數名稱. 
8236
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
8237
	#必填參數:
8238
	#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
8239
	$conf["path"]="";
8240
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8241
	$conf["fileArgu"]=__FILE__;
8242
	#可省略參數:
8243
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
8244
	#$conf["noDotStart"]="true";
8245
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
8246
	#$conf["noWaveEnd"]="true";
8247
	#參考資料:
8248
	#無.
8249
	#備註:
8250
	#無.
8251
	*/
8252
	public static function resolvePostionStringWhichContainStarSymbol(&$conf){
8253
 
8254
		#初始化要回傳的結果
8255
		$result=array();
8256
 
8257
		#設置當其函數名稱
8258
		$result["function"]=__FUNCTION__;
8259
 
8260
		#如果 $conf 不為陣列
8261
		if(gettype($conf)!="array"){
8262
 
8263
			#設置執行失敗
8264
			$result["status"]="false";
8265
 
8266
			#設置執行錯誤訊息
8267
			$result["error"][]="\$conf變數須為陣列形態";
8268
 
8269
			#如果傳入的參數為 null
8270
			if($conf==null){
8271
 
8272
				#設置執行錯誤訊息
8273
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8274
 
8275
				}#if end
8276
 
8277
			#回傳結果
8278
			return $result;
8279
 
8280
			}#if end
8281
 
8282
		#檢查參數
8283
		#函式說明:
8284
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8285
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8286
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8287
		#$result["function"],當前執行的函式名稱.
8288
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8289
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8290
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8291
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
8292
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8293
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8294
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8295
		#必填寫的參數:
8296
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8297
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8298
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8299
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
8300
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
8301
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8302
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8303
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8304
		#可以省略的參數:
8305
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
8306
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8307
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8308
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
8309
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
8310
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
8311
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8312
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
8313
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8314
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
8315
		#參考資料來源:
8316
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8317
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8318
		unset($conf["variableCheck::checkArguments"]);
8319
 
8320
		#如果 $checkResult["status"] 等於 "fasle"
8321
		if($checkResult["status"]==="false"){
8322
 
8323
			#設置錯誤識別
8324
			$result["status"]="false";
8325
 
8326
			#設置錯誤訊息
8327
			$result["error"]=$checkResult;
8328
 
8329
			#回傳結果
8330
			return $result;
8331
 
8332
			}#if end
8333
 
8334
		#如果 $checkResult["passed"] 等於 "fasle"
8335
		if($checkResult["passed"]==="false"){
8336
 
8337
			#設置錯誤識別
8338
			$result["status"]="false";
8339
 
8340
			#設置錯誤訊息
8341
			$result["error"]=$checkResult;
8342
 
8343
			#回傳結果
8344
			return $result;
8345
 
8346
			}#if end
8347
 
8348
		#轉換檔案路徑為相對於伺服器檔案系統的絕對路徑
8349
		#函式說明:
8350
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
8351
		#回傳結果:
8352
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8353
		#$result["error"],錯誤訊息陣列.
8354
		#$result["function"],函數名稱. 
8355
		#$result["content"],網址.
8356
		#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
8357
		#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
8358
		#必填參數:
8359
		#$conf["address"],字串,檔案的相對位置.
8360
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["path"];
8361
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8362
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
8363
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
8364
		$conf["fileAccess::getInternetAddress"]["userDir"]="true";
8365
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
8366
		unset($conf["fileAccess::getInternetAddress"]);
8367
 
8368
		#如果轉換路徑失敗
8369
		if($getInternetAddress["status"]=="false"){
8370
 
8371
			#設置錯誤識別
8372
			$result["status"]="false";
8373
 
8374
			#設置錯誤訊息
8375
			$result["error"]=$checkResult;
8376
 
8377
			#回傳結果
8378
			return $result;
8379
 
8380
			}#if end
8381
 
8382
		#取得轉換好的路徑
8383
		$conf["path"]=$getInternetAddress["fileSystemAbsoulutePosition"];
8384
 
8385
		#檢查檔案路徑字串是否含有「*」
8386
		#函式說明:
8387
		#檢查字串裡面有無指定的關鍵字
8388
		#回傳結果:
8389
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8390
		#$result["error"],錯誤訊息
8391
		#$result["function"],當前執行的函數名稱.
8392
		#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8393
		#$result["keyWordCount"],找到的關鍵字數量.
8394
		#必填參數:
8395
		$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8396
		$conf["search::findKeyWord"]["string"]=$conf["path"];#要被搜尋的字串內容
8397
		#可省略參數:
8398
		#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8399
		$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8400
		unset($conf["search::findKeyWord"]);
8401
 
8402
		#如果尋找關鍵字出錯
8403
		if($findKeyWord["status"]=="false"){
8404
 
8405
			#設置錯誤識別
8406
			$result["status"]="false";
8407
 
8408
			#設置錯誤訊息
8409
			$result["error"]=$findKeyWord;
8410
 
8411
			#回傳結果
8412
			return $result;
8413
 
8414
			}#if end
8415
 
8416
		#如果含有「*」
8417
		if($findKeyWord["founded"]=="true"){
8418
 
8419
			#透過「/」分割路徑字串
8420
			#函式說明:
8421
			#將固定格式的字串分開,並回傳分開的結果。
8422
			#回傳的參數:
8423
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8424
			#$result["error"],錯誤訊息陣列
8425
			#$result["function"],當前執行的函數名稱.
8426
			#$result["oriStr"],要分割的原始字串內容
8427
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8428
			#$result["dataCounts"],爲總共分成幾段
8429
			#必填參數:
8430
			$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];#要處理的字串。
8431
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8432
			$spiltPathStr=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8433
			unset($conf["stringProcess::spiltString"]);
8434
 
8435
			#如果分割字串失敗
8436
			if($spiltPathStr["status"]=="false"){
8437
 
8438
				#設置錯誤識別
8439
				$result["status"]="false";
8440
 
8441
				#設置錯誤訊息
8442
				$result["error"]=$spiltPathStr;
8443
 
8444
				#回傳結果
8445
				return $result;
8446
 
8447
				}#if end
8448
 
8449
			#初始化暫存展開後的檔案路徑字串
8450
			$extendPath=array("");			
8451
 
8452
			#要解析的路徑分成幾段就執行幾次
8453
			foreach($spiltPathStr["dataArray"] as $pathPart){
8454
 
8455
				#檢查該段名稱是否有「*」
8456
				#函式說明:
8457
				#檢查字串裡面有無指定的關鍵字
8458
				#回傳結果:
8459
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8460
				#$result["error"],錯誤訊息
8461
				#$result["function"],當前執行的函數名稱.
8462
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8463
				#$result["keyWordCount"],找到的關鍵字數量.
8464
				#必填參數:
8465
				$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8466
				$conf["search::findKeyWord"]["string"]=$pathPart;#要被搜尋的字串內容
8467
				#可省略參數:
8468
				#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8469
				$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8470
				unset($conf["search::findKeyWord"]);
8471
 
8472
				#如果尋找關鍵字出錯
8473
				if($findKeyWord["status"]=="false"){
8474
 
8475
					#設置錯誤識別
8476
					$result["status"]="false";
8477
 
8478
					#設置錯誤訊息
8479
					$result["error"]=$findKeyWord;
8480
 
8481
					#回傳結果
8482
					return $result;
8483
 
8484
					}#if end									
8485
 
8486
				#如果不含「*」
8487
				if($findKeyWord["founded"]=="false"){
8488
 
8489
					#針對每個既有的路徑
8490
					for($i=0;$i<count($extendPath);$i++){
8491
 
8492
						#加上切割好的路徑
8493
						$extendPath[$i]=$extendPath[$i]."/".$pathPart;
8494
 
8495
						}#for end
8496
 
8497
					}#if end
8498
 
8499
				#反之該段含有「*」	
8500
				else{
8501
 
8502
					#用「*」分割該段
8503
					#函式說明:
8504
					#將固定格式的字串分開,並回傳分開的結果。
8505
					#回傳的參數:
8506
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8507
					#$result["error"],錯誤訊息陣列
8508
					#$result["function"],當前執行的函數名稱.
8509
					#$result["oriStr"],要分割的原始字串內容
8510
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8511
					#$result["dataCounts"],爲總共分成幾段
8512
					#必填參數:
8513
					$conf["stringProcess::spiltString"]["stringIn"]=$pathPart;#要處理的字串。
8514
					$conf["stringProcess::spiltString"]["spiltSymbol"]="*";#爲以哪個符號作爲分割
8515
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8516
					unset($conf["stringProcess::spiltString"]);
8517
 
8518
					#如果分字串失敗
8519
					if($spiltString["status"]=="false"){
8520
 
8521
						#設置錯誤識別
8522
						$result["status"]="false";
8523
 
8524
						#設置錯誤訊息
8525
						$result["error"]=$spiltStringByStar;
8526
 
8527
						#回傳結果
8528
						return $result;
8529
 
8530
						}#if end
8531
 
8532
					#如果用「*」分割後的段數為0
8533
					if($spiltString["dataCounts"]==0){
8534
 
8535
						#初始化儲存符合條件的路徑
8536
						$newExtendPath=array();
8537
 
8538
						#代表沒有塞選條件
8539
						#當前有幾個符合條件的路徑就執行幾次
8540
						for($i=0;$i<count($extendPath);$i++){
8541
 
8542
							#取得該目錄下所有的東西
8543
							#取得該目錄底下的檔案目錄清單
8544
							#函式說明:
8545
							#取得目錄底下所有目錄與檔案清單.
8546
							#回傳結果:
8547
							#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8548
							#$result["error"],錯誤訊息陣列.
8549
							#$result["function"],函數名稱.
8550
							#$result["content"],陣列,目錄底下的檔案與子目錄.
8551
							#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8552
							#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8553
							#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8554
							#$result["position"],目前的位置.
8555
							#必填參數:
8556
							#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8557
							$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8558
							#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8559
							$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
8560
							#可省略參數:
8561
							#無
8562
							#參考資料來源:
8563
							#opendir=>http://php.net/manual/en/function.opendir.php
8564
							#is_dir=>http://php.net/manual/en/function.is-dir.php
8565
							$getList=fileAccess::getList($conf["fileAccess::getList"]);
8566
							unset($conf["fileAccess::getList"]);										
8567
 
8568
							#如果取得目標目錄底下的檔案目錄清單失敗
8569
							if($getList["status"]=="false"){
8570
 
8571
								#設置錯誤識別
8572
								$result["status"]="false";
8573
 
8574
								#設置錯誤訊息
8575
								$result["error"]=$getList;																				
8576
 
8577
								#回傳結果
8578
								return $result;
8579
 
8580
								}#if end
8581
 
8582
							#如果底下有東西
8583
							if(count($getList["content"])>0){
8584
 
8585
								#初始化儲存要檢查的檔案或資料夾名稱陣列
8586
								$list=array();
8587
 
8588
								#針對每個檔案或資料夾
8589
								foreach($getList["content"] as $num=>$array){
8590
 
8591
									#儲存該名稱
8592
									$list[]=$array["name"];
8593
 
8594
									}#foreach end
8595
 
8596
								#初始化儲存符合新條件字串的陣列
8597
								$tempExtendPath=array();
8598
 
8599
								#針對每個現有的路徑字串
8600
								for($j=0;$j<count($extendPath);$j++){
8601
 
8602
									#附加每個符合條件的名稱到路徑字串裡面
8603
									for($k=0;$k<count($list);$k++){
8604
 
8605
										#如果 $conf["noDotStart"] 為 "true"
8606
										if($conf["noDotStart"]==="true"){
8607
 
8608
											#將 $list[$k] 用 "/" 分割
8609
											#函式說明:
8610
											#將固定格式的字串分開,並回傳分開的結果。
8611
											#回傳結果:
8612
											#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8613
											#$result["error"],錯誤訊息陣列
8614
											#$result["function"],當前執行的函數名稱.
8615
											#$result["oriStr"],要分割的原始字串內容
8616
											#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8617
											#$result["dataCounts"],爲總共分成幾段
8618
											#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
8619
											#必填參數:
8620
											$conf["stringProcess::spiltString"]["stringIn"]=$list[$k];#要處理的字串。
8621
											$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8622
											#可省略參數:
8623
											#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
8624
											$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
8625
											$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8626
											unset($conf["stringProcess::spiltString"]);
8627
 
8628
											#如果分割路徑失敗
8629
											if($spiltString["status"]==="false"){
8630
 
8631
												#設置執行錯誤識別
8632
												$result["status"]="false";
8633
 
8634
												#取得錯誤訊息
8635
												$result["error"]=$spiltString;
8636
 
8637
												#回傳結果
8638
												return $result;
8639
 
8640
												}#if end
8641
 
8642
											#如果有關鍵字「/」存在
8643
											if($spiltString["found"]==="true"){
8644
 
8645
												#針對每個段落
8646
												foreach($spiltString["dataArray"] as $pp){
8647
 
8648
													#看該符合的名稱開頭是否包含「.」
8649
													#函式說明:
8650
													#取得符合特定字首與字尾的字串
8651
													#回傳結果:
8652
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8653
													#$result["function"],當前執行的函數名稱.
8654
													#$result["error"],錯誤訊息陣列.
8655
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8656
													#$result["returnString"],爲符合字首條件的字串內容。
8657
													#必填參數:
8658
													#$conf["checkString"],字串,要檢查的字串.
8659
													$conf["search::getMeetConditionsString"]["checkString"]=$pp;
8660
													#可省略參數:
8661
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8662
													$conf["search::getMeetConditionsString"]["frontWord"]=".";
8663
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8664
													#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8665
													#參考資料:
8666
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8667
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8668
													unset($conf["search::getMeetConditionsString"]);
8669
 
8670
													#如果 取得符合特定字首的字串 出錯
8671
													if($getMeetConditionsString["status"]=="false"){
8672
 
8673
														#設置執行錯誤識別
8674
														$result["status"]="false";
8675
 
8676
														#設置錯誤訊息
8677
														$result["error"]=$getMeetConditionsString;
8678
 
8679
														#回傳結果
8680
														return $result;
8681
 
8682
														}#if end
8683
 
8684
													#如果有「.」在開頭
8685
													if($getMeetConditionsString["founded"]=="true"){
8686
 
8687
														#忽略這個名稱 
8688
														continue 2;
8689
 
8690
														}#if end
8691
 
8692
													}#foreach end
8693
 
8694
												}#if end
8695
 
8696
											#反之沒有關鍵字「/」存在
8697
											else{
8698
 
8699
												#看該符合的名稱開頭是否包含「.」
8700
												#函式說明:
8701
												#取得符合特定字首與字尾的字串
8702
												#回傳結果:
8703
												#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8704
												#$result["function"],當前執行的函數名稱.
8705
												#$result["error"],錯誤訊息陣列.
8706
												#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8707
												#$result["returnString"],爲符合字首條件的字串內容。
8708
												#必填參數:
8709
												#$conf["checkString"],字串,要檢查的字串.
8710
												$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8711
												#可省略參數:
8712
												#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8713
												$conf["search::getMeetConditionsString"]["frontWord"]=".";
8714
												#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8715
												#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8716
												#參考資料:
8717
												#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8718
												$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8719
												unset($conf["search::getMeetConditionsString"]);
8720
 
8721
												#如果 取得符合特定字首的字串 出錯
8722
												if($getMeetConditionsString["status"]=="false"){
8723
 
8724
													#設置執行錯誤識別
8725
													$result["status"]="false";
8726
 
8727
													#設置錯誤訊息
8728
													$result["error"]=$getMeetConditionsString;
8729
 
8730
													#回傳結果
8731
													return $result;
8732
 
8733
													}#if end
8734
 
8735
												#如果有「.」在開頭
8736
												if($getMeetConditionsString["founded"]=="true"){
8737
 
8738
													#忽略這個名稱 
8739
													continue;
8740
 
8741
													}#if end
8742
 
8743
												}#else end
8744
 
8745
											}#if end
8746
 
8747
										#如果 $conf["noWaveEnd"] 為 "true"
8748
										if($conf["noWaveEnd"]==="true"){
8749
 
8750
											#看該符合的名稱結尾是否包含「~」
8751
											#函式說明:
8752
											#取得符合特定字首與字尾的字串
8753
											#回傳結果:
8754
											#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8755
											#$result["function"],當前執行的函數名稱.
8756
											#$result["error"],錯誤訊息陣列.
8757
											#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8758
											#$result["returnString"],爲符合字首條件的字串內容。
8759
											#必填參數:
8760
											#$conf["checkString"],字串,要檢查的字串.
8761
											$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8762
											#可省略參數:
8763
											#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8764
											#$conf["search::getMeetConditionsString"]["frontWord"]=".";
8765
											#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8766
											$conf["search::getMeetConditionsString"]["tailWord"]="~";
8767
											#參考資料:
8768
											#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8769
											$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8770
											unset($conf["search::getMeetConditionsString"]);
8771
 
8772
											#如果 取得符合特定字首的字串 出錯
8773
											if($getMeetConditionsString["status"]=="false"){
8774
 
8775
												#設置執行錯誤識別
8776
												$result["status"]="false";
8777
 
8778
												#設置錯誤訊息
8779
												$result["error"]=$getMeetConditionsString;
8780
 
8781
												#回傳結果
8782
												return $result;
8783
 
8784
												}#if end
8785
 
8786
											#如果有「~」在結尾
8787
											if($getMeetConditionsString["founded"]=="true"){
8788
 
8789
												#忽略這個名稱
8790
												continue;
8791
 
8792
												}#if end
8793
 
8794
											}#if end
8795
 
8796
										#暫存該符合的路徑
8797
										$tempExtendPath[]=$extendPath[$j]."/".$list[$k];
8798
 
8799
										}#for end
8800
 
8801
									}#for end	
8802
 
8803
								#該次有幾個符合的路徑就執行幾次
8804
								foreach($tempExtendPath as $path){
8805
 
8806
									#暫存符合的路徑
8807
									$newExtendPath[]=$path;
8808
 
8809
									}#for end	
8810
 
8811
								}#if end
8812
 
8813
							#反之該目錄底下沒有東西
8814
							else{
8815
 
8816
								#移除該 $extendPath[$i]
8817
								unset($extendPath[$i]);
8818
 
8819
								}#else end					
8820
 
8821
							}#for end
8822
 
8823
						#置換原始符合條件字串的路徑字串陣列
8824
						$extendPath=$newExtendPath;
8825
 
8826
						}#if end
8827
 
8828
						#反之用「*」分割後有分段
8829
						else{
8830
 
8831
							#初始化暫存符合條件的新路徑陣列變數
8832
							$newExtendPath=array();
8833
 
8834
							#當前有幾個符合條件的路徑就執行幾次
8835
							for($i=0;$i<count($extendPath);$i++){
8836
 
8837
								#取得該目錄下所有的東西
8838
								#函式說明:
8839
								#取得目錄底下所有目錄與檔案清單.
8840
								#回傳結果:
8841
								#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8842
								#$result["error"],錯誤訊息陣列.
8843
								#$result["function"],函數名稱.
8844
								#$result["content"],陣列,目錄底下的檔案與子目錄.
8845
								#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8846
								#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8847
								#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8848
								#$result["position"],目前的位置.
8849
								#必填參數:
8850
								#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8851
								$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8852
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8853
								$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
8854
								#可省略參數:
8855
								#無
8856
								#參考資料來源:
8857
								#opendir=>http://php.net/manual/en/function.opendir.php
8858
								#is_dir=>http://php.net/manual/en/function.is-dir.php
8859
								$getList=fileAccess::getList($conf["fileAccess::getList"]);
8860
								unset($conf["fileAccess::getList"]);										
8861
 
8862
								#如果取得目標目錄底下的檔案目錄清單失敗
8863
								if($getList["status"]=="false"){
8864
 
8865
									#設置錯誤識別
8866
									$result["status"]="false";
8867
 
8868
									#設置錯誤訊息
8869
									$result["error"]=$getList;																				
8870
 
8871
									#回傳結果
8872
									return $result;
8873
 
8874
									}#if end
8875
 
8876
								#如果底下有東西
8877
								if(count($getList["content"])>0){
8878
 
8879
									#初始化儲存要檢查的檔案或資料夾名稱陣列
8880
									$list=array();
8881
 
8882
									#針對每個檔案或資料夾
8883
									foreach($getList["content"] as $num=>$array){
8884
 
8885
										#儲存該名稱
8886
										$list[]=$array["name"];
8887
 
8888
										}#foreach end
8889
 
8890
									#初始化儲存符合的名稱
8891
									$passedName=array();
8892
 
8893
									#依據每個檔案目錄名稱,檢查有無符合篩選條件
8894
									foreach($list as $filteredName){
8895
 
8896
										#初始化儲存被檢查的片段檔案資料夾名稱
8897
										$partName=$filteredName;
8898
 
8899
										#依據 $pathPart 分割成幾段(關鍵字數量)就執行幾次
8900
										for($i=0;$i<$spiltString["dataCounts"];$i++){
8901
 
8902
											#尋找關鍵字 $spiltString["dataArray"][$i]
8903
											#函式說明:
8904
											#檢查字串裡面有無指定的關鍵字
8905
											#回傳結果:
8906
											#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8907
											#$result["error"],錯誤訊息
8908
											#$result["function"],當前執行的函數名稱.
8909
											#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8910
											#$result["keyWordCount"],找到的關鍵字數量.
8911
											#必填參數:
8912
											$conf["search::findKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#想要搜尋的關鍵字
8913
											$conf["search::findKeyWord"]["string"]=$partName;#要被搜尋的字串內容
8914
											#可省略參數:
8915
											#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8916
											$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8917
											unset($conf["search::findKeyWord"]);
8918
 
8919
											#如果尋找關鍵字失敗
8920
											if($findKeyWord["status"]=="false"){
8921
 
8922
												#設置執行錯誤識別
8923
												$result["status"]="false";
8924
 
8925
												#設置錯誤訊息
8926
												$result["error"]=$findKeyWord;
8927
 
8928
												#回傳結果
8929
												return $result;
8930
 
8931
												}#if end
8932
 
8933
											#如果有找到關鍵字
8934
											if($findKeyWord["founded"]=="true"){
8935
 
8936
												#如果是最後一段要檢查的關鍵字
8937
												if($i==$spiltString["dataCounts"]-1){
8938
 
8939
													#判斷該關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的開頭
8940
													#函式說明:
8941
													#取得符合特定字首與字尾的字串
8942
													#回傳結果:
8943
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8944
													#$result["function"],當前執行的函數名稱.
8945
													#$result["error"],錯誤訊息陣列.
8946
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8947
													#$result["returnString"],爲符合字首條件的字串內容。
8948
													#必填參數:
8949
													#$conf["checkString"],字串,要檢查的字串.
8950
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
8951
													#可省略參數:
8952
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8953
													$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8954
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8955
													#$conf["tailWord"]="";
8956
													#參考資料:
8957
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8958
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8959
													unset($conf["search::getMeetConditionsString"]);
8960
 
8961
													#如果 取得符合特定字首的字串 出錯
8962
													if($getMeetConditionsString["status"]=="false"){
8963
 
8964
														#設置執行錯誤識別
8965
														$result["status"]="false";
8966
 
8967
														#設置錯誤訊息
8968
														$result["error"]=$getMeetConditionsString;
8969
 
8970
														#回傳結果
8971
														return $result;
8972
 
8973
														}#if end
8974
 
8975
													#如果關鍵字是在開頭
8976
													if($getMeetConditionsString["founded"]=="true"){
8977
 
8978
														#判斷關鍵字是否在該檔案目錄名稱的開頭
8979
														#函式說明:
8980
														#取得符合特定字首與字尾的字串
8981
														#回傳結果:
8982
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8983
														#$result["function"],當前執行的函數名稱.
8984
														#$result["error"],錯誤訊息陣列.
8985
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8986
														#$result["returnString"],爲符合字首條件的字串內容。
8987
														#必填參數:
8988
														#$conf["checkString"],字串,要檢查的字串.
8989
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
8990
														#可省略參數:
8991
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8992
														$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8993
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8994
														#$conf["tailWord"]="";
8995
														#參考資料:
8996
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8997
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8998
														unset($conf["search::getMeetConditionsString"]);
8999
 
9000
														#如果 取得符合特定字首的字串 出錯
9001
														if($getMeetConditionsString["status"]=="false"){
9002
 
9003
															#設置執行錯誤識別
9004
															$result["status"]="false";
9005
 
9006
															#設置錯誤訊息
9007
															$result["error"]=$getMeetConditionsString;
9008
 
9009
															#回傳結果
9010
															return $result;
9011
 
9012
															}#if end
9013
 
9014
														#如果關鍵字不在開頭
9015
														if($getMeetConditionsString["founded"]=="false"){
9016
 
9017
															#不符合條件,跳過該檔案目錄名稱
9018
															break;
9019
 
9020
															}#if end
9021
 
9022
														}#if end
9023
 
9024
													#判斷最後一個關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的結尾
9025
													#函式說明:
9026
													#取得符合特定字首與字尾的字串
9027
													#回傳結果:
9028
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9029
													#$result["function"],當前執行的函數名稱.
9030
													#$result["error"],錯誤訊息陣列.
9031
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9032
													#$result["returnString"],爲符合字首條件的字串內容。
9033
													#必填參數:
9034
													#$conf["checkString"],字串,要檢查的字串.
9035
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
9036
													#可省略參數:
9037
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9038
													#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
9039
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9040
													$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9041
													#參考資料:
9042
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9043
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9044
													unset($conf["search::getMeetConditionsString"]);
9045
 
9046
													#如果 取得符合特定字尾的字串 出錯
9047
													if($getMeetConditionsString["status"]=="false"){
9048
 
9049
														#設置執行錯誤識別
9050
														$result["status"]="false";
9051
 
9052
														#設置錯誤訊息
9053
														$result["error"]=$getMeetConditionsString;
9054
 
9055
														#回傳結果
9056
														return $result;
9057
 
9058
														}#if end
9059
 
9060
													#如果關鍵字是在字尾
9061
													if($getMeetConditionsString["founded"]=="true"){
9062
 
9063
														#判斷關鍵字是否在該片段的開頭
9064
														#函式說明:
9065
														#取得符合特定字首與字尾的字串
9066
														#回傳結果:
9067
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9068
														#$result["function"],當前執行的函數名稱.
9069
														#$result["error"],錯誤訊息陣列.
9070
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9071
														#$result["returnString"],爲符合字首條件的字串內容。
9072
														#必填參數:
9073
														#$conf["checkString"],字串,要檢查的字串.
9074
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9075
														#可省略參數:
9076
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9077
														#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
9078
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9079
														$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9080
														#參考資料:
9081
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9082
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9083
														unset($conf["search::getMeetConditionsString"]);
9084
 
9085
														#如果 取得符合特定字首的字串 出錯
9086
														if($getMeetConditionsString["status"]=="false"){
9087
 
9088
															#設置執行錯誤識別
9089
															$result["status"]="false";
9090
 
9091
															#設置錯誤訊息
9092
															$result["error"]=$getMeetConditionsString;
9093
 
9094
															#回傳結果
9095
															return $result;
9096
 
9097
															}#if end
9098
 
9099
														#如果關鍵字不在結尾
9100
														if($getMeetConditionsString["founded"]=="false"){
9101
 
9102
															#不符合條件,跳過該檔案目錄名稱
9103
															break;
9104
 
9105
															}#if end
9106
 
9107
														}#if end
9108
 
9109
													#如果 $conf["noDotStart"] 為 "true"
9110
													if($conf["noDotStart"]==="true"){
9111
 
9112
														#看該符合的名稱開頭是否包含「.」
9113
														#函式說明:
9114
														#取得符合特定字首與字尾的字串
9115
														#回傳結果:
9116
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9117
														#$result["function"],當前執行的函數名稱.
9118
														#$result["error"],錯誤訊息陣列.
9119
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9120
														#$result["returnString"],爲符合字首條件的字串內容。
9121
														#必填參數:
9122
														#$conf["checkString"],字串,要檢查的字串.
9123
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9124
														#可省略參數:
9125
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9126
														$conf["search::getMeetConditionsString"]["frontWord"]=".";
9127
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9128
														#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9129
														#參考資料:
9130
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9131
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9132
														unset($conf["search::getMeetConditionsString"]);
9133
 
9134
														#如果 取得符合特定字首的字串 出錯
9135
														if($getMeetConditionsString["status"]=="false"){
9136
 
9137
															#設置執行錯誤識別
9138
															$result["status"]="false";
9139
 
9140
															#設置錯誤訊息
9141
															$result["error"]=$getMeetConditionsString;
9142
 
9143
															#回傳結果
9144
															return $result;
9145
 
9146
															}#if end
9147
 
9148
														#如果有「.」在開頭
9149
														if($getMeetConditionsString["founded"]=="true"){
9150
 
9151
															#中斷迴圈
9152
															break;
9153
 
9154
															}#if end
9155
 
9156
														}#if end
9157
 
9158
													#如果 $conf["noWaveEnd"] 為 "true"
9159
													if($conf["noWaveEnd"]==="true"){
9160
 
9161
														#看該符合的名稱結尾是否包含「~」
9162
														#函式說明:
9163
														#取得符合特定字首與字尾的字串
9164
														#回傳結果:
9165
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9166
														#$result["function"],當前執行的函數名稱.
9167
														#$result["error"],錯誤訊息陣列.
9168
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9169
														#$result["returnString"],爲符合字首條件的字串內容。
9170
														#必填參數:
9171
														#$conf["checkString"],字串,要檢查的字串.
9172
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9173
														#可省略參數:
9174
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9175
														#$conf["search::getMeetConditionsString"]["frontWord"]=".";
9176
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9177
														$conf["search::getMeetConditionsString"]["tailWord"]="~";
9178
														#參考資料:
9179
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9180
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9181
														unset($conf["search::getMeetConditionsString"]);
9182
 
9183
														#如果 取得符合特定字首的字串 出錯
9184
														if($getMeetConditionsString["status"]=="false"){
9185
 
9186
															#設置執行錯誤識別
9187
															$result["status"]="false";
9188
 
9189
															#設置錯誤訊息
9190
															$result["error"]=$getMeetConditionsString;
9191
 
9192
															#回傳結果
9193
															return $result;
9194
 
9195
															}#if end
9196
 
9197
														#如果有「~」在結尾
9198
														if($getMeetConditionsString["founded"]=="true"){
9199
 
9200
															#中斷迴圈
9201
															break;
9202
 
9203
															}#if end
9204
 
9205
														}#if end
9206
 
9207
													#取得該符合的名稱
9208
													$passedName[]=$filteredName;
9209
 
9210
													#中斷迴圈
9211
													break;
9212
 
9213
													}#if end
9214
 
9215
												#將 $partName 從左到關鍵字結束的部份剔除
9216
												#函式說明:
9217
												#將特定字串前面的內容剔除
9218
												#回傳結果:
9219
												#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9220
												#$result["error"],錯誤訊息陣列.
9221
												#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
9222
												#$result["function"],當前執行的函數名稱.
9223
												#$result["oriStr"],要處理的原始字串內容.
9224
												#$result["content"],處理好的的字串內容.
9225
												#必填參數:
9226
												$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$partName;#要處理的字串.
9227
												$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#特定字串.
9228
												$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
9229
												unset($conf["stringProcess::delStrBeforeKeyWord"]);
9230
 
9231
												#如果將 $partName 從左到關鍵字結束的部份剔除失敗
9232
												if($delStrBeforeKeyWord["status"]=="false"){
9233
 
9234
													#設置執行錯誤識別
9235
													$result["status"]="false";
9236
 
9237
													#設置錯誤訊息
9238
													$result["error"]=$delStrBeforeKeyWord;
9239
 
9240
													#回傳結果
9241
													return $result;
9242
 
9243
													}#if end
9244
 
9245
												#如果沒有找到特定關鍵字字串
9246
												if($delStrBeforeKeyWord["founded"]=="false"){
9247
 
9248
													#設置執行錯誤識別
9249
													$result["status"]="false";
9250
 
9251
													#設置錯誤訊息
9252
													$result["error"]=$delStrBeforeKeyWord;
9253
 
9254
													#回傳結果
9255
													return $result;
9256
 
9257
													}#if end
9258
 
9259
												#取得剔除過關鍵字前字串的字串	
9260
												$partName=$delStrBeforeKeyWord["content"];
9261
 
9262
												}#if end
9263
 
9264
											#反之關鍵字不存在	
9265
											else{
9266
 
9267
												#儲存被拋棄的片段
9268
												#$result["dismissLog"][]="片段「".$partName."」沒有關鍵字「".$spiltString["dataArray"][$i]."」";
9269
 
9270
												#該名稱不符合條件
9271
												break;
9272
 
9273
												}#else end
9274
 
9275
											}#for end
9276
 
9277
										}#foreach end
9278
 
9279
									#初始化儲存符合的暫存路徑
9280
									$tempExtendPath=array();
9281
 
9282
									#針對每個現有的路徑字串
9283
									for($j=0;$j<count($extendPath);$j++){
9284
 
9285
										#附加每個符合條件的名稱到路徑字串裡面
9286
										for($k=0;$k<count($passedName);$k++){
9287
 
9288
											#暫存該符合的路徑
9289
											$tempExtendPath[]=$extendPath[$j]."/".$passedName[$k];
9290
 
9291
											}#for end
9292
 
9293
										}#for end	
9294
 
9295
									#該次有幾個符合的路徑就執行幾次
9296
									foreach($tempExtendPath as $path){
9297
 
9298
										#暫存符合的路徑
9299
										$newExtendPath[]=$path;
9300
 
9301
										}#foreach end	
9302
 
9303
									}#if end
9304
 
9305
								#反之該目錄底下沒有東西
9306
								else{
9307
 
9308
									#移除該 $extendPath[$i]
9309
									unset($extendPath[$i]);
9310
 
9311
									}#else end					
9312
 
9313
								}#for end
9314
 
9315
							#如果有新的路徑產生
9316
							if(count($newExtendPath)>0){
9317
 
9318
								#置換原始符合條件字串的路徑字串陣列
9319
								$extendPath=$newExtendPath;
9320
 
9321
								}#if end
9322
 
9323
							#反之找不到後續符合的路徑
9324
							else{
9325
 
9326
								$extendPath=array();
9327
 
9328
								}#else end
9329
 
9330
							}#else end
9331
 
9332
					}#else end
9333
 
9334
				}#foreach end
9335
 
9336
			}#if end
9337
 
9338
		#反之沒有含有「*」
9339
		else{
9340
 
9341
			#判斷 $conf["path"] 是否存在
9342
			#函式說明:
9343
			#檢查多個檔案與資料夾是否存在.
9344
			#回傳的結果:
9345
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
9346
			#$result["error"],錯誤訊息陣列.
9347
			#$resutl["function"],當前執行的涵式名稱.
9348
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
9349
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
9350
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
9351
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
9352
			#必填參數:
9353
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
9354
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["path"]);
9355
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
9356
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
9357
			#可省略參數
9358
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
9359
			#$conf["disableWebSearch"]="false";
9360
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
9361
			#$conf["userDir"]="true";
9362
			#參考資料來源:
9363
			#http://php.net/manual/en/function.file-exists.php
9364
			#http://php.net/manual/en/control-structures.foreach.php
9365
			#備註:
9366
			#函數file_exists檢查的路徑為檔案系統的路徑
9367
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
9368
			unset($conf["fileAccess::checkMultiFileExist"]);
9369
 
9370
			#如果檢查失敗
9371
			if($checkMultiFileExist["status"]=="false"){
9372
 
9373
				#設置錯誤識別
9374
				$result["status"]="false";
9375
 
9376
				#設置錯誤訊息
9377
				$result["error"]=$checkMultiFileExist;
9378
 
9379
				#回傳結果
9380
				return $result;
9381
 
9382
				}#if end
9383
 
9384
			#如果存在
9385
			if($checkMultiFileExist["varExist"][0]=="true"){
9386
 
9387
				#初始化暫存展開後的檔案路徑字串
9388
				$extendPath=array($conf["path"]);
9389
 
9390
				}#if end
9391
 
9392
			#反之不存在
9393
			else{
9394
 
9395
				#置換符合的路徑為空字串
9396
				$extendPath=array();
9397
 
9398
				}#else end
9399
 
9400
			#初始化暫存展開後的檔案路徑字串
9401
			$extendPath=array($conf["path"]);
9402
 
9403
			}#else end
9404
 
9405
		#取得解析完「*」的檔案路徑字串
9406
		$result["content"]=$extendPath;
9407
 
9408
		#取得有幾個檔案路徑
9409
		$result["pathCount"]=count($result["content"]);
9410
 
9411
		#設置執行正常
9412
		$result["status"]="true";
9413
 
9414
		#回傳結果
9415
		return $result;
9416
 
9417
		}#function resolvePostionStringWhichContainStarSymbol end
9418
 
9419
	/*
9420
	#函式說明:
9421
	#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
9422
	#回傳結果:
9423
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9424
	#$result["error"],錯誤訊息陣列.
9425
	#$result["function"],函數名稱. 
9426
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9427
	#$result["pathCount"],整數,有幾個路徑.
9428
	#必填參數:
9429
	#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
9430
	$conf["path"]=array();
9431
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9432
	$conf["fileArgu"]=__FILE__;
9433
	#可省略參數:
9434
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9435
	#$conf["noDotStart"]="true";
9436
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9437
	#$conf["noWaveEnd"]="true";
9438
	#參考資料:
9439
	#無.
9440
	#備註:
9441
	#無.
9442
	*/
9443
	public static function resolveMultiPostionStringWhichContainStarSymbol(&$conf){
66 liveuser 9444
 
3 liveuser 9445
		#初始化要回傳的結果
9446
		$result=array();
9447
 
9448
		#設置當其函數名稱
9449
		$result["function"]=__FUNCTION__;
9450
 
9451
		#如果 $conf 不為陣列
9452
		if(gettype($conf)!="array"){
9453
 
9454
			#設置執行失敗
9455
			$result["status"]="false";
9456
 
9457
			#設置執行錯誤訊息
9458
			$result["error"][]="\$conf變數須為陣列形態";
9459
 
9460
			#如果傳入的參數為 null
9461
			if($conf==null){
9462
 
9463
				#設置執行錯誤訊息
9464
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9465
 
9466
				}#if end
9467
 
9468
			#回傳結果
9469
			return $result;
9470
 
9471
			}#if end
9472
 
9473
		#檢查參數
9474
		#函式說明:
9475
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9476
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9477
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9478
		#$result["function"],當前執行的函式名稱.
9479
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9480
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9481
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9482
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9483
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9484
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9485
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9486
		#必填寫的參數:
9487
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9488
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9489
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9490
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9491
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9492
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9493
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9494
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9495
		#可以省略的參數:
9496
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9497
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9498
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9499
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
9500
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9501
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9502
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9503
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
9504
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9505
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9506
		#參考資料來源:
9507
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9508
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9509
		unset($conf["variableCheck::checkArguments"]);
9510
 
9511
		#如果 $checkResult["status"] 等於 "fasle"
9512
		if($checkResult["status"]=="false"){
9513
 
9514
			#設置錯誤識別
9515
			$result["status"]="false";
9516
 
9517
			#設置錯誤訊息
9518
			$result["error"]=$checkResult;
9519
 
9520
			#回傳結果
9521
			return $result;
9522
 
9523
			}#if end
9524
 
9525
		#如果 $checkResult["passed"] 等於 "fasle"
9526
		if($checkResult["passed"]=="false"){
9527
 
9528
			#設置錯誤識別
9529
			$result["status"]="false";
9530
 
9531
			#設置錯誤訊息
9532
			$result["error"]=$checkResult;
9533
 
9534
			#回傳結果
9535
			return $result;
9536
 
9537
			}#if end
9538
 
9539
		#針對每個要解析的路徑字串
9540
		foreach($conf["path"] as $path){
9541
 
9542
			#函式說明:
9543
			#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
9544
			#回傳結果:
9545
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9546
			#$result["error"],錯誤訊息陣列.
9547
			#$result["function"],函數名稱. 
9548
			#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9549
			#必填參數:
9550
			#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
9551
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["path"]=$path;
9552
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9553
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
9554
			#可省略參數:
9555
			#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9556
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["noDotStart"];
9557
			#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9558
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["noWaveEnd"];
9559
			$resolvePostionStringWhichContainStarSymbol=fileAccess::resolvePostionStringWhichContainStarSymbol($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9560
			unset($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9561
 
9562
			#如果解析失敗
9563
			if($resolvePostionStringWhichContainStarSymbol["status"]=="false"){
9564
 
9565
				#設置錯誤識別
9566
				$result["status"]="false";
9567
 
9568
				#設置錯誤訊息
9569
				$result["error"]=$resolvePostionStringWhichContainStarSymbol;
9570
 
9571
				#回傳結果
9572
				return $result;
9573
 
9574
				}#if end
9575
 
9576
			#針對每個解析出來的路徑
9577
			foreach($resolvePostionStringWhichContainStarSymbol["content"] as $filteredPath){
9578
 
9579
				#儲存符合條件的路徑
9580
				$result["content"][]=$filteredPath;
9581
 
9582
				}#foreach end
9583
 
9584
			}#foreach end
9585
 
9586
		#如果有路徑存在
9587
		if(isset($result["content"])){
9588
 
9589
			#取得有幾個路徑
9590
			$result["pathCount"]=count($result["content"]);
9591
 
9592
			}#if end
9593
 
9594
		#反之 
9595
		else{
9596
 
9597
			#設置空的路徑結果
9598
			$result["content"]=array();
9599
 
9600
			#取得有幾個路徑
9601
			$result["pathCount"]=count($result["content"]);
9602
 
9603
			}#else end
9604
 
9605
		#設置執行正常
9606
		$result["status"]="true";
9607
 
9608
		#回傳結果
9609
		return $result;
9610
 
9611
		}#function resolveMultiPostionStringWhichContainStarSymbol end
9612
 
9613
	/*
9614
	#函式說明:
9615
	#將多個路徑字串變成相對於當前路徑的相對路徑字串
9616
	#回傳結果:
9617
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9618
	#$result["error"],錯誤訊息陣列.
9619
	#$result["function"],函數名稱. 
9620
	#$result["argu"],使用的參數.
9621
	#$result["content"],字串陣列,多個轉換好的相對路徑字串.
9622
	#$result["cmd"],使用的指令.
9623
	#必填參數:
9624
	#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
9625
	$conf["path"]=array();
9626
	#$conf["fileArgu"],字串,當前路徑.
9627
	$conf["fileArgu"]=__FILE__;
9628
	#可省略參數:
9629
	#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
9630
	#$conf["baseFrom"]="";
9631
	#參考資料:
9632
	#無.
9633
	#備註:
9634
	#無.
9635
	*/
9636
	public static function getRelativePath(&$conf){
9637
 
9638
		#初始化要回傳的結果
9639
		$result=array();
9640
 
9641
		#設置當其函數名稱
9642
		$result["function"]=__FUNCTION__;
9643
 
9644
		#如果 $conf 不為陣列
9645
		if(gettype($conf)!="array"){
9646
 
9647
			#設置執行失敗
9648
			$result["status"]="false";
9649
 
9650
			#設置執行錯誤訊息
9651
			$result["error"][]="\$conf變數須為陣列形態";
9652
 
9653
			#如果傳入的參數為 null
9654
			if($conf==null){
9655
 
9656
				#設置執行錯誤訊息
9657
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9658
 
9659
				}#if end
9660
 
9661
			#回傳結果
9662
			return $result;
9663
 
9664
			}#if end
9665
 
9666
		#檢查參數
9667
		#函式說明:
9668
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9669
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9670
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9671
		#$result["function"],當前執行的函式名稱.
9672
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9673
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9674
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9675
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9676
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9677
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9678
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9679
		#必填寫的參數:
9680
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9681
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9682
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9683
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9684
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9685
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9686
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9687
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9688
		#可以省略的參數:
9689
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9690
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9691
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9692
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("baseFrom");
9693
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9694
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
9695
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9696
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
9697
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9698
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9699
		#參考資料來源:
9700
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9701
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9702
		unset($conf["variableCheck::checkArguments"]);
9703
 
9704
		#如果 $checkResult["status"] 等於 "false"
9705
		if($checkResult["status"]=="false"){
9706
 
9707
			#設置錯誤識別
9708
			$result["status"]="false";
9709
 
9710
			#設置錯誤訊息
9711
			$result["error"]=$checkResult;
9712
 
9713
			#回傳結果
9714
			return $result;
9715
 
9716
			}#if end
9717
 
9718
		#如果 $checkResult["passed"] 等於 "fasle"
9719
		if($checkResult["passed"]=="false"){
9720
 
9721
			#設置錯誤識別
9722
			$result["status"]="false";
9723
 
9724
			#設置錯誤訊息
9725
			$result["error"]=$checkResult;
9726
 
9727
			#回傳結果
9728
			return $result;
9729
 
9730
			}#if end
9731
 
9732
		#取得參數
9733
		$result["argu"]=$conf;
9734
 
9735
		#函式說明:
9736
		#將固定格式的字串分開,並回傳分開的結果.
9737
		#回傳結果:
9738
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9739
		#$result["error"],錯誤訊息陣列
9740
		#$result["function"],當前執行的函數名稱.
9741
		#$result["argu"],使用的參數.
9742
		#$result["oriStr"],要分割的原始字串內容
9743
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9744
		#$result["dataCounts"],爲總共分成幾段
9745
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9746
		#必填參數:
9747
		#$conf["stringIn"],字串,要處理的字串.
9748
		$conf["fileAccess::spiltString"]["stringIn"]=$conf["fileArgu"];
9749
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9750
		$conf["fileAccess::spiltString"]["spiltSymbol"]="/";
9751
		#可省略參數:
9752
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9753
		$conf["fileAccess::spiltString"]["allowEmptyStr"]="false";
9754
		#參考資料:
9755
		#無.
9756
		#備註:
9757
		#無.
9758
		$spiltString=stringProcess::spiltString($conf["fileAccess::spiltString"]);
9759
		unset($conf["fileAccess::spiltString"]);
9760
 
9761
		#如果執行失敗
9762
		if($spiltString["status"]==="false"){
9763
 
9764
			#設置錯誤識別
9765
			$result["status"]="false";
9766
 
9767
			#設置錯誤訊息
9768
			$result["error"]=$spiltString;
9769
 
9770
			#回傳結果
9771
			return $result;
9772
 
9773
			}#if end
9774
 
9775
		#如果沒有關鍵字
9776
		if($spiltString["found"]==="false"){
9777
 
9778
			#設置錯誤識別
9779
			$result["status"]="false";
9780
 
9781
			#設置錯誤訊息
9782
			$result["error"]=$spiltString;
9783
 
9784
			#回傳結果
9785
			return $result;
9786
 
9787
			}#if end
9788
 
9789
		#取得 $conf["fileArgu"] 的路徑
9790
		#函式說明:
9791
		#將固定格式的字串分開,並回傳分開的結果.
9792
		#回傳結果:
9793
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9794
		#$result["error"],錯誤訊息陣列
9795
		#$result["function"],當前執行的函數名稱.
9796
		#$result["argu"],使用的參數.
9797
		#$result["oriStr"],要分割的原始字串內容
9798
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9799
		#$result["dataCounts"],爲總共分成幾段
9800
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9801
		#必填參數:
9802
		#$conf["stringIn"],字串,要處理的字串.
9803
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];
9804
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9805
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
9806
		#可省略參數:
9807
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9808
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
9809
		#參考資料:
9810
		#無.
9811
		#備註:
9812
		#無.
9813
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
9814
		unset($conf["stringProcess::spiltString"]);
9815
 
9816
		#如果執行失敗
9817
		if($spiltString["status"]==="false"){
9818
 
9819
			#設置錯誤識別
9820
			$result["status"]="false";
9821
 
9822
			#設置錯誤訊息
9823
			$result["error"]=$spiltString;
9824
 
9825
			#回傳結果
9826
			return $result;
9827
 
9828
			}#if end
9829
 
9830
		/*
9831
		#break point
9832
		var_dump($spiltString);
9833
		exit;
9834
		*/
9835
 
9836
		#預設 fileArgu 的路徑為 ""
9837
		$fileArguPath="";
9838
 
9839
		#針對每個目錄
9840
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
9841
 
9842
			#串接路徑
9843
			$fileArguPath=$fileArguPath."/".$spiltString["dataArray"][$i];
9844
 
9845
			}#for end
9846
 
9847
		#取得相對於目標的當前位置
9848
		#函式說明:
9849
		#呼叫shell執行系統命令,並取得回傳的內容.
9850
		#回傳結果:
9851
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9852
		#$result["error"],錯誤訊息陣列.
9853
		#$result["function"],當前執行的函數名稱.
9854
		#$result["argu"],使用的參數.
9855
		#$result["cmd"],執行的指令內容.
9856
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9857
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9858
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9859
		#$result["running"],是否還在執行.
9860
		#$result["pid"],pid.
9861
		#$result["statusCode"],執行結束後的代碼.
9862
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
9863
		#必填參數:
9864
		#$conf["command"],字串,要執行的指令.
9865
		$conf["external::callShell"]["command"]="cd";
9866
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9867
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9868
		#可省略參數:
9869
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9870
		$conf["external::callShell"]["argu"]=array($fileArguPath,";","pwd");
9871
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9872
		#$conf["arguIsAddr"]=array();
9873
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9874
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9875
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9876
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9877
		#$conf["enablePrintDescription"]="true";
9878
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9879
		#$conf["printDescription"]="";
9880
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
9881
		$conf["external::callShell"]["escapeshellarg"]="true";
9882
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
9883
		#$conf["thereIsShellVar"]=array();
9884
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9885
		#$conf["username"]="";
9886
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9887
		#$conf["password"]="";
9888
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9889
		#$conf["useScript"]="";
9890
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9891
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9892
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9893
		#$conf["inBackGround"]="";
9894
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9895
		#$conf["getErr"]="false";
9896
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
9897
		#$conf["doNotRun"]="false";
9898
		#參考資料:
9899
		#exec=>http://php.net/manual/en/function.exec.php
9900
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9901
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9902
		#備註:
9903
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9904
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
9905
		$callShell=external::callShell($conf["external::callShell"]);
9906
		unset($conf["external::callShell"]);
9907
 
9908
		#如果執行失敗
9909
		if($callShell["status"]==="false"){
9910
 
9911
			#設置錯誤識別
9912
			$result["status"]="false";
9913
 
9914
			#設置錯誤訊息
9915
			$result["error"]=$callShell;
9916
 
9917
			#回傳結果
9918
			return $result;
9919
 
9920
			}#if end
9921
 
9922
		#如果執行失敗
9923
		if(!isset($callShell["output"][0])){
9924
 
9925
			#設置錯誤識別
9926
			$result["status"]="false";
9927
 
9928
			#設置錯誤訊息
9929
			$result["error"]=$callShell;
9930
 
9931
			#回傳結果
9932
			return $result;
9933
 
9934
			}#if end	
9935
 
9936
		/*
9937
		#break point
9938
		var_dump($callShell);
9939
		exit;
9940
		*/
9941
 
9942
		#記錄執行的指令
9943
		$result["cmd"][]=$callShell["cmd"];
9944
 
9945
		#保存相對於目標的當前位置
9946
		$pwd=$callShell["output"][0];
9947
 
9948
		#更新 fileArgu
9949
		$conf["fileArgu"]=$pwd."/".$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9950
 
9951
		#針對每個 $conf["path"]
9952
		foreach($conf["path"] as $path){
9953
 
9954
			#將 $path 變成易讀的格式
9955
			#函式說明:
9956
			#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
9957
			#回傳的結果:
9958
			#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
9959
			#$result["function"],當前執行的函數.
9960
			#$result["error"],錯誤訊息陣列.
9961
			#$result["changedPath"],處理完後回傳的目錄字串.
9962
			#$result["oriPath"],原始的路徑字串
9963
			#必填參數:
9964
			#$conf["dirStr"],字串,要處理的檔案目錄字串.
9965
			$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$path;
9966
			$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
9967
			unset($conf["stringProcess::changeDirByDotDotSolidus"]);
9968
 
9969
			#如果處理失敗
9970
			if($changeDirByDotDotSolidus["status"]==="false"){
9971
 
9972
				#設置錯誤識別
9973
				$result["status"]="false";
9974
 
9975
				#設置錯誤訊息
9976
				$result["error"]=$changeDirByDotDotSolidus;
9977
 
9978
				#回傳結果
9979
				return $result;
9980
 
9981
				}#if end
9982
 
9983
			#取得易讀的路徑
9984
			$path=$changeDirByDotDotSolidus["changedPath"];
9985
 
9986
			#判斷 $path 是否為絕對路徑
9987
			#函式說明:
9988
			#取得符合特定字首與字尾的字串
9989
			#回傳結果:
9990
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9991
			#$result["function"],當前執行的函數名稱.
9992
			#$result["error"],錯誤訊息陣列.
9993
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9994
			#$result["returnString"],爲符合字首條件的字串內容。
9995
			#必填參數:
9996
			#$conf["checkString"],字串,要檢查的字串.
9997
			$conf["search::getMeetConditionsString"]["checkString"]=$path;
9998
			#可省略參數:
9999
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10000
			$conf["search::getMeetConditionsString"]["frontWord"]="/";
10001
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10002
			#$conf["tailWord"]="";
10003
			#參考資料:
10004
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10005
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
10006
			unset($conf["search::getMeetConditionsString"]);			
10007
 
10008
			#如果檢查失敗
10009
			if($getMeetConditionsString["status"]=="false"){
10010
 
10011
				#設置錯誤識別
10012
				$result["status"]="false";
10013
 
10014
				#設置錯誤訊息
10015
				$result["error"]=$getMeetConditionsString;
10016
 
10017
				#回傳結果
10018
				return $result;
10019
 
10020
				}#if end
10021
 
10022
			#如果沒有「/」開頭
10023
			if($getMeetConditionsString["founded"]==="false"){
10024
 
10025
				#將 $conf["fileArgu"] 最後面的檔案或目錄名稱剔除
10026
				#函式說明:
10027
				#將固定格式的字串分開,並回傳分開的結果。
10028
				#回傳結果:
10029
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10030
				#$result["error"],錯誤訊息陣列
10031
				#$result["function"],當前執行的函數名稱.
10032
				#$result["oriStr"],要分割的原始字串內容
10033
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
10034
				#$result["dataCounts"],爲總共分成幾段
10035
				#必填參數:
10036
				$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
10037
				$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
10038
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
10039
				unset($conf["stringProcess::spiltString"]);
10040
 
10041
				#如果分割字串失敗
10042
				if($spiltString["status"]=="false"){
10043
 
10044
					#設置錯誤識別
10045
					$result["status"]="false";
10046
 
10047
					#設置錯誤訊息
10048
					$result["error"]=$spiltString;
10049
 
10050
					#回傳結果
10051
					return $result;
10052
 
10053
					}#if end
10054
 
10055
				#初始化相對路徑為開頭片段""
10056
				$relativePathPart="/";
10057
 
10058
				#剔除最後一段
10059
				for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
10060
 
10061
					#串接起來
10062
					$relativePathPart=$relativePathPart.$spiltString["dataArray"][$i]."/";
10063
 
10064
					}#for end
10065
 
10066
				#如果有設定 baseFrom
10067
				if(isset($conf["baseFrom"])){
10068
 
10069
					#函式說明:
10070
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10071
					#回傳結果:
10072
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10073
					#$result["error"],錯誤訊息陣列.
10074
					#$result["function"],函數名稱. 
10075
					#$result["argu"],使用的參數.
10076
					#$result["content"],網址,若是在命令列執行,則為"null".
10077
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10078
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10079
					#必填參數:
10080
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10081
					$conf["fileAccess::getInternetAddressV2"]["address"]=$path;
10082
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10083
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10084
					#可省略參數:
10085
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10086
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10087
					#參考資料:
10088
					#無.
10089
					#備註:
10090
					#無.
10091
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10092
					unset($conf["fileAccess::getInternetAddressV2"]);
10093
 
10094
					##var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10095
 
10096
					#如果執行失敗
10097
					if($getInternetAddressV2["status"]==="false"){
10098
 
10099
						#設置錯誤識別
10100
						$result["status"]="false";
10101
 
10102
						#設置錯誤訊息
10103
						$result["error"]=$getInternetAddressV2;
10104
 
10105
						#回傳結果
10106
						return $result;
10107
 
10108
						}#if end
10109
 
10110
					#取得絕對位置
10111
					$path=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10112
 
10113
					#函式說明:
10114
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10115
					#回傳結果:
10116
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10117
					#$result["error"],錯誤訊息陣列.
10118
					#$result["function"],函數名稱. 
10119
					#$result["argu"],使用的參數.
10120
					#$result["content"],網址,若是在命令列執行,則為"null".
10121
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10122
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10123
					#必填參數:
10124
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10125
					$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["baseFrom"];
10126
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10127
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10128
					#可省略參數:
10129
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10130
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10131
					#參考資料:
10132
					#無.
10133
					#備註:
10134
					#無.
10135
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10136
					unset($conf["fileAccess::getInternetAddressV2"]);
10137
 
10138
					#var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10139
 
10140
					#如果執行失敗
10141
					if($getInternetAddressV2["status"]==="false"){
10142
 
10143
						#設置錯誤識別
10144
						$result["status"]="false";
10145
 
10146
						#設置錯誤訊息
10147
						$result["error"]=$getInternetAddressV2;
10148
 
10149
						#回傳結果
10150
						return $result;
10151
 
10152
						}#if end
10153
 
10154
					#取得絕對位置
10155
					$conf["baseFrom"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10156
 
10157
					#函式說明:
10158
					#將多個路徑字串變成相對於當前路徑的相對路徑字串
10159
					#回傳結果:
10160
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10161
					#$result["error"],錯誤訊息陣列.
10162
					#$result["function"],函數名稱. 
10163
					#$result["argu"],使用的參數.
10164
					#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10165
					#必填參數:
10166
					#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10167
					$conf["fileAccess::getRelativePath"]["path"]=array($path);
10168
					#$conf["fileArgu"],字串,當前路徑.
10169
					$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["baseFrom"]."/name";
10170
					#可省略參數:
10171
					#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
10172
					#$conf["baseFrom"]="";
10173
					#參考資料:
10174
					#無.
10175
					#備註:
10176
					#無.
10177
					$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10178
					unset($conf["fileAccess::getRelativePath"]);
10179
 
10180
					#var_dump(__LINE__." ".print_r($getRelativePath,true));
10181
 
10182
					#如果執行失敗
10183
					if($getRelativePath["status"]==="false"){
10184
 
10185
						#設置錯誤識別
10186
						$result["status"]="false";
10187
 
10188
						#設置錯誤訊息
10189
						$result["error"]=$getRelativePath;
10190
 
10191
						#回傳結果
10192
						return $result;
10193
 
10194
						}#if end
10195
 
10196
					#取得轉換好的絕對路徑
10197
					$relativePathPart=$getRelativePath["content"][0]."/";
10198
 
10199
					#清空path,避免出錯
10200
					$path="";
10201
 
10202
					}#if end
10203
 
10204
				#轉換成易讀的相對路徑
10205
				#函式說明:
10206
				#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
10207
				#回傳的結果:
10208
				#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
10209
				#$result["function"],當前執行的函數.
10210
				#$result["error"],錯誤訊息陣列.
10211
				#$result["changedPath"],處理完後回傳的目錄字串.
10212
				#$result["oriPath"],原始的路徑字串
10213
				#必填參數:
10214
				#$conf["dirStr"],字串,要處理的檔案目錄字串.
10215
				$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$relativePathPart.$path;
10216
				$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
10217
				unset($conf["stringProcess::changeDirByDotDotSolidus"]);
10218
 
10219
				#var_dump($changeDirByDotDotSolidus);	
10220
 
10221
				#如果轉換失敗
10222
				if($changeDirByDotDotSolidus["status"]=="false"){
10223
 
10224
					#設置錯誤識別
10225
					$result["status"]="false";
10226
 
10227
					#設置錯誤訊息
10228
					$result["error"]=$changeDirByDotDotSolidus;
10229
 
10230
					#回傳結果
10231
					return $result;
10232
 
10233
					}#if end
10234
 
10235
				#轉換為相對路徑
10236
				#函式說明:
10237
				#將多個路徑字串變成相對於當前路徑的相對路徑字串
10238
				#回傳結果:
10239
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10240
				#$result["error"],錯誤訊息陣列.
10241
				#$result["function"],函數名稱. 
10242
				#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10243
				#必填參數:
10244
				#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10245
				$conf["fileAccess::getRelativePath"]["path"]=array($changeDirByDotDotSolidus["changedPath"]);
10246
				#$conf["fileArgu"],字串,當前路徑.
10247
				$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
10248
				$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10249
				unset($conf["fileAccess::getRelativePath"]);
10250
 
10251
				#var_dump($getRelativePath);	
10252
 
10253
				#如果轉換路徑失敗
10254
				if($getRelativePath["status"]==="false"){
10255
 
10256
					#設置錯誤識別
10257
					$result["status"]="false";
10258
 
10259
					#設置錯誤訊息
10260
					$result["error"]=$changeDirByDotDotSolidus;
10261
 
10262
					#回傳結果
10263
					return $result;
10264
 
10265
					}#if end
10266
 
10267
				#取得相對路徑
10268
				$result["content"][]=$getRelativePath["content"][0];
10269
 
10270
				}#if end
10271
 
10272
			#反之有「/」開頭
10273
			else{
10274
				#函式說明:
10275
				#移除多個絕對路徑字串開頭相同的部分
10276
				#回傳結果:
10277
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10278
				#$result["error"],錯誤訊息陣列.
10279
				#$result["function"],當前執行的函數名稱.
10280
				#$result["content"],處理好的的字串內容.
10281
				#必填參數:
10282
				#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10283
				$conf["fileAccess::delSamePathHead"]["pathIn"]=array($path,$conf["fileArgu"]);		
10284
				$delSamePathHead=fileAccess::delSamePathHead($conf["fileAccess::delSamePathHead"]);
10285
				unset($conf["fileAccess::delSamePathHead"]);
10286
 
10287
				#var_dump($delSamePathHead);
10288
 
10289
				#如果移除多個絕對路徑字串開頭相同的部分失敗
10290
				if($delSamePathHead["status"]==="false"){
10291
 
10292
					#設置錯誤識別
10293
					$result["status"]="false";
10294
 
10295
					#設置錯誤訊息
10296
					$result["error"]=$delSameHead;
10297
 
10298
					#回傳結果
10299
					return $result;
10300
 
10301
					}#if end
10302
 
10303
				#如果 $conf["fileArgu"] 剩下空
10304
				if($delSamePathHead["content"][1]===""){
10305
 
10306
					#檢查 $delSamePathHead[0] 開頭是否為「/」
10307
					#函式說明:
10308
					#取得符合特定字首與字尾的字串
10309
					#回傳結果:
10310
					#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10311
					#$result["function"],當前執行的函數名稱.
10312
					#$result["error"],錯誤訊息陣列.
10313
					#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10314
					#$result["returnString"],爲符合字首條件的字串內容。
10315
					#必填參數:
10316
					#$conf["checkString"],字串,要檢查的字串.
10317
					$conf["search::getMeetConditionsString"]["checkString"]=$delSamePathHead["content"][0];
10318
					#可省略參數:
10319
					#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10320
					$conf["search::getMeetConditionsString"]["frontWord"]="/";
10321
					#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10322
					#$conf["tailWord"]="";
10323
					#參考資料:
10324
					#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10325
					$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
10326
					unset($conf["search::getMeetConditionsString"]);
10327
 
10328
					#如果檢查失敗
10329
					if($getMeetConditionsString["status"]=="false"){
10330
 
10331
						#設置錯誤識別
10332
						$result["status"]="false";
10333
 
10334
						#設置錯誤訊息
10335
						$result["error"]=$getMeetConditionsString;
10336
 
10337
						#回傳結果
10338
						return $result;
10339
 
10340
						}#if end
10341
 
10342
					#如果有開頭有「/」
10343
					if($getMeetConditionsString["founded"]==="true"){
10344
 
10345
						#函式說明:
10346
						#將字串特定關鍵字與其前面的內容剔除
10347
						#回傳結果:
10348
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10349
						#$result["error"],錯誤訊息陣列.
10350
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10351
						#$result["function"],當前執行的函數名稱.
10352
						#$result["oriStr"],要處理的原始字串內容.
10353
						#$result["content"],處理好的的字串內容.
10354
						#必填參數:
10355
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delSamePathHead["content"][0];#要處理的字串.
10356
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";#特定字串.
10357
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
10358
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
10359
 
10360
						#如果 將字串特定關鍵字與其前面的內容剔除 失敗
10361
						if($delStrBeforeKeyWord["status"]=="false"){
10362
 
10363
							#設置錯誤識別
10364
							$result["status"]="false";
10365
 
10366
							#設置錯誤訊息
10367
							$result["error"]=$delStrBeforeKeyWord;
10368
 
10369
							#回傳結果
10370
							return $result;
10371
 
10372
							}#if end
10373
 
10374
						#取得相對位置
10375
						$result["content"][]=$delStrBeforeKeyWord["content"];
10376
 
10377
						}#if end
10378
 
10379
					#反之
10380
					else{
10381
 
10382
						#取得相對位置
10383
						$result["content"][]=$delSamePathHead["content"][0];
10384
 
10385
						}#else end	
10386
 
10387
					}#if end
10388
 
10389
				#反之剩下的 $conf["fileArgu"] 不為空
10390
				else{
10391
 
10392
					#檢查 $delSamePathHead["content"][1] 有幾個「/」
10393
					#函式說明:
10394
					#檢查字串裡面有無指定的關鍵字
10395
					#回傳結果:
10396
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
10397
					#$result["error"],錯誤訊息
10398
					#$result["function"],當前執行的函數名稱.
10399
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
10400
					#$result["keyWordCount"],找到的關鍵字數量.
10401
					#必填參數:
10402
					$conf["search::findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字
10403
					$conf["search::findKeyWord"]["string"]=$delSamePathHead["content"][1];#要被搜尋的字串內容
10404
					#可省略參數:
10405
					#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
10406
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
10407
					unset($conf["search::findKeyWord"]);
10408
 
10409
					#如果 檢查字串裡面有無指定的關鍵字 失敗
10410
					if($findKeyWord["status"]==="false"){
10411
 
10412
						#設置錯誤識別
10413
						$result["status"]="false";
10414
 
10415
						#設置錯誤訊息
10416
						$result["error"]=$findKeyWord;
10417
 
10418
						#回傳結果
10419
						return $result;
10420
 
10421
						}#if end
10422
 
10423
					#有幾個「/」就執行幾次
10424
					for($i=0;$i<$findKeyWord["keyWordCount"];$i++){
10425
 
10426
						#在前面加上 "../"
10427
						$delSamePathHead["content"][0]="../".$delSamePathHead["content"][0];
10428
 
10429
						}#for end
10430
 
10431
					#取得相對位置
10432
					$result["content"][]=$delSamePathHead["content"][0];
10433
 
10434
					}#else end
10435
 
10436
				}#else end
10437
 
10438
			}#foreach end
10439
 
10440
		#設置執行正常
10441
		$result["status"]="true";
10442
 
10443
		#回傳結果
10444
		return $result;
10445
 
10446
		}#function getRelativeParh end
10447
 
10448
	/*
10449
	#函式說明:
10450
	#移除多個絕對路徑字串開頭相同的部分
10451
	#回傳結果:
10452
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10453
	#$result["error"],錯誤訊息陣列.
10454
	#$result["function"],當前執行的函數名稱.
10455
	#$result["argu"],參數.
10456
	#$result["content"],處理好的的字串內容.
10457
	#必填參數:
10458
	#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10459
	$conf["pathIn"]=array();		
10460
	#可省略參數:
10461
	#無
10462
	#參考資料:
10463
	#無.
10464
	#備註:
10465
	#無.
10466
	*/
10467
	public static function delSamePathHead(&$conf){
10468
 
10469
		#初始化要回傳的結果
10470
		$result=array();
10471
 
10472
		#取得當前執行的函數名稱
10473
		$result["function"]=__FUNCTION__;
10474
 
10475
		#如果沒有參數
10476
		if(func_num_args()==0){
10477
 
10478
			#設置執行失敗
10479
			$result["status"]="false";
10480
 
10481
			#設置執行錯誤訊息
10482
			$result["error"]="函數".$result["function"]."需要參數";
10483
 
10484
			#回傳結果
10485
			return $result;
10486
 
10487
			}#if end
10488
 
10489
		#如果 $conf 不為陣列
10490
		if(gettype($conf)!="array"){
10491
 
10492
			#設置執行失敗
10493
			$result["status"]="false";
10494
 
10495
			#設置執行錯誤訊息
10496
			$result["error"][]="\$conf變數須為陣列形態";
10497
 
10498
			#如果傳入的參數為 null
10499
			if($conf==null){
10500
 
10501
				#設置執行錯誤訊息
10502
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10503
 
10504
				}#if end
10505
 
10506
			#回傳結果
10507
			return $result;
10508
 
10509
			}#if end
10510
 
10511
		#取得參數
10512
		$result["argv"]=$conf;	
10513
 
10514
		#檢查參數
10515
		#函式說明:
10516
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10517
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10518
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10519
		#$result["function"],當前執行的函式名稱.
10520
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10521
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10522
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10523
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10524
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10525
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10526
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10527
		#必填寫的參數:
10528
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10529
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10530
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10531
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("pathIn");
10532
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
10533
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
10534
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10535
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10536
		#可以省略的參數:
10537
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
10538
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
10539
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10540
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
10541
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10542
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10543
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10544
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
10545
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10546
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
10547
		#參考資料來源:
10548
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10549
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10550
		unset($conf["variableCheck::checkArguments"]);
10551
 
10552
		#如果 $checkResult["status"] 等於 "fasle"
10553
		if($checkResult["status"]=="false"){
10554
 
10555
			#設置錯誤識別
10556
			$result["status"]="false";
10557
 
10558
			#設置錯誤訊息
10559
			$result["error"]=$checkResult;
10560
 
10561
			#回傳結果
10562
			return $result;
10563
 
10564
			}#if end
10565
 
10566
		#如果 $checkResult["passed"] 等於 "fasle"
10567
		if($checkResult["passed"]=="false"){
10568
 
10569
			#設置錯誤識別
10570
			$result["status"]="false";
10571
 
10572
			#設置錯誤訊息
10573
			$result["error"]=$checkResult;
10574
 
10575
			#回傳結果
10576
			return $result;
10577
 
10578
			}#if end
10579
 
10580
		#檢查是否都為絕對路徑
10581
		#函式說明:
10582
		#取得多個符合特定字首與字尾的字串.
10583
		#回傳結果:
10584
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10585
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10586
		#$result["function"],當前執行的函數名稱.
10587
		#$result["returnString"],爲符合字首條件的字串陣列內容。
10588
		#必填參數:
10589
		#$conf["checkString"],陣列字串,要檢查的字串們.
10590
		$conf["search::getMeetConditionsStringMulti"]["checkString"]=$conf["pathIn"];#要檢查的字串陣列
10591
		#可省略參數:
10592
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10593
		$conf["search::getMeetConditionsStringMulti"]["frontWord"]="/";
10594
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10595
		#$conf["tailWord"]="";
10596
		#參考資料:
10597
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10598
		$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
10599
		unset($conf["search::getMeetConditionsStringMulti"]);
10600
 
10601
		#如果檢測是否為絕對路徑失敗
10602
		if($getMeetConditionsStringMulti["status"]=="false"){
10603
 
10604
			#設置錯誤識別
10605
			$result["status"]="false";
10606
 
10607
			#設置錯誤訊息
10608
			$result["error"]=$getMeetConditionsStringMulti;
10609
 
10610
			#增加額外的錯誤訊息
10611
			$result["error"][]="僅接受絕對路徑字串";
10612
 
10613
			#回傳結果
10614
			return $result;
10615
 
10616
			}#if end
10617
 
10618
		#函式說明:
10619
		#將多個固定格式的字串分開,並回傳分開的結果
10620
		#回傳的參數:
10621
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
10622
		#$result["error"],錯誤訊息陣列.
10623
		#$result["function"],當前執行的函數名稱.
10624
		#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
10625
		#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
10626
		#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
10627
		#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
10628
		#必填參數:
10629
		#$conf["stringIn"],字串陣列,要處理的字串陣列.
10630
		$conf["stringProcess::spiltMutiString"]["stringIn"]=$conf["pathIn"];
10631
		#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
10632
		$conf["stringProcess::spiltMutiString"]["spiltSymbol"]="/";
10633
		$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
10634
 
10635
		#如果分割所有路徑字串失敗
10636
		if($spiltMutiString["status"]=="false"){
10637
 
10638
			#設置錯誤識別
10639
			$result["status"]="false";
10640
 
10641
			#設置錯誤訊息
10642
			$result["error"]=$spiltMutiString;				
10643
 
10644
			#回傳結果
10645
			return $result;
10646
 
10647
			}#if end
10648
 
10649
		#初始化暫存每個路徑分割成的段數
10650
		$spiltedPathCount=array();					
10651
 
10652
		#取得每個路徑分割成的段數
10653
		#針對每個 $spiltMutiString["spiltString"]
10654
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10655
 
10656
			$spiltedPathCount[]=$spiltMutiString["spiltString"][$i]["dataCounts"];
10657
 
10658
			}#for end
10659
 
10660
		#取得所有路徑字串分割後的最小數量
10661
		#涵式說明
10662
		#找最小值,結果會回傳最小值
10663
		#回傳的內容
10664
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
10665
		#$result["error"],錯誤訊息陣列.
10666
		#$result["function"],當前執行的函數名稱.
10667
		#$result["key"],最大值原先的key.
10668
		#$result["value"],陣列裏面最小的數值.
10669
		#必填參數:
10670
		$conf["math::getMinValue"]["rawDataArray"]=$spiltedPathCount;#爲原始數據
10671
		$getMinValue=math::getMinValue($conf["math::getMinValue"]);
10672
		unset($conf["math::getMinValue"]);
10673
 
10674
		#如果取得最小數值失敗
10675
		if($getMinValue["status"]=="false"){
10676
 
10677
			#設置錯誤識別
10678
			$result["status"]="false";
10679
 
10680
			#設置錯誤訊息
10681
			$result["error"]=$getMinValue;				
10682
 
10683
			#回傳結果
10684
			return $result;
10685
 
10686
			}#if end	
10687
 
10688
		#初始化暫存每個路徑字串的前面幾個片段是相同的
10689
		$samePartCount=0;
10690
 
10691
		#var_dump($getMinValue["value"]);	
10692
 
10693
		#依據所有路徑字串分割後的最小數量
10694
		for($j=0;$j<$getMinValue["value"];$j++){
10695
 
10696
			#初始化暫存第一個路徑的片段字串
10697
			$firstPathPart="";
10698
 
10699
			#針對每個 $spiltMutiString["spiltString"]
10700
			for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10701
 
10702
				#暫存分割的字串
10703
				$spiltedPath=$spiltMutiString["spiltString"][$i];
10704
 
10705
				#如果是第一個路徑
10706
				if($i==0){
10707
 
10708
					#取得第一個路徑的片段字串
10709
					$firstPathPart=$spiltedPath["dataArray"][$j];
10710
 
10711
					}#if end									
10712
 
10713
				#如果第$i+1個路徑片段不跟第1個路徑的片段字串一樣
10714
				if($spiltedPath["dataArray"][$j]!=$firstPathPart){
10715
 
10716
					#讓最外層迴圈中止
10717
					$getMinValue["value"]=-1;
10718
 
10719
					#跳出迴圈
10720
					break;
10721
 
10722
					}#if end			
10723
 
10724
				}#for end
10725
 
10726
			#代表每個路徑字串的第$j段是一樣的.
10727
			$samePartCount=$j;
10728
 
10729
			}#for end
10730
 
10731
		#var_dump($samePartCount);
10732
 
10733
		#依據每個路徑
10734
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){			
10735
 
10736
			#初始化儲存第$i+1個處理好的路徑字串
10737
			$result["content"][$i]="";			
10738
 
10739
			#依據 $samePartCount 與 路徑的段數
10740
			for($j=$samePartCount;$j<$spiltMutiString["spiltString"][$i]["dataCounts"];$j++){
10741
 
10742
				#如果不是第一段
10743
				if($j!=$samePartCount){
10744
 
10745
					#組裝每個路徑片段
10746
					$result["content"][$i]=$result["content"][$i]."/".$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10747
 
10748
					}#if end
10749
 
10750
				#反之為第一段
10751
				else{
10752
 
10753
					#組裝每個路徑片段
10754
					$result["content"][$i]=$result["content"][$i].$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10755
 
10756
					}#else end
10757
 
10758
				}#for end
10759
 
10760
			}#for end
10761
 
10762
		#設置執行正常
10763
		$result["status"]="true";
10764
 
10765
		#回傳結果
10766
		return $result;
10767
 
10768
		}#function delSamePathHead end
10769
 
10770
	/*
10771
	#函式說明:
10772
	#於本套件位置底下的tmp資料夾下建立與回傳暫存檔案名稱路徑 
10773
	#回傳結果:
10774
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10775
	#$result["error"],錯誤訊息.
10776
	#$result["function"],當前執行的函數名稱.
10777
	#$result["content"],暫存檔案的路徑與名稱.
10778
	#$result["fileName"],暫存檔案的名稱.
10779
	#$result["path"],暫存檔案的路徑.
10780
	#必填參數:
10781
	#無.
10782
	#可省略參數:
36 liveuser 10783
	#$conf["content"],陣列,每行檔案的內容,預設為空陣列,不寫入任何資料.
10784
	#$conf["contant"]=array();
3 liveuser 10785
	#參考資料:
10786
	#無.
10787
	#備註:
10788
	#無.
10789
	*/
36 liveuser 10790
	public static function createTempFile(&$conf){
3 liveuser 10791
 
10792
		#初始化要回傳的結果
10793
		$result=array();
10794
 
10795
		#取得當前執行的函數名稱
10796
		$result["function"]=__FUNCTION__;
36 liveuser 10797
 
10798
		#取得參數
10799
		$result["argu"]=$conf;
10800
 
10801
		#如果 $conf 不為陣列
10802
		if(gettype($conf)!="array"){
10803
 
10804
			#設置執行失敗
10805
			$result["status"]="false";
10806
 
10807
			#設置執行錯誤訊息
10808
			$result["error"][]="\$conf變數須為陣列形態";
10809
 
10810
			#如果傳入的參數為 null
10811
			if(is_null($conf)){
10812
 
10813
				#設置執行錯誤訊息
10814
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10815
 
10816
				}#if end
10817
 
10818
			#回傳結果
10819
			return $result;
10820
 
10821
			}#if end
10822
 
10823
		#檢查參數
10824
		#函式說明:
10825
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
10826
		#回傳結果:
10827
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10828
		#$result["error"],執行不正常結束的錯訊息陣列.
10829
		#$result["simpleError"],簡單表示的錯誤訊息.
10830
		#$result["function"],當前執行的函式名稱.
10831
		#$result["argu"],設置給予的參數.
10832
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10833
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10834
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10835
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10836
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10837
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10838
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10839
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10840
		#必填參數:
10841
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10842
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10843
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10844
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10845
		#可省略參數:
10846
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10847
		#$conf["mustBeFilledVariableName"]=array();
10848
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
10849
		#$conf["mustBeFilledVariableType"]=array();
10850
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10851
		#$conf["canBeEmptyString"]="false";
10852
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10853
		#$conf["canNotBeEmpty"]=array();
10854
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10855
		#$conf["canBeEmpty"]=array();
10856
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10857
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10858
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10859
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("content");
10860
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
10861
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
10862
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10863
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array());
10864
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
10865
		#$conf["disallowAllSkipableVarIsEmpty"]="";
10866
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
10867
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
10868
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
10869
		#$conf["disallowAllSkipableVarNotExist"]="";
10870
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10871
		#$conf["arrayCountEqualCheck"][]=array();
10872
		#參考資料:
10873
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10874
		#備註:
10875
		#無.
10876
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10877
		unset($conf["variableCheck::checkArguments"]);
10878
 
10879
		#如果執行失敗
10880
		if($checkArguments["status"]==="false"){
10881
 
10882
			#設置執行異常
10883
			$result["status"]="false";
3 liveuser 10884
 
36 liveuser 10885
			#設置錯誤訊息
10886
			$result["error"]=$checkArguments;
10887
 
10888
			#回傳結果
10889
			return $result;
10890
 
10891
			}#if end
10892
 
10893
		#如果檢查不通過
10894
		if($checkArguments["passed"]==="false"){
10895
 
10896
			#設置執行異常
10897
			$result["status"]="false";
10898
 
10899
			#設置錯誤訊息
10900
			$result["error"]=$checkArguments;
10901
 
10902
			#回傳結果
10903
			return $result;
10904
 
10905
			}#if end
10906
 
3 liveuser 10907
		#取得相對於當前路徑的  tmp 目錄.
10908
		exec("cd ".pathinfo(__FILE__)["dirname"]."/../../../var/qbpwcf/tmp;pwd;",$output,$status);
10909
 
10910
		#如果執行失敗
10911
		if($status!==0){
10912
 
10913
			#設置執行失敗
10914
			$result["status"]="false";
10915
 
10916
			#設置執行錯誤訊息
10917
			$result["error"][]="取得暫存目錄失敗";
10918
 
10919
			#回傳結果
10920
			return $result;
10921
 
10922
			}#if end	
10923
 
10924
		#設置預設的暫存目錄
10925
		$defaultTmpDir=$output[0];	
10926
 
10927
		#取得暫存檔案的路徑與名稱
10928
		$result["content"]=tempnam($defaultTmpDir,"qbpwcf_tmpfile_");
10929
 
42 liveuser 10930
		#如果產生的暫存檔案位置異常
10931
		#參考資料:
10932
		#https://www.php.net/manual/en/function.tempnam.php
10933
		if(strpos("/tmp/",$result["content"])===0){
10934
 
10935
			#設置執行失敗
10936
			$result["status"]="false";
10937
 
10938
			#設置執行錯誤訊息
10939
			$result["error"][]="於暫存目錄建立檔案失敗";
10940
 
10941
			#回傳結果
10942
			return $result;
10943
 
10944
			}#if end
10945
 
3 liveuser 10946
		#函式說明:
10947
		#將字串特定關鍵字與其前面的內容剔除
10948
		#回傳結果:
10949
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10950
		#$result["error"],錯誤訊息陣列.
10951
		#$result["warning"],警告訊息鎮列.
10952
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10953
		#$result["function"],當前執行的函數名稱.
10954
		#$result["argu"],使用的參數.
10955
		#$result["oriStr"],要處理的原始字串內容.
10956
		#$result["content"],處理好的的字串內容.	
10957
		#必填參數:
10958
		#$conf["stringIn"],字串,要處理的字串.
10959
		$conf["stringPorcess::delStrBeforeKeyWord"]["stringIn"]=$result["content"];
10960
		#$conf["keyWord"],字串,特定字串.
42 liveuser 10961
		$conf["stringPorcess::delStrBeforeKeyWord"]["keyWord"]=$defaultTmpDir."/";
3 liveuser 10962
		#可省略參數:
10963
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
42 liveuser 10964
		$conf["stringPorcess::delStrBeforeKeyWord"]["recursive"]="true";
3 liveuser 10965
		#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
10966
		#$conf["lastResult"]=$delStrBeforeKeyWord;
10967
		#參考資料:
10968
		#無.
10969
		#備註:
10970
		#無.
10971
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringPorcess::delStrBeforeKeyWord"]);
10972
		unset($conf["stringPorcess::delStrBeforeKeyWord"]);
10973
 
10974
		#如果執行失敗
10975
		if($delStrBeforeKeyWord["status"]==="false"){
10976
 
10977
			#設置執行失敗
10978
			$result["status"]="false";
10979
 
10980
			#設置執行錯誤訊息
10981
			$result["error"]=$delStrBeforeKeyWord;
10982
 
10983
			#回傳結果
10984
			return $result;
10985
 
10986
			}#if end
10987
 
10988
		#如果應該要存在的路徑關鍵字不在
10989
		if($delStrBeforeKeyWord["founded"]==="false"){
10990
 
10991
			#設置執行失敗
10992
			$result["status"]="false";
10993
 
10994
			#設置執行錯誤訊息
10995
			$result["error"]=$delStrBeforeKeyWord;
10996
 
10997
			#回傳結果
10998
			return $result;
10999
 
11000
			}#if end
11001
 
11002
		#取得檔案名稱
11003
		$result["fileName"]=$delStrBeforeKeyWord["content"];
11004
 
11005
		#函式說明:
11006
		#將字串特定關鍵字與其後面的內容剔除
11007
		#回傳結果:
11008
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11009
		#$result["error"],錯誤訊息陣列.
11010
		#$result["warning"],警告訊息鎮列.
11011
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
11012
		#$result["function"],當前執行的函數名稱.
11013
		#$result["oriStr"],要處理的原始字串內容.
11014
		#$result["content"],處理好的的字串內容.
11015
		#$result["argu"],使用的參數.
11016
		#必填參數:
11017
		#$conf["stringIn"],字串,要處理的字串.
11018
		$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$result["content"];
11019
		#$conf["keyWord"],字串,特定字串.
11020
		$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$result["fileName"];
11021
		#可省略參數:
11022
		#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
11023
		#$conf["deleteLastRepeatedOne"]="";
11024
		#參考資料:
11025
		#無.
11026
		#備註:
11027
		#無.
11028
		$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
11029
		unset($conf["stringProcess::delStrAfterKeyWord"]);
11030
 
11031
		#如果執行失敗
11032
		if($delStrAfterKeyWord["status"]==="false"){
11033
 
11034
			#設置執行失敗
11035
			$result["status"]="false";
11036
 
11037
			#設置執行錯誤訊息
11038
			$result["error"]=$delStrAfterKeyWord;
11039
 
11040
			#回傳結果
11041
			return $result;
11042
 
11043
			}#if end
11044
 
11045
		#如果應該要存在的檔案名稱關鍵字不在
11046
		if($delStrAfterKeyWord["founded"]==="false"){
11047
 
11048
			#設置執行失敗
11049
			$result["status"]="false";
11050
 
11051
			#設置執行錯誤訊息
11052
			$result["error"]=$delStrAfterKeyWord;
11053
 
11054
			#回傳結果
11055
			return $result;
11056
 
11057
			}#if end
11058
 
11059
		#取得路徑
11060
		$result["path"]=$delStrAfterKeyWord["content"];
11061
 
36 liveuser 11062
		#如果有內容要寫入
11063
		if(!empty($conf["content"])){
11064
 
11065
			#函式說明:
11066
			#將多行字串寫入到檔案
11067
			#回傳結果:
11068
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
11069
			#$result["error"],錯誤訊息陣列.
11070
			#$result["function"],當前執行函數的名稱.
11071
			#必填參數:
11072
			#$conf["fileName"],字串,爲要編輯的檔案名稱
11073
			$conf["fileAccess::writeMultiLine"]["fileName"]=$result["content"];
11074
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
11075
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["content"];
11076
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11077
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=__FILE__;
11078
			#可省略參數:
11079
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
11080
			#參考資料:
11081
			#無.
11082
			#備註:
11083
			#無.
11084
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
11085
			unset($conf["fileAccess::writeMultiLine"]);
11086
 
11087
			#如果執行失敗
11088
			if($writeMultiLine["status"]==="false"){
11089
 
11090
				#設置執行失敗
11091
				$result["status"]="false";
11092
 
11093
				#設置執行錯誤訊息
11094
				$result["error"]=$writeMultiLine;
11095
 
11096
				#回傳結果
11097
				return $result;
11098
 
11099
				}#if end
11100
 
11101
			}#if end
11102
 
3 liveuser 11103
		#設置執行正常
11104
		$result["status"]="true";
11105
 
11106
		#回傳結果
11107
		return $result;
11108
 
11109
		}#function createTempFile end
11110
 
11111
	/*
11112
	#函式說明:
11113
	#分割檔案,分割出來的檔案名稱編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11114
	#回傳結果:
11115
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11116
	#$result["error"],錯誤訊息陣列.
11117
	#$result["function"],當前執行的函數名稱.
11118
	#$result["cmd"],執行的指令.
11119
	#$result["content"],執行指令回傳的結果.
11120
	#必填參數:
11121
	#$conf["file"],字串,要分割的檔案名稱.
11122
	$conf["file"]="";	
11123
	#可省略參數:
11124
	#$conf["splitNameHead"],字串,分割成檔案的名稱開頭,預設為 $conf["file"]."-" .
11125
	#$conf["splitNameHead"]="";	
11126
	#$conf["partSize"],字串,分割檔的大小為多少?可以為XMB,XGB,XKB,可參見split指令的說明,預設為50MB.
11127
	#$conf["partSize"]="";
11128
	#參考資料:
11129
	#無.
11130
	#備註:
11131
	#需要有split指令
11132
	*/
11133
	public static function split(&$conf=array()){
11134
 
11135
		#初始化要回傳的結果
11136
		$result=array();
11137
 
11138
		#取得當前執行的函數名稱
11139
		$result["function"]=__FUNCTION__;
11140
 
11141
		#如果沒有參數
11142
		if(func_num_args()==0){
11143
 
11144
			#設置執行失敗
11145
			$result["status"]="false";
11146
 
11147
			#設置執行錯誤訊息
11148
			$result["error"]="函數".$result["function"]."需要參數";
11149
 
11150
			#回傳結果
11151
			return $result;
11152
 
11153
			}#if end
11154
 
11155
		#函式說明:
11156
		#判斷當前環境為web還是cmd
11157
		#回傳結果:
11158
		#$result,"web"或"cmd"
11159
		if(csInformation::getEnv()==="web"){
11160
 
11161
			#設置執行失敗
11162
			$result["status"]="false";
11163
 
11164
			#設置執行錯誤訊息
11165
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11166
 
11167
			#回傳結果
11168
			return $result;
11169
 
11170
			}#if end
11171
 
11172
		#取得參數
11173
		$result["argu"]=$conf;
11174
 
11175
		#如果 $conf 不為陣列
11176
		if(gettype($conf)!=="array"){
11177
 
11178
			#設置執行失敗
11179
			$result["status"]="false";
11180
 
11181
			#設置執行錯誤訊息
11182
			$result["error"][]="\$conf變數須為陣列形態";
11183
 
11184
			#如果傳入的參數為 null
11185
			if($conf===null){
11186
 
11187
				#設置執行錯誤訊息
11188
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11189
 
11190
				}#if end
11191
 
11192
			#回傳結果
11193
			return $result;
11194
 
11195
			}#if end
11196
 
11197
		#檢查參數
11198
		#函式說明:
11199
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11200
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11201
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11202
		#$result["function"],當前執行的函式名稱.
11203
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11204
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11205
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11206
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11207
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11208
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11209
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11210
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11211
		#必填寫的參數:
11212
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11213
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11214
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11215
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file");
11216
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11217
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
11218
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11219
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11220
		#可以省略的參數:
11221
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11222
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11223
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11224
		#$conf["canNotBeEmpty"]=array();
11225
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11226
		#$conf["canBeEmpty"]=array();
11227
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11228
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11229
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11230
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("splitNameHead","partSize");
11231
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11232
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
11233
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]",若後面需要加上內容,則可以再補上\",後面再補上要串接的內容.
11234
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"file\"]\"-","50MB");
11235
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11236
		#$conf["arrayCountEqualCheck"][]=array();
11237
		#參考資料來源:
11238
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11239
		#建議:
11240
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11241
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11242
		unset($conf["variableCheck::checkArguments"]);
11243
 
11244
		#如果檢查參數失敗
11245
		if($checkArguments["status"]==="false"){
11246
 
11247
			#設置執行失敗
11248
			$result["status"]="false";
11249
 
11250
			#設置錯誤訊息
11251
			$result["error"]=$checkArguments;
11252
 
11253
			#回傳結果
11254
			return $result;
11255
 
11256
			}#if end
11257
 
11258
		#如果要分割的檔案存在
11259
		if(file_exists($conf["file"])){
11260
 
11261
			#取得執行的指令
11262
			$result["cmd"]="split -b ".$conf["partSize"]." '".$conf["file"]."' '".$conf["splitNameHead"]."'";
11263
 
11264
			#執行還原的指令
11265
			exec($result["cmd"],$output,$status);
11266
 
11267
			#取得執行後的輸出
11268
			$result["content"]=$output;
11269
 
11270
			}#if end
11271
 
11272
		#反之
11273
		else{
11274
 
11275
			#設置執行失敗
11276
			$result["status"]="false";
11277
 
11278
			#設置執行錯誤訊息
11279
			$result["error"][]="要分割的檔案「".$conf["file"]."」不存在";
11280
 
11281
			#回傳結果
11282
			return $result;
11283
 
11284
			}#else end
11285
 
11286
		#設置執行正常
11287
		$result["status"]="true";
11288
 
11289
		#回傳結果
11290
		return $result;
11291
 
11292
		}#function split end
11293
 
11294
	/*
11295
	#函式說明:
11296
	#合併檔案,檔案編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11297
	#回傳結果:
11298
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11299
	#$result["error"],錯誤訊息陣列.
11300
	#$result["function"],當前執行的函數名稱.
11301
	#$result["cmd"],執行的指令.
11302
	#$result["content"],執行指令回傳的結果.
11303
	#必填參數:
11304
	#$conf["filePartHead"],字串,分割檔案的名稱開頭.
11305
	$conf["filePartHead"]="";
11306
	#$conf["oriFileName"],字串,合併後的檔案名稱.
11307
	$conf["oriFileName"]="";
11308
	#可省略參數:
11309
	#無
11310
	#參考資料:
11311
	#無.
11312
	#備註:
11313
	#需要有cat指令.
11314
	#僅能在命令列執行.
11315
	*/
11316
	public static function merge(&$conf=array()){
11317
 
11318
		#初始化要回傳的結果
11319
		$result=array();
11320
 
11321
		#取得當前執行的函數名稱
11322
		$result["function"]=__FUNCTION__;
11323
 
11324
		#如果沒有參數
11325
		if(func_num_args()==0){
11326
 
11327
			#設置執行失敗
11328
			$result["status"]="false";
11329
 
11330
			#設置執行錯誤訊息
11331
			$result["error"]="函數".$result["function"]."需要參數";
11332
 
11333
			#回傳結果
11334
			return $result;
11335
 
11336
			}#if end
11337
 
11338
		#函式說明:
11339
		#判斷當前環境為web還是cmd
11340
		#回傳結果:
11341
		#$result,"web"或"cmd"
11342
		if(csInformation::getEnv()==="web"){
11343
 
11344
			#設置執行失敗
11345
			$result["status"]="false";
11346
 
11347
			#設置執行錯誤訊息
11348
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11349
 
11350
			#回傳結果
11351
			return $result;
11352
 
11353
			}#if end
11354
 
11355
		#取得參數
11356
		$result["argu"]=$conf;
11357
 
11358
		#如果 $conf 不為陣列
11359
		if(gettype($conf)!=="array"){
11360
 
11361
			#設置執行失敗
11362
			$result["status"]="false";
11363
 
11364
			#設置執行錯誤訊息
11365
			$result["error"][]="\$conf變數須為陣列形態";
11366
 
11367
			#如果傳入的參數為 null
11368
			if($conf===null){
11369
 
11370
				#設置執行錯誤訊息
11371
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11372
 
11373
				}#if end
11374
 
11375
			#回傳結果
11376
			return $result;
11377
 
11378
			}#if end
11379
 
11380
		#檢查參數
11381
		#函式說明:
11382
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11383
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11384
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11385
		#$result["function"],當前執行的函式名稱.
11386
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11387
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11388
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11389
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11390
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11391
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11392
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11393
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11394
		#必填寫的參數:
11395
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11396
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11397
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11398
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePartHead","oriFileName");
11399
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11400
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11401
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11402
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11403
		#可以省略的參數:
11404
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11405
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11406
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11407
		#$conf["canNotBeEmpty"]=array();
11408
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11409
		#$conf["canBeEmpty"]=array();
11410
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11411
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11412
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11413
		#$conf["skipableVariableName"]=array();
11414
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11415
		#$conf["skipableVariableType"]=array();
11416
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11417
		#$conf["skipableVarDefaultValue"]=array("");
11418
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11419
		#$conf["arrayCountEqualCheck"][]=array();
11420
		#參考資料來源:
11421
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11422
		#建議:
11423
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11424
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11425
		unset($conf["variableCheck::checkArguments"]);
11426
 
11427
		#如果檢查參數失敗
11428
		if($checkArguments["status"]==="false"){
11429
 
11430
			#設置執行失敗
11431
			$result["status"]="false";
11432
 
11433
			#設置錯誤訊息
11434
			$result["error"]=$checkArguments;
11435
 
11436
			#回傳結果
11437
			return $result;
11438
 
11439
			}#if end
11440
 
11441
		#定義編號
11442
		$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");
11443
 
11444
		#定義分割檔案的前置字串
11445
		$filePartHead=$conf["filePartHead"];
11446
 
11447
		#要合併成的檔案名稱
11448
		$oriFileName=$conf["oriFileName"];
11449
 
11450
		#初始化要執行合併的語法
11451
		$restoreCmd="cat ";
11452
 
11453
		#有幾個編號就執行幾次
11454
		for($i=0;$i<count($charArray);$i++){
11455
 
11456
			#有幾個編號就執行幾次
11457
			for($j=0;$j<count($charArray);$j++){
11458
 
11459
				#如果該分割檔存在
11460
				if(file_exists($filePartHead.$charArray[$i].$charArray[$j])){
11461
 
11462
					#串接要還原的分割檔
11463
					$restoreCmd=$restoreCmd." '".$filePartHead.$charArray[$i].$charArray[$j]."'";
11464
 
11465
					}#if end
11466
 
11467
				#反之
11468
				else{
11469
 
11470
					#如果是第一個分割檔就找不到
11471
					if($i===0 && $j===0){
11472
 
11473
						#設置執行失敗
11474
						$result["status"]="false";
11475
 
11476
						#設置錯誤訊息
11477
						$result["error"][]="找不到第一個分割檔「".$filePartHead.$charArray[$i].$charArray[$j]."」";
11478
 
11479
						#回傳結果
11480
						return $result;
11481
 
11482
						}#if end
11483
 
11484
					#串接要還原成的檔案名稱
11485
					$restoreCmd=$restoreCmd." > '".$oriFileName."'";
11486
 
11487
					#取得執行的指令
11488
					$result["cmd"]=$restoreCmd;
11489
 
11490
					#執行還原的指令
11491
					exec($restoreCmd,$output,$status);
11492
 
11493
					#取得執行後的輸出
11494
					$result["content"]=$output;
11495
 
11496
					#結束回圈
11497
					break 2;
11498
 
11499
					}#else end
11500
 
11501
				}#for end
11502
 
11503
			}#for end
11504
 
11505
		#設置執行正常
11506
		$result["status"]="true";
11507
 
11508
		#回傳結果
11509
		return $result;
11510
 
11511
		}#function merge end
11512
 
11513
	/*
11514
	#函式說明:
11515
	#取得檔案的部分內容
11516
	#回傳結果:
11517
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11518
	#$result["error"],錯誤訊息陣列.
11519
	#$result["function"],當前執行的函數名稱.
11520
	#$result["cmd"],執行的指令.
11521
	#$result["content"],取得的檔案內容.
11522
	#$result["length"],取得的內容長度.
11523
	#$result["EOF"],識別是否已經到檔案結尾,"true"代表是,"false"代表不是.
11524
	#$result["mimeType"],檔案的 mime type.
11525
	#必填參數:
11526
	#$conf["file"],字串,檔案的路徑與名稱.
11527
	$conf["file"]="";
11528
	#$conf["fileArgu"],字串,__FILE__的內容.
11529
	$conf["fileArgu"]=__FILE__;
11530
	#$conf["bytes"],整數字串,要讀取多少bytes.
11531
	$conf["bytes"]="";
11532
	#$conf["startIndex"],要從哪個bytes位置開始,起始點為0.
11533
	$conf["startIndex"]="";
11534
	#可省略參數:
11535
	#無
11536
	#參考資料:
11537
	#無.
11538
	#備註:
11539
	#無
11540
	*/
11541
	public static function getFilePart(&$conf){
11542
 
11543
		#初始化要回傳的結果
11544
		$result=array();
11545
 
11546
		#取得當前執行的函數名稱
11547
		$result["function"]=__FUNCTION__;
11548
 
11549
		#如果沒有參數
11550
		if(func_num_args()==0){
11551
 
11552
			#設置執行失敗
11553
			$result["status"]="false";
11554
 
11555
			#設置執行錯誤訊息
11556
			$result["error"]="函數".$result["function"]."需要參數";
11557
 
11558
			#回傳結果
11559
			return $result;
11560
 
11561
			}#if end
11562
 
11563
		#取得參數
11564
		$result["argu"]=$conf;
11565
 
11566
		#如果 $conf 不為陣列
11567
		if(gettype($conf)!=="array"){
11568
 
11569
			#設置執行失敗
11570
			$result["status"]="false";
11571
 
11572
			#設置執行錯誤訊息
11573
			$result["error"][]="\$conf變數須為陣列形態";
11574
 
11575
			#如果傳入的參數為 null
11576
			if(is_null($conf)){
11577
 
11578
				#設置執行錯誤訊息
11579
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11580
 
11581
				}#if end
11582
 
11583
			#回傳結果
11584
			return $result;
11585
 
11586
			}#if end
11587
 
11588
		#函式說明:
11589
		#檢查多個檔案與資料夾是否存在.
11590
		#回傳的結果:
11591
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11592
		#$result["error"],錯誤訊息陣列.
11593
		#$resutl["function"],當前執行的涵式名稱.
11594
		#$result["argu"],使用的參數.
11595
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11596
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11597
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
11598
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
11599
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11600
		#必填參數:
11601
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11602
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
11603
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11604
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=__FILE__;
11605
		#可省略參數:
11606
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11607
		#$conf["disableWebSearch"]="false";
11608
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11609
		#$conf["userDir"]="true";
11610
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
11611
		#$conf["web"]="true";
11612
		#參考資料:
11613
		#http://php.net/manual/en/function.file-exists.php
11614
		#http://php.net/manual/en/control-structures.foreach.php
11615
		#備註:
11616
		#函數file_exists檢查的路徑為檔案系統的路徑
11617
		#$result["varName"][$i]結果未實作
11618
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11619
		unset($conf["fileAccess::checkMultiFileExist"]);
11620
 
11621
		#如果執行失敗
11622
		if($checkMultiFileExist["status"]==="false"){
11623
 
11624
			#設置執行失敗
11625
			$result["status"]="false";
11626
 
11627
			#設置執行錯誤訊息
11628
			$result["error"]=$checkMultiFileExist;
11629
 
11630
			#回傳結果
11631
			return $result;
11632
 
11633
			}#if end
11634
 
11635
		#如果檔案不存在
11636
		if($checkMultiFileExist["allExist"]==="false"){
11637
 
11638
			#設置執行失敗
11639
			$result["status"]="false";
11640
 
11641
			#設置執行錯誤訊息
11642
			$result["error"]=$checkMultiFileExist;
11643
 
11644
			#回傳結果
11645
			return $result;
11646
 
11647
			}#if end
11648
 
11649
		#取得mimetype
11650
		$mimetype=mime_content_type($conf["file"]);
11651
 
11652
		#取得檔案的 mime type
11653
		$result["mimeType"]=$mimetype;
11654
 
11655
		#透過 dd 指令,取得部分內容.
11656
		#函式說明:
11657
		#呼叫shell執行系統命令,並取得回傳的內容.
11658
		#回傳結果:
11659
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11660
		#$result["error"],錯誤訊息陣列.
11661
		#$result["function"],當前執行的函數名稱.
11662
		#$result["argu"],使用的參數.
11663
		#$result["cmd"],執行的指令內容.
11664
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
11665
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
11666
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
11667
		#$result["running"],是否還在執行.
11668
		#$result["pid"],pid.
11669
		#$result["statusCode"],執行結束後的代碼.
11670
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
11671
		#必填參數:
11672
		#$conf["command"],字串,要執行的指令.
11673
		$conf["external::callShell"]["command"]="dd";
11674
		#$conf["fileArgu"],字串,變數__FILE__的內容.
11675
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
11676
		#可省略參數:
11677
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
11678
		$conf["external::callShell"]["argu"]=array("if=".$conf["file"],"bs=".$conf["bytes"],"count=1","status=none");
11679
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
11680
		#$conf["arguIsAddr"]=array();
11681
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
11682
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
11683
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
11684
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
11685
		#$conf["enablePrintDescription"]="true";
11686
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
11687
		#$conf["printDescription"]="";
11688
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
11689
		#$conf["escapeshellarg"]="false";
11690
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
11691
		#$conf["thereIsShellVar"]=array();
11692
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
11693
		#$conf["username"]="";
11694
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
11695
		#$conf["password"]="";
11696
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
11697
		#$conf["useScript"]="";
11698
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
11699
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
11700
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
11701
		#$conf["inBackGround"]="";
11702
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
11703
		#$conf["getErr"]="false";
11704
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
11705
		#$conf["doNotRun"]="false";
11706
		#參考資料:
11707
		#exec=>http://php.net/manual/en/function.exec.php
11708
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
11709
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
11710
		#備註:
11711
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
11712
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
11713
		$callShell=external::callShell($conf["external::callShell"]);
11714
		unset($conf["external::callShell"]);
11715
 
11716
		#如果執行失敗
11717
		if($callShell["status"]==="false"){
11718
 
11719
			#設置執行失敗
11720
			$result["status"]="false";
11721
 
11722
			#設置執行錯誤訊息
11723
			$result["error"]=$callShell;
11724
 
11725
			#回傳結果
11726
			return $result;
11727
 
11728
			}#if end
11729
 
11730
		#取得結果
11731
		$result["content"]=$callShell["output"][0];
11732
 
11733
		#取得內容長度
11734
		$result["length"]=strlen($result["content"]);
11735
 
11736
		#預設尚未到檔案結尾 
11737
		$result["EOF"]="false";
11738
 
11739
		#如果取得的內容長度小於預期
11740
		if($result["length"]<$conf["bytes"]){
11741
 
11742
			#設置已經到檔案結尾了
11743
			$result["EOF"]="true";
11744
 
11745
			}#if end
11746
 
11747
		#設置執行正常
11748
		$result["status"]="true";
11749
 
11750
		#回傳結果
11751
		return $result;
11752
 
11753
		}#function getFilePart end
11754
 
11755
	/*
11756
	#函式說明:
11757
	#取得節點的資訊.
11758
	#回傳結果:
11759
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11760
	#$result["error"],錯誤訊息陣列.
11761
	#$result["function"],函數名稱. 
11762
	#$result["content"],檔案資訊陣列.
11763
	#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
11764
	#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
11765
	#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
11766
	#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
11767
	#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
11768
	#$result["content"]["ownerName"],檔案擁有着資訊.
11769
	#$result["content"]["groupName"],檔案所屬擁有着資訊.
11770
	#$result["content"]["size"],檔案大小.
11771
	#$result["content"]["modifyDate"],檔案變更年月日.
11772
	#$result["content"]["modifyTime"],檔案變更時分秒.
11773
	#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
11774
	#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
11775
	#必填參數:
11776
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
11777
	$conf["fileArgu"]=__FILE__;
11778
	#$conf["file"],字串,要查看擁有者資訊的檔案.
11779
	$conf["file"]="";
11780
	#可省略參數:
11781
	#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11782
	#$conf["web"]="true";
11783
	#參考資料:
11784
	#fileowner=>http://php.net/manual/en/function.fileowner.php
11785
	#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
11786
	#備註:
11787
	#無.
11788
	*/
11789
	public static function fileInfo(&$conf=array()){
11790
 
11791
		#初始化要回傳的結果
11792
		$result=array();
11793
 
11794
		#取得當前執行的函數名稱
11795
		$result["function"]=__FUNCTION__;
11796
 
11797
		#如果沒有參數
11798
		if(func_num_args()==0){
11799
 
11800
			#設置執行失敗
11801
			$result["status"]="false";
11802
 
11803
			#設置執行錯誤訊息
11804
			$result["error"]="函數".$result["function"]."需要參數";
11805
 
11806
			#回傳結果
11807
			return $result;
11808
 
11809
			}#if end
11810
 
11811
		#取得參數
11812
		$result["argu"]=$conf;
11813
 
11814
		#如果 $conf 不為陣列
11815
		if(gettype($conf)!=="array"){
11816
 
11817
			#設置執行失敗
11818
			$result["status"]="false";
11819
 
11820
			#設置執行錯誤訊息
11821
			$result["error"][]="\$conf變數須為陣列形態";
11822
 
11823
			#如果傳入的參數為 null
11824
			if($conf===null){
11825
 
11826
				#設置執行錯誤訊息
11827
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11828
 
11829
				}#if end
11830
 
11831
			#回傳結果
11832
			return $result;
11833
 
11834
			}#if end
11835
 
11836
		#檢查參數
11837
		#函式說明:
11838
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11839
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11840
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11841
		#$result["function"],當前執行的函式名稱.
11842
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11843
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11844
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11845
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11846
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11847
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11848
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11849
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11850
		#必填寫的參數:
11851
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11852
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
11853
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11854
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11855
		#可以省略的參數:
11856
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11857
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
11858
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11859
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11860
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11861
		#$conf["canBeEmptyString"]="false";
11862
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11863
		#$conf["ileAccess::checkArguments"]["canNotBeEmpty"]=array();
11864
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11865
		#$conf["canBeEmpty"]=array();
11866
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11867
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11868
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11869
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
11870
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11871
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
11872
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11873
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
11874
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
11875
		#$conf["disallowAllSkipableVarIsEmpty"]="";
11876
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
11877
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
11878
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11879
		#$conf["arrayCountEqualCheck"][]=array();
11880
		#參考資料來源:
11881
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11882
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11883
		unset($conf["variableCheck::checkArguments"]);
11884
 
11885
		#如果檢查參數失敗
11886
		if($checkArguments["status"]==="false"){
11887
 
11888
			#設置執行失敗
11889
			$result["status"]="false";
11890
 
11891
			#設置執行錯誤訊息
11892
			$result["error"]=$checkArguments;
11893
 
11894
			#回傳結果
11895
			return $result;
11896
 
11897
			}#if end
11898
 
11899
		#如果檢查參數不通過
11900
		if($checkArguments["passed"]==="false"){
11901
 
11902
			#設置執行失敗
11903
			$result["status"]="false";
11904
 
11905
			#設置執行錯誤訊息
11906
			$result["error"]=$checkArguments;
11907
 
11908
			#回傳結果
11909
			return $result;
11910
 
11911
			}#if end
11912
 
11913
		#函式說明:
11914
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
11915
		#回傳結果:
11916
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11917
		#$result["error"],錯誤訊息陣列.
11918
		#$result["function"],函數名稱. 
11919
		#$result["argu"],使用的參數.
11920
		#$result["content"],網址,若是在命令列執行,則為"null".
11921
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
11922
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
11923
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
11924
		#必填參數:
11925
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
11926
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["file"];
11927
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
11928
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
11929
		#可省略參數:
11930
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
11931
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
11932
		#備註:
11933
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
11934
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
11935
		unset($conf["fileAccess::getInternetAddressV2"]);
11936
 
11937
		#如果取得位置失敗
11938
		if($getInternetAddressV2["status"]==="false"){
11939
 
11940
			#設置執行失敗
11941
			$result["status"]="false";
11942
 
11943
			#設置執行錯誤訊息
11944
			$result["error"]=$getInternetAddressV2;
11945
 
11946
			#回傳結果
11947
			return $result;
11948
 
11949
			}#if end
11950
 
11951
		#函式說明:
11952
		#檢查多個檔案與資料夾是否存在.
11953
		#回傳的結果:
11954
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11955
		#$result["error"],錯誤訊息陣列.
11956
		#$resutl["function"],當前執行的涵式名稱.
11957
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11958
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11959
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
11960
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
11961
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11962
		#必填參數:
11963
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11964
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($getInternetAddressV2["fileSystemAbsoulutePosition"]);
11965
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11966
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
11967
		#可省略參數
11968
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11969
		#$conf["disableWebSearch"]="false";
11970
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11971
		#$conf["userDir"]="true";
11972
		#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11973
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
11974
		#參考資料來源:
11975
		#http://php.net/manual/en/function.file-exists.php
11976
		#http://php.net/manual/en/control-structures.foreach.php
11977
		#備註:
11978
		#函數file_exists檢查的路徑為檔案系統的路徑
11979
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11980
		unset($conf["fileAccess::checkMultiFileExist"]);
11981
 
11982
		#如果檢查檔案存在失敗
11983
		if($checkMultiFileExist["status"]==="false"){
11984
 
11985
			#設置執行失敗
11986
			$result["status"]="false";
11987
 
11988
			#設置執行錯誤訊息
11989
			$result["error"]=$checkMultiFileExist;
11990
 
11991
			#回傳結果
11992
			return $result;
11993
 
11994
			}#if end
11995
 
11996
		#如果檔案不存在
11997
		if($checkMultiFileExist["allExist"]==="false"){
11998
 
11999
			#設置執行失敗
12000
			$result["status"]="false";
12001
 
12002
			#設置執行錯誤訊息
12003
			$result["error"]=$checkMultiFileExist;
12004
 
12005
			#回傳結果
12006
			return $result;
12007
 
12008
			}#if end
12009
 
12010
		#透過ls指令取得檔案的資訊
12011
		#函式說明:
12012
		#呼叫shell執行系統命令,並取得回傳的內容.
12013
		#回傳的結果:
12014
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12015
		#$result["error"],錯誤訊息陣列.
12016
		#$result["function"],當前執行的函數名稱.
12017
		#$result["cmd"],執行的指令內容.
12018
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12019
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12020
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12021
		#$result["running"],是否還在執行.
12022
		#$result["pid"],pid
12023
		#必填的參數
12024
		#$conf["command"],字串,要執行的指令
12025
		$conf["external::callShell"]["command"]="ls";
12026
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12027
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
12028
		#可省略參數:
12029
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12030
		$conf["external::callShell"]["argu"]=array("-l","--full-time","-d",$conf["file"]);
12031
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12032
		$conf["external::callShell"]["arguIsAddr"]=array("false","false","false","false");
12033
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12034
		#$conf["enablePrintDescription"]="true";
12035
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12036
		#$conf["printDescription"]="";
12037
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12038
		$conf["external::callShell"]["escapeshellarg"]="true";
12039
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12040
		#$conf["username"]="";
12041
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12042
		#$conf["password"]="";
12043
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12044
		#$conf["useScript"]="";
12045
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12046
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12047
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12048
		#$conf["inBackGround"]="";
12049
		#備註:
12050
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12051
		#參考資料:
12052
		#exec=>http://php.net/manual/en/function.exec.php
12053
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12054
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12055
		$callShell=external::callShell($conf["external::callShell"]);
12056
		unset($conf["external::callShell"]);
12057
 
12058
		#如果執行失敗
12059
		if($callShell["status"]==="false"){
12060
 
12061
			#設置執行失敗
12062
			$result["status"]="false";
12063
 
12064
			#設置執行錯誤訊息
12065
			$result["error"]=$callShell;
12066
 
12067
			#回傳結果
12068
			return $result;
12069
 
12070
			}#if end	
12071
 
12072
		#解析檔案資訊
12073
		#-rwxrwx--x. 1 apache apache 65K 2017-04-16 22:53:19.044545806 +0800 fileAccessT.php
12074
 
12075
		#取得權限資訊 -rwxrwx--x
12076
		$perm=substr($callShell["output"][0],0,strpos($callShell["output"][0],'.'));
12077
 
12078
		#如果是目錄
12079
		if(substr($perm,0,1)==="d"){
12080
 
12081
			#設定為目錄
12082
			$result["content"]["is_folder"]="true";
12083
 
12084
			}#if end
12085
 
12086
		#反之
12087
		else{
12088
 
12089
			#設定不為目錄
12090
			$result["content"]["is_folder"]="false";
12091
 
12092
			}#else end
12093
 
12094
		#解析檔案擁有者權限資訊
12095
		$result["content"]["ownerPerm"]=substr($perm,1,3);
12096
 
12097
		#如果檔案擁有者名稱為空
12098
		if(empty($result["content"]["ownerPerm"])){
12099
 
12100
			#設置執行失敗
12101
			$result["status"]="false";
12102
 
12103
			#設置執行錯誤訊息
12104
			$result["error"]=$callShell;
12105
 
12106
			#回傳結果
12107
			return $result;
12108
 
12109
			}#if end
12110
 
12111
		#解析檔案歸屬群組權限資訊
12112
		$result["content"]["groupPerm"]=substr($perm,4,3);
12113
 
12114
		#解析檔案對於其他身份使用者的權限資訊
12115
		$result["content"]["otherPerm"]=substr($perm,7,3);
12116
 
12117
		#取得目錄底下的檔案目錄數量起始點
12118
		$subElementStartPos=strpos($callShell["output"][0],' ');
12119
 
12120
		#取得目錄底下的檔案目錄數量結束點
12121
		$subElementEndPos=strpos($callShell["output"][0],' ',$subElementStartPos+1);
12122
 
12123
		#取得目錄底下的檔案目錄數量
12124
		$result["content"]["subElementCount"]=substr($callShell["output"][0],$subElementStartPos,$subElementEndPos-$subElementStartPos);
12125
 
12126
		#取得檔案擁有着資訊的起點
12127
		$ownerNameStrPos=strpos($callShell["output"][0],' ',$subElementEndPos)+1;
12128
 
12129
		#取得檔案擁有着資訊的結束點
12130
		$ownerNameEndPos=strpos($callShell["output"][0],' ',$ownerNameStrPos+1);
12131
 
12132
		#取得檔案擁有着資訊
12133
		$result["content"]["ownerName"]=substr($callShell["output"][0],$ownerNameStrPos,$ownerNameEndPos-$ownerNameStrPos);
12134
 
12135
		#取取得檔案群組擁有者資訊的起點
12136
		$groupNameStrPos=strpos($callShell["output"][0],' ',$ownerNameEndPos)+1;
12137
 
12138
		#取得檔案群組擁有者資訊的結束點
12139
		$groupNameEndPos=strpos($callShell["output"][0],' ',$groupNameStrPos);
12140
 
12141
		#取得檔案群組擁有者資訊
12142
		$result["content"]["groupName"]=substr($callShell["output"][0],$groupNameStrPos,$groupNameEndPos-$groupNameStrPos);
12143
 
12144
		#取得檔案大小的起點
12145
		$sizeStrPos=strpos($callShell["output"][0],' ',$groupNameEndPos)+1;
12146
 
12147
		#取得檔案大小的結束點
12148
		$sizeEndPos=strpos($callShell["output"][0],' ',$sizeStrPos);
12149
 
12150
		#取得檔案大小
12151
		$result["content"]["size"]=substr($callShell["output"][0],$sizeStrPos,$sizeEndPos-$sizeStrPos);
12152
 
12153
		#取得檔案變更年月日的起點
12154
		$modifyDateStrPos=strpos($callShell["output"][0],' ',$sizeEndPos)+1;
12155
 
12156
		#取得檔案變更年月日的結束點
12157
		$modifyDateEndPos=strpos($callShell["output"][0],' ',$modifyDateStrPos);
12158
 
12159
		#取得檔案變更年月日		
12160
		$result["content"]["modifyDate"]=substr($callShell["output"][0],$modifyDateStrPos,$modifyDateEndPos-$modifyDateStrPos);
12161
 
12162
		#取得檔案變更時分秒的起點
12163
		$modifyTimeStrPos=strpos($callShell["output"][0],' ',$modifyDateEndPos)+1;
12164
 
12165
		#取得檔案變更時分秒的結束點
12166
		$modifyTimeEndPos=strpos($callShell["output"][0],'.',$modifyTimeStrPos);
12167
 
12168
		#取得檔案變更時分秒
12169
		$result["content"]["modifyTime"]=substr($callShell["output"][0],$modifyTimeStrPos,$modifyTimeEndPos-$modifyTimeStrPos);
12170
 
12171
		#取得檔版變更時間秒的float數值起點
12172
		$modifyTimeFloatStrPos=strpos($callShell["output"][0],'.',$modifyTimeEndPos)+1;
12173
 
12174
		#取得檔版變更時間秒的float數值結束點
12175
		$modifyTimeFloatEndPos=strpos($callShell["output"][0],' ',$modifyTimeFloatStrPos);
12176
 
12177
		#取得檔版變更時間秒的float數值	
12178
		$result["content"]["modifyTimeFloat"]=substr($callShell["output"][0],$modifyTimeFloatStrPos,$modifyTimeFloatEndPos-$modifyTimeFloatStrPos);
12179
 
12180
		#取得時區起始點
12181
		$timezoneStrPos=strpos($callShell["output"][0],' ',$modifyTimeFloatEndPos)+1;
12182
 
12183
		#取得時區結束點
12184
		$timezoneEndPos=strpos($callShell["output"][0],' ',$timezoneStrPos)+1;	
12185
 
12186
		#取得檔案變更時間的時區與UTC的差距.
12187
		$result["content"]["timezone"]=substr($callShell["output"][0],$timezoneStrPos,$timezoneEndPos-$timezoneStrPos);			
12188
 
12189
		#設置執行正常
12190
		$result["status"]="true";
12191
 
12192
		#回傳結果
12193
		return $result;
12194
 
12195
		}#function fileInfo end
12196
 
12197
	/*
12198
	#函式說明:
12199
	#依據函數getListTree執行的結果,將其底下與其子目錄底下的特定檔案內容依據目錄層級輸出成html檔案 
12200
	#回傳結果:
12201
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12202
	#$result["error"],錯誤訊息陣列.
12203
	#$result["function"],函數名稱. 
12204
	#$result["content"],html檔案輸出的位置與名稱.
12205
	#必填參數:
12206
	#$conf["getListTree"],陣列變數,函數getListTree執行的結果.
12207
	$conf["getListTree"]=$getListTree;
12208
	#可省略參數:
12209
	#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".
12210
	#$conf["fileToRead"]="help";
12211
	#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".
12212
	#$conf["output"]="help.html"; 
12213
	#參考資料:
12214
	#無.
12215
	#備註:
12216
	#建構中...
12217
	*/
12218
	public static function createHelpFile($conf){
12219
 
12220
		#初始化要回傳的結果
12221
		$result=array();
12222
 
12223
		#設置當其函數名稱
12224
		$result["function"]=__FUNCTION__;
12225
 
12226
		#如果 $conf 不為陣列
12227
		if(gettype($conf)!="array"){
12228
 
12229
			#設置執行失敗
12230
			$result["status"]="false";
12231
 
12232
			#設置執行錯誤訊息
12233
			$result["error"][]="\$conf變數須為陣列形態";
12234
 
12235
			#如果傳入的參數為 null
12236
			if($conf==null){
12237
 
12238
				#設置執行錯誤訊息
12239
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12240
 
12241
				}#if end
12242
 
12243
			#回傳結果
12244
			return $result;
12245
 
12246
			}#if end
12247
 
12248
		#檢查參數
12249
		#函式說明:
12250
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12251
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12252
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12253
		#$result["function"],當前執行的函式名稱.
12254
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12255
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12256
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12257
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12258
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12259
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12260
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12261
		#必填寫的參數:
12262
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12263
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12264
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12265
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("getListTree");
12266
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12267
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
12268
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12269
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12270
		#可以省略的參數:
12271
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12272
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12273
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12274
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
12275
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12276
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
12277
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12278
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
12279
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12280
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
12281
		#參考資料來源:
12282
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12283
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12284
		unset($conf["variableCheck::checkArguments"]);
12285
 
12286
		#如果 $checkResult["status"] 等於 "fasle"
12287
		if($checkResult["status"]=="false"){
12288
 
12289
			#設置錯誤識別
12290
			$result["status"]="false";
12291
 
12292
			#設置錯誤訊息
12293
			$result["error"]=$checkResult;
12294
 
12295
			#回傳結果
12296
			return $result;
12297
 
12298
			}#if end
12299
 
12300
		#如果 $checkResult["passed"] 等於 "fasle"
12301
		if($checkResult["passed"]=="false"){
12302
 
12303
			#設置錯誤識別
12304
			$result["status"]="false";
12305
 
12306
			#設置錯誤訊息
12307
			$result["error"]=$checkResult;
12308
 
12309
			#回傳結果
12310
			return $result;
12311
 
12312
			}#if end
12313
 
12314
		#如果 $conf["getListTree"]["status"] 不存在
12315
		if(!isset($conf["getListTree"]["status"])){
12316
 
12317
			#設置錯誤識別
12318
			$result["status"]="false";
12319
 
12320
			#設置錯誤訊息
12321
			$result["error"][]="getListTree參數必須為getListTree函數執行後的結果";
12322
 
12323
			#回傳結果
12324
			return $result;
12325
 
12326
			}#if end
12327
 
12328
		#如果 $conf["getListTree"] 執行失敗
12329
		if($conf["getListTree"]["status"]=="false"){
12330
 
12331
			#設置錯誤識別
12332
			$result["status"]="false";
12333
 
12334
			#設置錯誤訊息
12335
			$result["error"]=$conf["getListTree"];
12336
 
12337
			#回傳結果
12338
			return $result;
12339
 
12340
			}#if end
12341
 
12342
		#如果有目錄檔案
12343
		if(isset($conf["getListTree"]["content"])){
12344
 
12345
 
12346
 
12347
			}#if end
12348
 
12349
		}#function createHelpFile end
12350
 
12351
	/*
12352
	#函式說明:
12353
	#嵌入pdf檔案到網頁上面
12354
	#回傳結果:
12355
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12356
	#$result["error"],錯誤訊息陣列.
12357
	#$result["function"],函數名稱. 
12358
	#$result["content"],嵌入pdf檔案的語法
12359
	#必填參數:
12360
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
12361
	$conf["fileArgu"]=__FILE__;
12362
	#$conf["file"],字串,pdf檔案位置.
12363
	$conf["file"]="";
12364
	#可省略參數:
12365
	#$conf["type"],字串,要用"iframe"還是"object"的方式嵌入pdf檔案,預設為"iframe".
12366
	#$conf["type"]="iframe";
12367
	#參考資料:
12368
	#嵌入pdf到網頁=>https://stackoverflow.com/questions/14690000/embed-a-pdf-in-html5
12369
	#備註:
12370
	#如果是網址就會出錯.
12371
	*/
12372
	public static function embedPdf(&$conf=array()){
12373
 
12374
		#初始化要回傳的結果
12375
		$result=array();
12376
 
12377
		#取得當前執行的函數名稱
12378
		$result["function"]=__FUNCTION__;
12379
 
12380
		#如果沒有參數
12381
		if(func_num_args()==0){
12382
 
12383
			#設置執行失敗
12384
			$result["status"]="false";
12385
 
12386
			#設置執行錯誤訊息
12387
			$result["error"]="函數".$result["function"]."需要參數";
12388
 
12389
			#回傳結果
12390
			return $result;
12391
 
12392
			}#if end
12393
 
12394
		#取得參數
12395
		$result["argu"]=$conf;
12396
 
12397
		#如果 $conf 不為陣列
12398
		if(gettype($conf)!=="array"){
12399
 
12400
			#設置執行失敗
12401
			$result["status"]="false";
12402
 
12403
			#設置執行錯誤訊息
12404
			$result["error"][]="\$conf變數須為陣列形態";
12405
 
12406
			#如果傳入的參數為 null
12407
			if($conf===null){
12408
 
12409
				#設置執行錯誤訊息
12410
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12411
 
12412
				}#if end
12413
 
12414
			#回傳結果
12415
			return $result;
12416
 
12417
			}#if end
12418
 
12419
		#檢查參數
12420
		#函式說明:
12421
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12422
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12423
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12424
		#$result["function"],當前執行的函式名稱.
12425
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12426
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12427
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12428
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12429
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12430
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12431
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12432
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12433
		#必填寫的參數:
12434
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12435
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12436
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12437
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
12438
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12439
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12440
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12441
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12442
		#可以省略的參數:
12443
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12444
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
12445
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12446
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("function");
12447
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12448
		#$conf["canBeEmpty"]=array();
12449
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12450
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("width","height");
12451
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12452
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("type");
12453
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12454
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12455
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12456
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("iframe");
12457
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12458
		#$conf["arrayCountEqualCheck"][]=array();
12459
		#參考資料來源:
12460
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12461
		#建議:
12462
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
12463
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12464
		unset($conf["variableCheck::checkArguments"]);		
12465
 
12466
		#如果檢查參數失敗
12467
		if($checkArguments["status"]==="false"){
12468
 
12469
			#設置執行失敗
12470
			$result["status"]="false";
12471
 
12472
			#設置執行錯誤訊息
12473
			$result["error"]=$checkArguments;
12474
 
12475
			#回傳結果
12476
			return $result;
12477
 
12478
			}#if end
12479
 
12480
		#如果參數檢查不通過
12481
		if($checkArguments["passed"]==="false"){
12482
 
12483
			#設置執行失敗
12484
			$result["status"]="false";
12485
 
12486
			#設置執行錯誤訊息
12487
			$result["error"]=$checkArguments;
12488
 
12489
			#回傳結果
12490
			return $result;
12491
 
12492
			}#if end
12493
 
12494
		#檢查檔案是否存在
12495
		#函式說明:
12496
		#檢查多個檔案與資料夾是否存在.
12497
		#回傳的結果:
12498
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12499
		#$result["error"],錯誤訊息陣列.
12500
		#$resutl["function"],當前執行的涵式名稱.
12501
		#$result["argu"],使用的參數.
12502
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12503
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12504
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
12505
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12506
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12507
		#必填參數:
12508
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12509
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
12510
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12511
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12512
		#可省略參數
12513
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12514
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="false";
12515
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12516
		#$conf["userDir"]="true";
12517
		#參考資料來源:
12518
		#http://php.net/manual/en/function.file-exists.php
12519
		#http://php.net/manual/en/control-structures.foreach.php
12520
		#備註:
12521
		#函數file_exists檢查的路徑為檔案系統的路徑
12522
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12523
		unset($conf["fileAccess::checkMultiFileExist"]);
12524
 
12525
		#如果檢查檔案是否存在失敗
12526
		if($checkMultiFileExist["status"]==="false"){
12527
 
12528
			#設置執行失敗
12529
			$result["status"]="false";
12530
 
12531
			#設置執行錯誤訊息
12532
			$result["error"]=$checkMultiFileExist;
12533
 
12534
			#回傳結果
12535
			return $result;
12536
 
12537
			}#if end
12538
 
12539
		#如果檔案不存在
12540
		if($checkMultiFileExist["allExist"]==="false"){
12541
 
12542
			#設置執行失敗
12543
			$result["status"]="false";
12544
 
12545
			#設置執行錯誤訊息
12546
			$result["error"]=$checkMultiFileExist;
12547
 
12548
			#回傳結果
12549
			return $result;
12550
 
12551
			}#if end
12552
 
12553
		#產生 base64 的 pdf 編碼字串
12554
		$base64pdf=base64_encode(file_get_contents($conf["file"]));
12555
 
12556
		#產生 base64 的 pdf 編碼字串 data
12557
		$base64pdfData="data:application/pdf;base64,".$base64pdf;
12558
 
12559
		#判斷要用哪種方式嵌入pdf
12560
		switch($conf["type"]){
12561
 
12562
			#如果是用 object 方式
12563
			case "object":
12564
 
12565
				#產生嵌入的語法
12566
				$embedSyntax="<object style=\"width:100%;height:100%;\" data=\"".$base64pdfData."\"></object>";
12567
 
12568
				#取得語法
12569
				$result["content"]=&$embedSyntax;
12570
 
12571
				#跳出 switch
12572
				break;
12573
 
12574
			#預設
12575
			default:
12576
 
12577
				#產生嵌入的語法
12578
				$embedSyntax="<iframe style=\"width:100%;height:100%;\" src=\"".$base64pdfData."\"></iframe>";
12579
 
12580
				#取得語法
12581
				$result["content"]=&$embedSyntax;
12582
 
12583
			}#switch end
12584
 
12585
		#設置執行正常
12586
		$result["status"]="true";
12587
 
12588
		#回傳結果
12589
		return $result;
12590
 
12591
		}#function embedPdf end
12592
 
12593
	/*
12594
	#函式說明:
12595
	#用linux unzip去解壓縮zip檔案 
12596
	#回傳結果:
12597
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12598
	#$result["error"],錯誤訊息.
12599
	#$result["function"],當前執行的函數名稱.
12600
	#$result["content"]["each"],每個檔案的資訊.
12601
	#$result["content"]["each"]["Length"][$i],各別檔案目錄的原始長度.
12602
	#$result["content"]["each"]["Method"][$i],各別檔案目錄的壓縮方法.
12603
	#$result["content"]["each"]["Size"][$i],各別檔案目錄的壓縮後長度.
12604
	#$result["content"]["each"]["Cmpr"][$i],各別檔案目錄的壓縮率.
12605
	#$result["content"]["each"]["Date"][$i],各別檔案目錄的最後修改日期.
12606
	#$result["content"]["each"]["Time"][$i],各別檔案目錄的最後修改時間.
12607
	#$result["content"]["each"]["CRC-32"][$i],各別檔案目錄的CRC-32檢查碼.
12608
	#$result["content"]["each"]["Name"][$i],各別檔案目錄的路徑與名稱.
12609
	#$result["content"]["total"],統整的資訊.
12610
	#$result["content"]["Length"],總共的檔案長度.
12611
	#$result["content"]["Size"],壓縮後的檔案長度.
12612
	#$result["content"]["Cmpr"],平均壓縮率.
12613
	#$result["content"]["count"],壓縮檔裡面總共的檔案跟目錄數目.
12614
	#必填參數;
12615
	#$conf["zip"],字串,要解壓縮的zip檔案.
12616
	$conf["zip"]="";
12617
	#$conf["fileArgu"],字串,__FILE__的內容.
12618
	$conf["fileArgu"]=__FILE__;
12619
	#可省略參數:
12620
	#$conf["extract"],字串,要解壓縮到那個路徑,預設為當前位置"./".
12621
	#$conf["extract"]="";
12622
	#備註:
12623
	#建議加上特定邊碼的支援例如、單
12624
	*/
12625
	public static function unzip(&$conf=array()){
12626
 
12627
		#初始化要回傳的結果
12628
		$result=array();
12629
 
12630
		#取得當前執行的函數名稱
12631
		$result["function"]=__FUNCTION__;
12632
 
12633
		#如果沒有參數
12634
		if(func_num_args()==0){
12635
 
12636
			#設置執行失敗
12637
			$result["status"]="false";
12638
 
12639
			#設置執行錯誤訊息
12640
			$result["error"]="函數".$result["function"]."需要參數";
12641
 
12642
			#回傳結果
12643
			return $result;
12644
 
12645
			}#if end
12646
 
12647
		#取得參數
12648
		$result["argu"]=$conf;
12649
 
12650
		#如果 $conf 不為陣列
12651
		if(gettype($conf)!=="array"){
12652
 
12653
			#設置執行失敗
12654
			$result["status"]="false";
12655
 
12656
			#設置執行錯誤訊息
12657
			$result["error"][]="\$conf變數須為陣列形態";
12658
 
12659
			#如果傳入的參數為 null
12660
			if($conf===null){
12661
 
12662
				#設置執行錯誤訊息
12663
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12664
 
12665
				}#if end
12666
 
12667
			#回傳結果
12668
			return $result;
12669
 
12670
			}#if end
12671
 
12672
		#檢查參數
12673
		#函式說明:
12674
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12675
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12676
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12677
		#$result["function"],當前執行的函式名稱.
12678
		#$result["argu"],設置給予的參數.
12679
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12680
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12681
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12682
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12683
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12684
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12685
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12686
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12687
		#必填寫的參數:
12688
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12689
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
12690
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12691
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12692
		#可以省略的參數:
12693
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12694
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("zip","fileArgu");
12695
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12696
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12697
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12698
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12699
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12700
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("zip","fileArgu");
12701
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12702
		#$conf["canBeEmpty"]=array();
12703
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12704
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("extract");
12705
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12706
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("extract");
12707
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12708
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12709
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12710
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("./");
12711
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
12712
		#$conf["disallowAllSkipableVarIsEmpty"]="";
12713
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
12714
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
12715
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12716
		#$conf["arrayCountEqualCheck"][]=array();
12717
		#參考資料來源:
12718
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12719
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12720
		unset($conf["variableCheck::checkArguments"]);
12721
 
12722
		#如果檢查參數失敗
12723
		if($checkArguments["status"]==="false"){
12724
 
12725
			#設置執行不正常
12726
			$result["status"]="false";
12727
 
12728
			#設置錯誤訊息
12729
			$result["error"]=$checkArguments;
12730
 
12731
			#回傳結果
12732
			return $result;
12733
 
12734
			}#if end
12735
 
12736
		#如果檢查參數不通過
12737
		if($checkArguments["passed"]==="false"){
12738
 
12739
			#設置執行不正常
12740
			$result["status"]="false";
12741
 
12742
			#設置錯誤訊息
12743
			$result["error"]=$checkArguments;
12744
 
12745
			#回傳結果
12746
			return $result;
12747
 
12748
			}#if end
12749
 
12750
		#檢查要解壓縮的檔案是否存在
12751
		#函式說明:
12752
		#檢查多個檔案與資料夾是否存在.
12753
		#回傳的結果:
12754
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12755
		#$result["error"],錯誤訊息陣列.
12756
		#$resutl["function"],當前執行的涵式名稱.
12757
		#$result["argu"],使用的參數.
12758
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12759
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12760
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
12761
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12762
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12763
		#必填參數:
12764
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12765
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["zip"]);
12766
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12767
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12768
		#可省略參數
12769
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12770
		#$conf["disableWebSearch"]="false";
12771
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12772
		#$conf["userDir"]="true";
12773
		#參考資料來源:
12774
		#http://php.net/manual/en/function.file-exists.php
12775
		#http://php.net/manual/en/control-structures.foreach.php
12776
		#備註:
12777
		#函數file_exists檢查的路徑為檔案系統的路徑
12778
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12779
		unset($conf["fileAccess::checkMultiFileExist"]);
12780
 
12781
		#如果檢查檔案是否存在失敗
12782
		if($checkMultiFileExist["status"]==="false"){
12783
 
12784
			#設置執行不正常
12785
			$result["status"]="false";
12786
 
12787
			#設置錯誤訊息
12788
			$result["error"]=$checkMultiFileExist;
12789
 
12790
			#回傳結果
12791
			return $result;
12792
 
12793
			}#if end
12794
 
12795
		#如果要解壓縮的檔案不存在
12796
		if($checkMultiFileExist["allExist"]==="false"){
12797
 
12798
			#設置執行不正常
12799
			$result["status"]="false";
12800
 
12801
			#設置錯誤訊息
12802
			$result["error"]=$checkMultiFileExist;
12803
 
12804
			#回傳結果
12805
			return $result;
12806
 
12807
			}#if end
12808
 
12809
		#函式說明:
12810
		#呼叫shell執行系統命令,並取得回傳的內容.
12811
		#回傳結果:
12812
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12813
		#$result["error"],錯誤訊息陣列.
12814
		#$result["function"],當前執行的函數名稱.
12815
		#$result["argu"],使用的參數.
12816
		#$result["cmd"],執行的指令內容.
12817
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12818
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12819
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12820
		#$result["running"],是否還在執行.
12821
		#$result["pid"],pid
12822
		#必填參數:
12823
		#$conf["command"],字串,要執行的指令與.
12824
		$conf["external::callShell"]["command"]="unzip";
12825
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12826
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12827
		#可省略參數:
12828
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12829
		$conf["external::callShell"]["argu"]=array("-d",$conf["extract"],"-o","-q",$conf["zip"]);
12830
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12831
		#$conf["arguIsAddr"]=array();
12832
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12833
		#$conf["enablePrintDescription"]="true";
12834
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12835
		#$conf["printDescription"]="";
12836
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12837
		$conf["external::callShell"]["escapeshellarg"]="true";
12838
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12839
		#$conf["username"]="";
12840
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12841
		#$conf["password"]="";
12842
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12843
		#$conf["useScript"]="";
12844
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12845
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12846
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12847
		#$conf["inBackGround"]="";
12848
		#備註:
12849
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12850
		#參考資料:
12851
		#exec=>http://php.net/manual/en/function.exec.php
12852
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12853
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12854
		$callShell=external::callShell($conf["external::callShell"]);
12855
		unset($conf["external::callShell"]);
12856
 
12857
		#如果執行cmd失敗
12858
		if($callShell["status"]==="false"){
12859
 
12860
			#設置執行不正常
12861
			$result["status"]="false";
12862
 
12863
			#設置錯誤訊息
12864
			$result["error"]=$callShell;
12865
 
12866
			#回傳結果
12867
			return $result;
12868
 
12869
			}#if end
12870
 
12871
		#函式說明:
12872
		#呼叫shell執行系統命令,並取得回傳的內容.
12873
		#回傳的結果:
12874
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12875
		#$result["error"],錯誤訊息陣列.
12876
		#$result["function"],當前執行的函數名稱.
12877
		#$result["argu"],使用的參數.
12878
		#$result["cmd"],執行的指令內容.
12879
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12880
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12881
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12882
		#$result["running"],是否還在執行.
12883
		#$result["pid"],pid
12884
		#必填的參數
12885
		#$conf["command"],字串,要執行的指令與.
12886
		$conf["external::callShell"]["command"]="unzip";
12887
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12888
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12889
		#可省略參數:
12890
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12891
		$conf["external::callShell"]["argu"]=array("-v",$conf["zip"]);
12892
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12893
		#$conf["arguIsAddr"]=array();
12894
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12895
		#$conf["enablePrintDescription"]="true";
12896
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12897
		#$conf["printDescription"]="";
12898
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
12899
		$conf["external::callShell"]["escapeshellarg"]="true";
12900
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12901
		#$conf["username"]="";
12902
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12903
		#$conf["password"]="";
12904
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12905
		#$conf["useScript"]="";
12906
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12907
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12908
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12909
		#$conf["inBackGround"]="";
12910
		#備註:
12911
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12912
		#參考資料:
12913
		#exec=>http://php.net/manual/en/function.exec.php
12914
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12915
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12916
		$callShell=external::callShell($conf["external::callShell"]);
12917
		unset($conf["external::callShell"]);
12918
 
12919
		#如果執行cmd失敗
12920
		if($callShell["status"]==="false"){
12921
 
12922
			#設置執行不正常
12923
			$result["status"]="false";
12924
 
12925
			#設置錯誤訊息
12926
			$result["error"]=$callShell;
12927
 
12928
			#回傳結果
12929
			return $result;
12930
 
12931
			}#if end	
12932
 
12933
		#取得輸出的內容陣列
12934
		$unzipInfo=$callShell["output"];
12935
 
12936
		/*
12937
 
12938
		 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
12939
		--------  ------  ------- ---- ---------- ----- --------  ----
12940
		 4194304  Defl:X  2507269  40% 05-04-2002 17:30 9386a740  PS2 Bios 30004R V6 Pal.bin
12941
			   4  Defl:X        6 -50% 05-15-2005 06:45 054a6ec2  PS2 Bios 30004R V6 Pal.MEC
12942
			1024  Defl:X       22  98% 06-25-2005 14:55 3493bb06  PS2 Bios 30004R V6 Pal.NVM
12943
		  199680  Defl:X    70524  65% 06-02-2004 16:50 2c3bcd32  rom1.bin
12944
		 4194304  Defl:X  2637496  37% 02-20-2005 21:12 6f8e3c29  SCPH-70004_BIOS_V12_PAL_200.BIN
12945
		 3145728  Defl:X  3138427   0% 02-20-2005 21:12 bf3cbc65  SCPH-70004_BIOS_V12_PAL_200.EROM
12946
			1024  Defl:X      706  31% 02-20-2005 21:12 a8d51ead  SCPH-70004_BIOS_V12_PAL_200.NVM
12947
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM1
12948
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM2
12949
		 4194304  Defl:X  2213105  47% 10-18-2000 06:06 b7ef81a9  scph10000.bin
12950
			1024  Defl:X       11  99% 01-01-2005 00:42 efb5af2e  scph10000.NVM
12951
		 4194304  Defl:X  2511182  40% 06-27-2003 10:51 a19e0bf5  scph39001.bin
12952
			   4  Defl:X        6 -50% 05-14-2005 16:00 054a6ec2  scph39001.MEC
12953
			1024  Defl:X       20  98% 05-31-2005 16:09 e14a6cd6  scph39001.NVM
12954
		--------          -------  ---                            -------
12955
		21175304         13378622  37%                            14 files
12956
 
12957
		*/
12958
 
12959
		#取得行數
12960
		$lineCount=count($unzipInfo);
12961
 
12962
		#取得標題
12963
		#函式說明:
12964
		#將固定格式的字串分開,並回傳分開的結果。
12965
		#回傳結果:
12966
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12967
		#$result["error"],錯誤訊息陣列
12968
		#$result["function"],當前執行的函數名稱.
12969
		#$result["oriStr"],要分割的原始字串內容
12970
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12971
		#$result["dataCounts"],爲總共分成幾段
12972
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
12973
		#必填參數:
12974
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[1];#要處理的字串。
12975
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12976
		#可省略參數:
12977
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12978
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12979
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12980
		unset($conf["stringProcess::spiltString"]);
12981
 
12982
		#如果分割字串失敗
12983
		if($spiltString["status"]==="false"){
12984
 
12985
			#設置執行不正常
12986
			$result["status"]="false";
12987
 
12988
			#設置錯誤訊息
12989
			$result["error"]=$spiltString;
12990
 
12991
			#回傳結果
12992
			return $result;
12993
 
12994
			}#if end
12995
 
12996
		#如果沒有分割用的關鍵字
12997
		if($spiltString["found"]==="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
		$titles=$spiltString["dataArray"];	
13012
 
13013
		#取得標題欄位數目
13014
		$titleCount=$spiltString["dataCounts"];
13015
 
13016
		#針對每列輸出
13017
		for($i=3;$i<$lineCount-2;$i++){
13018
 
13019
			#取得各欄位的內容
13020
			#函式說明:
13021
			#將固定格式的字串分開,並回傳分開的結果。
13022
			#回傳結果:
13023
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13024
			#$result["error"],錯誤訊息陣列
13025
			#$result["function"],當前執行的函數名稱.
13026
			#$result["oriStr"],要分割的原始字串內容
13027
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13028
			#$result["dataCounts"],爲總共分成幾段
13029
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
13030
			#必填參數:
13031
			$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$i];#要處理的字串。
13032
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
13033
			#可省略參數:
13034
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
13035
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
13036
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13037
			unset($conf["stringProcess::spiltString"]);
13038
 
13039
			#如果分割字串失敗
13040
			if($spiltString["status"]==="false"){
13041
 
13042
				#設置執行不正常
13043
				$result["status"]="false";
13044
 
13045
				#設置錯誤訊息
13046
				$result["error"]=$spiltString;
13047
 
13048
				#回傳結果
13049
				return $result;
13050
 
13051
				}#if end
13052
 
13053
			#如果沒有分割用的關鍵字
13054
			if($spiltString["found"]==="false"){
13055
 
13056
				#設置執行不正常
13057
				$result["status"]="false";
13058
 
13059
				#設置錯誤訊息
13060
				$result["error"]=$spiltString;
13061
 
13062
				#回傳結果
13063
				return $result;
13064
 
13065
				}#if end
13066
 
13067
			#取得各欄位的內容
13068
			$cols=$spiltString["dataArray"];
13069
 
13070
			#取得欄位的數目
13071
			$colsCount=$spiltString["dataCounts"];
13072
 
13073
			#如果實際抓出的內容欄位數量大於標題欄位數量,代表檔案/目錄名稱含有空格
13074
			if($colsCount>$titleCount){
13075
 
13076
				#新的檔案名稱
13077
				$newFileName="";
13078
 
13079
				#針對每個多出的欄位
13080
				for($j=$titleCount;$j<$colsCount;$j++){
13081
 
13082
					#串接屬於檔案名稱的部分
13083
					$newFileName=$newFileName.$cols[$j];
13084
 
13085
					#如果不是最後一個項目
13086
					if($j!==$colsCount-1){
13087
 
13088
						#增加空格
13089
						$newFileName=$newFileName." ";
13090
 
13091
						}#if end
13092
 
13093
					}#for end
13094
 
13095
				#取代成對的檔案名稱
13096
				$cols[$titleCount-1]=$newFileName;
13097
 
13098
				}#if end
13099
 
13100
			#針對每個欄位
13101
			for($j=0;$j<$titleCount;$j++){
13102
 
13103
				#取得欄位內容
13104
				$result["content"]["each"][$titles[$j]][]=$cols[$j];
13105
 
13106
				}#for end
13107
 
13108
			}#for end
13109
 
13110
		#取得 total 的輸出內容
13111
		#函式說明:
13112
		#將固定格式的字串分開,並回傳分開的結果。
13113
		#回傳結果:
13114
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13115
		#$result["error"],錯誤訊息陣列
13116
		#$result["function"],當前執行的函數名稱.
13117
		#$result["oriStr"],要分割的原始字串內容
13118
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13119
		#$result["dataCounts"],爲總共分成幾段
13120
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
13121
		#必填參數:
13122
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$lineCount-1];#要處理的字串。
13123
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
13124
		#可省略參數:
13125
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
13126
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
13127
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13128
		unset($conf["stringProcess::spiltString"]);
13129
 
13130
		#如果分割字串失敗
13131
		if($spiltString["status"]==="false"){
13132
 
13133
			#設置執行不正常
13134
			$result["status"]="false";
13135
 
13136
			#設置錯誤訊息
13137
			$result["error"]=$spiltString;
13138
 
13139
			#回傳結果
13140
			return $result;
13141
 
13142
			}#if end
13143
 
13144
		#如果沒有分割用的關鍵字
13145
		if($spiltString["found"]==="false"){
13146
 
13147
			#設置執行不正常
13148
			$result["status"]="false";
13149
 
13150
			#設置錯誤訊息
13151
			$result["error"]=$spiltString;
13152
 
13153
			#回傳結果
13154
			return $result;
13155
 
13156
			}#if end
13157
 
13158
		#取得各欄位的內容
13159
		$cols=$spiltString["dataArray"];
13160
 
13161
		#取得總共的檔案長度
13162
		$result["content"]["total"][$titles[0]]=$cols[0];
13163
 
13164
		#取得壓縮時的總共檔案長度
13165
		$result["content"]["total"][$titles[2]]=$cols[1];
13166
 
13167
		#取得壓縮時的總共檔案長度
13168
		$result["content"]["total"][$titles[3]]=$cols[2];
13169
 
13170
		#取得解壓縮出了多少檔案跟目錄
13171
		$result["content"]["total"]["count"]=explode(" ",$cols[3])[0];
13172
 
13173
		#設置執行正常
13174
		$result["status"]="true";
13175
 
13176
		#回傳結果
13177
		return $result;
13178
 
13179
		}#function unzip end
13180
 
13181
	/*
13182
	#函式說明:
13183
	#接收Range: bytes=0-499格式的header, 輸出檔案的片段或完整檔案.
13184
	#回傳結果:
13185
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13186
	#$result["error"],錯誤訊息.
13187
	#$result["function"],當前執行的函式名稱.
13188
	#必填參數:
13189
	#$conf["filePath"],字串,檔案的路徑.
13190
	$conf["filePath"]="";
13191
	#可省略參數:
13192
	#$conf["fileName"],字串,顯示的檔案名稱,預設為basename($conf["filePath"]);
13193
	#$conf["fileName"]="";
13194
	#參考資料:
13195
	#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/
13196
	#http://php.net/manual/en/function.filemtime.php
13197
	#http://php.net/manual/en/function.connection-status.php
13198
	#http://php.net/manual/en/function.fread.php
13199
	#備註:
13200
	#請勿在運行該函式前印出任何內容,這是要給用戶端接收的內容.
13201
	*/
13202
	public static function partDownload(&$conf=array()){
13203
 
13204
		#初始化要回傳的結果
13205
		$result=array();
13206
 
13207
		#取得當前執行的函數名稱
13208
		$result["function"]=__FUNCTION__;
13209
 
13210
		#如果沒有參數
13211
		if(func_num_args()==0){
13212
 
13213
			#設置執行失敗
13214
			$result["status"]="false";
13215
 
13216
			#設置執行錯誤訊息
13217
			$result["error"]="函數".$result["function"]."需要參數";
13218
 
13219
			#回傳結果
13220
			return $result;
13221
 
13222
		}#if end
13223
 
13224
		#取得參數
13225
		$result["argu"]=$conf;
13226
 
13227
		#如果 $conf 不為陣列
13228
		if(gettype($conf)!=="array"){
13229
 
13230
			#設置執行失敗
13231
			$result["status"]="false";
13232
 
13233
			#設置執行錯誤訊息
13234
			$result["error"][]="\$conf變數須為陣列形態";
13235
 
13236
			#如果傳入的參數為 null
13237
			if($conf===null){
13238
 
13239
				#設置執行錯誤訊息
13240
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13241
 
13242
				}#if end
13243
 
13244
			#回傳結果
13245
			return $result;
13246
 
13247
			}#if end
13248
 
13249
		#檢查參數
13250
		#函式說明:
13251
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13252
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13253
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13254
		#$result["function"],當前執行的函式名稱.
13255
		#$result["argu"],設置給予的參數.
13256
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13257
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13258
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13259
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13260
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13261
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13262
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13263
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13264
		#必填寫的參數:
13265
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13266
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13267
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13268
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13269
		#可以省略的參數:
13270
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13271
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePath");
13272
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13273
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
13274
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13275
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13276
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13277
		#$conf["canNotBeEmpty"]=array();
13278
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13279
		#$conf["canBeEmpty"]=array();
13280
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13281
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("fileName");
13282
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13283
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName");
13284
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13285
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13286
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13287
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13288
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13289
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13290
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13291
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13292
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13293
		#$conf["arrayCountEqualCheck"][]=array();
13294
		#參考資料來源:
13295
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13296
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13297
		unset($conf["variableCheck::checkArguments"]);
13298
 
13299
		#如果檢查參數失敗
13300
		if($checkArguments["status"]==="false"){
13301
 
13302
			#設置執行失敗
13303
			$result["status"]="false";
13304
 
13305
			#設置執行錯誤
13306
			$result["error"]=$checkArguments;
13307
 
13308
			#回傳結果
13309
			return $result;
13310
 
13311
			}#if end
13312
 
13313
		#如果檢查參數不通過
13314
		if($checkArguments["passed"]==="false"){
13315
 
13316
			#設置執行失敗
13317
			$result["status"]="false";
13318
 
13319
			#設置執行錯誤
13320
			$result["error"]=$checkArguments;
13321
 
13322
			#回傳結果
13323
			return $result;
13324
 
13325
			}#if end
13326
 
13327
		#如果沒有設置 $conf["fileName"]
13328
		if(!isset($conf["fileName"])){
13329
 
13330
			#取得檔案名稱
13331
			$filename=basename($conf["filePath"]);
13332
 
13333
			}#if end
13334
 
13335
		#反之
13336
		else{
13337
 
13338
			#取得設定好的檔案名稱
13339
			$filename=&$conf["fileName"];
13340
 
13341
			}#else end
13342
 
13343
		#取得檔案路徑
13344
		$location=$conf["filePath"];
13345
 
13346
		#取得mimetype
13347
		$mimetype=mime_content_type($location);
13348
 
13349
		#如果檔案不存在
13350
		if(!file_exists($location)){
13351
 
13352
			#提示找不到檔案
13353
			header("HTTP/1.1 404 Not Found");
13354
 
13355
			#設置執行失敗
13356
			$result["status"]="false";
13357
 
13358
			#設置錯誤訊息
13359
			$result["error"][]="檔案 ".$location." 不存在.";
13360
 
13361
			#回傳結果
13362
			return $result;
13363
 
13364
			}#if end
13365
 
13366
		#取得檔案的bytes長度
13367
		$size  = filesize($location);
13368
 
13369
		#取得檔案的最後變更日期
13370
		$time  = date('r', filemtime($location));
13371
 
13372
		#讀取檔案的2元碼內容
13373
		$fm = @fopen($location, 'rb');
13374
 
13375
		#如果開啟檔案失敗
13376
		if(!$fm){
13377
 
13378
			#提示錯誤
13379
			header("HTTP/1.1 505 Internal server error");
13380
 
13381
			#設置執行失敗
13382
			$result["status"]="false";
13383
 
13384
			#設置錯誤訊息
13385
			$result["error"][]="開啟檔案 ".$location." 失敗.";
13386
 
13387
			#回傳結果
13388
			return $result;
13389
 
13390
			}#if end
13391
 
13392
		#初始化要提供的bytes長度起始點
13393
		$begin  = 0;
13394
 
13395
		#初始化要提供的bytes長度結束點
13396
		$end  = $size - 1;
13397
 
13398
		#如果有接收到 'HTTP_RANGE' 的 header 訊息
13399
		if(isset($_SERVER['HTTP_RANGE'])){
13400
 
13401
			#接收到的範例
13402
			#Range: bytes=0-499 
13403
 
13404
			#取得要求的bytes位置範圍
13405
			sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d",$begin,$end);
13406
 
13407
			#如果 $begin 或 $end  有缺
13408
			if(!isset($begin) || !isset($end)){
13409
 
13410
				#設置執行失敗
13411
				$result["status"]="false";
13412
 
13413
				#設置錯誤訊息
13414
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13415
 
13416
				#回傳結果
13417
				return $result;
13418
 
13419
				}#if end
13420
 
13421
			#如果 $begin 沒有小於等於 $end
13422
			if(!($begin<=$end)){
13423
 
13424
				#設置執行失敗
13425
				$result["status"]="false";
13426
 
13427
				#設置錯誤訊息
13428
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13429
 
13430
				#回傳結果
13431
				return $result;
13432
 
13433
				}#if end
13434
 
13435
			}#if end
13436
 
13437
		#提示 200 ok
13438
		header('HTTP/1.1 200 OK');
13439
 
13440
		#提示 mimetype
13441
		header("Content-Type: $mimetype");
13442
 
13443
		#要先驗證cache中的資料,取得的內容放在快取的時間為0
13444
		header('Cache-Control: public, must-revalidate, max-age=0');
13445
 
13446
		#提示不要cache
13447
		header('Pragma: no-cache');  
13448
 
13449
		#提示接收的 Ranges 單位為 bytes
13450
		header('Accept-Ranges: bytes');
13451
 
13452
		#數值傳輸的內容長度為多少
13453
		header('Content-Length:' . (($end - $begin) + 1));
13454
 
13455
		#提示內容為檔案的哪邊到哪邊與總共的長度
13456
		header("Content-Range: bytes $begin-$end/$size");
13457
 
13458
		#提示檔案的名稱
13459
		header("Content-Disposition: inline; filename=$filename");
13460
 
13461
		#提示用2元碼傳輸
13462
		header("Content-Transfer-Encoding: binary");
13463
 
13464
		#提示檔案最後變更日期
13465
		header("Last-Modified: $time");
13466
 
13467
		#初始化當前位置
13468
		$cur  = $begin;
13469
 
13470
		#指定讀取的起始點為 $begin 
13471
		fseek($fm, $begin, 0);
13472
 
13473
		#讀取內容, 若不是檔案結尾, 且當前位置($cur)小於等於 本次要提供的長度結尾($end), 且connection_status為0
13474
		while(!feof($fm) && $cur<=$end && (connection_status()===0)){
13475
 
13476
			#一次最多印出 1024*16bytes 的長度,若剩下長度不足則只印出剩下的長度.
13477
			echo fread($fm, min(1024 * 16, ($end - $cur) + 1));
13478
 
13479
			#更改位置
13480
			$cur += 1024 * 16;
13481
 
13482
			}#while end
13483
 
13484
		}#function partDownload end
13485
 
13486
	/*
13487
	#函式說明:
13488
	#尋找檔案. 
13489
	#回傳結果:
13490
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13491
	#$result["error"],錯誤訊息.
13492
	#$result["warning"],警告訊息陣列.
13493
	#$result["function"],當前執行的函數名稱.
13494
	#$result["argu"],所使用的參數.
13495
	#$result["found"],是否有找到可以轉換的檔案,"true"代表有;"false"代表沒有.
13496
	#$result["content"],找到的檔案陣列.
13497
	#必填參數:
13498
	#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13499
	$conf["keyWord"]="";
13500
	#$conf["path"],字串陣列,虛擬硬碟檔案的搜尋路徑,預設為當前路徑.
13501
	$conf["path"]=array();
13502
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13503
	$conf["fileArgu"]=__FILE__;
13504
	#參考資料:
13505
	#http://php.net/manual/en/function.glob.php
13506
	#備註:
13507
	#無.
13508
	*/
13509
	public static function findFile(&$conf=array()){
13510
 
13511
		#初始化要回傳的結果
13512
		$result=array();
13513
 
13514
		#取得當前執行的函數名稱
13515
		$result["function"]=__FUNCTION__;
13516
 
13517
		#如果沒有參數
13518
		if(func_num_args()==0){
13519
 
13520
			#設置執行失敗
13521
			$result["status"]="false";
13522
 
13523
			#設置執行錯誤訊息
13524
			$result["error"]="函數".$result["function"]."需要參數";
13525
 
13526
			#回傳結果
13527
			return $result;
13528
 
13529
			}#if end		
13530
 
13531
		#取得參數
13532
		$result["argu"]=$conf;
13533
 
13534
		#如果 $conf 不為陣列
13535
		if(gettype($conf)!=="array"){
13536
 
13537
			#設置執行失敗
13538
			$result["status"]="false";
13539
 
13540
			#設置執行錯誤訊息
13541
			$result["error"][]="\$conf變數須為陣列形態";
13542
 
13543
			#如果傳入的參數為 null
13544
			if($conf===null){
13545
 
13546
				#設置執行錯誤訊息
13547
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13548
 
13549
				}#if end
13550
 
13551
			#回傳結果
13552
			return $result;
13553
 
13554
			}#if end
13555
 
13556
		#函式說明:
13557
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13558
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13559
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13560
		#$result["function"],當前執行的函式名稱.
13561
		#$result["argu"],設置給予的參數.
13562
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13563
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13564
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13565
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13566
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13567
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13568
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13569
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13570
		#必填寫的參數:
13571
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13572
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13573
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13574
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13575
		#可以省略的參數:
13576
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13577
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","keyWord","fileArgu");
13578
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13579
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");
13580
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13581
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13582
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13583
		#$conf["canNotBeEmpty"]=array();
13584
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13585
		#$conf["canBeEmpty"]=array();
13586
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13587
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13588
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13589
		#$conf["skipableVariableName"]=array();
13590
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13591
		#$conf["skipableVariableType"]=array();
13592
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13593
		#$conf["skipableVarDefaultValue"]=array("");
13594
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13595
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13596
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13597
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13598
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13599
		#$conf["arrayCountEqualCheck"][]=array();
13600
		#參考資料來源:
13601
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13602
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13603
		unset($conf["variableCheck::checkArguments"]);
13604
 
13605
		#如果檢查參數失敗
13606
		if($checkArguments["status"]==="false"){
13607
 
13608
			#設置執行失敗
13609
			$result["status"]="false";
13610
 
13611
			#設置執行失敗訊息
13612
			$result["error"]=$checkArguments;
13613
 
13614
			#回傳結果
13615
			return $result;
13616
 
13617
			}#if end
13618
 
13619
		#如果檢查參數不通過
13620
		if($checkArguments["passed"]==="false"){
13621
 
13622
			#設置執行失敗
13623
			$result["status"]="false";
13624
 
13625
			#設置執行失敗訊息
13626
			$result["error"]=$checkArguments;
13627
 
13628
			#回傳結果
13629
			return $result;
13630
 
13631
			}#if end
13632
 
13633
		#檢查要搜尋的路徑是否都存在
13634
		#函式說明:
13635
		#s檢查多個檔案與資料夾是否存在.
13636
		#回傳的結果:
13637
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13638
		#$result["error"],錯誤訊息陣列.
13639
		#$resutl["function"],當前執行的涵式名稱.
13640
		#$result["argu"],使用的參數.
13641
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13642
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
13643
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
13644
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
13645
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13646
		#必填參數:
13647
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
13648
		$conf["self::checkMultiFileExist"]["fileArray"]=$conf["path"];
13649
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13650
		$conf["self::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13651
		#可省略參數
13652
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
13653
		#$conf["disableWebSearch"]="false";
13654
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13655
		#$conf["userDir"]="true";
13656
		#參考資料來源:
13657
		#http://php.net/manual/en/function.file-exists.php
13658
		#http://php.net/manual/en/control-structures.foreach.php
13659
		#備註:
13660
		#函數file_exists檢查的路徑為檔案系統的路徑
13661
		$checkMultiFileExist=self::checkMultiFileExist($conf["self::checkMultiFileExist"]);
13662
		unset($conf["self::checkMultiFileExist"]);
13663
 
13664
		#如果檢查目錄存在失敗
13665
		if($checkMultiFileExist["status"]==="false"){
13666
 
13667
			#設置執行失敗
13668
			$result["status"]="false";
13669
 
13670
			#設置執行失敗訊息
13671
			$result["error"]=$checkMultiFileExist;
13672
 
13673
			#回傳結果
13674
			return $result;
13675
 
13676
			}#if end	
13677
 
13678
		#如果目錄不存在
13679
		if($checkMultiFileExist["status"]==="false"){
13680
 
13681
			#設置執行失敗
13682
			$result["status"]="false";
13683
 
13684
			#設置執行失敗訊息
13685
			$result["error"]=$checkMultiFileExist;
13686
 
13687
			#回傳結果
13688
			return $result;
13689
 
13690
			}#if end
13691
 
13692
		#如果有路徑不存在
13693
		if($checkMultiFileExist["allExist"]==="false"){
13694
 
13695
			#設置執行失敗
13696
			$result["status"]="false";
13697
 
13698
			#設置執行失敗訊息
13699
			$result["error"]=$checkMultiFileExist;
13700
 
13701
			#設置提示有路徑不存在的訊息
13702
			$result["warning"][]="參數path的路徑沒有每個都存在";
13703
 
13704
			#回傳結果
13705
			return $result;
13706
 
13707
			}#if end
13708
 
13709
		#預設沒有找到檔案
13710
		$result["found"]="false";	
13711
 
13712
		#針對每個要搜尋的路徑
13713
		foreach($conf["path"] as $path){
13714
 
13715
			#函式說明:
13716
			#用find指令尋找檔案
13717
			#回傳結果:
13718
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13719
			#$result["error"],錯誤訊息.
13720
			#$result["function"],當前執行的函數名稱.
13721
			#$result["argu"],所使用的參數.
13722
			#$result["found"],是否有找到符合的檔案,"true"代表有;"false"代表沒有.
13723
			#$result["content"],找到的檔案陣列.
13724
			#必填參數:
13725
			#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13726
			$conf["cmd::find"]["keyWord"]=$conf["keyWord"];	
13727
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13728
			$conf["cmd::find"]["fileArgu"]=$conf["fileArgu"];
13729
			#可省略參數:
13730
			#$conf["path"],字串,搜尋的路徑,預設為"/".
13731
			$conf["cmd::find"]["path"]=$path;
13732
			#$conf["fileOnly"],字串,"true"代表只要找檔案,"false"代表.
13733
			$conf["cmd::find"]["fileOnly"]="true";
13734
			#參考資料:
13735
			#http://php.net/manual/en/function.glob.php
13736
			$find=cmd::find($conf["cmd::find"]);
13737
			unset($conf["cmd::find"]);
13738
 
13739
			#如果尋找檔案失敗
13740
			if($find["status"]==="false"){
13741
 
13742
				#設置執行失敗
13743
				$result["status"]="false";
13744
 
13745
				#設置執行失敗訊息
13746
				$result["error"]=$find;
13747
 
13748
				#回傳結果
13749
				return $result;
13750
 
13751
				}#if end
13752
 
13753
			#如果有找到符合的檔案
13754
			if($find["found"]==="true"){
13755
 
13756
				#設置有找到檔案
13757
				$result["found"]="true";
13758
 
13759
				#針對每個找到的檔案
13760
				foreach($find["content"] as $filtedFile){
13761
 
13762
					#設置有找到的檔案
13763
					$result["content"][]=$filtedFile;
13764
 
13765
					}#foreach end
13766
 
13767
				}#if end
13768
 
13769
			}#foreach end		
13770
 
13771
		#設置執行正常
13772
		$result["status"]="true";
13773
 
13774
		#回傳結果
13775
		return $result;
13776
 
13777
		}#function findFile end
13778
 
13779
	/*
13780
	#函式說明:
13781
	#判斷檔案位於哪個分割區
13782
	#回傳結果:
13783
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13784
	#$result["error"],錯誤訊息.
13785
	#$result["function"],當前執行的函數名稱.
13786
	#$result["argu"],所使用的參數.
13787
	#$result["content"],找到的檔案所屬分割區資訊.
13788
	#必填參數:
13789
	#$conf["file"],字串,檔案的路徑與名稱.
13790
	$conf["file"]="";
13791
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13792
	$conf["fileArgu"]=__FILE__;
13793
	#可省略參數:
13794
	#無.
13795
	#參考資料:
13796
	#無.
13797
	#備註:
13798
	#無.
13799
	*/
13800
	public static function addrInMountPoint(&$conf=array()){
13801
 
13802
		#初始化要回傳的結果
13803
		$result=array();
13804
 
13805
		#取得當前執行的函數名稱
13806
		$result["function"]=__FUNCTION__;
13807
 
13808
		#如果沒有參數
13809
		if(func_num_args()==0){
13810
 
13811
			#設置執行失敗
13812
			$result["status"]="false";
13813
 
13814
			#設置執行錯誤訊息
13815
			$result["error"]="函數".$result["function"]."需要參數";
13816
 
13817
			#回傳結果
13818
			return $result;
13819
 
13820
			}#if end		
13821
 
13822
		#取得參數
13823
		$result["argu"]=$conf;
13824
 
13825
		#如果 $conf 不為陣列
13826
		if(gettype($conf)!=="array"){
13827
 
13828
			#設置執行失敗
13829
			$result["status"]="false";
13830
 
13831
			#設置執行錯誤訊息
13832
			$result["error"][]="\$conf變數須為陣列形態";
13833
 
13834
			#如果傳入的參數為 null
13835
			if($conf===null){
13836
 
13837
				#設置執行錯誤訊息
13838
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13839
 
13840
				}#if end
13841
 
13842
			#回傳結果
13843
			return $result;
13844
 
13845
			}#if end
13846
 
13847
		#函式說明:
13848
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13849
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13850
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13851
		#$result["function"],當前執行的函式名稱.
13852
		#$result["argu"],設置給予的參數.
13853
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13854
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13855
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13856
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13857
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13858
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13859
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13860
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13861
		#必填寫的參數:
13862
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13863
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13864
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13865
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13866
		#可以省略的參數:
13867
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13868
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
13869
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13870
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13871
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13872
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13873
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13874
		#$conf["canNotBeEmpty"]=array();
13875
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13876
		#$conf["canBeEmpty"]=array();
13877
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13878
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13879
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13880
		#$conf["skipableVariableName"]=array();
13881
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13882
		#$conf["skipableVariableType"]=array();
13883
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13884
		#$conf["skipableVarDefaultValue"]=array("");
13885
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13886
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13887
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13888
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13889
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13890
		#$conf["arrayCountEqualCheck"][]=array();
13891
		#參考資料來源:
13892
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13893
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13894
		unset($conf["variableCheck::checkArguments"]);
13895
 
13896
		#如果檢查參數失敗
13897
		if($checkArguments["status"]==="false"){
13898
 
13899
			#設置執行失敗
13900
			$result["status"]="false";
13901
 
13902
			#設置執行失敗訊息
13903
			$result["error"]=$checkArguments;
13904
 
13905
			#回傳結果
13906
			return $result;
13907
 
13908
			}#if end
13909
 
13910
		#如果檢查參數不通過
13911
		if($checkArguments["passed"]==="false"){
13912
 
13913
			#設置執行失敗
13914
			$result["status"]="false";
13915
 
13916
			#設置執行失敗訊息
13917
			$result["error"]=$checkArguments;
13918
 
13919
			#回傳結果
13920
			return $result;
13921
 
13922
			}#if end
13923
 
13924
		#函式說明:
13925
		#透過lsblk指令的輸出取得已經掛載的blk.
13926
		#回傳結果:
13927
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13928
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13929
		#$result["function"],當前執行的函式名稱.
13930
		#$result["content"],lsblk的輸出內容.
13931
		#必填參數:
13932
		#$conf["fileArgu"],字串,變數__FILE__的內容.
13933
		$conf["cmd::lsblk"]["fileArgu"]=$conf["fileArgu"];
13934
		#可省略參數:
13935
		#無.	
13936
		$lsblk=cmd::lsblk($conf["cmd::lsblk"]);
13937
		unset($conf["cmd::lsblk"]);
13938
 
13939
		#如果執行失敗
13940
		if($lsblk["status"]==="false"){
13941
 
13942
			#設置執行失敗
13943
			$result["status"]="false";
13944
 
13945
			#設置執行失敗訊息
13946
			$result["error"]=$lsblk;
13947
 
13948
			#回傳結果
13949
			return $result;
13950
 
13951
			}#if end
13952
 
13953
		#將 $conf["file"] 轉換成絕對路徑
13954
		#函式說明:
13955
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
13956
		#回傳結果:
13957
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
13958
		#$result["error"],錯誤訊息陣列.
13959
		#$result["function"],函數名稱. 
13960
		#$result["argu"],使用的參數.
13961
		#$result["content"],網址,若是在命令列執行,則為"null".
13962
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
13963
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
13964
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
13965
		#必填參數:
13966
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
13967
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["file"];
13968
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
13969
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
13970
		#可省略參數:
13971
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13972
		#$conf["userDir"]="true";
13973
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
13974
		unset($conf["fileAccess::getInternetAddress"]);
13975
 
13976
		#如果執行失敗
13977
		if($getInternetAddress["status"]==="false"){
13978
 
13979
			#設置執行失敗
13980
			$result["status"]="false";
13981
 
13982
			#設置執行失敗訊息
13983
			$result["error"]=$getInternetAddress;
13984
 
13985
			#回傳結果
13986
			return $result;
13987
 
13988
			}#if end	
13989
 
13990
		#使用絕對位置作為輸入字串
13991
		#函式說明:
13992
		#尋找字串是否存在對應的關鍵字,且符合的最常關鍵字為何?
13993
		#回傳結果:
13994
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13995
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13996
		#$result["function"],當前執行的函式名稱.
13997
		#$result["argu"],所使用的參數.
13998
		#$result["founded"],是否有找到關鍵字,"true"代表有找到,"false"代表沒有找到.
13999
		#$result["content"],最符合的字串完整內容.
14000
		#必填參數:
14001
		#$conf["input"],字串,要比對的字串陣列.
14002
		$conf["search::findLikelyStr"]["input"]=$getInternetAddress["fileSystemAbsoulutePosition"];
14003
		#$conf["keyWord"],字串陣列,要搜尋的關鍵字.
14004
		$conf["search::findLikelyStr"]["keyWord"]=$lsblk["content"]["MOUNTPOINT"];
14005
		$findLikelyStr=search::findLikelyStr($conf["search::findLikelyStr"]);
14006
		unset($conf["search::findLikelyStr"]);
14007
 
14008
		#如果執行失敗
14009
		if($findLikelyStr["status"]==="false"){
14010
 
14011
			#設置執行失敗
14012
			$result["status"]="false";
14013
 
14014
			#設置執行失敗訊息
14015
			$result["error"]=$findLikelyStr;
14016
 
14017
			#回傳結果
14018
			return $result;
14019
 
14020
			}#if end
14021
 
14022
		#如果找不到歸屬的分割區
14023
		if($findLikelyStr["found"]==="false"){
14024
 
14025
			#設置執行失敗
14026
			$result["status"]="false";
14027
 
14028
			#設置執行失敗訊息
14029
			$result["error"]=$findLikelyStr;
14030
 
14031
			#回傳結果
14032
			return $result;
14033
 
14034
			}#if end
14035
 
14036
		#設置歸屬的分割區資訊
14037
		$result["content"]=$findLikelyStr["content"];
14038
 
14039
		#設置執行正常
14040
		$result["status"]="true";
14041
 
14042
		#回傳結果
14043
		return $result;
14044
 
14045
		}#function addrInMountPoint end
14046
 
14047
	/*
14048
	#函式說明:
14049
	#取得檔案的副檔名
14050
	#回傳結果:
14051
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14052
	#$result["error"],錯誤訊息.
14053
	#$result["function"],當前執行的函數名稱.
14054
	#$result["argu"],所使用的參數.	
14055
	#$result["content"],副檔名.
14056
	#$result["name"],不含副檔的名稱.
14057
	#$result["fullName"],含副檔的名稱.
14058
	#$result["path"],檔案所處的路徑.
14059
	#必填參數:
14060
	#$conf["file"],字串,檔案的路徑與名稱.
14061
	$conf["file"]="";
14062
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14063
	$conf["fileArgu"]=__FILE__;
14064
	#可省略參數:
14065
	#無.
14066
	#參考資料:
14067
	#無.
14068
	#備註:
14069
	#無.
14070
	*/
14071
	public static function getExtension(&$conf=array()){
14072
 
14073
		#初始化要回傳的結果
14074
		$result=array();
14075
 
14076
		#取得當前執行的函數名稱
14077
		$result["function"]=__FUNCTION__;
14078
 
14079
		#如果沒有參數
14080
		if(func_num_args()==0){
14081
 
14082
			#設置執行失敗
14083
			$result["status"]="false";
14084
 
14085
			#設置執行錯誤訊息
14086
			$result["error"]="函數".$result["function"]."需要參數";
14087
 
14088
			#回傳結果
14089
			return $result;
14090
 
14091
			}#if end		
14092
 
14093
		#取得參數
14094
		$result["argu"]=$conf;
14095
 
14096
		#如果 $conf 不為陣列
14097
		if(gettype($conf)!=="array"){
14098
 
14099
			#設置執行失敗
14100
			$result["status"]="false";
14101
 
14102
			#設置執行錯誤訊息
14103
			$result["error"][]="\$conf變數須為陣列形態";
14104
 
14105
			#如果傳入的參數為 null
14106
			if($conf===null){
14107
 
14108
				#設置執行錯誤訊息
14109
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14110
 
14111
				}#if end
14112
 
14113
			#回傳結果
14114
			return $result;
14115
 
14116
			}#if end
14117
 
14118
		#函式說明:
14119
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14120
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14121
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14122
		#$result["function"],當前執行的函式名稱.
14123
		#$result["argu"],設置給予的參數.
14124
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14125
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14126
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14127
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14128
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14129
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14130
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14131
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14132
		#必填寫的參數:
14133
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14134
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14135
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14136
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14137
		#可以省略的參數:
14138
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14139
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14140
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14141
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14142
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14143
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14144
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14145
		#$conf["canNotBeEmpty"]=array();
14146
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14147
		#$conf["canBeEmpty"]=array();
14148
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14149
		#$conf["skipableVariableCanNotBeEmpty"]=array();
14150
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14151
		#$conf["skipableVariableName"]=array();
14152
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14153
		#$conf["skipableVariableType"]=array();
14154
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14155
		#$conf["skipableVarDefaultValue"]=array("");
14156
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14157
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14158
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14159
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14160
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14161
		#$conf["arrayCountEqualCheck"][]=array();
14162
		#參考資料來源:
14163
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14164
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14165
		unset($conf["variableCheck::checkArguments"]);
14166
 
14167
		#如果檢查參數失敗
14168
		if($checkArguments["status"]==="false"){
14169
 
14170
			#設置執行失敗
14171
			$result["status"]="false";
14172
 
14173
			#設置執行失敗訊息
14174
			$result["error"]=$checkArguments;
14175
 
14176
			#回傳結果
14177
			return $result;
14178
 
14179
			}#if end
14180
 
14181
		#如果檢查參數不通過
14182
		if($checkArguments["passed"]==="false"){
14183
 
14184
			#設置執行失敗
14185
			$result["status"]="false";
14186
 
14187
			#設置執行失敗訊息
14188
			$result["error"]=$checkArguments;
14189
 
14190
			#回傳結果
14191
			return $result;
14192
 
14193
			}#if end
14194
 
14195
		#初始化檔案的路徑
14196
		$result["path"]="./";
14197
 
14198
		#用 "/" 來分割字串
14199
		#函式說明:
14200
		#將固定格式的字串分開,並回傳分開的結果。
14201
		#回傳結果:
14202
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14203
		#$result["error"],錯誤訊息陣列
14204
		#$result["function"],當前執行的函數名稱.
14205
		#$result["oriStr"],要分割的原始字串內容
14206
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14207
		#$result["dataCounts"],爲總共分成幾段
14208
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
14209
		#必填參數:
14210
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["file"];#要處理的字串。
14211
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
14212
		#可省略參數:
14213
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14214
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14215
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14216
		unset($conf["stringProcess::spiltString"]);
14217
 
14218
		#如果檢查參數失敗
14219
		if($spiltString["status"]==="false"){
14220
 
14221
			#設置執行失敗
14222
			$result["status"]="false";
14223
 
14224
			#設置執行失敗訊息
14225
			$result["error"]=$spiltString;
14226
 
14227
			#回傳結果
14228
			return $result;
14229
 
14230
			}#if end
14231
 
14232
		#初始化含副檔名的檔案名稱
14233
		$result["fullName"]=$conf["file"];
14234
 
14235
		#如果有"/"存在
14236
		if($spiltString["found"]==="true"){
14237
 
14238
			#取得含副檔名的檔案名稱
14239
			$result["fullName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14240
 
14241
			#取得檔案的路徑
14242
			$result["path"]=substr($conf["file"],0,strlen($conf["file"])-strlen($result["fullName"]));
14243
 
14244
			}#if end
14245
 
14246
		#用 "." 來分割字串
14247
		#函式說明:
14248
		#將固定格式的字串分開,並回傳分開的結果。
14249
		#回傳結果:
14250
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14251
		#$result["error"],錯誤訊息陣列
14252
		#$result["function"],當前執行的函數名稱.
14253
		#$result["oriStr"],要分割的原始字串內容
14254
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14255
		#$result["dataCounts"],爲總共分成幾段
14256
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
14257
		#必填參數:
14258
		$conf["stringProcess::spiltString"]["stringIn"]=$result["fullName"];#要處理的字串。
14259
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
14260
		#可省略參數:
14261
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14262
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14263
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14264
		unset($conf["stringProcess::spiltString"]);
14265
 
14266
		#如果檢查參數失敗
14267
		if($spiltString["status"]==="false"){
14268
 
14269
			#設置執行失敗
14270
			$result["status"]="false";
14271
 
14272
			#設置執行失敗訊息
14273
			$result["error"]=$spiltString;
14274
 
14275
			#回傳結果
14276
			return $result;
14277
 
14278
			}#if end
14279
 
14280
		#預設副檔名為 ""
14281
		$result["content"]="";
14282
 
14283
		#預設不含副檔名的檔案名稱
14284
		$result["name"]=$result["fullName"];
14285
 
14286
		#如果有"."存在
14287
		if($spiltString["found"]==="true"){
14288
 
14289
			#取得含副檔名
14290
			$result["content"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14291
 
14292
			#取得不含副檔名的檔案名稱
14293
			$result["name"]=substr($result["fullName"],0,strlen($result["fullName"])-strlen($result["content"])-1);	
14294
 
14295
			}#if end
14296
 
14297
		#設置執行正常
14298
		$result["status"]="true";
14299
 
14300
		#回傳結果
14301
		return $result;
14302
 
14303
		}#function getExtension end
14304
 
14305
	/*
14306
	#函式說明:
14307
	#從檔案尾部開始讀取
14308
	#回傳結果:
14309
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14310
	#$result["error"],錯誤訊息.
14311
	#$result["function"],當前執行的函數名稱.
14312
	#$result["argu"],所使用的參數.	
14313
	#$result["content"],讀取到的內容陣列.
14314
	#$result["totalLineCount"],檔案的總共行數.
14315
	#$result["lines"],取得輸出的行數.
14316
	#$result["lineNum"],取得當前行數.
14317
	#必填參數:
14318
	#$conf["file"],字串,檔案的路徑與名稱.
14319
	$conf["file"]="";
14320
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14321
	$conf["fileArgu"]=__FILE__;
14322
	#可省略參數:
14323
	#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14324
	#$conf["web"]="false";
14325
	#$conf["line2start"],字串,從第幾列開始,預設為總行書減去linesPerTime+1.
14326
	#$conf["line2start"]="";
14327
	#$conf["linesPerTime"],字串,一次最多讀取幾列,預設爲10列.
14328
	#$conf["linesPerTime"]="10";	
14329
	#參考資料:
14330
	#無.
14331
	#備註:
14332
	#無.
14333
	*/
14334
	public static function tail(&$conf){
14335
 
14336
		#初始化要回傳的結果
14337
		$result=array();
14338
 
14339
		#取得當前執行的函數名稱
14340
		$result["function"]=__FUNCTION__;
14341
 
14342
		#如果沒有參數
14343
		if(func_num_args()==0){
14344
 
14345
			#設置執行失敗
14346
			$result["status"]="false";
14347
 
14348
			#設置執行錯誤訊息
14349
			$result["error"]="函數".$result["function"]."需要參數";
14350
 
14351
			#回傳結果
14352
			return $result;
14353
 
14354
			}#if end		
14355
 
14356
		#取得參數
14357
		$result["argu"]=$conf;
14358
 
14359
		#如果 $conf 不為陣列
14360
		if(gettype($conf)!=="array"){
14361
 
14362
			#設置執行失敗
14363
			$result["status"]="false";
14364
 
14365
			#設置執行錯誤訊息
14366
			$result["error"][]="\$conf變數須為陣列形態";
14367
 
14368
			#如果傳入的參數為 null
14369
			if($conf===null){
14370
 
14371
				#設置執行錯誤訊息
14372
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14373
 
14374
				}#if end
14375
 
14376
			#回傳結果
14377
			return $result;
14378
 
14379
			}#if end
14380
 
14381
		#函式說明:
14382
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14383
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14384
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14385
		#$result["function"],當前執行的函式名稱.
14386
		#$result["argu"],設置給予的參數.
14387
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14388
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14389
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14390
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14391
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14392
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14393
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14394
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14395
		#必填寫的參數:
14396
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14397
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14398
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14399
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14400
		#可以省略的參數:
14401
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14402
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14403
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14404
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14405
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14406
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14407
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14408
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu");
14409
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14410
		#$conf["canBeEmpty"]=array();
14411
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14412
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web","line2start","linesPerTime");
14413
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14414
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web","line2start","linesPerTime");
14415
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14416
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
14417
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14418
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,"10");
14419
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14420
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14421
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14422
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14423
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14424
		#$conf["arrayCountEqualCheck"][]=array();
14425
		#參考資料來源:
14426
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14427
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14428
		unset($conf["variableCheck::checkArguments"]);
14429
 
14430
		#如果檢查參數失敗
14431
		if($checkArguments["status"]==="false"){
14432
 
14433
			#設置執行失敗
14434
			$result["status"]="false";
14435
 
14436
			#設置執行失敗訊息
14437
			$result["error"]=$checkArguments;
14438
 
14439
			#回傳結果
14440
			return $result;
14441
 
14442
			}#if end
14443
 
14444
		#如果檢查參數不通過
14445
		if($checkArguments["passed"]==="false"){
14446
 
14447
			#設置執行失敗
14448
			$result["status"]="false";
14449
 
14450
			#設置執行失敗訊息
14451
			$result["error"]=$checkArguments;
14452
 
14453
			#回傳結果
14454
			return $result;
14455
 
14456
			}#if end
14457
 
14458
		#檢查檔案是否存在
14459
		#函式說明:
14460
		#檢查多個檔案與資料夾是否存在.
14461
		#回傳的結果:
14462
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
14463
		#$result["error"],錯誤訊息陣列.
14464
		#$resutl["function"],當前執行的涵式名稱.
14465
		#$result["argu"],使用的參數.
14466
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
14467
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
14468
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
14469
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
14470
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
14471
		#必填參數:
14472
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
14473
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
14474
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14475
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
14476
		#可省略參數
14477
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
14478
		#$conf["disableWebSearch"]="false";
14479
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
14480
		#$conf["userDir"]="true";
14481
		#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14482
		$conf["fileAccess::checkMultiFileExist"]["web"]=$conf["web"];
14483
		#參考資料來源:
14484
		#http://php.net/manual/en/function.file-exists.php
14485
		#http://php.net/manual/en/control-structures.foreach.php
14486
		#備註:
14487
		#函數file_exists檢查的路徑為檔案系統的路徑
14488
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
14489
		unset($conf["fileAccess::checkMultiFileExist"]);
14490
 
14491
		#如果執行失敗
14492
		if($checkMultiFileExist["status"]==="false"){
14493
 
14494
			#設置執行失敗
14495
			$result["status"]="false";
14496
 
14497
			#設置執行失敗訊息
14498
			$result["error"]=$checkMultiFileExist;
14499
 
14500
			#回傳結果
14501
			return $result;
14502
 
14503
			}#if end
14504
 
14505
		#如果檔案無法存取
14506
		if($checkMultiFileExist["allExist"]==="false"){
14507
 
14508
			#設置執行失敗
14509
			$result["status"]="false";
14510
 
14511
			#設置執行失敗訊息
14512
			$result["error"]=$checkMultiFileExist;
14513
 
14514
			#回傳結果
14515
			return $result;
14516
 
14517
			}#if end
14518
 
14519
		#取得檔案的行數
14520
		#函式說明:
14521
		#呼叫shell執行系統命令,並取得回傳的內容.
14522
		#回傳的結果:
14523
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14524
		#$result["error"],錯誤訊息陣列.
14525
		#$result["function"],當前執行的函數名稱.
14526
		#$result["argu"],使用的參數.
14527
		#$result["cmd"],執行的指令內容.
14528
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14529
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14530
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14531
		#$result["running"],是否還在執行.
14532
		#$result["pid"],pid.
14533
		#$result["statusCode"],執行結束後的代碼.
14534
		#必填的參數
14535
		#$conf["command"],字串,要執行的指令與.
14536
		$conf["external::callShell"]["command"]="cat";
14537
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14538
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14539
		#可省略參數:
14540
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14541
		$conf["external::callShell"]["argu"]=array($conf["file"],"|","wc","-l");
14542
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14543
		#$conf["arguIsAddr"]=array();	
14544
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14545
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14546
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14547
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14548
		#$conf["enablePrintDescription"]="true";
14549
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14550
		#$conf["printDescription"]="";
14551
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
14552
		$conf["external::callShell"]["escapeshellarg"]="true";
14553
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14554
		#$conf["username"]="";
14555
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14556
		#$conf["password"]="";
14557
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14558
		#$conf["useScript"]="";
14559
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14560
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14561
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14562
		#$conf["inBackGround"]="";
14563
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14564
		#$conf["getErr"]="false";
14565
		#備註:
14566
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14567
		#參考資料:
14568
		#exec=>http://php.net/manual/en/function.exec.php
14569
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14570
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14571
		$callShell=external::callShell($conf["external::callShell"]);
14572
		unset($conf["external::callShell"]);
14573
 
14574
		#如果檢查參數失敗
14575
		if($callShell["status"]==="false"){
14576
 
14577
			#設置執行失敗
14578
			$result["status"]="false";
14579
 
14580
			#設置執行失敗訊息
14581
			$result["error"]=$callShell;
14582
 
14583
			#回傳結果
14584
			return $result;
14585
 
14586
			}#if end
14587
 
14588
		#取得檔案總行數
14589
		$result["totalLineCount"]=$callShell["output"][0];
14590
 
14591
		#如果未設置 $conf["line2start"]
14592
		if(!isset($conf["line2start"])){
14593
 
14594
			#$conf["line2start"]為總行數減去一次要看的行數減1
14595
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14596
 
14597
			}#if end	
14598
 
14599
		#如果開始行數小於1		
14600
		if($conf["line2start"]<1){
14601
 
14602
			#$conf["line2start"]為總行數減去一次要看的行數減1
14603
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14604
 
14605
			}#if end
14606
 
14607
		#如果開始行數小於1		
14608
		if($conf["line2start"]<1){
14609
 
14610
			#$conf["line2start"]為1
14611
			$conf["line2start"]=1;
14612
 
14613
			}#if end
14614
 
14615
		#取得指定範圍的行數
14616
		#取得檔案的行數
14617
		#函式說明:
14618
		#呼叫shell執行系統命令,並取得回傳的內容.
14619
		#回傳的結果:
14620
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14621
		#$result["error"],錯誤訊息陣列.
14622
		#$result["function"],當前執行的函數名稱.
14623
		#$result["argu"],使用的參數.
14624
		#$result["cmd"],執行的指令內容.
14625
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14626
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14627
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14628
		#$result["running"],是否還在執行.
14629
		#$result["pid"],pid.
14630
		#$result["statusCode"],執行結束後的代碼.
14631
		#必填的參數
14632
		#$conf["command"],字串,要執行的指令與.
14633
		$conf["external::callShell"]["command"]="sed";
14634
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14635
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14636
		#可省略參數:
14637
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14638
		$conf["external::callShell"]["argu"]=array("-n",$conf["line2start"].",".($conf["line2start"]+$conf["linesPerTime"]-1)."p",$conf["file"]);
14639
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14640
		#$conf["arguIsAddr"]=array();	
14641
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14642
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14643
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14644
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14645
		#$conf["enablePrintDescription"]="true";
14646
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14647
		#$conf["printDescription"]="";
14648
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
14649
		$conf["external::callShell"]["escapeshellarg"]="true";
14650
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14651
		#$conf["username"]="";
14652
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14653
		#$conf["password"]="";
14654
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14655
		#$conf["useScript"]="";
14656
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14657
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14658
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14659
		#$conf["inBackGround"]="";
14660
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14661
		#$conf["getErr"]="false";
14662
		#備註:
14663
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14664
		#參考資料:
14665
		#exec=>http://php.net/manual/en/function.exec.php
14666
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14667
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14668
		$callShell=external::callShell($conf["external::callShell"]);
14669
		unset($conf["external::callShell"]);
14670
 
14671
		#如果檢查參數失敗
14672
		if($callShell["status"]==="false"){
14673
 
14674
			#設置執行失敗
14675
			$result["status"]="false";
14676
 
14677
			#設置執行失敗訊息
14678
			$result["error"]=$callShell;
14679
 
14680
			#回傳結果
14681
			return $result;
14682
 
14683
			}#if end
14684
 
14685
		#取得輸出的行數
14686
		$result["lines"]=count($callShell["output"]);
14687
 
14688
		#取得目前的輸出內容
14689
		$result["content"]=$callShell["output"];
14690
 
14691
		#取得當前行數
14692
		$result["lineNum"]=$conf["line2start"]+$result["lines"]-1;
14693
 
14694
		#如果當前行號小於總行數 
14695
		if($result["lineNum"]<$result["totalLineCount"]){
14696
 
14697
			#設置還有剩餘的內容
14698
			$result["left"]="true";
14699
 
14700
			}#if end
14701
 
14702
		#反之 
14703
		else{
14704
 
14705
			#設置無剩餘的內容
14706
			$result["left"]="false";
14707
 
14708
			}#else end
14709
 
14710
		#設置執行正常
14711
		$result["status"]="true";
14712
 
14713
		#回傳結果
14714
		return $result;
14715
 
14716
		}#function tail end
14717
 
14718
	/*
14719
	#函式說明:
14720
	#解析PHP檔案裡面的變數.
14721
	#回傳結果:
14722
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14723
	#$result["error"],錯誤訊息.
14724
	#$result["function"],當前執行的函數名稱.
14725
	#$result["argu"],所使用的參數.	
14726
	#$result["content"],找到的變數內容陣列,若有多個變數則會用array來表示.
14727
	#必填參數:
14728
	#$conf["file"],字串,檔案的路徑與名稱.
14729
	$conf["file"]="";
14730
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14731
	$conf["fileArgu"]=__FILE__;
14732
	#$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".
14733
	$conf["varName"]=array();
14734
	#可省略參數:
14735
	#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".
14736
	#$conf["web"]="true";
14737
	#參考資料:
14738
	#https://www.php.net/manual/en/function.parse-str.php
14739
	#備註:
14740
	#無.
14741
	*/
14742
	public static function parseVaraiableInPHPfile(&$conf){
14743
 
14744
		#初始化要回傳的結果
14745
		$result=array();
14746
 
14747
		#取得當前執行的函數名稱
14748
		$result["function"]=__FUNCTION__;
14749
 
14750
		#如果沒有參數
14751
		if(func_num_args()==0){
14752
 
14753
			#設置執行失敗
14754
			$result["status"]="false";
14755
 
14756
			#設置執行錯誤訊息
14757
			$result["error"]="函數".$result["function"]."需要參數";
14758
 
14759
			#回傳結果
14760
			return $result;
14761
 
14762
			}#if end		
14763
 
14764
		#取得參數
14765
		$result["argu"]=$conf;
14766
 
14767
		#如果 $conf 不為陣列
14768
		if(gettype($conf)!=="array"){
14769
 
14770
			#設置執行失敗
14771
			$result["status"]="false";
14772
 
14773
			#設置執行錯誤訊息
14774
			$result["error"][]="\$conf變數須為陣列形態";
14775
 
14776
			#如果傳入的參數為 null
14777
			if($conf===null){
14778
 
14779
				#設置執行錯誤訊息
14780
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14781
 
14782
				}#if end
14783
 
14784
			#回傳結果
14785
			return $result;
14786
 
14787
			}#if end
14788
 
14789
		#函式說明:
14790
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14791
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14792
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14793
		#$result["function"],當前執行的函式名稱.
14794
		#$result["argu"],設置給予的參數.
14795
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14796
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14797
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14798
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14799
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14800
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14801
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14802
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14803
		#必填寫的參數:
14804
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14805
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14806
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14807
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14808
		#可以省略的參數:
14809
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14810
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu","varName");
14811
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14812
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","array");
14813
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14814
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14815
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14816
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu","varName");
14817
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14818
		#$conf["canBeEmpty"]=array();
14819
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14820
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
14821
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14822
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
14823
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14824
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
14825
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14826
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
14827
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14828
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14829
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14830
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14831
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14832
		#$conf["arrayCountEqualCheck"][]=array();
14833
		#參考資料來源:
14834
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14835
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14836
		unset($conf["variableCheck::checkArguments"]);
14837
 
14838
		#如果檢查參數失敗
14839
		if($checkArguments["status"]==="false"){
14840
 
14841
			#設置執行失敗
14842
			$result["status"]="false";
14843
 
14844
			#設置執行失敗訊息
14845
			$result["error"]=$checkArguments;
14846
 
14847
			#回傳結果
14848
			return $result;
14849
 
14850
			}#if end
14851
 
14852
		#如果檢查參數不通過
14853
		if($checkArguments["passed"]==="false"){
14854
 
14855
			#設置執行失敗
14856
			$result["status"]="false";
14857
 
14858
			#設置執行失敗訊息
14859
			$result["error"]=$checkArguments;
14860
 
14861
			#回傳結果
14862
			return $result;
14863
 
14864
			}#if end
14865
 
14866
		#初始化儲存解析出來的變數內容
14867
		$result["content"]=array();
14868
 
14869
		#讀取檔案
14870
		#函式說明:
14871
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
14872
		#回傳的變數說明:
14873
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
14874
		#$result["error"],錯誤訊息提示.
14875
		#$result["warning"],警告訊息.
14876
		#$result["function"],當前執行的函數名稱.
14877
		#$result["fileContent"],爲檔案的內容陣列.
14878
		#$result["lineCount"],爲檔案內容總共的行數.
14879
		#$result["fullContent"],為檔案的完整內容.
14880
		#$result["base64data"],為檔案的base64內容.
14881
		#$result["mimeType"],為檔案的mime type.
14882
		#必填參數:
14883
		#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
14884
		$conf["ileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
14885
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14886
		$conf["ileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
14887
		#可省略參數:
14888
		#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
14889
		$conf["ileAccess::getFileContent"]["web"]=$conf["web"];
14890
		#參考資料:
14891
		#file(),取得檔案內容的行數.
14892
		#file=>http:#php.net/manual/en/function.file.php
14893
		#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
14894
		#filesize=>http://php.net/manual/en/function.filesize.php
14895
		$getFileContent=fileAccess::getFileContent($conf["ileAccess::getFileContent"]);
14896
		unset($conf["ileAccess::getFileContent"]);
14897
 
14898
		#如果讀取檔案失敗
14899
		if($getFileContent["status"]==="false"){
14900
 
14901
			#設置執行失敗
14902
			$result["status"]="false";
14903
 
14904
			#設置執行失敗訊息
14905
			$result["error"]=$getFileContent;
14906
 
14907
			#回傳結果
14908
			return $result;
14909
 
14910
			}#if end
14911
 
14912
		#針對每列檔案內容
14913
		foreach($getFileContent["fileContent"] as $line){
14914
 
14915
			#針對每個要搜尋的變數
14916
			foreach($conf["varName"] as $keyWord){
14917
 
14918
				#如果關鍵字小於被搜尋的字串長度
14919
				if( strlen($line) < strlen($keyWord)+1 ){
14920
 
14921
					#跳過
14922
					continue;
14923
 
14924
					}#if end
14925
 
14926
				#函式說明:
14927
				#取得符合特定字首與字尾的字串
14928
				#回傳結果:
14929
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
14930
				#$result["function"],當前執行的函數名稱.
14931
				#$result["error"],錯誤訊息陣列.
14932
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
14933
				#$result["returnString"],爲符合字首條件的字串內容。
14934
				#$result["argu"],使用的參數.
14935
				#必填參數:
14936
				#$conf["checkString"],字串,要檢查的字串.
14937
				$conf["search::getMeetConditionsString"]["checkString"]=$line;
14938
				#可省略參數:
14939
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
14940
				$conf["search::getMeetConditionsString"]["frontWord"]="$".$keyWord;
14941
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
14942
				$conf["search::getMeetConditionsString"]["tailWord"]=";";
14943
				#參考資料:
14944
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
14945
				$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
14946
				unset($conf["search::getMeetConditionsString"]);
14947
 
14948
				#如果失敗
14949
				if($getMeetConditionsString["status"]==="false"){
14950
 
14951
					#設置執行失敗
14952
					$result["status"]="false";
14953
 
14954
					#設置執行失敗訊息
14955
					$result["error"]=$getMeetConditionsString;
14956
 
14957
					#回傳結果
14958
					return $result;
14959
 
14960
					}#if end	
14961
 
14962
				#如果有找到關鍵字
14963
				if($getMeetConditionsString["founded"]==="true"){
14964
 
14965
					#剔除變數名稱
14966
					#函式說明:
14967
					#將字串特定關鍵字與其前面的內容剔除
14968
					#回傳結果:
14969
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14970
					#$result["error"],錯誤訊息陣列.
14971
					#$result["warning"],警告訊息鎮列.
14972
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
14973
					#$result["function"],當前執行的函數名稱.
14974
					#$result["oriStr"],要處理的原始字串內容.
14975
					#$result["content"],處理好的的字串內容.	
14976
					#必填參數:
14977
					#$conf["stringIn"],字串,要處理的字串.
14978
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$line;
14979
					#$conf["keyWord"],字串,特定字串.
14980
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="$".$keyWord;
14981
					#可省略參數:
14982
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14983
					#$conf["recursive"]="true";
14984
					#參考資料:
14985
					#無.
14986
					#備註:
14987
					#無.
14988
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
14989
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
14990
 
14991
					#如果執行失敗
14992
					if($delStrBeforeKeyWord["status"]==="false"){
14993
 
14994
						#設置執行失敗
14995
						$result["status"]="false";
14996
 
14997
						#設置執行失敗訊息
14998
						$result["error"]=$delStrBeforeKeyWord;
14999
 
15000
						#回傳結果
15001
						return $result;
15002
 
15003
						}#if end
15004
 
15005
					#如果沒有找到應該存在的php變數
15006
					if($delStrBeforeKeyWord["founded"]==="false"){
15007
 
15008
						#設置執行失敗
15009
						$result["status"]="false";
15010
 
15011
						#設置執行失敗訊息
15012
						$result["error"]=$delStrBeforeKeyWord;
15013
 
15014
						#回傳結果
15015
						return $result;
15016
 
15017
						}#if end
15018
 
15019
					#剔除 "=" 前面的內容
15020
					#函式說明:
15021
					#將字串特定關鍵字與其前面的內容剔除
15022
					#回傳結果:
15023
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15024
					#$result["error"],錯誤訊息陣列.
15025
					#$result["warning"],警告訊息鎮列.
15026
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15027
					#$result["function"],當前執行的函數名稱.
15028
					#$result["oriStr"],要處理的原始字串內容.
15029
					#$result["content"],處理好的的字串內容.	
15030
					#必填參數:
15031
					#$conf["stringIn"],字串,要處理的字串.
15032
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
15033
					#$conf["keyWord"],字串,特定字串.
15034
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="=";
15035
					#可省略參數:
15036
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
15037
					#$conf["recursive"]="true";
15038
					#參考資料:
15039
					#無.
15040
					#備註:
15041
					#無.
15042
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15043
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
15044
 
15045
					#如果執行失敗
15046
					if($delStrBeforeKeyWord["status"]==="false"){
15047
 
15048
						#設置執行失敗
15049
						$result["status"]="false";
15050
 
15051
						#設置執行失敗訊息
15052
						$result["error"]=$delStrBeforeKeyWord;
15053
 
15054
						#回傳結果
15055
						return $result;
15056
 
15057
						}#if end
15058
 
15059
					#如果沒有找“=”關鍵字
15060
					if($delStrBeforeKeyWord["founded"]==="false"){
15061
 
15062
						#跳過
15063
						continue;
15064
 
15065
						}#if end
15066
 
15067
					#剔除 value 前面的空白
15068
					#函式說明:
15069
					#將字串特定關鍵字與其前面的內容剔除
15070
					#回傳結果:
15071
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15072
					#$result["error"],錯誤訊息陣列.
15073
					#$result["warning"],警告訊息鎮列.
15074
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15075
					#$result["function"],當前執行的函數名稱.
15076
					#$result["oriStr"],要處理的原始字串內容.
15077
					#$result["content"],處理好的的字串內容.	
15078
					#必填參數:
15079
					#$conf["stringIn"],字串,要處理的字串.
15080
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
15081
					#$conf["keyWord"],字串,特定字串.
15082
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
15083
					#可省略參數:
15084
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
15085
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15086
					#參考資料:
15087
					#無.
15088
					#備註:
15089
					#無.
15090
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15091
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
15092
 
15093
					#如果執行失敗
15094
					if($delStrBeforeKeyWord["status"]==="false"){
15095
 
15096
						#設置執行失敗
15097
						$result["status"]="false";
15098
 
15099
						#設置執行失敗訊息
15100
						$result["error"]=$delStrBeforeKeyWord;
15101
 
15102
						#回傳結果
15103
						return $result;
15104
 
15105
						}#if end
15106
 
15107
					#取得找到的變數
15108
					eval("\$result[\"content\"][\"".$keyWord."\"][]=".$delStrBeforeKeyWord["content"]);
15109
 
15110
					}#if end
15111
 
15112
				}#foreach end
15113
 
15114
			}#foreach end
15115
 
15116
		#設置執行正常
15117
		$result["status"]="true";
15118
 
15119
		#回傳結果
15120
		return $result;
15121
 
15122
		}#function parseVaraiableInPHPfile end
15123
 
15124
	/*
15125
	#函式說明:
15126
	#開啟特定目錄,取得底下的檔案路徑清單.
15127
	#回傳結果:
15128
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15129
	#$result["error"],錯誤訊息.
15130
	#$result["function"],當前執行的函數名稱.
15131
	#$result["argu"],所使用的參數.
15132
	#$result["content"],讀取到的內容陣列.
15133
	#$result["content"][$i],第$i+1個結果.
15134
	#$result["content"][$i]["name"],第$i+1個名稱.
15135
	#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.
15136
	#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.
15137
	#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).
15138
	#必填參數:
15139
	#$conf["path"],字串,要取得檔案資訊的所屬路徑.
15140
	$conf["path"]="";
15141
	#可省略參數:
15142
	#無.
15143
	#參考資料
15144
	#無.
15145
	#備註:
15146
	#無.
15147
	*/
15148
	public static function listInfo(&$conf){
15149
 
15150
		#初始化要回傳的結果
15151
		$result=array();
15152
 
15153
		#取得當前執行的函數名稱
15154
		$result["function"]=__FUNCTION__;
15155
 
15156
		#如果沒有參數
15157
		if(func_num_args()==0){
15158
 
15159
			#設置執行失敗
15160
			$result["status"]="false";
15161
 
15162
			#設置執行錯誤訊息
15163
			$result["error"]="函數".$result["function"]."需要參數";
15164
 
15165
			#回傳結果
15166
			return $result;
15167
 
15168
			}#if end		
15169
 
15170
		#取得參數
15171
		$result["argu"]=$conf;
15172
 
15173
		#如果 $conf 不為陣列
15174
		if(gettype($conf)!=="array"){
15175
 
15176
			#設置執行失敗
15177
			$result["status"]="false";
15178
 
15179
			#設置執行錯誤訊息
15180
			$result["error"][]="\$conf變數須為陣列形態";
15181
 
15182
			#如果傳入的參數為 null
15183
			if($conf===null){
15184
 
15185
				#設置執行錯誤訊息
15186
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15187
 
15188
				}#if end
15189
 
15190
			#回傳結果
15191
			return $result;
15192
 
15193
			}#if end
15194
 
15195
		#函式說明:
15196
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15197
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15198
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15199
		#$result["function"],當前執行的函式名稱.
15200
		#$result["argu"],設置給予的參數.
15201
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15202
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15203
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15204
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15205
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15206
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15207
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15208
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15209
		#必填寫的參數:
15210
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15211
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
15212
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15213
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15214
		#可以省略的參數:
15215
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15216
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15217
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15218
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15219
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15220
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15221
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15222
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
15223
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15224
		#$conf["canBeEmpty"]=array();
15225
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15226
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
15227
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15228
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
15229
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15230
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
15231
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15232
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
15233
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15234
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15235
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15236
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15237
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15238
		#$conf["arrayCountEqualCheck"][]=array();
15239
		#參考資料來源:
15240
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15241
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15242
		unset($conf["variableCheck::checkArguments"]);
15243
 
15244
		#如果檢查參數失敗
15245
		if($checkArguments["status"]==="false"){
15246
 
15247
			#設置執行失敗
15248
			$result["status"]="false";
15249
 
15250
			#設置執行失敗訊息
15251
			$result["error"]=$checkArguments;
15252
 
15253
			#回傳結果
15254
			return $result;
15255
 
15256
			}#if end
15257
 
15258
		#如果檢查參數不通過
15259
		if($checkArguments["passed"]==="false"){
15260
 
15261
			#設置執行失敗
15262
			$result["status"]="false";
15263
 
15264
			#設置執行失敗訊息
15265
			$result["error"]=$checkArguments;
15266
 
15267
			#回傳結果
15268
			return $result;
15269
 
15270
			}#if end
15271
 
15272
		#初始化儲存解析出來的變數內容
15273
		$result["content"]=array();
15274
 
15275
		#取得特定位置的資訊
15276
		$pathInfo=@dir($conf["path"]);
15277
 
15278
		#如果取得路徑資訊失敗
15279
		if($pathInfo===false){
15280
 
15281
			#設置執行失敗
15282
			$result["status"]="false";
15283
 
15284
			#設置執行失敗訊息
15285
			$result["error"][]="無法存取路徑(".$conf["path"].")";
15286
 
15287
			#回傳結果
15288
			return $result;
15289
 
15290
			}#if end
15291
 
15292
		#讀取底下一個檔案,暫存到 $tmpItem 裡面,且當結果不為 false 時進入迴圈.
15293
		while(false !== $tmpItem = $pathInfo->read()){
15294
 
15295
			#宣告儲存資訊的變數
15296
			$item=array();
15297
 
15298
			#儲存名稱
15299
			$item["name"]=$tmpItem;
15300
 
15301
			#預設不為資料夾
15302
			$item["dir"]="false";
15303
 
15304
			#若為資料夾
15305
			if(is_dir($conf["path"]."/".$tmpItem)){
15306
 
15307
				#設置為"true"
15308
				$item["dir"]="true";
15309
 
15310
				}#if end
15311
 
15312
			#取得檔案識別器
15313
			$finfo = finfo_open(FILEINFO_MIME);
15314
 
15315
			#取得 info
15316
			$item["info"]=@finfo_file($finfo,$conf["path"]."/".$tmpItem);
15317
 
15318
			#取得檔案大小
15319
			$item["size"]=filesize($conf["path"]."/".$tmpItem);
15320
 
15321
			#close connection
15322
			finfo_close($finfo);
15323
 
15324
			#記錄該檔案資訊
15325
			$result["content"][]=$item;
15326
 
15327
			}#while end
15328
 
15329
		#設置執行正常
15330
		$result["status"]="true";
15331
 
15332
		#回傳結果
15333
		return $result;
15334
 
15335
		}#function listInfo end
15336
 
15337
	/*
15338
	#函式說明:
15339
	#取得目錄底下的詳細資訊.
15340
	#回傳結果:
15341
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15342
	#$result["error"],錯誤訊息.
15343
	#$result["function"],當前執行的函數名稱.
15344
	#$result["size"],該清單的大小,單位為bytes.
15345
	#$result["dataCount"],該清單的長度.
15346
	#$result["path"],字串,檢視的路徑,必為"/"結尾.
15347
	#$result["content"],指定目錄底下的所有檔案資訊.
15348
	#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
15349
	#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.
15350
	#$result["content"][$i]["permission"],第$i個節點權限.
15351
	#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
15352
	#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
15353
	#$result["content"][$i]["bytes"],第$i個節點大小.
15354
	#$result["content"][$i]["date"],第$i個節點最後變更日期.
15355
	#$result["content"][$i]["time"],第$i個節點最後異動時間.
15356
	#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
15357
	#$result["content"][$i]["timezone"],第$i個節點的時區.
15358
	#$result["content"][$i]["name"],第$i個節點的名稱.
15359
	#$result["content"][$i]["secondName"],第$i個節點為檔案時,若有附檔名,會記錄在這.
15360
	#$result["content"][$i]["mimeType"],第$i個節點為檔案且可以讀取時,會有 mime type 可取得.
15361
	#必填參數:
15362
	#$conf["path"],字串,要檢視的路徑,若非"/"結尾,會自動補上.
15363
	$conf["path"]="";
15364
	#可省略參數:
15365
	#無.
15366
	#參考資料:
15367
	#https://www.businessweekly.com.tw/careers/Blog/14307
15368
	#備註:
15369
	#無.
15370
	*/
15371
	public static function ls(&$conf){
15372
 
15373
		#初始化要回傳的結果
15374
		$result=array();
15375
 
15376
		#取得當前執行的函數名稱
15377
		$result["function"]=__FUNCTION__;
15378
 
15379
		#如果沒有參數
15380
		if(func_num_args()==0){
15381
 
15382
			#設置執行失敗
15383
			$result["status"]="false";
15384
 
15385
			#設置執行錯誤訊息
15386
			$result["error"]="函數".$result["function"]."需要參數";
15387
 
15388
			#回傳結果
15389
			return $result;
15390
 
15391
			}#if end
15392
 
15393
		#取得參數
15394
		$result["argu"]=$conf;
15395
 
15396
		#如果 $conf 不為陣列
15397
		if(gettype($conf)!=="array"){
15398
 
15399
			#設置執行失敗
15400
			$result["status"]="false";
15401
 
15402
			#設置執行錯誤訊息
15403
			$result["error"][]="\$conf變數須為陣列形態";
15404
 
15405
			#如果傳入的參數為 null
15406
			if(is_null($conf)){
15407
 
15408
				#設置執行錯誤訊息
15409
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15410
 
15411
				}#if end
15412
 
15413
			#回傳結果
15414
			return $result;
15415
 
15416
			}#if end
15417
 
15418
		#函式說明:
15419
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
15420
		#回傳結果:
15421
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15422
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15423
		#$result["simpleError"],簡單表示的錯誤訊息.
15424
		#$result["function"],當前執行的函式名稱.
15425
		#$result["argu"],設置給予的參數.
15426
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15427
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15428
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15429
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15430
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15431
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15432
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15433
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15434
		#必填參數:
15435
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15436
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15437
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15438
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15439
		#可省略參數:
15440
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15441
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15442
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15443
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15444
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15445
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15446
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15447
		#$conf["canNotBeEmpty"]=array();
15448
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15449
		#$conf["canBeEmpty"]=array();
15450
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15451
		#$conf["skipableVariableCanNotBeEmpty"]=array();
15452
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15453
		#$conf["skipableVariableName"]=array();
15454
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15455
		#$conf["skipableVariableType"]=array();
15456
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15457
		#$conf["skipableVarDefaultValue"]=array("");
15458
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15459
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15460
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15461
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15462
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15463
		#$conf["arrayCountEqualCheck"][]=array();
15464
		#參考資料:
15465
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15466
		#備註:
15467
		#無.
15468
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15469
		unset($conf["variableCheck::checkArguments"]);
15470
 
15471
		#如果執行失敗
15472
		if($checkArguments["status"]==="false"){
15473
 
15474
			#設置執行錯誤
15475
			$result["status"]="false";
15476
 
15477
			#設置錯誤訊息
15478
			$result["error"]=$checkArguments;
15479
 
15480
			#回傳結果
15481
			return $result;
15482
 
15483
			}#if end
15484
 
15485
		#如果參數檢查不通過
15486
		if($checkArguments["passed"]==="false"){
15487
 
15488
			#設置執行錯誤
15489
			$result["status"]="false";
15490
 
15491
			#設置錯誤訊息
15492
			$result["error"]=$checkArguments;
15493
 
15494
			#回傳結果
15495
			return $result;
15496
 
15497
			}#if end
15498
 
15499
		#確認 $conf["path"] 是否為 "/" 結尾
15500
		#函式說明:
15501
		#取得符合特定字首與字尾的字串
15502
		#回傳結果:
15503
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
15504
		#$result["function"],當前執行的函數名稱.
15505
		#$result["error"],錯誤訊息陣列.
15506
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
15507
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
15508
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
15509
		#$result["argu"],使用的參數.
15510
		#必填參數:
15511
		#$conf["checkString"],字串,要檢查的字串.
15512
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
15513
		#可省略參數:
15514
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
15515
		#$conf["frontWord"]="";
15516
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
15517
		$conf["search::getMeetConditionsString"]["tailWord"]="/";
15518
		#參考資料:
15519
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
15520
		#備註:
15521
		#無.
15522
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
15523
		unset($conf["search::getMeetConditionsString"]);
15524
 
15525
		#如果執行失敗
15526
		if($getMeetConditionsString["status"]==="false"){
15527
 
15528
			#設置執行錯誤
15529
			$result["status"]="false";
15530
 
15531
			#設置錯誤訊息
15532
			$result["error"]=$getMeetConditionsString;
15533
 
15534
			#回傳結果
15535
			return $result;
15536
 
15537
			}#if end
15538
 
15539
		#如果沒有 "/" 結尾
15540
		if($getMeetConditionsString["founded"]==="false"){
15541
 
15542
			#於結尾加上 "/"
15543
			$conf["path"]=$conf["path"]."/";
15544
 
15545
			}#if end
15546
 
15547
		#記錄真正的路徑
15548
		$result["path"]=$conf["path"];
15549
 
15550
		#函式說明:
15551
		#呼叫shell執行系統命令,並取得回傳的內容.
15552
		#回傳結果:
15553
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15554
		#$result["error"],錯誤訊息陣列.
15555
		#$result["function"],當前執行的函數名稱.
15556
		#$result["argu"],使用的參數.
15557
		#$result["cmd"],執行的指令內容.
15558
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
15559
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
15560
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
15561
		#$result["running"],是否還在執行.
15562
		#$result["pid"],pid.
15563
		#$result["statusCode"],執行結束後的代碼.
15564
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
15565
		#必填參數:
15566
		#$conf["command"],字串,要執行的指令.
15567
		$conf["external::callShell"]["command"]="ls";
15568
		#$conf["fileArgu"],字串,變數__FILE__的內容.
15569
		$conf["external::callShell"]["fileArgu"]=__FILE__;
15570
		#可省略參數:
15571
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
15572
		$conf["external::callShell"]["argu"]=array("-al","--full-time","-t","-B",$conf["path"]);
15573
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
15574
		#$conf["arguIsAddr"]=array();
15575
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
15576
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
15577
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
15578
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
15579
		#$conf["enablePrintDescription"]="true";
15580
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
15581
		#$conf["printDescription"]="";
15582
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
15583
		$conf["external::callShell"]["escapeshellarg"]="true";
15584
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
15585
		#$conf["thereIsShellVar"]=array();
15586
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
15587
		#$conf["username"]="";
15588
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
15589
		#$conf["password"]="";
15590
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
15591
		#$conf["useScript"]="";
15592
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
15593
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
15594
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
15595
		#$conf["inBackGround"]="";
15596
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
15597
		#$conf["getErr"]="false";
15598
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
15599
		#$conf["doNotRun"]="false";
15600
		#參考資料:
15601
		#exec=>http://php.net/manual/en/function.exec.php
15602
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
15603
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
15604
		#備註:
15605
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
15606
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
15607
		$callShell=external::callShell($conf["external::callShell"]);
15608
		unset($conf["external::callShell"]);
15609
 
15610
		#debug
15611
		#var_dump(__FILE__,__LINE__,$callShell);
15612
 
15613
		#如果執行失敗
15614
		if($callShell["status"]==="false"){
15615
 
15616
			#設置執行錯誤
15617
			$result["status"]="false";
15618
 
15619
			#設置錯誤訊息
15620
			$result["error"]=$callShell;
15621
 
15622
			#回傳結果
15623
			return $result;
15624
 
15625
			}#if end
15626
 
15627
		#初始化儲存檔案資訊為空
15628
		$result["content"]=array();
15629
 
15630
		#針對每行輸出
15631
		foreach($callShell["output"] as $index=>$line){
15632
 
15633
			#如果是第一筆
15634
			if($index===0){
15635
 
15636
				#取得資料筆數
15637
				$result["dataCount"]=explode(" ",$line)[0];
15638
 
15639
				#換下一輪
15640
				continue;
15641
 
15642
				}#if end
15643
 
15644
			#函式說明:
15645
			#將固定格式的字串分開,並回傳分開的結果.
15646
			#回傳結果:
15647
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15648
			#$result["error"],錯誤訊息陣列
15649
			#$result["function"],當前執行的函數名稱.
15650
			#$result["argu"],使用的參數.
15651
			#$result["oriStr"],要分割的原始字串內容
15652
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15653
			#$result["dataCounts"],爲總共分成幾段
15654
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15655
			#必填參數:
15656
			#$conf["stringIn"],字串,要處理的字串.
15657
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15658
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15659
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";
15660
			#可省略參數:
15661
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15662
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15663
			#參考資料:
15664
			#無.
15665
			#備註:
15666
			#無.
15667
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15668
			unset($conf["stringProcess::spiltString"]);
15669
 
15670
			#如果執行失敗
15671
			if($spiltString["status"]==="false"){
15672
 
15673
				#設置執行錯誤
15674
				$result["status"]="false";
15675
 
15676
				#設置錯誤訊息
15677
				$result["error"]=$spiltString;
15678
 
15679
				#回傳結果
15680
				return $result;
15681
 
15682
				}#if end
15683
 
15684
			#如果沒有分割用的" "
15685
			if($spiltString["found"]==="false"){
15686
 
15687
				#設置執行錯誤
15688
				$result["status"]="false";
15689
 
15690
				#設置錯誤訊息
15691
				$result["error"]=$spiltString;
15692
 
15693
				#回傳結果
15694
				return $result;
15695
 
15696
				}#if end
15697
 
15698
			#如果分割好的數量小於8
15699
			if($spiltString["dataCounts"]<8){
15700
 
15701
				#設置執行錯誤
15702
				$result["status"]="false";
15703
 
15704
				#設置錯誤訊息
15705
				$result["error"]=$spiltString;
15706
 
15707
				#回傳結果
15708
				return $result;
15709
 
15710
				}#if end
15711
 
15712
			#初始化要儲存的檔案資訊陣列
15713
			$fileInfo=array();
15714
 
15715
			#取得 節點類型、權限
15716
			$fileInfo["nType&permission"]=$spiltString["dataArray"][0];
15717
 
15718
			#剔除結尾的 "."
15719
			$fileInfo["nType&permission"]=substr($fileInfo["nType&permission"],0,strlen($fileInfo["nType&permission"])-1);
15720
 
15721
			#取得節點類型
15722
			$fileInfo["nType"]=$fileInfo["nType&permission"][0];
15723
 
15724
			#取得節點權限
15725
			$fileInfo["permission"]=substr($fileInfo["nType&permission"],1);
15726
 
15727
			#取得擁有者賬號
15728
			$fileInfo["ownByUser"]=$spiltString["dataArray"][2];
15729
 
15730
			#取得群組擁有者群組
15731
			$fileInfo["ownByGroup"]=$spiltString["dataArray"][3];
15732
 
15733
			#取得size
15734
			$fileInfo["bytes"]=$spiltString["dataArray"][4];
15735
 
15736
			#取得最後異動日期 
15737
			$fileInfo["date"]=$spiltString["dataArray"][5];
15738
 
15739
			#取得最後異動時間
15740
			$fileInfo["time"]=explode(".",$spiltString["dataArray"][6])[0];
15741
 
15742
			#取得最後異動的詳細時間
15743
			$fileInfo["timeDetail"]=$spiltString["dataArray"][6];
15744
 
15745
			#取得timezone資訊
15746
			$fileInfo["timezone"]=$spiltString["dataArray"][7];
15747
 
15748
			#函式說明:
15749
			#將固定格式的字串分開,並回傳分開的結果.
15750
			#回傳結果:
15751
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15752
			#$result["error"],錯誤訊息陣列
15753
			#$result["function"],當前執行的函數名稱.
15754
			#$result["argu"],使用的參數.
15755
			#$result["oriStr"],要分割的原始字串內容
15756
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15757
			#$result["dataCounts"],爲總共分成幾段
15758
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15759
			#必填參數:
15760
			#$conf["stringIn"],字串,要處理的字串.
15761
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15762
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15763
			$conf["stringProcess::spiltString"]["spiltSymbol"]=$fileInfo["date"]." ".$fileInfo["timeDetail"]." ".$fileInfo["timezone"];
15764
			#可省略參數:
15765
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15766
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15767
			#參考資料:
15768
			#無.
15769
			#備註:
15770
			#無.
15771
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15772
			unset($conf["stringProcess::spiltString"]);
15773
 
15774
			#如果執行失敗
15775
			if($spiltString["status"]==="false"){
15776
 
15777
				#設置執行錯誤
15778
				$result["status"]="false";
15779
 
15780
				#設置錯誤訊息
15781
				$result["error"]=$spiltString;
15782
 
15783
				#回傳結果
15784
				return $result;
15785
 
15786
				}#if end
15787
 
15788
			#如果沒有分割用的" "
15789
			if($spiltString["found"]==="false"){
15790
 
15791
				#設置執行錯誤
15792
				$result["status"]="false";
15793
 
15794
				#設置錯誤訊息
15795
				$result["error"]=$spiltString;
15796
 
15797
				#回傳結果
15798
				return $result;
15799
 
15800
				}#if end
15801
 
15802
			#如果分割好的數量小於8
15803
			if($spiltString["dataCounts"]<2){
15804
 
15805
				#設置執行錯誤
15806
				$result["status"]="false";
15807
 
15808
				#設置錯誤訊息
15809
				$result["error"]=$spiltString;
15810
 
15811
				#回傳結果
15812
				return $result;
15813
 
15814
				}#if end
15815
 
15816
			#取得節點名稱,剔除開頭的空白.
15817
			$fileInfo["name"]=substr($spiltString["dataArray"][1],1);
15818
 
15819
			#排除 "." 跟 ".."
15820
			if($fileInfo["name"]==="." || $fileInfo["name"]===".."){
15821
 
15822
				#跳過
15823
				continue;
15824
 
15825
				}#if end
15826
 
15827
			#如果是檔案
15828
			if($fileInfo["nType"]==="-"){
15829
 
15830
				#取得mime type
15831
				$fileInfo["mimeType"]=@mime_content_type($conf["path"].$fileInfo["name"]);
15832
 
15833
				#如果讀取失敗
15834
				if($fileInfo["mimeType"]===false){
15835
 
15836
					#通常為沒有權限
15837
 
15838
					#跳過該檔案
15839
					continue;
15840
 
15841
					}#if end
15842
 
15843
				#確認檔案名稱中間含是否有 "."
15844
				#函式說明:
15845
				#取得關鍵字在字串的哪個位置(字首,字尾,中間)
15846
				#回傳結果:
15847
				#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
15848
				#$result["error"],錯誤訊息陣列.
15849
				#$result["function"],當前執行的函數名稱.
15850
				#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".
15851
				#$result["argu"],傳入的參數.
15852
				#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
15853
				#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
15854
				#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
15855
				#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.
15856
				#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.
15857
				#必填參數:
15858
				#$conf["inputStr"],字串,被搜尋的字串.
15859
				$conf["search::findKeyWordPosition"]["inputStr"]=$fileInfo["name"];
15860
				#$conf["keyWord"],字串,關鍵字.
15861
				$conf["search::findKeyWordPosition"]["keyWord"]=".";
15862
				#可省略參數:
15863
				#無.
15864
				#參考資料:
15865
				#http://php.net/manual/en/function.strpos.php
15866
				#備註:
15867
				#無.
15868
				$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
15869
				unset($conf["search::findKeyWordPosition"]);
15870
 
15871
				#如果執行失敗
15872
				if($findKeyWordPosition["status"]==="false"){
15873
 
15874
					#設置執行錯誤
15875
					$result["status"]="false";
15876
 
15877
					#設置錯誤訊息
15878
					$result["error"]=$spiltString;
15879
 
15880
					#回傳結果
15881
					return $result;
15882
 
15883
					}#if end
15884
 
15885
				#如果含有 "." 存在
15886
				if($findKeyWordPosition["found"]==="true"){
15887
 
15888
					#如果 "." 是在中間,不是在尾巴.
15889
					if($findKeyWordPosition["center"]==="true" && $findKeyWordPosition["tail"]==="false"){
15890
 
15891
						#取得 "." 之後的內容
15892
						#函式說明:
15893
						#將字串特定關鍵字與其前面的內容剔除
15894
						#回傳結果:
15895
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15896
						#$result["error"],錯誤訊息陣列.
15897
						#$result["warning"],警告訊息鎮列.
15898
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15899
						#$result["function"],當前執行的函數名稱.
15900
						#$result["argu"],使用的參數.
15901
						#$result["oriStr"],要處理的原始字串內容.
15902
						#$result["content"],處理好的的字串內容.
15903
						#$result["deleted"],被移除的內容.
15904
						#必填參數:
15905
						#$conf["stringIn"],字串,要處理的字串.
15906
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileInfo["name"];
15907
						#$conf["keyWord"],字串,特定字串.
15908
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";
15909
						#可省略參數:
15910
						#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
15911
						$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15912
						#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
15913
						#$conf["lastResult"]=$delStrBeforeKeyWord;
15914
						#參考資料:
15915
						#無.
15916
						#備註:
15917
						#無.
15918
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15919
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
15920
 
15921
						#如果執行失敗
15922
						if($delStrBeforeKeyWord["status"]==="false"){
15923
 
15924
							#設置執行錯誤
15925
							$result["status"]="false";
15926
 
15927
							#設置錯誤訊息
15928
							$result["error"]=$spiltString;
15929
 
15930
							#回傳結果
15931
							return $result;
15932
 
15933
							}#if end
15934
 
15935
						#如果該存在的 "." 不存在
15936
						if($delStrBeforeKeyWord["founded"]==="false"){
15937
 
15938
							#設置執行錯誤
15939
							$result["status"]="false";
15940
 
15941
							#設置錯誤訊息
15942
							$result["error"]=$spiltString;
15943
 
15944
							#回傳結果
15945
							return $result;
15946
 
15947
							}#if end
15948
 
15949
						#取得附檔名
15950
						$fileInfo["secondName"]=$delStrBeforeKeyWord["content"];
15951
 
15952
						}#if end
15953
 
15954
					}#if end
15955
 
15956
				}#if end
15957
 
15958
			#儲存檔案資訊
15959
			$result["content"][]=$fileInfo;
15960
 
15961
			}#foreach end
15962
 
15963
		#設置清單的長度
15964
		$result["dataCount"]=count($result["content"]);
15965
 
15966
		#設置執行正常
15967
		$result["status"]="true";
15968
 
15969
		#回傳結果
15970
		return $result;
15971
 
15972
		}#function ls end
15973
 
15974
	/*
15975
	#函式說明:
15976
	#將 ~ 轉換為家目錄路徑
15977
	#回傳結果:
15978
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15979
	#$result["error"],錯誤訊息.
15980
	#$result["function"],當前執行的函數名稱.
15981
	#$result["content"],轉換好的內容.
15982
	#必填參數:
15983
	#$conf["fileArgu"],字串,變數__FILE__的內容.
15984
	$conf["fileArgu"]=__FILE__;
15985
	#可省略參數:
15986
	#無.
15987
	#參考資料:
15988
	#https://www.businessweekly.com.tw/careers/Blog/14307
15989
	#備註:
15990
	#無.
15991
	*/
15992
	public static function tildeToPath(&$conf){
15993
 
15994
		#初始化要回傳的結果
15995
		$result=array();
15996
 
15997
		#取得當前執行的函數名稱
15998
		$result["function"]=__FUNCTION__;
15999
 
16000
		#如果沒有參數
16001
		if(func_num_args()==0){
16002
 
16003
			#設置執行失敗
16004
			$result["status"]="false";
16005
 
16006
			#設置執行錯誤訊息
16007
			$result["error"]="函數".$result["function"]."需要參數";
16008
 
16009
			#回傳結果
16010
			return $result;
16011
 
16012
			}#if end		
16013
 
16014
		#取得參數
16015
		$result["argu"]=$conf;
16016
 
16017
		#如果 $conf 不為陣列
16018
		if(gettype($conf)!=="array"){
16019
 
16020
			#設置執行失敗
16021
			$result["status"]="false";
16022
 
16023
			#設置執行錯誤訊息
16024
			$result["error"][]="\$conf變數須為陣列形態";
16025
 
16026
			#如果傳入的參數為 null
16027
			if($conf===null){
16028
 
16029
				#設置執行錯誤訊息
16030
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16031
 
16032
				}#if end
16033
 
16034
			#回傳結果
16035
			return $result;
16036
 
16037
			}#if end
16038
 
16039
		#函式說明:
16040
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16041
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16042
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16043
		#$result["function"],當前執行的函式名稱.
16044
		#$result["argu"],設置給予的參數.
16045
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16046
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16047
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16048
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16049
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16050
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16051
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16052
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16053
		#必填寫的參數:
16054
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16055
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16056
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16057
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16058
		#可以省略的參數:
16059
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16060
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
16061
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16062
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
16063
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16064
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16065
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16066
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16067
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16068
		#$conf["canBeEmpty"]=array();
16069
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16070
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
16071
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16072
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
16073
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16074
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
16075
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16076
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
16077
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16078
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16079
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16080
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16081
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16082
		#$conf["arrayCountEqualCheck"][]=array();
16083
		#參考資料來源:
16084
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16085
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16086
		unset($conf["variableCheck::checkArguments"]);
16087
 
16088
		#如果檢查參數失敗
16089
		if($checkArguments["status"]==="false"){
16090
 
16091
			#設置執行失敗
16092
			$result["status"]="false";
16093
 
16094
			#設置執行失敗訊息
16095
			$result["error"]=$checkArguments;
16096
 
16097
			#回傳結果
16098
			return $result;
16099
 
16100
			}#if end
16101
 
16102
		#如果檢查參數不通過
16103
		if($checkArguments["passed"]==="false"){
16104
 
16105
			#設置執行失敗
16106
			$result["status"]="false";
16107
 
16108
			#設置執行失敗訊息
16109
			$result["error"]=$checkArguments;
16110
 
16111
			#回傳結果
16112
			return $result;
16113
 
16114
			}#if end
16115
 
16116
		#函式說明:
16117
		#呼叫shell執行系統命令,並取得回傳的內容.
16118
		#回傳結果:
16119
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16120
		#$result["error"],錯誤訊息陣列.
16121
		#$result["function"],當前執行的函數名稱.
16122
		#$result["argu"],使用的參數.
16123
		#$result["cmd"],執行的指令內容.
16124
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16125
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16126
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16127
		#$result["running"],是否還在執行.
16128
		#$result["pid"],pid.
16129
		#$result["statusCode"],執行結束後的代碼.
16130
		#必填參數:
16131
		#$conf["command"],字串,要執行的指令與.
16132
		$conf["external::callShell"]["command"]="echo";
16133
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16134
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16135
		#可省略參數:
16136
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16137
		$conf["external::callShell"]["argu"]=array("~");
16138
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16139
		#$conf["arguIsAddr"]=array();
16140
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16141
		#$conf["plainArgu"]=array();
16142
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16143
		#$conf["useApostrophe"]=array();
16144
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16145
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16146
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16147
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16148
		#$conf["enablePrintDescription"]="true";
16149
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16150
		#$conf["printDescription"]="";
16151
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16152
		$conf["external::callShell"]["escapeshellarg"]="true";
16153
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16154
		#$conf["thereIsShellVar"]=array();
16155
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16156
		#$conf["username"]="";
16157
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16158
		#$conf["password"]="";
16159
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16160
		#$conf["useScript"]="";
16161
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16162
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16163
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16164
		#$conf["inBackGround"]="";
16165
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16166
		#$conf["getErr"]="false";
16167
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16168
		#$conf["doNotRun"]="false";
16169
		#參考資料:
16170
		#exec=>http://php.net/manual/en/function.exec.php
16171
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16172
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16173
		#備註:
16174
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16175
		$callShell=external::callShell($conf["external::callShell"]);
16176
		unset($conf["external::callShell"]);
16177
 
16178
		#如果執行失敗
16179
		if($callShell["status"]==="false"){
16180
 
16181
			#設置執行失敗
16182
			$result["status"]="false";
16183
 
16184
			#設置執行失敗訊息
16185
			$result["error"]=$callShell;
16186
 
16187
			#回傳結果
16188
			return $result;
16189
 
16190
			}#if end
16191
 
16192
		#如果沒有預期的輸出
16193
		if(!isset($callShell["output"][0])){
16194
 
16195
			#設置執行失敗
16196
			$result["status"]="false";
16197
 
16198
			#設置執行失敗訊息
16199
			$result["error"][]="沒有得到預期的輸出";
16200
 
16201
			#設置執行失敗訊息
16202
			$result["error"][]=$callShell;
16203
 
16204
			#回傳結果
16205
			return $result;
16206
 
16207
			}#if end
16208
 
16209
		#取得輸出
16210
		$result["content"]=$callShell["output"][0];
16211
 
16212
		#設置執行正常
16213
		$result["status"]="true";
16214
 
16215
		#回傳結果
16216
		return $result;
16217
 
16218
		}#function tildeToPath end
16219
 
16220
	/*
16221
	#函式說明:
16222
	#建立軟連結.
16223
	#回傳結果:
16224
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16225
	#$result["error"],錯誤訊息.
16226
	#$result["function"],當前執行的函數名稱.
16227
	#$result["content"],軟連結的資訊.
16228
	#$result["cmd"],執行的指令陣列.
16229
	#必填參數:
16230
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16231
	$conf["fileArgu"]=__FILE__;
16232
	#$conf["linkTo"],字串,軟連結要指向哪邊.
16233
	$conf["linkTo"]="";
16234
	#可省略參數:
16235
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16236
	#$conf["path"]="";
16237
	#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
16238
	#$conf["name"]="";
16239
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16240
	#$conf["overWrite"]="true";
16241
	#參考資料:
16242
	#無.
16243
	#備註:
16244
	#無.
16245
	*/
16246
	public static function createLink(&$conf){
16247
 
16248
		#初始化要回傳的結果
16249
		$result=array();
16250
 
16251
		#取得當前執行的函數名稱
16252
		$result["function"]=__FUNCTION__;
16253
 
16254
		#如果沒有參數
16255
		if(func_num_args()==0){
16256
 
16257
			#設置執行失敗
16258
			$result["status"]="false";
16259
 
16260
			#設置執行錯誤訊息
16261
			$result["error"]="函數".$result["function"]."需要參數";
16262
 
16263
			#回傳結果
16264
			return $result;
16265
 
16266
			}#if end		
16267
 
16268
		#取得參數
16269
		$result["argu"]=$conf;
16270
 
16271
		#如果 $conf 不為陣列
16272
		if(gettype($conf)!=="array"){
16273
 
16274
			#設置執行失敗
16275
			$result["status"]="false";
16276
 
16277
			#設置執行錯誤訊息
16278
			$result["error"][]="\$conf變數須為陣列形態";
16279
 
16280
			#如果傳入的參數為 null
16281
			if($conf===null){
16282
 
16283
				#設置執行錯誤訊息
16284
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16285
 
16286
				}#if end
16287
 
16288
			#回傳結果
16289
			return $result;
16290
 
16291
			}#if end
16292
 
16293
		#函式說明:
16294
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16295
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16296
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16297
		#$result["function"],當前執行的函式名稱.
16298
		#$result["argu"],設置給予的參數.
16299
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16300
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16301
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16302
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16303
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16304
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16305
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16306
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16307
		#必填寫的參數:
16308
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16309
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16310
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16311
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16312
		#可以省略的參數:
16313
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16314
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkTo");
16315
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16316
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16317
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16318
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16319
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16320
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16321
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16322
		#$conf["canBeEmpty"]=array();
16323
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16324
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16325
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16326
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16327
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16328
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
16329
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16330
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false");
16331
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16332
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16333
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16334
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16335
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16336
		#$conf["arrayCountEqualCheck"][]=array();
16337
		#參考資料來源:
16338
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16339
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16340
		unset($conf["variableCheck::checkArguments"]);
16341
 
16342
		#如果檢查參數失敗
16343
		if($checkArguments["status"]==="false"){
16344
 
16345
			#設置執行失敗
16346
			$result["status"]="false";
16347
 
16348
			#設置執行失敗訊息
16349
			$result["error"]=$checkArguments;
16350
 
16351
			#回傳結果
16352
			return $result;
16353
 
16354
			}#if end
16355
 
16356
		#如果檢查參數不通過
16357
		if($checkArguments["passed"]==="false"){
16358
 
16359
			#設置執行失敗
16360
			$result["status"]="false";
16361
 
16362
			#設置執行失敗訊息
16363
			$result["error"]=$checkArguments;
16364
 
16365
			#回傳結果
16366
			return $result;
16367
 
16368
			}#if end
16369
 
16370
		#如果是相對位置
16371
		if(!(strpos($conf["linkTo"],"/")===0)){
16372
 
16373
			#將 $conf["linkTo"] 轉換為針對產生位置的相對位置.
16374
			#函式說明:
16375
			#將多個路徑字串變成相對於當前路徑的相對路徑字串
16376
			#回傳結果:
16377
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16378
			#$result["error"],錯誤訊息陣列.
16379
			#$result["function"],函數名稱. 
16380
			#$result["argu"],使用的參數.
16381
			#$result["content"],字串陣列,多個轉換好的相對路徑字串.
16382
			#必填參數:
16383
			#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
16384
			$conf["fileAccess::getRelativePath"]["path"]=array($conf["linkTo"]);
16385
			#$conf["fileArgu"],字串,當前路徑.
16386
			$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
16387
			#可省略參數:
16388
			#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
16389
			$conf["fileAccess::getRelativePath"]["baseFrom"]=$conf["path"];
16390
			#參考資料:
16391
			#無.
16392
			#備註:
16393
			#無.
16394
			$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
16395
			unset($conf["fileAccess::getRelativePath"]);
16396
 
16397
			#如果執行失敗
16398
			if($getRelativePath["status"]==="false"){
16399
 
16400
				#設置執行失敗
16401
				$result["status"]="false";
16402
 
16403
				#設置執行失敗訊息
16404
				$result["error"]=$getRelativePath;
16405
 
16406
				#回傳結果
16407
				return $result;
16408
 
16409
				}#if end
16410
 
16411
			/*
16412
			#break point
16413
			var_dump($conf);
16414
			var_dump($getRelativePath);
16415
			exit;
16416
			*/
16417
 
16418
			#取得執行的指令
16419
			$result["cmd"][]=$getRelativePath["cmd"];
16420
 
16421
			#取得正確的相對位置
16422
			$conf["linkTo"]=$getRelativePath["content"][0];
16423
 
16424
			}#if end
16425
 
16426
		#初始化給 ln 指令的參數
16427
		$paramsForLn=array("-s",$conf["linkTo"]);
16428
 
16429
		#函式說明:
16430
		#將字串特定關鍵字與其前面的內容剔除
16431
		#回傳結果:
16432
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16433
		#$result["error"],錯誤訊息陣列.
16434
		#$result["warning"],警告訊息鎮列.
16435
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
16436
		#$result["function"],當前執行的函數名稱.
16437
		#$result["oriStr"],要處理的原始字串內容.
16438
		#$result["content"],處理好的的字串內容.	
16439
		#必填參數:
16440
		#$conf["stringIn"],字串,要處理的字串.
16441
		$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$conf["linkTo"];
16442
		#$conf["keyWord"],字串,特定字串.
16443
		$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";
16444
		#可省略參數:
16445
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
16446
		$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
16447
		#參考資料:
16448
		#無.
16449
		#備註:
16450
		#無.
16451
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
16452
		unset($conf["stringProcess::delStrBeforeKeyWord"]);
16453
 
16454
		#var_dump(__LINE__." ".print_r($delStrBeforeKeyWord,true));
16455
 
16456
		#如果執行失敗
16457
		if($delStrBeforeKeyWord["status"]==="false"){
16458
 
16459
			#設置執行失敗
16460
			$result["status"]="false";
16461
 
16462
			#設置執行失敗訊息
16463
			$result["error"]=$delStrBeforeKeyWord;
16464
 
16465
			#回傳結果
16466
			return $result;
16467
 
16468
			}#if end
16469
 
16470
		#如果沒有找到 "/"
16471
		if($delStrBeforeKeyWord["founded"]==="false"){
16472
 
16473
			#設置 預設的 軟連名稱
16474
			$softLink=$conf["linkTo"];
16475
 
16476
			}#if end
16477
 
16478
		#反之有 "/"
16479
		else{
16480
 
16481
			#設置 預設的 軟連結名稱
16482
			$softLink=$delStrBeforeKeyWord["content"];
16483
 
16484
			}#else end
16485
 
16486
		/*
16487
		#break point
16488
		var_dump(__LINE__." ".$softLink);
16489
		exit;
16490
		*/
16491
 
16492
		#預設欲建立的軟連結名稱
16493
		$createdSoftLink=$softLink;
16494
 
16495
		#如果有設置 path
16496
		if(isset($conf["path"])){
16497
 
16498
			#確認 path 存在
16499
			#函式說明:
16500
			#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
16501
			#回傳結果:
16502
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16503
			#$result["error"],錯誤訊息陣列
16504
			#$result["warning"],警告訊息陣列
16505
			#必填參數:
16506
			#$conf["dirPositionAndName"]="";#新建的位置與名稱
16507
			$conf["fileAccess::createNewFolder"]["dirPositionAndName"]=$conf["path"];
16508
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16509
			$conf["fileAccess::createNewFolder"]["fileArgu"]=$conf["fileArgu"];
16510
			#可省略參數:
16511
			#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
16512
			#$conf["dirPermission"]="";
16513
			#參考資料:
16514
			#mkdir=>http://php.net/manual/en/function.mkdir.php
16515
			#chmod=>http://php.net/manual/en/function.chmod.php
16516
			#參考資料:
16517
			#無.
16518
			#備註:
16519
			#同 function createFolderAfterCheck.
16520
			$createNewFolder=fileAccess::createNewFolder($conf["fileAccess::createNewFolder"]);
16521
			unset($conf["fileAccess::createNewFolder"]);
16522
 
16523
			#如果執行失敗
16524
			if($createNewFolder["status"]==="false"){
16525
 
16526
				#設置執行失敗
16527
				$result["status"]="false";
16528
 
16529
				#設置執行失敗訊息
16530
				$result["error"]=$createNewFolder;
16531
 
16532
				#回傳結果
16533
				return $result;
16534
 
16535
				}#if end
16536
 
16537
			#var_dump(__LINE__." ".print_r($conf,true));
16538
 
16539
			#預設要加 slash
16540
			$slash="/";
16541
 
16542
			#如果 path 為 "/" 結尾
16543
			if($conf["path"][strlen($conf["path"])-1]==="/"){
16544
 
16545
				#不用 slash
16546
				$slash="";
16547
 
16548
				}#if end
16549
 
16550
			#如果有設置 name
16551
			if(isset($conf["name"])){
16552
 
16553
				#指定軟連結要放在哪邊
16554
				$paramsForLn[]=$conf["path"].$slash.$conf["name"];
16555
 
16556
				#更新欲建立的軟連結名稱
16557
				$createdSoftLink=$conf["path"].$slash.$conf["name"];
16558
 
16559
				/*
16560
				#break point
16561
				var_dump($conf["path"],$softLink,$createdSoftLink);
16562
				exit;
16563
				*/
16564
 
16565
				}#if end
16566
 
16567
			#反之
16568
			else{
16569
 
16570
				#指定軟連結要放在哪邊
16571
				$paramsForLn[]=$conf["path"];
16572
 
16573
				#更新欲建立的軟連結名稱
16574
				$createdSoftLink=$conf["path"].$slash.$softLink;
16575
 
16576
				/*
16577
				#break point
16578
				var_dump($conf["path"],$softLink,$createdSoftLink);
16579
				exit;
16580
				*/
16581
 
16582
				}#else end
16583
 
16584
			#var_dump($createdSoftLink);
16585
 
16586
			}#if end
16587
 
16588
		#反之如果有設置 name
16589
		else if(isset($conf["name"])){
16590
 
16591
			#指定軟連結的名稱
16592
			$paramsForLn[]=$conf["name"];
16593
 
16594
			#更新欲建立的軟連結名稱
16595
			$createdSoftLink=$conf["name"];
16596
 
16597
			#var_dump(__LINE__." ".$createdSoftLink);
16598
 
16599
			}#if end
16600
 
16601
		/*
16602
		# break point
16603
		var_dump($createdSoftLink);
16604
		exit;
16605
		*/
16606
 
16607
		#如果要覆蓋既有的目標
16608
		if($conf["overWrite"]==="true"){
16609
 
16610
			#函式說明:
16611
			#移除檔案
16612
			#回傳結果:
16613
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
16614
			#$result["error"],錯誤訊息陣列
16615
			#$result["warning"],警告訊息陣列
16616
			#$result["function"],當前執行的函數名稱
16617
			#必填參數:
16618
			#$conf["fileAddress"],字串,要移除檔案的位置.
16619
			$conf["fileAccess::delFile"]["fileAddress"]=$createdSoftLink;
16620
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
16621
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
16622
			#可省略參數:
16623
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
16624
			#$conf["commentsArray"]=array("");
16625
			#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
16626
			$conf["fileAccess::delFile"]["allowDelSymlink"]="true";
16627
			#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
16628
			$conf["fileAccess::delFile"]["allowDelFolder"]="true";
16629
			#參考資料:
16630
			#無.
16631
			#備註:
16632
			#無.
16633
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
16634
			unset($conf["fileAccess::delFile"]);	
16635
 
16636
			/*
16637
			#break point
16638
			var_dump($delFile);
16639
			exit;
16640
			*/
16641
 
16642
			#如果執行失敗
16643
			if($delFile["status"]==="false"){
16644
 
16645
				#設置執行失敗
16646
				$result["status"]="false";
16647
 
16648
				#設置執行失敗訊息
16649
				$result["error"]=$delFile;
16650
 
16651
				#回傳結果
16652
				return $result;
16653
 
16654
				}#if end
16655
 
16656
			}#if end
16657
 
16658
		#函式說明:
16659
		#呼叫shell執行系統命令,並取得回傳的內容.
16660
		#回傳結果:
16661
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16662
		#$result["error"],錯誤訊息陣列.
16663
		#$result["function"],當前執行的函數名稱.
16664
		#$result["argu"],使用的參數.
16665
		#$result["cmd"],執行的指令內容.
16666
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16667
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16668
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16669
		#$result["running"],是否還在執行.
16670
		#$result["pid"],pid.
16671
		#$result["statusCode"],執行結束後的代碼.
16672
		#必填參數:
16673
		#$conf["command"],字串,要執行的指令與.
16674
		$conf["external::callShell"]["command"]="ln";
16675
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16676
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16677
		#可省略參數:
16678
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16679
		$conf["external::callShell"]["argu"]=$paramsForLn;
16680
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16681
		#$conf["arguIsAddr"]=array();
16682
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16683
		#$conf["plainArgu"]=array();
16684
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16685
		#$conf["useApostrophe"]=array();
16686
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16687
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16688
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16689
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16690
		#$conf["enablePrintDescription"]="true";
16691
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16692
		#$conf["printDescription"]="";
16693
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16694
		$conf["external::callShell"]["escapeshellarg"]="true";
16695
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16696
		#$conf["thereIsShellVar"]=array();
16697
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16698
		#$conf["username"]="";
16699
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16700
		#$conf["password"]="";
16701
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16702
		#$conf["useScript"]="";
16703
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16704
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16705
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16706
		#$conf["inBackGround"]="";
16707
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16708
		$conf["external::callShell"]["getErr"]="true";
16709
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16710
		#$conf["doNotRun"]="false";
16711
		#參考資料:
16712
		#exec=>http://php.net/manual/en/function.exec.php
16713
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16714
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16715
		#備註:
16716
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16717
		$callShell=external::callShell($conf["external::callShell"]);
16718
		unset($conf["external::callShell"]);
16719
 
16720
		#如果執行失敗
16721
		if($callShell["status"]==="false"){
16722
 
16723
			#設置執行失敗
16724
			$result["status"]="false";
16725
 
16726
			#設置執行失敗訊息
16727
			$result["error"]=$callShell;
16728
 
16729
			#回傳結果
16730
			return $result;
16731
 
16732
			}#if end
16733
 
16734
		#保存執行的指令
16735
		$result["cmd"][]=$callShell["cmd"];
16736
 
16737
		#初始化給 ls 指令的參數
16738
		$paramsForLs=array("-l",$paramsForLn[count($paramsForLn)-1]);
16739
 
16740
		#取得軟連結的資訊
16741
		#函式說明:
16742
		#呼叫shell執行系統命令,並取得回傳的內容.
16743
		#回傳結果:
16744
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16745
		#$result["error"],錯誤訊息陣列.
16746
		#$result["function"],當前執行的函數名稱.
16747
		#$result["argu"],使用的參數.
16748
		#$result["cmd"],執行的指令內容.
16749
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16750
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16751
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16752
		#$result["running"],是否還在執行.
16753
		#$result["pid"],pid.
16754
		#$result["statusCode"],執行結束後的代碼.
16755
		#必填參數:
16756
		#$conf["command"],字串,要執行的指令與.
16757
		$conf["external::callShell"]["command"]="ls";
16758
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16759
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16760
		#可省略參數:
16761
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16762
		$conf["external::callShell"]["argu"]=$paramsForLs;
16763
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16764
		#$conf["arguIsAddr"]=array();
16765
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16766
		#$conf["plainArgu"]=array();
16767
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16768
		#$conf["useApostrophe"]=array();
16769
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16770
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16771
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16772
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16773
		#$conf["enablePrintDescription"]="true";
16774
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16775
		#$conf["printDescription"]="";
16776
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16777
		$conf["external::callShell"]["escapeshellarg"]="true";
16778
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16779
		#$conf["thereIsShellVar"]=array();
16780
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16781
		#$conf["username"]="";
16782
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16783
		#$conf["password"]="";
16784
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16785
		#$conf["useScript"]="";
16786
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16787
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16788
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16789
		#$conf["inBackGround"]="";
16790
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16791
		$conf["external::callShell"]["getErr"]="true";
16792
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16793
		#$conf["doNotRun"]="false";
16794
		#參考資料:
16795
		#exec=>http://php.net/manual/en/function.exec.php
16796
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16797
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16798
		#備註:
16799
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16800
		$callShell=external::callShell($conf["external::callShell"]);
16801
		unset($conf["external::callShell"]);
16802
 
16803
		#如果執行失敗
16804
		if($callShell["status"]==="false"){
16805
 
16806
			#設置執行失敗
16807
			$result["status"]="false";
16808
 
16809
			#設置執行失敗訊息
16810
			$result["error"]=$callShell;
16811
 
16812
			#回傳結果
16813
			return $result;
16814
 
16815
			}#if end
16816
 
16817
		#保存執行的指令
16818
		$result["cmd"][]=$callShell["cmd"];
16819
 
16820
		#取得軟連結的資訊
16821
		$result["content"]=$callShell["output"];
16822
 
16823
		#設置執行正常
16824
		$result["status"]="true";
16825
 
16826
		#回傳結果
16827
		return $result;
16828
 
16829
		}#function createLink end
16830
 
16831
	/*
16832
	#函式說明:
16833
	#針對特定目錄下的內容建立軟連結.
16834
	#回傳結果:
16835
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16836
	#$result["error"],錯誤訊息.
16837
	#$result["function"],當前執行的函數名稱.
16838
	#$result["content"],字串陣列,每個建立的軟連結資訊.
16839
	#必填參數:
16840
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16841
	$conf["fileArgu"]=__FILE__;
16842
	#$conf["linkToDir"],字串,軟連結要指向哪個目錄底下的內容.
16843
	$conf["linkToDir"]="";
16844
	#可省略參數:
16845
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16846
	#$conf["path"]="";
16847
	#$conf["name"],字串陣列,軟連結的名稱,預設為 "linkToDir" 目錄底下的檔案或目錄名稱.若要指定特定檔案目錄的軟連結名稱,則可以用 $conf["name"][]=array("原始名稱","新的名稱"); 來指定.
16848
	#$conf["name"]=array(array("oriName","newName"));
16849
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16850
	#$conf["overWrite"]="true";
16851
	#參考資料:
16852
	#無.
16853
	#備註:
16854
	#無.
16855
	*/
16856
	public static function createMultiLinkInDir(&$conf){
16857
 
16858
		#初始化要回傳的結果
16859
		$result=array();
16860
 
16861
		#取得當前執行的函數名稱
16862
		$result["function"]=__FUNCTION__;
16863
 
16864
		#如果沒有參數
16865
		if(func_num_args()==0){
16866
 
16867
			#設置執行失敗
16868
			$result["status"]="false";
16869
 
16870
			#設置執行錯誤訊息
16871
			$result["error"]="函數".$result["function"]."需要參數";
16872
 
16873
			#回傳結果
16874
			return $result;
16875
 
16876
			}#if end		
16877
 
16878
		#取得參數
16879
		$result["argu"]=$conf;
16880
 
16881
		#如果 $conf 不為陣列
16882
		if(gettype($conf)!=="array"){
16883
 
16884
			#設置執行失敗
16885
			$result["status"]="false";
16886
 
16887
			#設置執行錯誤訊息
16888
			$result["error"][]="\$conf變數須為陣列形態";
16889
 
16890
			#如果傳入的參數為 null
16891
			if($conf===null){
16892
 
16893
				#設置執行錯誤訊息
16894
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16895
 
16896
				}#if end
16897
 
16898
			#回傳結果
16899
			return $result;
16900
 
16901
			}#if end
16902
 
16903
		#檢查參數
16904
		#函式說明:
16905
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16906
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16907
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16908
		#$result["function"],當前執行的函式名稱.
16909
		#$result["argu"],設置給予的參數.
16910
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16911
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16912
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16913
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16914
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16915
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16916
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16917
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16918
		#必填寫的參數:
16919
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16920
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16921
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16922
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16923
		#可以省略的參數:
16924
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16925
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkToDir");
16926
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16927
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16928
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16929
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16930
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16931
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16932
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16933
		#$conf["canBeEmpty"]=array();
16934
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16935
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16936
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16937
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16938
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16939
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
16940
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16941
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".",null,"false");
16942
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16943
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16944
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16945
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16946
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16947
		#$conf["arrayCountEqualCheck"][]=array();
16948
		#參考資料來源:
16949
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16950
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16951
		unset($conf["variableCheck::checkArguments"]);
16952
 
16953
		#如果檢查參數失敗
16954
		if($checkArguments["status"]==="false"){
16955
 
16956
			#設置執行失敗
16957
			$result["status"]="false";
16958
 
16959
			#設置執行失敗訊息
16960
			$result["error"]=$checkArguments;
16961
 
16962
			#回傳結果
16963
			return $result;
16964
 
16965
			}#if end
16966
 
16967
		#如果檢查參數不通過
16968
		if($checkArguments["passed"]==="false"){
16969
 
16970
			#設置執行失敗
16971
			$result["status"]="false";
16972
 
16973
			#設置執行失敗訊息
16974
			$result["error"]=$checkArguments;
16975
 
16976
			#回傳結果
16977
			return $result;
16978
 
16979
			}#if end
16980
 
16981
		#函式說明:
16982
		#取得目錄底下所有目錄與檔案清單.
16983
		#回傳結果:
16984
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16985
		#$result["error"],錯誤訊息陣列.
16986
		#$result["function"],函數名稱.
16987
		#$result["content"],陣列,目錄底下的檔案與子目錄.
16988
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
16989
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
16990
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
16991
		#$result["position"],目前的位置.
16992
		#必填參數:
16993
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
16994
		$conf["fileAccess::getList"]["position"]=$conf["linkToDir"];
16995
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16996
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
16997
		#可省略參數:
16998
		#無
16999
		#參考資料:
17000
		#opendir=>http://php.net/manual/en/function.opendir.php
17001
		#is_dir=>http://php.net/manual/en/function.is-dir.php
17002
		#備註:
17003
		#無.
17004
		$getList=fileAccess::getList($conf["fileAccess::getList"]);
17005
		unset($conf["fileAccess::getList"]);
17006
 
17007
		#如果檢查參數失敗
17008
		if($getList["status"]==="false"){
17009
 
17010
			#設置執行失敗
17011
			$result["status"]="false";
17012
 
17013
			#設置執行失敗訊息
17014
			$result["error"]=$getList;
17015
 
17016
			#回傳結果
17017
			return $result;
17018
 
17019
			}#if end
17020
 
17021
		#針對目標目錄底下的所有檔案
17022
		foreach($getList["content"] as $oriName){
17023
 
17024
			#如果有設定 $conf["name"]
17025
			if(isset($conf["name"])){
17026
 
17027
				#預設不指定新的軟連結名稱
17028
				unset($newSoftLinkName);
17029
 
17030
				#針對每個原始目標的名稱
17031
				foreach($conf["name"] as $customName){
17032
 
17033
					#如果是指定的目標
17034
					if($oriName["name"]===$customName[0]){
17035
 
17036
						#設置新的軟連結名稱
17037
						$newSoftLinkName=$customName[1];
17038
 
17039
						}#if end
17040
 
17041
					}#foreach end
17042
 
17043
				}#if end
17044
 
17045
			#建立軟連結
17046
			#函式說明:
17047
			#建立軟連結.
17048
			#回傳結果:
17049
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17050
			#$result["error"],錯誤訊息.
17051
			#$result["function"],當前執行的函數名稱.
17052
			#$result["content"],軟連結的資訊.
17053
			#必填參數:
17054
			#$conf["fileArgu"],字串,變數__FILE__的內容.
17055
			$conf["fileAccess::createLink"]["fileArgu"]=$conf["fileArgu"];
17056
			#$conf["linkTo"],字串,軟連結要指向哪邊.
17057
			$conf["fileAccess::createLink"]["linkTo"]=$conf["linkToDir"]."/".$oriName["name"];
17058
			#可省略參數:
17059
			#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
17060
			$conf["fileAccess::createLink"]["path"]=$conf["path"];
17061
 
17062
			#如果有新的軟連結名稱
17063
			if(isset($newSoftLinkName)){
17064
 
17065
				#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
17066
				$conf["fileAccess::createLink"]["name"]=$newSoftLinkName;
17067
 
17068
				}#if end
17069
 
17070
			#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
17071
			$conf["fileAccess::createLink"]["overWrite"]=$conf["overWrite"];
17072
 
17073
			#參考資料:
17074
			#無.
17075
			#備註:
17076
			#無.
17077
			$createLink=fileAccess::createLink($conf["fileAccess::createLink"]);
17078
			unset($conf["fileAccess::createLink"]);
17079
 
17080
			#var_dump(__LINE__." ".print_r($createLink,true));
17081
 
17082
			#如果檢查參數失敗
17083
			if($createLink["status"]==="false"){
17084
 
17085
				#設置執行失敗
17086
				$result["status"]="false";
17087
 
17088
				#設置執行失敗訊息
17089
				$result["error"]=$createLink;
17090
 
17091
				#回傳結果
17092
				return $result;
17093
 
17094
				}#if end
17095
 
17096
			#儲存建立好的軟連結資訊
17097
			$result["content"][]=$createLink["content"];
17098
 
17099
			}#foreach end
17100
 
17101
		#設置執行正常
17102
		$result["status"]="true";
17103
 
17104
		#回傳結果
17105
		return $result;
17106
 
17107
		}#function createMultiLink end
17108
 
17109
	/*
17110
	#函式說明:
17111
	#更新檔案的內容.
17112
	#回傳結果:
17113
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17114
	#$result["error"],錯誤訊息.
17115
	#$result["function"],當前執行的函數名稱.
17116
	#$result["content"],軟連結的資訊.
17117
	#必填參數:
17118
	#$conf["fileArgu"],字串,變數__FILE__的內容.
17119
	$conf["fileArgu"]=__FILE__;
17120
	#$conf["file"],字串,要更新的檔案位置與名稱.
17121
	$conf["file"]="";
17122
	#可省略參數:
17123
	#$conf["overWriteWith"],字串陣列,要置換成什麼樣的內容,每個元素代表一行內容.
17124
	#$conf["overWriteWith"]=array();
17125
	#$conf["replaceWith"],字串陣列,要將什麼內容置換成什麼內容.
17126
	#$conf["replaceWith"]=array(array("ori content","new content"),array("ori content","new content"),...);
17127
	#$conf["replaceLike"],字串,預設為"false",代表要完全符合關鍵字才能進行整行替換;反之為"true".
17128
	#$conf["replaceLike"]="false";
17129
	#$conf["addToTailWhenNoMatch"],字串,預設為"false"不做事;若為"true",則代表若使用 "replaceWith" 參數但沒有符合條件的內容出現,則新增到檔案的尾端.
17130
	#$conf["addToTailWhenNoMatch"]="false";
17131
	#$conf["addToTailBeforeThat"],字串,當 "replaceWith" 參數有使用,且 "addToTailWhenNoMatch" 為 "true" 時,若有使用該參數,則會從尾端尋找符合條件的行內容,然後將 沒有符合 "replaceWith" 條件的內容新增在此之前.
17132
	#$conf["addToTailBeforeThat"]="?\>";
17133
	#參考資料:
17134
	#無.
17135
	#備註:
17136
	#無.
17137
	*/
17138
	public static function updateFile(&$conf){
17139
 
17140
		#初始化要回傳的結果
17141
		$result=array();
17142
 
17143
		#取得當前執行的函數名稱
17144
		$result["function"]=__FUNCTION__;
17145
 
17146
		#如果沒有參數
17147
		if(func_num_args()==0){
17148
 
17149
			#設置執行失敗
17150
			$result["status"]="false";
17151
 
17152
			#設置執行錯誤訊息
17153
			$result["error"]="函數".$result["function"]."需要參數";
17154
 
17155
			#回傳結果
17156
			return $result;
17157
 
17158
			}#if end		
17159
 
17160
		#取得參數
17161
		$result["argu"]=$conf;
17162
 
17163
		#如果 $conf 不為陣列
17164
		if(gettype($conf)!=="array"){
17165
 
17166
			#設置執行失敗
17167
			$result["status"]="false";
17168
 
17169
			#設置執行錯誤訊息
17170
			$result["error"][]="\$conf變數須為陣列形態";
17171
 
17172
			#如果傳入的參數為 null
17173
			if($conf===null){
17174
 
17175
				#設置執行錯誤訊息
17176
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17177
 
17178
				}#if end
17179
 
17180
			#回傳結果
17181
			return $result;
17182
 
17183
			}#if end
17184
 
17185
		#檢查參數
17186
		#函式說明:
17187
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
17188
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17189
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
17190
		#$result["function"],當前執行的函式名稱.
17191
		#$result["argu"],設置給予的參數.
17192
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17193
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17194
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17195
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17196
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17197
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17198
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17199
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17200
		#必填寫的參數:
17201
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
17202
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
17203
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
17204
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
17205
		#可以省略的參數:
17206
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
17207
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","file");
17208
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
17209
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
17210
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17211
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
17212
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17213
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
17214
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17215
		#$conf["canBeEmpty"]=array();
17216
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17217
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
17218
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17219
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
17220
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
17221
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","string","string","string");
17222
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17223
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"false");
17224
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17225
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17226
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17227
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17228
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17229
		#$conf["arrayCountEqualCheck"][]=array();
17230
		#參考資料來源:
17231
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17232
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17233
		unset($conf["variableCheck::checkArguments"]);
17234
 
17235
		#如果檢查參數失敗
17236
		if($checkArguments["status"]==="false"){
17237
 
17238
			#設置執行失敗
17239
			$result["status"]="false";
17240
 
17241
			#設置執行失敗訊息
17242
			$result["error"]=$checkArguments;
17243
 
17244
			#回傳結果
17245
			return $result;
17246
 
17247
			}#if end
17248
 
17249
		#如果檢查參數不通過
17250
		if($checkArguments["passed"]==="false"){
17251
 
17252
			#設置執行失敗
17253
			$result["status"]="false";
17254
 
17255
			#設置執行失敗訊息
17256
			$result["error"]=$checkArguments;
17257
 
17258
			#回傳結果
17259
			return $result;
17260
 
17261
			}#if end
17262
 
17263
		#檢查檔案是否存在
17264
		#函式說明:
17265
		#檢查多個檔案與資料夾是否存在.
17266
		#回傳的結果:
17267
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
17268
		#$result["error"],錯誤訊息陣列.
17269
		#$resutl["function"],當前執行的涵式名稱.
17270
		#$result["argu"],使用的參數.
17271
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
17272
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
17273
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
17274
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
17275
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
17276
		#必填參數:
17277
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
17278
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
17279
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17280
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
17281
		#可省略參數:
17282
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
17283
		$conf["disableWebSearch"]="true";
17284
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
17285
		$conf["userDir"]="false";
17286
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
17287
		$conf["web"]="false";
17288
		#參考資料:
17289
		#http://php.net/manual/en/function.file-exists.php
17290
		#http://php.net/manual/en/control-structures.foreach.php
17291
		#備註:
17292
		#函數file_exists檢查的路徑為檔案系統的路徑
17293
		#$result["varName"][$i]結果未實作
17294
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
17295
		unset($conf["fileAccess::checkMultiFileExist"]);
17296
 
17297
		#如果檢查參數失敗
17298
		if($checkMultiFileExist["status"]==="false"){
17299
 
17300
			#設置執行失敗
17301
			$result["status"]="false";
17302
 
17303
			#設置執行失敗訊息
17304
			$result["error"]=$checkMultiFileExist;
17305
 
17306
			#回傳結果
17307
			return $result;
17308
 
17309
			}#if end
17310
 
17311
		#如果目標檔案不存在
17312
		if($checkMultiFileExist["allExist"]==="false"){
17313
 
17314
			#設置執行失敗
17315
			$result["status"]="false";
17316
 
17317
			#設置執行失敗訊息
17318
			$result["error"]=$checkMultiFileExist;
17319
 
17320
			#回傳結果
17321
			return $result;
17322
 
17323
			}#if end
17324
 
17325
		#如果有設置 overWriteWith
17326
		if(isset($conf["overWriteWith"])){
17327
 
17328
			#函式說明:
17329
			#將多行字串寫入到檔案
17330
			#回傳結果:
17331
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17332
			#$result["error"],錯誤訊息陣列.
17333
			#$result["function"],當前執行函數的名稱.
17334
			#必填參數:
17335
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17336
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17337
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17338
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["overWriteWith"];
17339
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17340
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17341
			#可省略參數:
17342
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17343
			#參考資料:
17344
			#無.
17345
			#備註:
17346
			#無.
17347
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17348
			unset($conf["fileAccess::writeMultiLine"]);
17349
 
17350
			#如果執行失敗
17351
			if($writeMultiLine["status"]==="false"){
17352
 
17353
				#設置執行失敗
17354
				$result["status"]="false";
17355
 
17356
				#設置執行失敗訊息
17357
				$result["error"]=$writeMultiLine;
17358
 
17359
				#回傳結果
17360
				return $result;
17361
 
17362
				}#if end
17363
 
17364
			}#if end
17365
 
17366
		#如果有設置 "replaceWith"
17367
		if(isset($conf["replaceWith"])){
17368
 
17369
			#取得檔案的內容
17370
			#函式說明:
17371
			#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
17372
			#回傳的變數說明:
17373
			#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
17374
			#$result["error"],錯誤訊息提示.
17375
			#$result["warning"],警告訊息.
17376
			#$result["function"],當前執行的函數名稱.
17377
			#$result["fileContent"],爲檔案的內容陣列.
17378
			#$result["lineCount"],爲檔案內容總共的行數.
17379
			#$result["fullContent"],為檔案的完整內容.
17380
			#$result["base64data"],為檔案的base64內容.
17381
			#$result["mimeType"],為檔案的mime type.
17382
			#必填參數:
17383
			#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
17384
			$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
17385
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17386
			$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
17387
			#可省略參數:
17388
			#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
17389
			$conf["fileAccess::getFileContent"]["web"]="false";
17390
			#參考資料:
17391
			#file(),取得檔案內容的行數.
17392
			#file=>http:#php.net/manual/en/function.file.php
17393
			#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
17394
			#filesize=>http://php.net/manual/en/function.filesize.php
17395
			#參考資料:
17396
			#無.
17397
			#備註:
17398
			#無.
17399
			$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
17400
			unset($conf["fileAccess::getFileContent"]);
17401
 
17402
			#如果執行失敗
17403
			if($getFileContent["status"]==="false"){
17404
 
17405
				#設置執行失敗
17406
				$result["status"]="false";
17407
 
17408
				#設置執行失敗訊息
17409
				$result["error"]=$getFileContent;
17410
 
17411
				#回傳結果
17412
				return $result;
17413
 
17414
				}#if end
17415
 
17416
			#取得原始檔案的每行內容
17417
			$oriFileContentByLine=&$getFileContent["fileContent"];
17418
 
17419
			#針對每個 replaceWith 條件
17420
			foreach($conf["replaceWith"] as $replaceInfo){
17421
 
17422
				#預設尚未找到符合的關鍵字
17423
				$foundKeyWord=false;
17424
 
17425
				#取得要替換的目標字串
17426
				$oriStr=$replaceInfo[0];
17427
 
17428
				#取得要替換成的字串內容
17429
				$newStr=$replaceInfo[1];
17430
 
17431
				#針對每行原始內容
17432
				foreach($oriFileContentByLine as $index => $line){
17433
 
17434
					#函式說明:
17435
					#檢查字串裡面有無指定的關鍵字
17436
					#回傳結果:
17437
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
17438
					#$result["error"],錯誤訊息
17439
					#$result["function"],當前執行的函數名稱.
17440
					#$result["argu"],使用的參數.
17441
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
17442
					#$result["keyWordCount"],找到的關鍵字數量.
17443
					#必填參數:
17444
					#$conf["keyWord"],字串,想要搜尋的關鍵字.
17445
					$conf["search::findKeyWord"]["keyWord"]=$oriStr;
17446
					#$conf["string"],字串,要被搜尋的字串內容
17447
					$conf["search::findKeyWord"]["string"]=$line;
17448
					#可省略參數:
17449
 
17450
					#如果要完全符合關鍵字
17451
					if($conf["replaceLike"]==="false"){
17452
 
17453
						#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
17454
						$conf["search::findKeyWord"]["completeEqual"]="true";
17455
 
17456
						}#if end
17457
 
17458
					#參考資料:
17459
					#無.
17460
					#備註:
17461
					#無.
17462
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
17463
					unset($conf["search::findKeyWord"]);
17464
 
17465
					#如果執行失敗
17466
					if($findKeyWord["status"]==="false"){
17467
 
17468
						#設置執行失敗
17469
						$result["status"]="false";
17470
 
17471
						#設置執行失敗訊息
17472
						$result["error"]=$findKeyWord;
17473
 
17474
						#回傳結果
17475
						return $result;
17476
 
17477
						}#if end
17478
 
17479
					#如果有找到關鍵字
17480
					if($findKeyWord["founded"]==="true"){
17481
 
17482
						#更新該行內容
17483
						$oriFileContentByLine[$index]=$newStr;
17484
 
17485
						#設置有找到符合的關鍵字
17486
						$foundKeyWord=true;
17487
 
17488
						}#if end
17489
 
17490
					}#foreach end
17491
 
17492
				#如果沒有找到關鍵字
17493
				if($foundKeyWord===false){
17494
 
17495
					#如果要新增內容
17496
					if($conf["addToTailWhenNoMatch"]==="true"){
17497
 
17498
						#如果有設置 addToTailBeforeThat
17499
						if(isset($conf["addToTailBeforeThat"])){
17500
 
17501
							#預設沒有找到符合的關鍵字
17502
							$foundKeyWord=false;
17503
 
17504
							#初始化要記錄要 append 回去的各行內容.
17505
							$linesToAppend=array();
17506
 
17507
							#倒敘,針對每行內容
17508
							for($i=count($oriFileContentByLine)-1;$i>=0;$i--){
17509
 
17510
								#儲存要 append 回去的行內容
17511
								$linesToAppend[]=$oriFileContentByLine[$i];
17512
 
17513
								#如果找到關鍵字了
17514
								if($oriFileContentByLine[$i]===$conf["addToTailBeforeThat"]){
17515
 
17516
									#設置有找到符合的關鍵字
17517
									$foundKeyWord=true;
17518
 
17519
									#更新該行內容
17520
									$oriFileContentByLine[$i]=$line;
17521
 
17522
									#倒敘陣列
17523
									$linesToAppend=array_reverse($linesToAppend);
17524
 
17525
									#針對每行要 append 回去的內容
17526
									foreach($linesToAppend as $lineToAppend){
17527
 
17528
										#append 行內容
17529
										$oriFileContentByLine[]=$lineToAppend;
17530
 
17531
										}#foreach end
17532
 
17533
									}#if end
17534
 
17535
								}#for end
17536
 
17537
							#如果沒有找到關鍵字
17538
							if($foundKeyWord===false){
17539
 
17540
								#設置執行失敗
17541
								$result["status"]="false";
17542
 
17543
								#設置錯誤訊息
17544
								$result["error"]="can't find \"".$conf["addToTailBeforeThat"]."\" to insert before it.";
17545
 
17546
								#回傳結果
17547
								return $result;
17548
 
17549
								}#if end
17550
 
17551
							}#if end
17552
 
17553
						}#if end
17554
 
17555
					}#if end
17556
 
17557
				}#foreach end
17558
 
17559
			#函式說明:
17560
			#將多行字串寫入到檔案
17561
			#回傳結果:
17562
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17563
			#$result["error"],錯誤訊息陣列.
17564
			#$result["function"],當前執行函數的名稱.
17565
			#必填參數:
17566
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17567
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17568
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17569
			$conf["fileAccess::writeMultiLine"]["inputString"]=$oriFileContentByLine;
17570
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17571
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17572
			#可省略參數:
17573
			#$conf["fileAccess::writeMultiLine"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17574
			#參考資料:
17575
			#無.
17576
			#備註:
17577
			#無.
17578
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17579
			unset($conf["fileAccess::writeMultiLine"]);
17580
 
17581
			#如果執行失敗
17582
			if($writeMultiLine["status"]==="false"){
17583
 
17584
				#設置執行失敗
17585
				$result["status"]="false";
17586
 
17587
				#設置執行失敗訊息
17588
				$result["error"]=$writeMultiLine;
17589
 
17590
				#回傳結果
17591
				return $result;
17592
 
17593
				}#if end
17594
 
17595
			}#if end
17596
 
17597
		#設置執行正常
17598
		$result["status"]="true";
17599
 
17600
		#回傳結果
17601
		return $result;
17602
 
17603
		}#function updateFile end
17604
 
17605
	/*
17606
	#函式說明:
17607
	#輔助使用PHP內建的chmod函式.
17608
	#回傳結果:
17609
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17610
	#$result["error"],錯誤訊息.
17611
	#$result["function"],當前執行的函式名稱.
17612
	#$result["argu"],使用的參數.
17613
	#$result["cmd"],執行的指令.
17614
	#$result["content"],執行的結果陣列,如果參數 "recursive" 跟 "excludeSelf" 都有設定的話,就會回傳該結果.
17615
	#必填參數:
17616
	#$conf["mode"],字串,要變成什麼權限.
17617
	$conf["mode"]="";
17618
	#$conf["target"],字串,需要變更權限的目標.
17619
	$conf["target"]="";
17620
	#可省略參數:
17621
	#無.
17622
	#參考資料:
17623
	#無.
17624
	#備註:
17625
	#無.
17626
	*/
17627
	public static function chmod(&$conf){
17628
 
17629
		#初始化要回傳的結果
17630
		$result=array();
17631
 
17632
		#取得當前執行的函數名稱
17633
		$result["function"]=__FUNCTION__;
17634
 
17635
		#如果沒有參數
17636
		if(func_num_args()==0){
17637
 
17638
			#設置執行失敗
17639
			$result["status"]="false";
17640
 
17641
			#設置執行錯誤訊息
17642
			$result["error"]="函數".$result["function"]."需要參數";
17643
 
17644
			#回傳結果
17645
			return $result;
17646
 
17647
			}#if end
17648
 
17649
		#取得參數
17650
		$result["argu"]=$conf;
17651
 
17652
		#如果 $conf 不為陣列
17653
		if(gettype($conf)!=="array"){
17654
 
17655
			#設置執行失敗
17656
			$result["status"]="false";
17657
 
17658
			#設置執行錯誤訊息
17659
			$result["error"][]="\$conf變數須為陣列形態";
17660
 
17661
			#如果傳入的參數為 null
17662
			if(is_null($conf)){
17663
 
17664
				#設置執行錯誤訊息
17665
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17666
 
17667
				}#if end
17668
 
17669
			#回傳結果
17670
			return $result;
17671
 
17672
			}#if end
17673
 
17674
		#函式說明:
17675
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
17676
		#回傳結果:
17677
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17678
		#$result["error"],執行不正常結束的錯訊息陣列.
17679
		#$result["simpleError"],簡單表示的錯誤訊息.
17680
		#$result["function"],當前執行的函式名稱.
17681
		#$result["argu"],設置給予的參數.
17682
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17683
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17684
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17685
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17686
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17687
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17688
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17689
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17690
		#必填參數:
17691
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
17692
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
17693
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
17694
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
17695
		#可省略參數:
17696
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
17697
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mode","target");
17698
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
17699
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
17700
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17701
		#$conf["canBeEmptyString"]="false";
17702
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17703
		#$conf["canNotBeEmpty"]=array();
17704
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17705
		#$conf["canBeEmpty"]=array();
17706
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17707
		#$conf["skipableVariableCanNotBeEmpty"]=array();
17708
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17709
		#$conf["skipableVariableName"]=array();
17710
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
17711
		#$conf["skipableVariableType"]=array();
17712
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17713
		#$conf["skipableVarDefaultValue"]=array("");
17714
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17715
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17716
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17717
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17718
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17719
		#$conf["arrayCountEqualCheck"][]=array();
17720
		#參考資料:
17721
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17722
		#備註:
17723
		#無.
17724
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17725
		unset($conf["variableCheck::checkArguments"]);
17726
 
17727
		#如果檢查參數失敗
17728
		if($checkArguments["status"]==="false"){
17729
 
17730
			#設置執行失敗
17731
			$result["status"]="false";
17732
 
17733
			#設置錯誤資訊
17734
			$result["error"]=$checkArguments;
17735
 
17736
			#回傳結果
17737
			return $result;
17738
 
17739
			}#if end
17740
 
17741
		#如果檢查參數不通過
17742
		if($checkArguments["passed"]==="false"){
17743
 
17744
			#設置執行失敗
17745
			$result["status"]="false";
17746
 
17747
			#設置錯誤資訊
17748
			$result["error"]=$checkArguments;
17749
 
17750
			#回傳結果
17751
			return $result;
17752
 
17753
			}#if end
17754
 
17755
		#將$conf["mode"]轉換為10進位的整數
17756
		$conf["mode"]=(int)base_convert($conf["mode"],8,10);
17757
 
17758
		#變更 target 的檔案權限為代碼
17759
		$chmod=chmod($conf["target"],$conf["mode"]); 
17760
 
17761
		#如果改變檔案權限失敗
17762
		if($chmod===false){
17763
 
17764
			#設置執行失敗
17765
			$result["status"]="false";
17766
 
17767
			#設置錯誤訊息
17768
			$result["error"][]="改變 ".$conf["target"]." 檔案的權限資訊為 ".$conf["mode"]." 失敗,通常只有系統帳戶才能變更之.";
17769
 
17770
			#回傳結果
17771
			return $result;	
17772
 
17773
			}#if end
17774
 
17775
		#設置執行正常
17776
		$result["status"]="true";
17777
 
17778
		#回傳結果
17779
		return $result;
17780
 
17781
		}#function chmod end
17782
 
17783
	}#class fileAccess end
17784
 
17785
?>