Subversion Repositories qbpwcf-lib(archive)

Rev

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

Rev Author Line No. Line
1 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
629 liveuser 6
    Copyright (C) 2015~2024 Min-Jhin,Chen
1 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
247 liveuser 26
/*
27
類別說明:
28
檔案存取應用的類別.
29
備註:
30
無.
31
*/
1 liveuser 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
	/*
43 liveuser 99
	#函式說明:
1 liveuser 100
	#將字串寫入到檔案
43 liveuser 101
	#回傳結果:
1 liveuser 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"],使用的參數.
43 liveuser 110
	#必填參數:
1 liveuser 111
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
112
	$conf["fileArgu"]=__FILE__;
43 liveuser 113
	#可省略參數:
1 liveuser 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";
187 liveuser 128
	#參考資料:
129
	#無.
43 liveuser 130
	#備註:
131
	#無.
1 liveuser 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
		#檢查參數
43 liveuser 167
		#函式說明:
1 liveuser 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
			#亂數產生檔案名稱
43 liveuser 239
			#函式說明:
1 liveuser 240
			#建立以圖片(PNG格式)呈現的驗證碼.
241
			#回傳的解果:
242
			#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
243
			#$result["error"],錯誤訊息.
244
			#$result["function"],檔前執行的函數名稱.
245
			#$result["randNumberWord"],傳驗證碼的內容.
246
			#$result["imgAddress"],圖片的位置與名稱.
43 liveuser 247
			#必填參數:
1 liveuser 248
			#$conf["imgAddressAndName"],字串,爲驗證碼圖片儲存的位置與名稱,副檔名程式會自動產生
249
			$conf["authenticate::validationCode"]["imgAddressAndName"]="don't need!";
250
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
251
			$conf["authenticate::validationCode"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 252
			#可省略參數:
1 liveuser 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"] 開頭的 "./"
43 liveuser 282
		#函式說明:
1 liveuser 283
		#移除字串開頭的特定內容
284
		#回傳的接結果:
285
		#$result["status"],寄信的情況,若爲"true",則十之八九沒有問題.
286
		#$result["error"],錯誤訊息陣列.
287
		#$result["function"],當前執行的函數.
288
		#$result["content"],處理好的字串.
43 liveuser 289
		#必填參數:
1 liveuser 290
		#$conf["inputStr"],字串,要檢查並移除開頭有 $conf["keyWords"] 的字串.
291
		$conf["stringProcess::delKeyWordsInStrHead"]["inputStr"]=$conf["fileName"];
292
		#$conf["keyWord"],字串,要移除的字串開頭關鍵字.
293
		$conf["stringProcess::delKeyWordsInStrHead"]["keyWord"]="./"; 
43 liveuser 294
		#可省略參數:
1 liveuser 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
 
43 liveuser 316
		#函式說明:
1 liveuser 317
		#確保路徑存在.
43 liveuser 318
		#回傳結果:
1 liveuser 319
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
320
		#$result["error"],錯誤訊息陣列.
321
		#$resutl["function"],當前執行的涵式名稱.
43 liveuser 322
		#必填參數:
1 liveuser 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"]);
538 liveuser 335
 
1 liveuser 336
		#debug
538 liveuser 337
		#var_dump($validatePath);exit;
338
 
1 liveuser 339
		#如果確保路徑失敗
340
		if($validatePath["status"]=="false"){
341
 
342
			#設置錯誤識別
343
			$result["status"]="false";
344
 
345
			#設置錯誤訊息
346
			$result["error"]=$validatePath;
347
 
348
			#回傳結果
349
			return $result;	
350
 
842 liveuser 351
			}#if end
352
 
1 liveuser 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"].建立好的檔案名稱與路徑.
43 liveuser 364
			#必填參數:
1 liveuser 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
 
842 liveuser 385
				}#if end
1 liveuser 386
 
387
			#如果有設定 $conf["web"] 參數
388
			if(isset($conf["web"])){
389
 
390
				$conf["fileAccess::createFileAfterCheck"]["web"]=$conf["web"];
842 liveuser 391
 
1 liveuser 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
		#檢查用來寫入的檔案是否存在
43 liveuser 487
		#函式說明:檢查多個檔案與資料夾是否存在
1 liveuser 488
		#回傳的結果:
489
		#$result["varName"][$i],爲第$i個變數的名稱。
490
		#$result["varExist"][$i],爲第$i個變數是否存在,true代表存在,false代表不存在。
43 liveuser 491
		#必填參數:
1 liveuser 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
 
43 liveuser 534
		#函式說明:
1 liveuser 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
	/*
43 liveuser 609
	#函式說明:
51 liveuser 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("");
187 liveuser 628
	#參考資料:
629
	#無.
51 liveuser 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
			#回傳結果
669 liveuser 808
			return $result;	
51 liveuser 809
 
711 liveuser 810
		}#function writeMultiFile end
51 liveuser 811
 
812
	/*
813
	#函式說明:
1 liveuser 814
	#將多行字串寫入到檔案
43 liveuser 815
	#回傳結果:
1 liveuser 816
	#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
817
	#$result["error"],錯誤訊息陣列.
818
	#$result["function"],當前執行函數的名稱.
43 liveuser 819
	#必填參數:
1 liveuser 820
	#$conf["fileName"],字串,爲要編輯的檔案名稱
821
	$conf["fileName"]="";
402 liveuser 822
	#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
1 liveuser 823
	$conf["inputString"]=array("");
824
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
825
	$conf["fileArgu"]=__FILE__;
43 liveuser 826
	#可省略參數:
1 liveuser 827
	#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
187 liveuser 828
	#參考資料:
829
	#無.
43 liveuser 830
	#備註:
831
	#無.
1 liveuser 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
		#檢查必填參數
43 liveuser 864
		#函式說明:
1 liveuser 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
 
43 liveuser 978
					#函式說明:
1 liveuser 979
					#將字串寫入到檔案
43 liveuser 980
					#回傳結果:
1 liveuser 981
					#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
982
					#$result["error"],錯誤訊息陣列.
43 liveuser 983
					#必填參數:
1 liveuser 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"];
43 liveuser 988
					#可省略參數:
1 liveuser 989
					$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
660 liveuser 990
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
991
					$conf["fileAccess.writeTextIntoFile"]["web"]="false";
1 liveuser 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
 
43 liveuser 1014
					#函式說明:
1 liveuser 1015
					#將字串寫入到檔案
43 liveuser 1016
					#回傳結果:
1 liveuser 1017
					#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1018
					#$result["error"],錯誤訊息陣列.
43 liveuser 1019
					#必填參數:
1 liveuser 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"];
43 liveuser 1024
					#可省略參數:
1 liveuser 1025
					$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
660 liveuser 1026
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1027
					$conf["fileAccess.writeTextIntoFile"]["web"]="false";
1 liveuser 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
 
43 liveuser 1055
				#函式說明:
1 liveuser 1056
				#將字串寫入到檔案
43 liveuser 1057
				#回傳結果:
1 liveuser 1058
				#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1059
				#$result["error"],錯誤訊息陣列.
43 liveuser 1060
				#必填參數:
1 liveuser 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"];
43 liveuser 1065
				#可省略參數:
1 liveuser 1066
				$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
660 liveuser 1067
				#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1068
				$conf["fileAccess.writeTextIntoFile"]["web"]="false";
1 liveuser 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
	/*
43 liveuser 1099
	#函式說明:
1 liveuser 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.
43 liveuser 1111
	#必填參數:
1 liveuser 1112
	#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
1113
	$conf["filePositionAndName"]="";
1114
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1115
	$conf["fileArgu"]=__FILE__;
1116
	#可省略參數:
565 liveuser 1117
	#$conf["web"],是要取得網路上的檔案則為"true";反之預設為"false".
1 liveuser 1118
	#$conf["web"]="true";
657 liveuser 1119
	#$conf["createIfnotExist"],字串,預設為"false"代表檔案不存在也不需要建立;反之為"true".
1120
	#$conf["createIfnotExist"]="false";
835 liveuser 1121
	#$conf["autoDeleteSpaceOnEachLineStart"],字串,預設為"false",不做額外處理;反之為"true"
1122
	#$conf["autoDeleteSpaceOnEachLineStart"]="false";
1 liveuser 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
187 liveuser 1128
	#參考資料:
1129
	#無.
43 liveuser 1130
	#備註:
1131
	#無.
1 liveuser 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
		#檢查參數
43 liveuser 1164
		#函式說明:
657 liveuser 1165
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
1166
		#回傳結果:
1167
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1168
		#$result["error"],執行不正常結束的錯訊息陣列.
1169
		#$result["simpleError"],簡單表示的錯誤訊息.
1170
		#$result["function"],當前執行的函式名稱.
1171
		#$result["argu"],設置給予的參數.
1 liveuser 1172
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
657 liveuser 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"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
835 liveuser 1197
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");
657 liveuser 1198
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
835 liveuser 1199
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");
657 liveuser 1200
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
835 liveuser 1201
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
657 liveuser 1202
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
835 liveuser 1203
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","false","false");
657 liveuser 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"]);
1 liveuser 1218
 
657 liveuser 1219
		#如果檢查出錯
1220
		if($checkArguments["status"]==="false"){
1 liveuser 1221
 
657 liveuser 1222
			#設置執行錯誤識別
1 liveuser 1223
			$result["status"]="false";
657 liveuser 1224
 
1225
			#設置執行錯誤訊息
1226
			$result["error"]=$checkArguments;
1227
 
1 liveuser 1228
			#回傳結果
1229
			return $result;
657 liveuser 1230
 
1 liveuser 1231
			}#if end
1232
 
657 liveuser 1233
		#如果檢查參數不通過
1234
		if($checkArguments["passed"]==="false"){
1235
 
1236
			#設置執行錯誤識別
1 liveuser 1237
			$result["status"]="false";
657 liveuser 1238
 
1239
			#設置執行錯誤訊息
1240
			$result["error"]=$checkArguments;
1241
 
1 liveuser 1242
			#回傳結果
1243
			return $result;
657 liveuser 1244
 
1 liveuser 1245
			}#if end
1246
 
1247
		#檢查檔案是否存在
43 liveuser 1248
		#函式說明:檢查多個檔案與資料夾是否存在
1 liveuser 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"代表不存在。
43 liveuser 1256
		#必填參數:
1 liveuser 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
 
657 liveuser 1295
			#如果也不要自動建立檔案
1296
			if($conf["createIfnotExist"]==="false"){
1 liveuser 1297
 
657 liveuser 1298
				#設置執行錯誤識別
1299
				$result["status"]="false";
1300
 
1301
				#設置執行錯誤訊息
1302
				$result["error"]=$fileCheckResult;
1303
 
1304
				#設置易讀的錯誤訊息
1305
				$result["error"][]="名為".$fileCheckResult["varName"][0]."的檔案不存在";
1306
 
1307
				#回傳結果
1308
				return $result;
1 liveuser 1309
 
657 liveuser 1310
				}#if end
1 liveuser 1311
 
657 liveuser 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"]="";
660 liveuser 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
 
657 liveuser 1347
			#參考資料:
1348
			#無.
1349
			#備註:
1350
			#無.
1351
			$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
1352
			unset($conf["fileAccess::writeTextIntoFile"]);
1 liveuser 1353
 
657 liveuser 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
 
1 liveuser 1368
			}#if end
1369
 
1370
		#file absolute addr
1371
		$fileAbAddr=$fileCheckResult["varNameFullPath"][0];
1372
 
817 liveuser 1373
		#將檔案的內容放進變數裡面(會得到陣列)
1 liveuser 1374
		$fileContent=file($fileAbAddr);
1375
 
1376
		#如果 $fileContent 等於
1377
		if($fileContent==FALSE){
1378
 
1379
			#如果檔案大小為0bytes
1380
			if(filesize($fileAbAddr)==0){
1381
 
1382
				#設置錯誤識別
1383
				$result["warning"][]="執行結果沒有輸出內容";
1384
 
1385
				}#if end
1386
 
1387
			#反之檔案有內容
1388
			else{
1389
 
1390
				#設置錯誤識別
1391
				$result["status"]="false";
1392
 
1393
				#設置錯誤訊息
1394
				$result["error"][]="讀取檔案失敗";
1395
 
1396
				#回傳結果
1397
				return $result;
1398
 
1399
				}#else end
1400
 
1401
			}#if end
1402
 
1403
		#針對每行內容
1404
		for($i=0;$i<count($fileContent);$i++){
1405
 
1406
			#剔除字串尾的換行符號
1407
			$fileContent[$i]=rtrim($fileContent[$i]);
1408
 
835 liveuser 1409
			#如果要移除開頭的空白
1410
			if($conf["autoDeleteSpaceOnEachLineStart"]==="true"){
1411
 
1412
				#如果開頭是空格
1413
				while(strpos($fileContent[$i]," ")===0){
1414
 
1415
					#函式說明:
1416
					#將字串特定關鍵字與其前面的內容剔除
1417
					#回傳結果:
1418
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1419
					#$result["error"],錯誤訊息陣列.
1420
					#$result["warning"],警告訊息鎮列.
1421
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1422
					#$result["function"],當前執行的函數名稱.
1423
					#$result["argu"],使用的參數.
1424
					#$result["oriStr"],要處理的原始字串內容.
1425
					#$result["content"],處理好的的字串內容.	
1426
					#必填參數:
1427
					#$conf["stringIn"],字串,要處理的字串.
1428
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileContent[$i];
1429
					#$conf["keyWord"],字串,特定字串.
1430
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
1431
					#可省略參數:
1432
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
1433
					#$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
1434
					#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
1435
					#$conf["lastResult"]=$delStrBeforeKeyWord;
1436
					#參考資料:
1437
					#無.
1438
					#備註:
1439
					#無.
1440
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
1441
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
1442
 
1443
					#如果建立檔案失敗
1444
					if($delStrBeforeKeyWord["status"]=="false"){
1445
 
1446
						#設置執行錯誤識別
1447
						$result["status"]="false";
1448
 
1449
						#設置執行錯誤訊息
1450
						$result["error"]=$delStrBeforeKeyWord;
1451
 
1452
						#回傳結果
1453
						return $result;
1454
 
1455
						}#if end
1456
 
1457
					#取得剔除開頭空格後的內容
1458
					$fileContent[$i]=$delStrBeforeKeyWord["content"];
1459
 
1460
					}#while end
1461
 
1462
				}#if end
1463
 
1 liveuser 1464
			}#for end
1465
 
1466
		#取得總共有幾行
1467
		$lineCount=count($fileContent);
1468
 
1469
		#將檔案內容的陣列放進 $result 陣列變數裏面
1470
		$result["fileContent"]=$fileContent;
1471
 
1472
		#建立暫存檔案
1473
		$tmpFile=tempnam("/tmp", "qbpwcf");
1474
 
1475
		#讀取要取得的檔案內容
1476
		$content=file_get_contents($fileAbAddr);
1477
 
817 liveuser 1478
		#debug
1479
		#var_dump(__FILE__,__LINE__,$content);
1480
 
1 liveuser 1481
		#開啟暫存檔案(寫入模式)
1482
		$file=fopen($tmpFile,'w');
1483
 
1484
		#寫入讀取到的內容
1485
		fwrite($file,$content);
1486
 
1487
		#關閉暫存檔案
1488
		fclose($file);
1489
 
1490
		#取得檔案的 mime 類型
1491
		$mimeType=mime_content_type($tmpFile);
1492
 
1493
		#設置檔案的mime類型
849 liveuser 1494
		$result["mimeType"]=$mimeType;
1 liveuser 1495
 
1496
		#取得檔案的內容為字串
1497
		$result["fullContent"]=file_get_contents($tmpFile);
1498
 
817 liveuser 1499
		#debug
1500
		#var_dump(__FILE__,__LINE__,$result["fullContent"]);
1501
 
1 liveuser 1502
		#取得檔案的base64data
1503
		$result["base64data"]="data:".$result["mimeType"].";base64,".base64_encode($result["fullContent"]);
1504
 
1505
		#移除暫存檔案
1506
		unlink($tmpFile);
1507
 
1508
		#將檔案內容的行數放進 $result 陣列變數裏面
1509
		$result["lineCount"]=$lineCount;
1510
 
1511
		#執行到這邊代表執行成功
1512
		$result["status"]="true";
1513
 
1514
		#回傳結果
1515
		return $result;
1516
 
1517
		}#function getFileContent end
1518
 
1519
	/*
43 liveuser 1520
	#函式說明:
1 liveuser 1521
	#依據逗號分隔抓取檔案的內容,結果會回傳一個陣列
43 liveuser 1522
	#回傳結果:	
1 liveuser 1523
	#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
1524
	#$result["error"],錯誤訊息提示.
1525
	#$result["function"],函數名稱.
1526
	#$result["lineCount"]爲總共有幾行
1527
	#$result["lineContent"][i]["dataCounts"],爲第 i+1 行總共有幾個字串
1528
	#$result["lineContent"][0][i],爲第1行第 i+1 個分割好的字串
1529
	#$result["lineContent"][1][i],爲第2行第 i+1 個分割好的字串
43 liveuser 1530
	#必填參數:
1531
	#$conf["filePositionAndName"],字串,要抓取的檔案位置與名稱
1532
	$conf["filePositionAndName"]="";
1533
	#可省略參數:
1534
	#$conf["spiltSign"],字串,爲要用來分割字串的符號,可省略,預設爲「,」
1535
	#$conf["spiltSign"]="";
187 liveuser 1536
	#參考資料:
1537
	#無.
43 liveuser 1538
	#備註:
1539
	#無.
1 liveuser 1540
	*/
1541
	public static function getFileContentSpiltBySomething($conf){
1542
 
1543
		#初始化要回傳的內容
1544
		$result=array();
1545
 
1546
		#取得當前執行函數名稱
1547
		$result["function"]=__FUNCTION__;
1548
 
1549
		#如果 $conf 不為陣列
1550
		if(gettype($conf)!="array"){
1551
 
1552
			#設置執行失敗
1553
			$result["status"]="false";
1554
 
1555
			#設置執行錯誤訊息
1556
			$result["error"][]="\$conf變數須為陣列形態";
1557
 
1558
			#如果傳入的參數為 null
1559
			if($conf==null){
1560
 
1561
				#設置執行錯誤訊息
1562
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1563
 
1564
				}#if end
1565
 
1566
			#回傳結果
1567
			return $result;
1568
 
1569
			}#if end
1570
 
1571
		#如果 $conf["spiltSign"] 爲空,則預設爲","。
1572
		if(!isset($conf["spiltSign"])){
1573
 
1574
			$conf["spiltSign"]=",";
1575
 
1576
			}#if end
1577
 
1578
		#依據行號抓取所有的內容
43 liveuser 1579
		#函式說明:
1 liveuser 1580
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1581
		#回傳的變數說明:
1582
		#$result["fileContent"],爲檔案的內容陣列
1583
		#$result["lineCount"],爲檔案內容總共的行數
43 liveuser 1584
		#必填參數:
1 liveuser 1585
		$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["filePositionAndName"];#爲檔案的位置以及名稱
1586
		#參考資料:
1587
		#file():取得檔案內容的行數
1588
		#http:#php.net/manual/en/function.file.php
1589
		$fileContent=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
1590
		unset($conf["fileAccess"]["getFileContent"]);
1591
 
1592
		#如果取得檔案內容失敗
1593
		if($fileContent["status"]=="false"){
1594
 
1595
			#設置執行失敗
1596
			$result["status"]="false";
1597
 
1598
			#設置執行錯誤訊息
1599
			$result["error"]=$fileContent;
1600
 
1601
			#回傳結果
1602
			return $result;
1603
 
1604
			}#if end
1605
 
1606
		#迴圈,有幾行資料就執行幾次
1607
		for($i=0;$i<$fileContent["lineCount"];$i++){
1608
 
1609
			#將該行內容用逗號分隔
1610
			$conf["stringProcess"]["spiltString"]["stringIn"]=$fileContent["fileContent"][$i];#要處理的字串。
1611
			$conf["stringProcess"]["spiltString"]["spiltSymbol"]=$conf["spiltSign"];#爲以哪個符號作爲分割
1612
			$lineSpiltResult[$i]=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
1613
			unset($conf["stringProcess"]["spiltString"]);	
1614
 
1615
			#如果分割字串失敗
1616
			if($lineSpiltResult[$i]["status"]=="false"){
1617
 
1618
				#設置執行失敗
1619
				$result["status"]="false";
1620
 
1621
				#設置執行錯誤訊息
1622
				$result["error"]=$lineSpiltResult[$i];
1623
 
1624
				#回傳結果
1625
				return $result;
1626
 
1627
				}#if end
1628
 
1629
			}#for end
1630
 
1631
		#取得
1632
		$result["lineContent"]=$lineSpiltResult;
1633
 
1634
		#取得資料的行數
1635
		$result["lineCount"]=$fileContent["lineCount"];
1636
 
1637
		#回傳結果
1638
		return $result;
1639
 
842 liveuser 1640
		}#function getFileContentSpiltBySomething end
1 liveuser 1641
 
1642
	/*
43 liveuser 1643
	#函式說明:
1 liveuser 1644
	#檢查多個檔案與資料夾是否存在.
1645
	#回傳的結果:
1646
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
1647
	#$result["error"],錯誤訊息陣列.
1648
	#$resutl["function"],當前執行的涵式名稱.
1649
	#$result["argu"],使用的參數.
1650
	#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
1651
	#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
1652
	#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
646 liveuser 1653
	#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
1 liveuser 1654
	#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
1655
	#必填參數:
1656
	#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
1657
	$conf["fileArray"]=array();
1658
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1659
	$conf["fileArgu"]=__FILE__;
43 liveuser 1660
	#可省略參數:
1 liveuser 1661
	#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
1662
	#$conf["disableWebSearch"]="false";
1663
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
1664
	#$conf["userDir"]="true";
1665
	#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
1666
	#$conf["web"]="true";
187 liveuser 1667
	#參考資料:
1 liveuser 1668
	#http://php.net/manual/en/function.file-exists.php
1669
	#http://php.net/manual/en/control-structures.foreach.php
1670
	#備註:
1671
	#函數file_exists檢查的路徑為檔案系統的路徑
43 liveuser 1672
	#$result["varName"][$i]結果未實作
1 liveuser 1673
	*/
1674
	public static function checkMultiFileExist(&$conf){
1675
 
1676
		#初始化要回傳的變數
1677
		$result=array();
1678
 
1679
		#設置當前執行的涵式
1680
		$result["function"]=__FUNCTION__;
1681
 
1682
		#如果 $conf 不為陣列
1683
		if(gettype($conf)!="array"){
1684
 
1685
			#設置執行失敗
1686
			$result["status"]="false";
1687
 
1688
			#設置執行錯誤訊息
1689
			$result["error"][]="\$conf變數須為陣列形態";
1690
 
1691
			#如果傳入的參數為 null
1692
			if($conf==null){
1693
 
1694
				#設置執行錯誤訊息
1695
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
1696
 
1697
				}#if end
1698
 
1699
			#回傳結果
1700
			return $result;
1701
 
1702
			}#if end
1703
 
1704
		#取得使用的參數
1705
		$result["argu"]=$conf;
1706
 
1707
		#檢查參數
43 liveuser 1708
		#函式說明:
1 liveuser 1709
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1710
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1711
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1712
		#$result["function"],當前執行的函式名稱.
1713
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1714
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1715
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1716
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1717
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1718
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1719
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1720
		#必填寫的參數:
1721
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1722
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1723
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1724
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArray","fileArgu");
1725
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
1726
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
1727
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1728
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1729
		#可以省略的參數:
1730
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1731
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1732
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1733
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("disableWebSearch","userDir","web");
1734
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
1735
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
1736
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1737
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","true","true");
1738
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1739
		#$conf["arrayCountEqualCheck"][]=array();
1740
		#參考資料來源:
1741
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1742
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1743
		unset($conf["variableCheck::checkArguments"]);
1744
 
1745
		#如果 $checkArguments["status"] 等於 "false"
1746
		if($checkArguments["status"]=="false"){
1747
 
1748
			#設置錯誤識別
1749
			$result["status"]="false";
1750
 
1751
			#設置錯誤訊息
1752
			$result["error"]=$checkArguments;
1753
 
1754
			#回傳結果
1755
			return $result;				
1756
 
1757
			}#if end
1758
 
1759
		#如果 $checkArguments["passed"] 等於 "false"
1760
		if($checkArguments["passed"]=="false"){
1761
 
1762
			#設置錯誤識別
1763
			$result["status"]="false";
1764
 
1765
			#設置錯誤訊息
1766
			$result["error"]=$checkArguments;
1767
 
1768
			#回傳結果
1769
			return $result;				
1770
 
1771
			}#if end
1772
 
1773
		#初始化儲存每個檔案是否存在的陣列變數
1774
		$result["varName"]=array();
1775
		$result["varExist"]=array();
1776
 
827 liveuser 1777
		#針對每個要檢查的檔案
1778
		foreach($conf["fileArray"] as $i=>$varName){
1779
 
1780
			#儲存要判斷是否存在的物件
1781
			$result["varName"][]=$varName;
1782
 
1783
			#函式說明:
1784
			#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
1785
			#回傳結果:
1786
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1787
			#$result["error"],錯誤訊息陣列.
1788
			#$result["function"],函數名稱. 
1789
			#$result["argu"],使用的參數.
1790
			#$result["content"],網址,若是在命令列執行,則為"null".
1791
			#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
1792
			#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
1793
			#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
1794
			#必填參數:
1795
			#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
1796
			$conf["fileAccess::getInternetAddressV2"]["address"]=$varName;
1797
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1798
			$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
1799
			#可省略參數:
1800
			$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
1801
			#備註:
1802
			#建構中,fileSystemRelativePosition尚未實作.
1803
			$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
1804
			unset($conf["fileAccess::getInternetAddressV2"]);
1805
 
1806
			#如果轉換成絕對路徑失敗
1807
			if($getInternetAddressV2["status"]=="false"){
1808
 
1809
				#設置錯誤識別
1810
				$result["status"]="false";
1811
 
1812
				#設置錯誤訊息
1813
				$result["error"]=$getInternetAddressV2;
1814
 
1815
				#回傳結果
1816
				return $result;
1817
 
1818
				}#if end
1819
 
1820
			#傳參考
1821
			$getInternetAddress=&$getInternetAddressV2;
1822
 
1823
			#如果沒有檔案的絕對路徑位置
1824
			if(!isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1825
 
1826
				#置換成給予的參數網址
1827
				$conf["fileArray"][$i]=$getInternetAddress["content"];
1828
 
1829
				#設置無法從檔案系統找到
1830
				$exist=FALSE;
1831
 
1832
				}#if end
1833
 
1834
			#反之取得
1835
			else{
1836
 
1837
				#轉換好的絕對路徑
1838
				$conf["fileArray"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
1839
 
1840
				#判斷該檔案是否存在
1841
				$exist=file_exists($conf["fileArray"][$i]);
1842
 
1843
				#如果不存在或是指向不存在目標的連結
1844
				if($exist===false){
1845
 
1846
					#判斷是否為軟連結
1847
					$exist=is_link($conf["fileArray"][$i]);
1848
 
1849
					}#if end`
1850
 
908 liveuser 1851
				}#else end
827 liveuser 1852
 
1853
			#如果 $exist 等於 false (檔案不存在) 且 沒有停用網路搜尋功能
1854
			if($exist===FALSE && $conf["disableWebSearch"]==="false"){
1855
 
1856
				#將目標轉換成網址
1857
				#函式說明:
1858
				#將檔案的位置名稱變成網址
1859
				#回傳結果:
1860
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
1861
				#$result["error"],錯誤訊息陣列.
1862
				#$result["function"],函數名稱. 
1863
				#$result["content"],網址.
1864
				#必填參數:
1865
				#$conf["address"],字串,檔案的相對位置.
1866
				$conf["fileAccess::getInternetAddress"]["address"]=$conf["fileArray"][$i];
1867
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
1868
				$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
1869
				$getInternetAddress=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddress"]);
1870
				unset($conf["fileAccess::getInternetAddress"]);
1871
 
1872
				#如果轉換失敗
1873
				if($getInternetAddress["status"]=="false"){
1874
 
1875
					#設置錯誤識別
1876
					$result["status"]="false";
1877
 
1878
					#設置錯誤訊息
1879
					$result["error"]=$getInternetAddress;
1880
 
1881
					#回傳結果
1882
					return $result;	
1883
 
1884
					}#if end
1885
 
1886
				#函式說明:
1887
				#運行curl cmd
1888
				#回傳結果:
1889
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1890
				#$result["error"],錯誤訊息陣列.
1891
				#$result["function"],當前執行的函式名稱.
1892
				#$result["content"],取得的回應內容.
1893
				#$result["cookie"],cookie檔案的位置與名稱.
1894
				#$result["cmd"],執行的command.
1895
				#$result["argu],使用的參數.
1896
				#必填參數:
1897
				#$conf["url"],字串,目標url.
1898
				$conf["catchWebContent::curlCmd"]["url"]=$getInternetAddress["content"];
1899
				#$conf["fileArgu"],字串,變數__FILE__的內容.
1900
				$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];
1901
				#可省略參數:
1902
				#$conf["header"],字串陣列,要傳送的header.
1903
				#$conf["header"]=array();
1904
				#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
1905
				#$conf["allowAnySSLcertificate"]="";
1906
				#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
1907
				#$conf["postVar"]=array();
1908
				#$conf["rawPost"]="字串",要傳送的raw post內容.
1909
				#$conf["rawPost"]="";
1910
				#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
1911
				#$conf["urlEncode"]="false";
1912
				#$conf["agent"],字串,user agent的名稱.
1913
				#$conf["agent"]="";
1914
				#$conf["cookie"],字串,cookie位置與檔案位置.
1915
				#$conf["cookie"]="";
1916
				#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
1917
				#$conf["forceNewCookie"]="";
1918
				$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
1919
				unset($conf["catchWebContent::curlCmd"]);
1920
 
1921
				#如果抓取資料失敗
1922
				if($curlCmd["status"]==="false"){
1923
 
1924
					#設置錯誤識別
1925
					$result["status"]="false";
1926
 
1927
					#設置錯誤訊息
1928
					$result["error"]=$curlCmd;
1929
 
1930
					#回傳結果
1931
					return $result;
1932
 
1933
					}#if end
1934
 
1935
				#反之檔案存在網路上
1936
				else{
1937
 
1938
					#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1939
					$result["varName"][$i]=$getInternetAddress["content"];
1940
 
1941
					#如果存在檔案路徑的絕對位置
1942
					if(isset($getInternetAddress["fileSystemAbsoulutePosition"])){
1943
 
1944
						#設置該檔案的絕對路徑位置						
1945
						$result["varNameFullPath"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];
1946
 
1947
						}#if end
1948
 
1949
					#反之代表輸入參數是網址	
1950
					else{
1951
 
1952
						#設置該檔案的網址
1953
						$result["varNameWebPath"][$i]=$getInternetAddress["content"];
1954
 
1955
						}#else end
1956
 
1957
					#設置有無找到的識別
1958
					$result["varExist"][$i]=$curlCmd["founded"];
1959
 
1960
					}#else end
1961
 
1962
				}#if end
1963
 
1964
			#反之檔案不存在,且停用網路搜尋.
1965
			else if($exist===FALSE){
1966
 
1967
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1968
				$result["varName"][$i]=$conf["fileArray"][$i];
1969
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
1970
				$result["varExist"][$i]="false";
1971
 
1972
				#設置全部檔案都存在的識別變數為 "false"
1973
				$result["allExist"]="false";
1974
 
1975
				}#if end
1976
 
1977
			#反之代表檔案存在
1978
			else{
891 liveuser 1979
 
827 liveuser 1980
				#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面
1981
				$result["varNameFullPath"][$i]=$conf["fileArray"][$i];
1982
 
1983
				#如果 web 參數為 "true"
1984
				if($conf["web"]==="true"){
1985
 
1986
					#設置網路上的位置
1987
					$result["varNameWebPath"][$i]=$getInternetAddress["content"];
1988
 
1989
					}#if end
1990
 
1991
				$result["varExist"][$i]="true";
1992
 
1993
				}#else end
1994
 
1995
			}#foreach end
891 liveuser 1996
 
1 liveuser 1997
		#如果所有檔案與資料夾都找到的識別變數不存在
1998
		if(!isset($result["allExist"])){
1999
 
2000
			#設置全部檔案與資料夾都有找到
2001
			$result["allExist"]="true";
2002
 
2003
			}#if end
2004
 
2005
		#執行到這邊代表執行正常
2006
		$result["status"]="true";
2007
 
2008
		#回傳結果
2009
		return $result;
2010
 
2011
		}#function checkMutiFileExist
2012
 
2013
	/*
2014
	#函式說明:
2015
	#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
43 liveuser 2016
	#回傳結果:
1 liveuser 2017
	#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
2018
	#$result["error"],錯誤訊息陣列.
2019
	#$result["function"],當前執行的函數名稱.
2020
	#$result["argu"],使用的參數.
2021
	#$result["createdFileName"],建立好的檔案名稱.
2022
	#$result["createdFilePath"],檔案建立的路徑.
2023
	#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
43 liveuser 2024
	#必填參數:
1 liveuser 2025
	#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
2026
	$conf["checkedFileAndPath"]="";
2027
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2028
	$conf["fileArgu"]=__FILE__;
2029
	#可省略參數:
2030
	#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.
2031
	#$conf["filenameExtensionStartPoint"]="";
2032
	#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".
2033
	#$conf["repeatNameRule"]="";
2034
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2035
	#$conf["web"]="false";
187 liveuser 2036
	#參考資料:
2037
	#無.
1 liveuser 2038
	#備註:
2039
	#如果要在/tmp底下建立檔案,若在apache環境下則會被作業系統特殊處理,即不等於實際上的路徑.
2040
	*/
2041
	public static function createFileAfterCheck(&$conf){
2042
 
2043
		#初始化要回傳的結果
2044
		$result=array();
2045
 
2046
		#設置當前執行的涵式
2047
		$result["function"]=__FUNCTION__;
2048
 
2049
		#如果 $conf 不為陣列
2050
		if(gettype($conf)!="array"){
2051
 
2052
			#設置執行失敗
2053
			$result["status"]="false";
2054
 
2055
			#設置執行錯誤訊息
2056
			$result["error"][]="\$conf變數須為陣列形態";
2057
 
2058
			#如果傳入的參數為 null
2059
			if($conf==null){
2060
 
2061
				#設置執行錯誤訊息
2062
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2063
 
2064
				}#if end
2065
 
2066
			#回傳結果
2067
			return $result;
2068
 
2069
			}#if end
2070
 
2071
		#取得參數
2072
		$result["argu"]=$conf;
2073
 
2074
		#檢查參數
43 liveuser 2075
		#函式說明:
1 liveuser 2076
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2077
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2078
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2079
		#$result["function"],當前執行的函式名稱.
2080
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2081
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2082
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2083
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2084
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2085
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2086
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2087
		#必填寫的參數:
2088
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2089
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2090
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2091
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","checkedFileAndPath");
2092
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2093
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2094
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2095
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2096
		#可以省略的參數:
2097
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2098
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2099
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2100
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("filenameExtensionStartPoint","repeatNameRule","web");
2101
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2102
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
2103
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2104
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1","(\$i)","false");
2105
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2106
		#$conf["arrayCountEqualCheck"][]=array();
2107
		#參考資料來源:
2108
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2109
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2110
		unset($conf["variableCheck::checkArguments"]);
2111
 
2112
		#如果 $checkArguments["status"] 等於 "false"
2113
		if($checkArguments["status"]=="false"){
2114
 
2115
			#設置錯誤識別
2116
			$result["status"]="false";
2117
 
2118
			#設置錯誤訊息
2119
			$result["error"]=$checkArguments;
2120
 
2121
			#回傳結果
2122
			return $result;				
2123
 
2124
			}#if end
2125
 
2126
		#如果 $checkArguments["passed"] 等於 "false"
2127
		if($checkArguments["passed"]=="false"){
2128
 
2129
			#設置錯誤識別
2130
			$result["status"]="false";
2131
 
2132
			#設置錯誤訊息
2133
			$result["error"]=$checkArguments;
2134
 
2135
			#回傳結果
2136
			return $result;				
2137
 
2138
			}#if end	
2139
 
2140
		#確保要建立檔案的路徑
43 liveuser 2141
		#函式說明:
1 liveuser 2142
		#確保路徑存在.
43 liveuser 2143
		#回傳結果:
1 liveuser 2144
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2145
		#$result["error"],錯誤訊息陣列.
2146
		#$resutl["function"],當前執行的涵式名稱.
2147
		#$result["path"],建立好的路徑字串.
2148
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
43 liveuser 2149
		#必填參數:
1 liveuser 2150
		#$conf["path"],要檢查的路徑
2151
		$conf["fileAccess::validatePath"]["path"]=$conf["checkedFileAndPath"];		
2152
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2153
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2154
		#可省略參數:
2155
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2156
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2157
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2158
		#$conf["dirPermission"]="";
2159
		$conf["fileAccess::validatePath"]["web"]=$conf["web"];
2160
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2161
		unset($conf["fileAccess::validatePath"]);	
2162
 
2163
		#debug
2164
		#var_dump($validatePath);
2165
		#exit;	
2166
 
2167
		#如果確保路徑失敗
2168
		if($validatePath["status"]==="false"){
2169
 
2170
			#設置錯誤識別
2171
			$result["status"]="false";
2172
 
2173
			#設置錯誤訊息
2174
			$result["error"]=$validatePath;
2175
 
2176
			#回傳結果
2177
			return $result;
2178
 
2179
			}#if end
2180
 
2181
		#取得要建立的檔案名稱
2182
		$createdFileName=$validatePath["fileName"];
2183
 
2184
		#取得要建立的路徑			
2185
		$createdFilePath=$validatePath["path"];
2186
 
2187
		#透過無窮迴圈嘗試建立不同編號的檔案
2188
		for($i=0;$i>-1;$i++){
2189
 
2190
			#如果 $i 為 0
2191
			if($i==0){
2192
 
2193
				#檢查該檔案是否存在
43 liveuser 2194
				#函式說明:
1 liveuser 2195
				#檢查多個檔案與資料夾是否存在.
2196
				#回傳的結果:
2197
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2198
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
43 liveuser 2199
				#必填參數:
1 liveuser 2200
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2201
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2202
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2203
				#參考資料來源:
2204
				#http://php.net/manual/en/function.file-exists.php
2205
				#http://php.net/manual/en/control-structures.foreach.php
2206
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2207
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2208
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2209
 
2210
				#debug
2211
				#var_dump($checkResult);
2212
				#exit;
2213
 
2214
				#如果檢查檔案是否存在失敗
2215
				if($checkResult["status"]=="false"){
2216
 
2217
					#設置執行失敗
2218
					$result["status"]="false";
2219
 
2220
					#設置錯誤訊息
2221
					$result["error"]=$checkResult;
2222
 
2223
					#回傳結果
2224
					return $result;
2225
 
2226
					}#if end
2227
 
2228
				#如果 $createFilePath.$createdFileName 檔案存在
2229
				if($checkResult["varExist"][0]=="true"){
2230
 
2231
					#跳過這次迴圈
2232
					continue;
2233
 
2234
					}#if end
2235
 
2236
				#反之代表 $createFilePath.$createdFileName 檔案不存在
2237
				else{
2238
 
2239
					#嘗試建立該檔案
43 liveuser 2240
					#函式說明:
1 liveuser 2241
					#將字串寫入到檔案
43 liveuser 2242
					#回傳結果:
1 liveuser 2243
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2244
					#$result["error"],錯誤訊息陣列.
43 liveuser 2245
					#必填參數:
1 liveuser 2246
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2247
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2248
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 2249
					#可省略參數:
1 liveuser 2250
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2251
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2252
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2253
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2254
 
2255
					#如果 $fileCreateResult["status"] 等於 "true"
2256
					if($fileCreateResult["status"]=="true"){
2257
 
2258
						#代表檔案建立成功
2259
 
2260
						#更新建立的檔案名稱
2261
						$result["createdFileName"]=$createdFileName;
2262
 
2263
						#設置新建立的檔案名稱與路徑
2264
						$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2265
 
2266
						#設置新建立的檔與路徑
2267
						$result["createdFilePath"]=$createdFilePath;
2268
 
2269
						#跳出迴圈
2270
						break;
2271
 
2272
						}#if end
2273
 
2274
					#反之代表檔案建立失敗
2275
					else{
2276
 
2277
						#設置錯誤識別
2278
						$result["status"]="false";
2279
 
2280
						#設置錯誤訊息
2281
						$result["error"]=$fileCreateResult;
2282
 
2283
						#回傳結果
2284
						return $result;
2285
 
2286
						}#else end
2287
 
2288
					}#else end	
2289
 
2290
				}#if end
2291
 
2292
			#反之代表有相同檔名存在
2293
			else{					
2294
 
2295
				#用「.」分割檔案名稱
43 liveuser 2296
				#函式說明:
1 liveuser 2297
				#將固定格式的字串分開,並回傳分開的結果。
2298
				#回傳結果:
2299
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2300
				#$result["error"],錯誤訊息陣列
2301
				#$result["function"],當前執行的函數名稱.
2302
				#$result["oriStr"],要分割的原始字串內容
2303
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2304
				#$result["dataCounts"],爲總共分成幾段
2305
				#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 2306
				#必填參數:
1 liveuser 2307
				$conf["stringProcess::spiltString"]["stringIn"]=$createdFileName;#要處理的字串。
2308
				$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
2309
				#可省略參數:
2310
				#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2311
				$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2312
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2313
				unset($conf["stringProcess::spiltString"]);					
2314
 
2315
				#如果分割檔案名稱失敗
2316
				if($spiltString["status"]=="false"){
2317
 
2318
					#設置執行失敗
2319
					$result["status"]="false";
2320
 
2321
					#設置錯誤訊息
2322
					$result["error"]=$spiltString;
2323
 
2324
					#回傳結果
2325
					return $result;
2326
 
2327
					}#if end
2328
 
2329
				#初始化儲存建立的檔案名稱
2330
				$createdFileName="";
2331
 
2332
				#初始化儲存編號的變數
2333
				$no="";
2334
 
2335
				#如果沒有dot存在
2336
				if($spiltString["found"]=="false"){
2337
 
2338
					#解析 $conf["repeatNameRule"],用 \$i 分割.
43 liveuser 2339
					#函式說明:
1 liveuser 2340
					#將固定格式的字串分開,並回傳分開的結果。
2341
					#回傳結果:
2342
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2343
					#$result["error"],錯誤訊息陣列
2344
					#$result["function"],當前執行的函數名稱.
2345
					#$result["oriStr"],要分割的原始字串內容
2346
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2347
					#$result["dataCounts"],爲總共分成幾段
43 liveuser 2348
					#必填參數:
1 liveuser 2349
					$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2350
					$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2351
					#可省略參數:
2352
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2353
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2354
					$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2355
					unset($conf["stringProcess::spiltString"]);					
2356
 
2357
					#如果分割檔案名稱失敗
2358
					if($noString["status"]=="false"){
2359
 
2360
						#設置執行失敗
2361
						$result["status"]="false";
2362
 
2363
						#設置錯誤訊息
2364
						$result["error"]=$noString;
2365
 
2366
						#回傳結果
2367
						return $result;
2368
 
2369
						}#if end
2370
 
2371
					#如果 編號規則字串 分割出來的段數為2
2372
					if($noString["dataCounts"]==2){
2373
 
2374
						#組合編號
2375
						$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2376
 
2377
						}#if end
2378
 
2379
					#反之 號規則字串 分割出來的段數為1
2380
					else if($noString["dataCounts"]==1){
2381
 
2382
						#判斷 "\$i" 在開頭或結尾
43 liveuser 2383
						#函式說明:
1 liveuser 2384
						#取得關鍵字在字串的哪個位置
2385
						#回傳結果:
2386
						#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2387
						#$result["error"],錯誤訊息陣列.
2388
						#$result["function"],當前執行的函數名稱.
2389
						#$result["argu"],傳入的參數.
2390
						#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2391
						#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2392
						#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2393
						#必填參數:
2394
						#$conf["inputStr"],字串,被搜尋的字串.
2395
						$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2396
						#$conf["keyWord"],字串,關鍵字.
2397
						$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2398
						#參考資料:
2399
						#http://php.net/manual/en/function.strpos.php
2400
						$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2401
						unset($conf["search::findKeyWordPosition"]);
2402
 
2403
						#如果取得關鍵字位置失敗
2404
						if($findKeyWordPosition["status"]=="false"){
2405
 
2406
							#設置執行失敗
2407
							$result["status"]="false";
2408
 
2409
							#設置錯誤訊息
2410
							$result["error"]=$findKeyWordPosition;
2411
 
2412
							#回傳結果
2413
							return $result;
2414
 
2415
							}#if end
2416
 
2417
						#如果關鍵字在開頭
2418
						if($findKeyWordPosition["head"]=="true"){
2419
 
2420
							#組合編號
2421
							$no=$i.$noString["dataArray"][0];
2422
 
2423
							}#if end
2424
 
2425
						#反之如果關鍵字在結尾
2426
						else if($findKeyWordPosition["tail"]=="true"){
2427
 
2428
							#組合編號
2429
							$no=$noString["dataArray"][0].$i;
2430
 
2431
							}#if end
2432
 
2433
						#其他情況
2434
						else{
2435
 
2436
							#設置執行失敗
2437
							$result["status"]="false";
2438
 
2439
							#設置錯誤訊息
2440
							$result["error"]=$findKeyWordPosition;
2441
 
2442
							#設置額外的錯誤訊息
2443
							$result["error"][]="非預期的結果";
2444
 
2445
							#回傳結果
2446
							return $result;
2447
 
2448
							}#else end
2449
 
2450
						}#if end
2451
 
2452
					#反之 編號規則字串 分割出來的段數為0
2453
					else if($noString["dataCounts"]==0){
2454
 
2455
						#組合編號
2456
						$no=$j;
2457
 
2458
						}#if end
2459
 
2460
					#其他結果
2461
					else{
2462
 
2463
						#設置執行失敗
2464
						$result["status"]="false";
2465
 
2466
						#設置錯誤訊息
2467
						$result["error"]=$noString;
2468
 
2469
						#設置額外的錯誤訊息
2470
						$result["error"][]="非預期的結果";
2471
 
2472
						#回傳結果
2473
						return $result;
2474
 
2475
						}#else end	
2476
 
2477
					#串接編號到檔案名稱上
2478
					$createdFileName=$validatePath["fileName"].$no;
2479
 
2480
					}#if end
2481
 
2482
				#反之有dot存在	
2483
				else{
2484
 
2485
					#依據 $spiltString["dataCounts"] 值來組裝新的檔案名稱
2486
					for($j=0;$j<$spiltString["dataCounts"];$j++){
2487
 
2488
						#如果是副檔名的前一段內容
2489
						if(($conf["filenameExtensionStartPoint"]+1)==($spiltString["dataCounts"]-$j)){
2490
 
2491
							#解析 $conf["repeatNameRule"],用 \$i 分割.
43 liveuser 2492
							#函式說明:
1 liveuser 2493
							#將固定格式的字串分開,並回傳分開的結果。
2494
							#回傳結果:
2495
							#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2496
							#$result["error"],錯誤訊息陣列
2497
							#$result["function"],當前執行的函數名稱.
2498
							#$result["oriStr"],要分割的原始字串內容
2499
							#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
2500
							#$result["dataCounts"],爲總共分成幾段
43 liveuser 2501
							#必填參數:
1 liveuser 2502
							$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。
2503
							$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割
2504
							#可省略參數:
2505
							#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
2506
							$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
2507
							$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
2508
							unset($conf["stringProcess::spiltString"]);					
2509
 
2510
							#如果分割檔案名稱失敗
2511
							if($noString["status"]=="false"){
2512
 
2513
								#設置執行失敗
2514
								$result["status"]="false";
2515
 
2516
								#設置錯誤訊息
2517
								$result["error"]=$noString;
2518
 
2519
								#回傳結果
2520
								return $result;
2521
 
2522
								}#if end
2523
 
2524
							#如果 編號規則字串 分割出來的段數為2
2525
							if($noString["dataCounts"]==2){
2526
 
2527
								#組合編號
2528
								$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];
2529
 
2530
								}#if end
2531
 
2532
							#反之 號規則字串 分割出來的段數為1
2533
							else if($noString["dataCounts"]==1){
2534
 
2535
								#判斷 "\$i" 在開頭或結尾
43 liveuser 2536
								#函式說明:
1 liveuser 2537
								#取得關鍵字在字串的哪個位置
2538
								#回傳結果:
2539
								#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
2540
								#$result["error"],錯誤訊息陣列.
2541
								#$result["function"],當前執行的函數名稱.
2542
								#$result["argu"],傳入的參數.
2543
								#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
2544
								#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
2545
								#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
2546
								#必填參數:
2547
								#$conf["inputStr"],字串,被搜尋的字串.
2548
								$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];
2549
								#$conf["keyWord"],字串,關鍵字.
2550
								$conf["search::findKeyWordPosition"]["keyWord"]="\$i";
2551
								#參考資料:
2552
								#http://php.net/manual/en/function.strpos.php
2553
								$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
2554
								unset($conf["search::findKeyWordPosition"]);
2555
 
2556
								#如果取得關鍵字位置失敗
2557
								if($findKeyWordPosition["status"]=="false"){
2558
 
2559
									#設置執行失敗
2560
									$result["status"]="false";
2561
 
2562
									#設置錯誤訊息
2563
									$result["error"]=$findKeyWordPosition;
2564
 
2565
									#回傳結果
2566
									return $result;
2567
 
2568
									}#if end
2569
 
2570
								#如果關鍵字在開頭
2571
								if($findKeyWordPosition["head"]=="true"){
2572
 
2573
									#組合編號
2574
									$no=$i.$noString["dataArray"][0];
2575
 
2576
									}#if end
2577
 
2578
								#反之如果關鍵字在結尾
2579
								else if($findKeyWordPosition["tail"]=="true"){
2580
 
2581
									#組合編號
2582
									$no=$noString["dataArray"][0].$i;
2583
 
2584
									}#if end
2585
 
2586
								#其他情況
2587
								else{
2588
 
2589
									#設置執行失敗
2590
									$result["status"]="false";
2591
 
2592
									#設置錯誤訊息
2593
									$result["error"]=$findKeyWordPosition;
2594
 
2595
									#設置額外的錯誤訊息
2596
									$result["error"][]="非預期的結果";
2597
 
2598
									#回傳結果
2599
									return $result;
2600
 
2601
									}#else end
2602
 
2603
								}#if end
2604
 
2605
							#反之 編號規則字串 分割出來的段數為0
2606
							else if($noString["dataCounts"]==0){
2607
 
2608
								#組合編號
2609
								$no=$j;
2610
 
2611
								}#if end
2612
 
2613
							#其他結果
2614
							else{
2615
 
2616
								#設置執行失敗
2617
								$result["status"]="false";
2618
 
2619
								#設置錯誤訊息
2620
								$result["error"]=$noString;
2621
 
2622
								#設置額外的錯誤訊息
2623
								$result["error"][]="非預期的結果";
2624
 
2625
								#回傳結果
2626
								return $result;
2627
 
2628
								}#else end	
2629
 
2630
							#串接編號到檔案名稱上
2631
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].$no;
2632
 
2633
							#如果不是最後一段
2634
							if($j!=$spiltString["dataCounts"]-1){
2635
 
2636
								#串接並加上 dot
2637
								$createdFileName=$createdFileName.".";
2638
 
2639
								}#if end
2640
 
2641
							}#if end
2642
 
2643
						#反之如果不是最後一段
2644
						else if($j!=$spiltString["dataCounts"]-1){
2645
 
2646
							#串接並加上 dot
2647
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j].".";
2648
 
2649
							}#if end
2650
 
2651
						#反之是最後一段	
2652
						else{
2653
 
2654
							#串接並加上 dot
2655
							$createdFileName=$createdFileName.$spiltString["dataArray"][$j];
2656
 
2657
							}#else end
2658
 
2659
						}#for end
2660
 
2661
					}#else end
2662
 
2663
				#檢查加上編號的檔案是否存在
43 liveuser 2664
				#函式說明:
1 liveuser 2665
				#檢查多個檔案與資料夾是否存在.
2666
				#回傳的結果:
2667
				#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
2668
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
43 liveuser 2669
				#必填參數:
1 liveuser 2670
				$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
2671
				$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];
2672
				#參考資料來源:
2673
				#http://php.net/manual/en/function.file-exists.php
2674
				#http://php.net/manual/en/control-structures.foreach.php
2675
				$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];
2676
				$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);
2677
				unset($conf["fileAccess"]["checkMutiFileExist"]);
2678
 
2679
				#如果檢查檔案是否存在失敗
2680
				if($checkResult["status"]=="false"){
2681
 
2682
					#設置執行失敗
2683
					$result["status"]="false";
2684
 
2685
					#設置錯誤訊息
2686
					$result["error"]=$checkResult;
2687
 
2688
					#回傳結果
2689
					return $result;
2690
 
2691
					}#if end						
2692
 
2693
				#如果 $checkResult["varExist"][0] 等於 "true"
2694
				if($checkResult["varExist"][0]=="true"){						
2695
 
2696
					#取得要建立的檔案名稱
2697
					$createdFileName=$validatePath["fileName"];
2698
 
2699
					#跳到下個迴圈
2700
					continue;
2701
 
2702
					}#if end
2703
 
2704
				#反之代表 $createFilePath.$createdFileName."(".$i.")" 檔檔案不存在
2705
				else{
2706
 
2707
					#嘗試建立該檔案
43 liveuser 2708
					#函式說明:
1 liveuser 2709
					#將字串寫入到檔案
43 liveuser 2710
					#回傳結果:
1 liveuser 2711
					#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
2712
					#$result["error"],錯誤訊息陣列.
43 liveuser 2713
					#必填參數:
1 liveuser 2714
					$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱
2715
					$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
2716
					$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 2717
					#可省略參數:
1 liveuser 2718
					$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
2719
					$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];
2720
					$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
2721
					unset($conf["fileAccess"]["writeTextIntoFile"]);
2722
 
2723
					#如果 $fileCreateResult["status"] 等於 "true"
2724
					if($fileCreateResult["status"]=="true"){
2725
 
2726
						#代表檔案建立成功
2727
 
2728
						#更新建立的檔案名稱
2729
						$result["createdFileName"]=$createdFileName;
2730
 
2731
						#跳出迴圈
2732
						break;
2733
 
2734
						}#if end
2735
 
2736
					#反之代表檔案建立失敗
2737
					else{
2738
 
2739
						#設置錯誤識別
2740
						$result["status"]="false";
2741
 
2742
						#設置錯誤訊息
2743
						$result["error"]=$fileCreateResult;
2744
 
2745
						#回傳結果
2746
						return $result;
2747
 
2748
						}#else end
2749
 
2750
					}#else end
2751
 
2752
				}#else end
2753
 
2754
			}#for end
2755
 
2756
		#如果不存在建立的檔案名稱
2757
		if(!isset($result["createdFileName"])){
2758
 
2759
			#設置錯誤識別
2760
			$result["status"]="false";
2761
 
2762
			#設置錯誤訊息
2763
			$result["error"][]="建立的檔案名稱不存在";
2764
 
2765
			#回傳結果
2766
			return $result;
2767
 
2768
			}#if end	
2769
 
2770
		#執行到這邊代表執行成功
2771
		$result["status"]="true";
2772
 
2773
		#設置新建立的檔案名稱與路徑
2774
		$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];
2775
 
2776
		#設置新建立的檔與路徑
2777
		$result["createdFilePath"]=$createdFilePath;
2778
 
2779
		#回傳結果
2780
		return $result;
2781
 
2782
		}#fucntion createFileAfterCheck end
2783
 
2784
	/*
2785
	#函式說明:
2786
	#將檔案內容清空
2787
	#回傳結果:
2788
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2789
	#$result["error"],錯誤訊息陣列
2790
	#必填參數:
2791
	#$conf["fileAddr"],字串,要清空的檔案位置與名稱.
2792
	$conf["fileAddr"]="";
2793
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2794
	$conf["fileArgu"]=__FILE__;
2795
	#可省略參數:
2796
	#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".
2797
	#$conf["web"]="false";
187 liveuser 2798
	#參考資料:
2799
	#無.
43 liveuser 2800
	#備註:
2801
	#無.
1 liveuser 2802
	*/
2803
	public static function emptyFile(&$conf){
2804
 
2805
		#初始化要回傳的結果
2806
		$result=array();
2807
 
2808
		#設置當前執行的涵式
2809
		$result["function"]=__FUNCTION__;
2810
 
2811
		#如果 $conf 不為陣列
2812
		if(gettype($conf)!="array"){
2813
 
2814
			#設置執行失敗
2815
			$result["status"]="false";
2816
 
2817
			#設置執行錯誤訊息
2818
			$result["error"][]="\$conf變數須為陣列形態";
2819
 
2820
			#如果傳入的參數為 null
2821
			if($conf==null){
2822
 
2823
				#設置執行錯誤訊息
2824
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2825
 
2826
				}#if end
2827
 
2828
			#回傳結果
2829
			return $result;
2830
 
2831
			}#if end
2832
 
2833
		#取得參數
2834
		$result["argu"]=$conf;
2835
 
2836
		#檢查參數
43 liveuser 2837
		#函式說明:
1 liveuser 2838
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2839
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2840
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2841
		#$result["function"],當前執行的函式名稱.
2842
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2843
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2844
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2845
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2846
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2847
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2848
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2849
		#必填寫的參數:
2850
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2851
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2852
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2853
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddr");
2854
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
2855
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
2856
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2857
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2858
		#可以省略的參數:
2859
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2860
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2861
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2862
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
2863
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
2864
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
2865
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2866
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
2867
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2868
		#$conf["arrayCountEqualCheck"][]=array();
2869
		#參考資料來源:
2870
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2871
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2872
		unset($conf["variableCheck::checkArguments"]);
2873
 
2874
		#如果 $checkArguments["status"] 等於 "false"
2875
		if($checkArguments["status"]=="false"){
2876
 
2877
			#設置錯誤識別
2878
			$result["status"]="false";
2879
 
2880
			#設置錯誤訊息
2881
			$result["error"]=$checkArguments;
2882
 
2883
			#回傳結果
2884
			return $result;				
2885
 
2886
			}#if end
2887
 
2888
		#如果 $checkArguments["passed"] 等於 "false"
2889
		if($checkArguments["passed"]=="false"){
2890
 
2891
			#設置錯誤識別
2892
			$result["status"]="false";
2893
 
2894
			#設置錯誤訊息
2895
			$result["error"]=$checkArguments;
2896
 
2897
			#回傳結果
2898
			return $result;				
2899
 
2900
			}#if end	
2901
 
43 liveuser 2902
		#函式說明:
1 liveuser 2903
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
2904
		#回傳結果:
2905
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
2906
		#$result["error"],錯誤訊息陣列.
2907
		#$result["function"],函數名稱. 
2908
		#$result["argu"],使用的參數.
2909
		#$result["content"],網址,若是在命令列執行,則為"null".
2910
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
2911
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
2912
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
2913
		#必填參數:
2914
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
2915
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["fileAddr"];
2916
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
2917
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
2918
		#可省略參數:
2919
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2920
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
2921
		#備註:
2922
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
2923
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
2924
		unset($conf["fileAccess::getInternetAddressV2"]);
2925
 
2926
		#如果確保路徑失敗
2927
		if($getInternetAddressV2["status"]==="false"){
2928
 
2929
			#設置錯誤識別
2930
			$result["status"]="false";
2931
 
2932
			#設置錯誤訊息
2933
			$result["error"]=$getInternetAddressV2;
2934
 
2935
			#回傳結果
2936
			return $result;
2937
 
2938
			}#if end
2939
 
2940
		#更新檔案路徑
2941
		$conf["fileAddr"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
2942
 
2943
		#確保要建立檔案的路徑
43 liveuser 2944
		#函式說明:
1 liveuser 2945
		#確保路徑存在.
43 liveuser 2946
		#回傳結果:
1 liveuser 2947
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
2948
		#$result["error"],錯誤訊息陣列.
2949
		#$resutl["function"],當前執行的涵式名稱.
2950
		#$result["path"],建立好的路徑字串.
2951
		#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
43 liveuser 2952
		#必填參數:
1 liveuser 2953
		#$conf["path"],要檢查的路徑
2954
		$conf["fileAccess::validatePath"]["path"]=$conf["fileAddr"];		
2955
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2956
		$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];
2957
		#可省略參數:
2958
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
2959
		$conf["fileAccess::validatePath"]["haveFileName"]="true";
2960
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
2961
		#$conf["dirPermission"]="";
2962
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
2963
		$conf["fileAccess::validatePath"]["web"]="false";
2964
		$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);
2965
		unset($conf["fileAccess::validatePath"]);	
2966
 
2967
		#如果確保路徑失敗
2968
		if($validatePath["status"]==="false"){
2969
 
2970
			#設置錯誤識別
2971
			$result["status"]="false";
2972
 
2973
			#設置錯誤訊息
2974
			$result["error"]=$validatePath;
2975
 
2976
			#回傳結果
2977
			return $result;
2978
 
2979
			}#if end
2980
 
2981
		#清空檔案
43 liveuser 2982
		#函式說明:
1 liveuser 2983
		#將字串寫入到檔案
43 liveuser 2984
		#回傳結果:
1 liveuser 2985
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
2986
		#$result["error"],錯誤訊息陣列.
2987
		#$result["function"],當前執行的函數名稱.
2988
		#$result["fileInfo"],實際上寫入的檔案資訊陣列.
2989
		#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
2990
		#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
2991
		#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
2992
		#$result["argu"],使用的參數.
43 liveuser 2993
		#必填參數:
1 liveuser 2994
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2995
		$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 2996
		#可省略參數:
1 liveuser 2997
		#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
2998
		#$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];
27 liveuser 2999
		$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];;
1 liveuser 3000
		#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
3001
		#$conf["inputString"]="";
3002
		#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
3003
		#$conf["writeMethod"]="a";
3004
		#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
3005
		#$conf["checkRepeat"]="";
3006
		#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
3007
		#$conf["filenameExtensionStartPoint"]="";
3008
		#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
3009
		#$conf["repeatNameRule"]="";
3010
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3011
		$conf["fileAccess::writeTextIntoFile"]["web"]="false";
3012
		$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
3013
		unset($conf["fileAccess::writeTextIntoFile"]);
3014
 
3015
		#如果確保路徑失敗
3016
		if($writeTextIntoFile["status"]==="false"){
3017
 
3018
			#設置錯誤識別
3019
			$result["status"]="false";
3020
 
3021
			#設置錯誤訊息
3022
			$result["error"]=$writeTextIntoFile;
3023
 
3024
			#回傳結果
3025
			return $result;
3026
 
3027
			}#if end
3028
 
3029
		#設置執行正常
3030
		$result["status"]="true";
3031
 
3032
		#儲存建立的結果
3033
		$result["content"]=$writeTextIntoFile;
3034
 
3035
		#回傳結果
3036
		return $result;
3037
 
3038
		}#function emptyFile end
3039
 
3040
	/*
43 liveuser 3041
	#函式說明:
1 liveuser 3042
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
43 liveuser 3043
	#回傳結果:
1 liveuser 3044
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3045
	#$result["error"],錯誤訊息陣列
3046
	#$result["warning"],警告訊息陣列
43 liveuser 3047
	#必填參數:
1 liveuser 3048
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3049
	$conf["dirPositionAndName"]="";
3050
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3051
	$conf["fileArgu"]=__FILE__;
3052
	#可省略參數:
3053
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3054
	#$conf["dirPermission"]="";
3055
	#參考資料:
3056
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3057
	#chmod=>http://php.net/manual/en/function.chmod.php
187 liveuser 3058
	#參考資料:
3059
	#無.
1 liveuser 3060
	#備註:
3061
	#同 function createFolderAfterCheck.
3062
	*/
3063
	public static function createNewFolder(&$conf){
3064
 
3065
		/*
3066
		#函式說明:
3067
		#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.
3068
		#回傳的結果:
3069
		#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.
3070
		#$result["error"],錯誤訊息陣列.
3071
		#$result["function"],當前執行的函數名稱.
3072
		#$result["createdFileName"],建立好的檔案名稱.
3073
		#$result["createdFilePath"],檔案建立的路徑.
3074
		#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.
43 liveuser 3075
		#必填參數:
1 liveuser 3076
		#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑
3077
		$conf["checkedFileAndPath"]="";
3078
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3079
		$conf["fileArgu"]=__FILE__;
3080
		*/
3081
		return fileAccess::createFolderAfterCheck($conf);
3082
		unset($conf);
3083
 
3084
		}#function createNewFolder end
3085
 
3086
	/*
43 liveuser 3087
	#函式說明:
1 liveuser 3088
	#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
43 liveuser 3089
	#回傳結果:
1 liveuser 3090
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3091
	#$result["error"],錯誤訊息陣列
3092
	#$result["warning"],警告訊息陣列
3093
	#$result["argu"],使用的參數.
3094
	#$result["content"],建立的目錄路徑.
43 liveuser 3095
	#必填參數:
1 liveuser 3096
	#$conf["dirPositionAndName"]="";#新建的位置與名稱
3097
	$conf["dirPositionAndName"]="";
3098
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3099
	$conf["fileArgu"]=__FILE__;
3100
	#可省略參數:
3101
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
3102
	#$conf["dirPermission"]="";
3103
	#$conf["web"],"false"代表在檔案系統環境,"true"代表在網頁稀系統環境.
3104
	#$conf["web"]="false";
3105
	#參考資料:
3106
	#mkdir=>http://php.net/manual/en/function.mkdir.php
3107
	#chmod=>http://php.net/manual/en/function.chmod.php
43 liveuser 3108
	#備註:
3109
	#無.
1 liveuser 3110
	*/
3111
	public static function createFolderAfterCheck(&$conf){
3112
 
3113
		#初始化要回傳的結果
3114
		$result=array();
3115
 
3116
		#初始化警告訊息陣列
3117
		$result["warning"]=array();
3118
 
3119
		#記錄當前執行的函數名稱
3120
		$result["function"]=__FUNCTION__;
3121
 
3122
		#如果 $conf 不為陣列
3123
		if(gettype($conf)!="array"){
3124
 
3125
			#設置執行失敗
3126
			$result["status"]="false";
3127
 
3128
			#設置執行錯誤訊息
3129
			$result["error"][]="\$conf變數須為陣列形態";
3130
 
3131
			#如果傳入的參數為 null
3132
			if($conf==null){
3133
 
3134
				#設置執行錯誤訊息
3135
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3136
 
3137
				}#if end
3138
 
3139
			#回傳結果
3140
			return $result;
3141
 
3142
			}#if end
3143
 
3144
		#取得參數
3145
		$result["argu"]=$conf;
3146
 
3147
		#檢查參數
43 liveuser 3148
		#函式說明:
1 liveuser 3149
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3150
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3151
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3152
		#$result["function"],當前執行的函式名稱.
3153
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3154
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3155
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3156
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3157
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3158
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3159
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3160
		#必填寫的參數:
3161
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3162
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3163
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3164
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dirPositionAndName");
3165
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3166
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3167
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3168
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3169
		#可以省略的參數:
3170
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3171
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3172
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3173
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dirPermission","web");
3174
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3175
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
3176
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3177
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("0770","false");
3178
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3179
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
3180
		#參考資料來源:
3181
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3182
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3183
		unset($conf["variableCheck::checkArguments"]);
3184
 
3185
		#如果 $checkArguments["status"] 等於 "false"
3186
		if($checkArguments["status"]==="false"){
3187
 
3188
			#設置 $result["status"] 為 "false"
3189
			$result["status"]="false";
3190
 
3191
			#設置 $result["error"]
3192
			$result["error"]=$checkArguments;
3193
 
3194
			#回傳結果
3195
			return $result;
3196
 
3197
			}#if end
3198
 
3199
		#如果 $checkArguments["passed"] 等於 "false"
3200
		if($checkArguments["passed"]==="false"){
3201
 
3202
			#設置 $result["status"] 為 "false"
3203
			$result["status"]="false";
3204
 
3205
			#設置 $result["error"]
3206
			$result["error"]=$checkArguments;
3207
 
3208
			#回傳結果
3209
			return $result;
3210
 
3211
			}#if end			
3212
 
43 liveuser 3213
		#函式說明:
1 liveuser 3214
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
3215
		#回傳結果:
3216
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
3217
		#$result["error"],錯誤訊息陣列.
3218
		#$result["function"],函數名稱. 
3219
		#$result["argu"],使用的參數.
3220
		#$result["content"],網址,若是在命令列執行,則為"null".
3221
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
3222
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
3223
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
3224
		#必填參數:
3225
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
3226
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["dirPositionAndName"];
3227
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3228
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
3229
		#可省略參數:
3230
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
3231
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
3232
		#備註:
3233
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
3234
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
3235
		unset($conf["fileAccess::getInternetAddressV2"]);
3236
 
3237
		#如果 $getInternetAddressV2["status"] 等於 "false"
3238
		if($getInternetAddressV2["status"]==="false"){
3239
 
3240
			#設置 $result["status"] 為 "false"
3241
			$result["status"]="false";
3242
 
3243
			#設置 $result["error"]
3244
			$result["error"]=$getInternetAddressV2;
3245
 
3246
			#回傳結果
3247
			return $result;
3248
 
3249
			}#if end
3250
 
3251
		#取得絕對位置
3252
		$conf["dirPositionAndName"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
3253
 
3254
		#用「/」分割要建立的路徑
43 liveuser 3255
		#函式說明:
1 liveuser 3256
		#將固定格式的字串分開,並回傳分開的結果。
3257
		#回傳結果:
3258
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3259
		#$result["error"],錯誤訊息陣列
3260
		#$result["function"],當前執行的函數名稱.
3261
		#$result["oriStr"],要分割的原始字串內容
3262
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
3263
		#$result["dataCounts"],爲總共分成幾段
43 liveuser 3264
		#必填參數:
1 liveuser 3265
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["dirPositionAndName"];
3266
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
3267
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
3268
		unset($conf["stringProcess::spiltString"]);	
3269
 
3270
		#如果分割失敗
3271
		if($spiltString["status"]=="false"){
3272
 
3273
			#設置 $result["status"] 為 "false"
3274
			$result["status"]="false";
3275
 
3276
			#設置 $result["error"]
3277
			$result["error"]=$spiltString;
3278
 
3279
			#回傳結果
3280
			return $result;
3281
 
3282
			}#if end
3283
 
3284
		$checkedPath="";
3285
 
3286
		#依據切割成的路徑片段數目
3287
		for($i=0;$i<$spiltString["dataCounts"];$i++){
3288
 
3289
			$checkedPath=$checkedPath."/".$spiltString["dataArray"][$i];
3290
 
3291
			#檢查路徑是否存在
43 liveuser 3292
			#函式說明:
1 liveuser 3293
			#檢查多個檔案與資料夾是否存在.
3294
			#回傳的結果:
3295
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3296
			#$result["error"],錯誤訊息陣列.
3297
			#$resutl["function"],當前執行的涵式名稱.
3298
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3299
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
3300
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
3301
			#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
3302
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3303
			#必填參數:
3304
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
3305
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($checkedPath);
3306
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3307
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
3308
			#可省略參數
3309
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3310
			#$conf["disableWebSearch"]="false";
3311
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3312
			#$conf["userDir"]="true";
3313
			#參考資料來源:
3314
			#http://php.net/manual/en/function.file-exists.php
3315
			#http://php.net/manual/en/control-structures.foreach.php
3316
			#備註:
3317
			#函數file_exists檢查的路徑為檔案系統的路徑
3318
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
3319
 
3320
			#如果檢查資料夾路徑失敗
3321
			if($checkMultiFileExist["status"]=="false"){
3322
 
3323
				#設置 $result["status"] 為 "false"
3324
				$result["status"]="false";
3325
 
3326
				#設置 $result["error"]
3327
				$result["error"]=$spiltString;
3328
 
3329
				#回傳結果
3330
				return $result;
3331
 
3332
				}#if end
3333
 
3334
			#如果目錄不存在
3335
			if($checkMultiFileExist["allExist"]=="false"){
3336
 
3337
				#如果有這個名稱的東西存在
3338
				if(file_exists($checkedPath)){
3339
 
3340
					#如果目錄存在
3341
					if(is_dir($checkedPath)){
3342
 
3343
						#目錄已經存在換下一層
3344
						continue;
3345
 
3346
						}#if end
3347
 
3348
					}#if end
3349
 
3350
				#建立目錄
51 liveuser 3351
				$mkdir=@mkdir($checkedPath,0770);
1 liveuser 3352
 
3353
				#如果建立目錄失敗
3354
				#參考資料:
3355
				#http://php.net/manual/en/function.mkdir.php
3356
				if($mkdir===false){
3357
 
3358
					#設置 $result["status"] 為 "false"
3359
					$result["status"]="false";
3360
 
3361
					#設置 $result["error"]
3362
					$result["error"][]="建立目錄「".$checkedPath."」失敗";
3363
 
3364
					#回傳結果
3365
					return $result;
3366
 
3367
					}#if end
3368
 
3369
				#更改目錄的權限為 0770
3370
				chmod($checkedPath,0770);
3371
 
3372
				}#if end
3373
 
3374
			}#for end
3375
 
3376
		#取得建立好的目錄
3377
		$result["content"]=$checkedPath;	
3378
 
3379
		#執行到這邊代表執行成功
3380
		$result["status"]="true";
3381
 
3382
		#回傳結果
3383
		return $result;
3384
 
3385
		}#function createFolderAfterCheck end
3386
 
3387
	/*
43 liveuser 3388
	#函式說明:
1 liveuser 3389
	#移除檔案
43 liveuser 3390
	#回傳結果:
1 liveuser 3391
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
409 liveuser 3392
	#$result["error"],錯誤訊息陣列.
3393
	#$result["warning"],警告訊息陣列.
3394
	#$result["function"],當前執行的函數名稱.
3395
	#$result["argu"],當前函式使用的參數.
43 liveuser 3396
	#必填參數:
1 liveuser 3397
	#$conf["fileAddress"],字串,要移除檔案的位置.
3398
	$conf["fileAddress"]="";
3399
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3400
	$conf["fileArgu"]=__FILE__;
3401
	#可省略參數:
3402
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3403
	#$conf["commentsArray"]=array("");
409 liveuser 3404
	#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
3405
	#$conf["allowDelSymlink"]="true";
3406
	#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
3407
	#$conf["allowDelFolder"]="true";
187 liveuser 3408
	#參考資料:
3409
	#無.
43 liveuser 3410
	#備註:
3411
	#無.
1 liveuser 3412
	*/		
3413
	public static function delFile(&$conf){
3414
 
3415
		#初始化要回傳的結果
3416
		$result=array();
3417
 
3418
		#設置當其函數名稱
3419
		$result["function"]=__FUNCTION__;
3420
 
3421
		#如果 $conf 不為陣列
3422
		if(gettype($conf)!="array"){
3423
 
3424
			#設置執行失敗
3425
			$result["status"]="false";
3426
 
3427
			#設置執行錯誤訊息
3428
			$result["error"][]="\$conf變數須為陣列形態";
3429
 
3430
			#如果傳入的參數為 null
3431
			if($conf==null){
3432
 
3433
				#設置執行錯誤訊息
3434
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3435
 
3436
				}#if end
3437
 
3438
			#回傳結果
3439
			return $result;
3440
 
3441
			}#if end
3442
 
409 liveuser 3443
		#取得參數
3444
		$result["argu"]=$conf;
3445
 
1 liveuser 3446
		#檢查參數
43 liveuser 3447
		#函式說明:
1 liveuser 3448
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3449
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3450
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3451
		#$result["function"],當前執行的函式名稱.
3452
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3453
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3454
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3455
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3456
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3457
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3458
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3459
		#必填寫的參數:
3460
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3461
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3462
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3463
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3464
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3465
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
3466
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3467
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3468
		#可以省略的參數:
3469
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3470
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3471
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
409 liveuser 3472
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","allowDelSymlink","allowDelFolder");
1 liveuser 3473
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
409 liveuser 3474
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
1 liveuser 3475
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
409 liveuser 3476
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
1 liveuser 3477
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3478
		#$conf["arrayCountEqualCheck"][]=array();
3479
		#參考資料來源:
3480
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3481
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3482
		unset($conf["variableCheck::checkArguments"]);
3483
 
3484
		#如果檢查失敗
3485
		if($checkResult["status"]=="false"){
3486
 
3487
			#設置錯誤識別
3488
			$result["status"]="false";
3489
 
3490
			#設置錯誤訊息
3491
			$result["error"]=$checkResult;
3492
 
3493
			#回傳結果
3494
			return $result;
3495
 
3496
			}#if end
3497
 
3498
		#如果檢查不通過
3499
		if($checkResult["passed"]=="false"){
3500
 
3501
			#設置錯誤識別
3502
			$result["status"]="false";
3503
 
3504
			#設置錯誤訊息
3505
			$result["error"]=$checkResult;
3506
 
3507
			#回傳結果
3508
			return $result;
3509
 
3510
			}#if end
3511
 
3512
		#如果 $conf["commentsArray"] 有設定
3513
		if(isset($conf["commentsArray"])){
3514
 
3515
			#印出提示文字
3516
			#函式說明:
3517
			#印出多行文字,結尾自動換行.
3518
			#回傳的結果:
3519
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
3520
			#$result["function"],當前執行的函數名稱.
3521
			#$result["error"],錯誤訊息陣列.
43 liveuser 3522
			#必填參數:
1 liveuser 3523
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
3524
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
3525
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
3526
			unset($conf["cmd::echoMultiLine"]);
3527
 
3528
			#如果印出提示文字失敗
3529
			if($echoMultiLine["status"]=="false"){
3530
 
3531
				#設置執行失敗
3532
				$result["status"]="false";
3533
 
3534
				#設置執行錯誤訊息
3535
				$result["error"]=$echoMultiLine;
3536
 
3537
				#回傳結果
3538
				return $result;
3539
 
3540
				}#if end
3541
 
3542
			}#if end
3543
 
3544
		#檢查要移除的檔案是否存在
43 liveuser 3545
		#函式說明:
1 liveuser 3546
		#檢查多個檔案與資料夾是否存在.
3547
		#回傳的結果:
3548
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3549
		#$result["error"],錯誤訊息陣列.
3550
		#$resutl["function"],當前執行的涵式名稱.
3551
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3552
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
3553
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
43 liveuser 3554
		#必填參數:
1 liveuser 3555
		$conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["fileAddress"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
3556
		#$conf["fileAccess.checkMultiFileExist"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3557
		$conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
51 liveuser 3558
		#可省略參數:
3559
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3560
		#$conf["disableWebSearch"]="false";
3561
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3562
		#$conf["userDir"]="true";
3563
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
3564
		$conf["fileAccess.checkMultiFileExist"]["web"]="false";
1 liveuser 3565
		#參考資料來源:
3566
		#http://php.net/manual/en/function.file-exists.php
3567
		#http://php.net/manual/en/control-structures.foreach.php
3568
		$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);
3569
		unset($conf["fileAccess.checkMultiFileExist"]);
3570
 
409 liveuser 3571
		#var_dump($checkResult);
3572
 
1 liveuser 3573
		#如果檢查檔案是否存在失敗
409 liveuser 3574
		if($checkResult["status"]==="false"){
1 liveuser 3575
 
3576
			#設置執行失敗
3577
			$result["status"]="false";
3578
 
3579
			#回傳錯誤訊息
3580
			$result["error"]=$checkResult;
3581
 
3582
			#回傳結果
3583
			return $result;
3584
 
3585
			}#if end
3586
 
3587
		#如果目標檔案不存在
409 liveuser 3588
		if($checkResult["varExist"][0]==="false"){
1 liveuser 3589
 
3590
			#設置錯誤識別
3591
			$result["status"]="true";
3592
 
3593
			#回傳錯誤訊息
3594
			$result["warning"][]="要移除的檔案不存在";
3595
 
3596
			#回傳結果
3597
			return $result;
3598
 
3599
			}#if end
3600
 
51 liveuser 3601
		#如果要移除的目標是檔案
3602
		if(is_file($conf["fileAddress"])){
3603
 
3604
			#移除檔案,並回傳移除的結果
3605
			$eraseResult=(@unlink($conf["fileAddress"]));
1 liveuser 3606
 
51 liveuser 3607
			#如果 $eraseResult 等於 false
492 liveuser 3608
			if($eraseResult===false){
51 liveuser 3609
 
3610
				#設置錯誤識別
3611
				$result["status"]="false";
3612
 
3613
				#回傳錯誤訊息
3614
				$result["error"][]="檔案移除失敗";
3615
 
3616
				#回傳結果
3617
				return $result;
3618
 
3619
				}#if end
3620
 
3621
			}#if end
3622
 
3623
		#反之要移除的目標是目錄
409 liveuser 3624
		else if(is_dir($conf["fileAddress"])){
3625
 
3626
			#如果允許移除目錄
3627
			if($conf["allowDelFolder"]==="true"){
3628
 
3629
				#移除目錄跟底下的內容
3630
				w函式說明:
3631
				#呼叫shell執行系統命令,並取得回傳的內容.
3632
				#回傳結果:
3633
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3634
				#$result["error"],錯誤訊息陣列.
3635
				#$result["function"],當前執行的函數名稱.
3636
				#$result["argu"],使用的參數.
3637
				#$result["cmd"],執行的指令內容.
3638
				#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
3639
				#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
3640
				#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
3641
				#$result["running"],是否還在執行.
3642
				#$result["pid"],pid.
3643
				#$result["statusCode"],執行結束後的代碼.
3644
				#必填參數:
3645
				#$conf["command"],字串,要執行的指令.
3646
				$conf["external::callShell"]["command"]="rm";
3647
				#$conf["fileArgu"],字串,變數__FILE__的內容.
3648
				$conf["external::callShell"]["fileArgu"]=__FILE__;
3649
				#可省略參數:
3650
				#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
3651
				$conf["external::callShell"]["argu"]=array("-rf",$conf["fileAddress"]);
3652
				#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
3653
				#$conf["arguIsAddr"]=array();
3654
				#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
3655
				#$conf["plainArgu"]=array();
3656
				#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
3657
				#$conf["useApostrophe"]=array();
3658
				#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
3659
				#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
3660
				#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
3661
				#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
3662
				#$conf["enablePrintDescription"]="true";
3663
				#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
3664
				#$conf["printDescription"]="";
3665
				#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
3666
				$conf["external::callShell"]["escapeshellarg"]="true";
3667
				#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
3668
				#$conf["thereIsShellVar"]=array();
3669
				#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
3670
				#$conf["username"]="";
3671
				#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
3672
				#$conf["password"]="";
3673
				#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
3674
				#$conf["useScript"]="";
3675
				#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
3676
				#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
3677
				#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
3678
				#$conf["inBackGround"]="";
3679
				#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
3680
				#$conf["getErr"]="false";
3681
				#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
3682
				#$conf["doNotRun"]="false";
3683
				#參考資料:
3684
				#exec=>http://php.net/manual/en/function.exec.php
3685
				#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
3686
				#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
3687
				#備註:
3688
				#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
3689
				#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
3690
				$callShell=external::callShell($conf["external::callShell"]);
3691
				unset($conf["external::callShell"]);
3692
 
3693
				#如果執行失敗
3694
				if($callShell["status"]==="false"){
3695
 
3696
					#設置錯誤識別
3697
					$result["status"]="false";
3698
 
3699
					#回傳錯誤訊息
3700
					$result["error"]=$callShell;
3701
 
3702
					#回傳結果
3703
					return $result;
3704
 
3705
					}#if end
3706
 
3707
				}#if end	
3708
 
3709
			#反之不允許
3710
			else{
3711
 
3712
				#設置錯誤識別
3713
				$result["status"]="false";
3714
 
3715
				#回傳錯誤訊息
3716
				$result["error"][]="不允許移除目錄";
3717
 
3718
				#回傳結果
3719
				return $result;
3720
 
3721
				}#else end
3722
 
3723
			}#if end
3724
 
3725
		#反之
51 liveuser 3726
		else{
3727
 
409 liveuser 3728
			#可能為 軟連結
3729
 
3730
			#如果允許移除
3731
			if($conf["allowDelSymlink"]==="true"){
3732
 
3733
				#移除檔案,並回傳移除的結果
3734
				$eraseResult=(@unlink($conf["fileAddress"]));
1 liveuser 3735
 
409 liveuser 3736
				#如果 $eraseResult 等於 false
492 liveuser 3737
				if($eraseResult===false){
409 liveuser 3738
 
3739
					#設置錯誤識別
3740
					$result["status"]="false";
1 liveuser 3741
 
409 liveuser 3742
					#回傳錯誤訊息
3743
					$result["error"][]="檔案移除失敗";
3744
 
3745
					#回傳結果
3746
					return $result;
3747
 
3748
					}#if end
3749
 
3750
				}#if end
3751
 
3752
			#反之
3753
			else{
3754
 
3755
				#設置錯誤識別
3756
				$result["status"]="false";
3757
 
3758
				#設置錯誤訊息
3759
				$result["error"][]="不允許移除 檔案、目錄 以外類型的目標";
3760
 
3761
				#回傳結果
3762
				return $result;
3763
 
3764
				}#else end
51 liveuser 3765
 
3766
			}#else end
492 liveuser 3767
 
1 liveuser 3768
		#執行到這邊代表執行正常.
3769
		$result["status"]="true";
3770
 
3771
		#回傳結果
3772
		return $result;
3773
 
3774
		}#function delFile end
3775
 
3776
	/*
43 liveuser 3777
	#函式說明:
51 liveuser 3778
	#移除多個檔案
3779
	#回傳結果:
3780
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3781
	#$result["error"],錯誤訊息陣列
3782
	#$result["function"],當前執行的函數名稱.
3783
	#$result["argu"],使用的參數.
3784
	#$result["content"],陣列,移除各個檔案的結果.
3785
	#必填參數:
3786
	#$conf["fileAddress"],字串陣列,要移除檔案的位置.
3787
	$conf["fileAddress"]=array("");
3788
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3789
	$conf["fileArgu"]=__FILE__;
3790
	#可省略參數:
3791
	#無.
187 liveuser 3792
	#參考資料:
3793
	#無.
51 liveuser 3794
	#備註:
3795
	#無.
3796
	*/		
3797
	public static function delMultiFile(&$conf){
3798
 
3799
		#初始化要回傳的結果
3800
		$result=array();
3801
 
3802
		#設置當其函數名稱
3803
		$result["function"]=__FUNCTION__;
3804
 
3805
		#如果 $conf 不為陣列
3806
		if(gettype($conf)!="array"){
3807
 
3808
			#設置執行失敗
3809
			$result["status"]="false";
3810
 
3811
			#設置執行錯誤訊息
3812
			$result["error"][]="\$conf變數須為陣列形態";
3813
 
3814
			#如果傳入的參數為 null
3815
			if($conf==null){
3816
 
3817
				#設置執行錯誤訊息
3818
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3819
 
3820
				}#if end
3821
 
3822
			#回傳結果
3823
			return $result;
3824
 
3825
			}#if end
3826
 
3827
		#取得使用的參數.
3828
		$result["argu"]=$conf;
3829
 
3830
		#檢查參數
3831
		#函式說明:
3832
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
3833
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3834
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
3835
		#$result["function"],當前執行的函式名稱.
3836
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3837
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3838
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3839
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
3840
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3841
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3842
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3843
		#必填寫的參數:
3844
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3845
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3846
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3847
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");
3848
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
3849
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");
3850
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3851
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3852
		#可以省略的參數:
3853
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
3854
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3855
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3856
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
3857
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
3858
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
3859
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3860
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
3861
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3862
		#$conf["arrayCountEqualCheck"][]=array();
3863
		#參考資料來源:
3864
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3865
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3866
		unset($conf["variableCheck::checkArguments"]);
3867
 
3868
		#如果檢查失敗
3869
		if($checkResult["status"]=="false"){
3870
 
3871
			#設置錯誤識別
3872
			$result["status"]="false";
3873
 
3874
			#設置錯誤訊息
3875
			$result["error"]=$checkResult;
3876
 
3877
			#回傳結果
3878
			return $result;
3879
 
3880
			}#if end
3881
 
3882
		#如果檢查不通過
3883
		if($checkResult["passed"]=="false"){
3884
 
3885
			#設置錯誤識別
3886
			$result["status"]="false";
3887
 
3888
			#設置錯誤訊息
3889
			$result["error"]=$checkResult;
3890
 
3891
			#回傳結果
3892
			return $result;
3893
 
3894
			}#if end
3895
 
3896
		#針對每個要移除的檔案
3897
		foreach($conf["fileAddress"] as $fileAddr){
3898
 
3899
			#函式說明:
3900
			#移除檔案
3901
			#回傳結果:
3902
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
3903
			#$result["error"],錯誤訊息陣列
3904
			#$result["warning"],警告訊息陣列
3905
			#$result["function"],當前執行的函數名稱
3906
			#必填參數:
3907
			#$conf["fileAddress"],字串,要移除檔案的位置.
3908
			$conf["fileAccess::delFile"]["fileAddress"]=$fileAddr;
3909
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
3910
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
3911
			#可省略參數:
3912
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
3913
			#$conf["commentsArray"]=array("");
3914
			#備註:
3915
			#無.
3916
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
3917
			unset($conf["fileAccess::delFile"]);
3918
 
3919
			#如果檢查失敗
3920
			if($delFile["status"]==="false"){
3921
 
3922
				#設置錯誤識別
3923
				$result["status"]="false";
3924
 
3925
				#設置錯誤訊息
3926
				$result["error"]=$delFile;
3927
 
3928
				#回傳結果
3929
				return $result;
3930
 
3931
				}#if end
3932
 
3933
			#取得移除檔案的結果
3934
			$result["content"][]=$delFile;
3935
 
3936
			}#foreach end
3937
 
3938
		#設置執行正常
3939
		$result["status"]="true";
3940
 
3941
		#回傳結果
3942
		return $result;
3943
 
3944
		}#function delMultiFile end
3945
 
3946
	/*
3947
	#函式說明:
1 liveuser 3948
	#確保路徑存在.
43 liveuser 3949
	#回傳結果:
1 liveuser 3950
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3951
	#$result["error"],錯誤訊息陣列.
3952
	#$resutl["function"],當前執行的涵式名稱.
3953
	#$result["path"],建立好的路徑字串.
3954
	#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.
3955
	#$result["argu"],使用的參數.
43 liveuser 3956
	#必填參數:
1 liveuser 3957
	#$conf["path"],要檢查的路徑
3958
	$conf["path"]="";		
3959
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3960
	$conf["fileArgu"]=__FILE__;
3961
	#可省略參數:
3962
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
3963
	#$conf["haveFileName"]="false";
706 liveuser 3964
	#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人無法使用.
1 liveuser 3965
	#$conf["dirPermission"]="";
3966
	#$conf["web"],是否為檔案系統,"true"為網頁路徑,"false"為網頁系統,預設為"false".
3967
	#$conf["web"]="";
187 liveuser 3968
	#參考資料:
3969
	#無.
43 liveuser 3970
	#備註:
3971
	#無.
1 liveuser 3972
	*/ 
3973
	public static function validatePath(&$conf){
3974
 
3975
		#初始化要回傳的結果
3976
		$result=array();
3977
 
3978
		#設置當其函數名稱
3979
		$result["function"]=__FUNCTION__;
3980
 
3981
		#如果 $conf 不為陣列
3982
		if(gettype($conf)!="array"){
3983
 
3984
			#設置執行失敗
3985
			$result["status"]="false";
3986
 
3987
			#設置執行錯誤訊息
3988
			$result["error"][]="\$conf變數須為陣列形態";
3989
 
3990
			#如果傳入的參數為 null
3991
			if($conf==null){
3992
 
3993
				#設置執行錯誤訊息
3994
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3995
 
3996
				}#if end
3997
 
3998
			#回傳結果
3999
			return $result;
4000
 
4001
			}#if end
4002
 
4003
		#取得使用的參數
4004
		$result["argu"]=$conf;	
4005
 
4006
		#檢查參數
43 liveuser 4007
		#函式說明:
1 liveuser 4008
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4009
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4010
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4011
		#$result["function"],當前執行的函式名稱.
4012
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4013
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4014
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4015
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4016
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4017
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4018
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4019
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4020
		#必填寫的參數:
4021
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4022
		$conf["variableCheck::checkArgument"]["varInput"]=&$conf;
4023
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4024
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableName"]=array("path","fileArgu");
4025
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4026
		$conf["variableCheck::checkArgument"]["mustBeFilledVariableType"]=array("string","string");
4027
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4028
		$conf["variableCheck::checkArgument"]["referenceVarKey"]="variableCheck::checkArgument";
4029
		#可以省略的參數:
4030
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4031
		$conf["variableCheck::checkArgument"]["canBeEmptyString"]="false";
4032
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
4033
		$conf["variableCheck::checkArgument"]["skipableVariableCanNotBeEmpty"]=array("haveFileName","dirPermission","web");
4034
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4035
		$conf["variableCheck::checkArgument"]["skipableVariableName"]=array("haveFileName","dirPermission","web");
4036
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4037
		$conf["variableCheck::checkArgument"]["skipableVariableType"]=array("string","string","string");
4038
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4039
		$conf["variableCheck::checkArgument"]["skipableVarDefaultValue"]=array("false","0770","false");
4040
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4041
		#$conf["arrayCountEqualCheck"][]=array();
4042
		#參考資料來源:
4043
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4044
		$checkArgument=variableCheck::checkArguments($conf["variableCheck::checkArgument"]);
4045
		unset($conf["variableCheck::checkArgument"]);
4046
 
4047
		#如果檢查過程出錯
51 liveuser 4048
		if($checkArgument["status"]==="false"){
1 liveuser 4049
 
4050
			#設置執行失敗
4051
			$result["status"]="false";
4052
 
4053
			#設置執行錯誤訊息
4054
			$result["error"]=$checkArgument;
4055
 
4056
			#回傳結果
4057
			return $result;
4058
 
4059
			}#if end
4060
 
4061
		#如果檢查不通過
51 liveuser 4062
		if($checkArgument["passed"]==="false"){
1 liveuser 4063
 
4064
			#設置執行失敗
4065
			$result["status"]="false";
4066
 
4067
			#設置執行錯誤訊息
4068
			$result["error"]=$checkArgument;
4069
 
4070
			#回傳結果
4071
			return $result;
4072
 
4073
			}#if end
4074
 
43 liveuser 4075
		#函式說明:
1 liveuser 4076
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
4077
		#回傳結果:
4078
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4079
		#$result["error"],錯誤訊息陣列.
4080
		#$result["function"],函數名稱. 
4081
		#$result["argu"],使用的參數.
4082
		#$result["content"],網址,若是在命令列執行,則為"null".
4083
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
4084
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
4085
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
4086
		#必填參數:
4087
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
4088
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["path"];
4089
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
4090
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
4091
		#可省略參數:
4092
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
4093
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
4094
		#備註:
4095
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
4096
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
4097
		unset($conf["fileAccess::getInternetAddressV2"]);	
4098
 
4099
		#如果檢查過程出錯
4100
		if($getInternetAddressV2["status"]=="false"){
4101
 
4102
			#設置執行失敗
4103
			$result["status"]="false";
4104
 
4105
			#設置執行錯誤訊息
4106
			$result["error"]=$getInternetAddressV2;
4107
 
4108
			#回傳結果
4109
			return $result;
4110
 
4111
			}#if end		
4112
 
4113
		#取得轉換好的絕對路徑
4114
		$result["path"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
4115
 
538 liveuser 4116
		#debug
4117
		#var_dump($getInternetAddressV2);exit;
4118
 
1 liveuser 4119
		#如果 路徑 含有檔案名稱
4120
		if($conf["haveFileName"]==="true")
4121
		{
43 liveuser 4122
			#函式說明:
1 liveuser 4123
			#將固定格式的字串分開,並回傳分開的結果。
4124
			#回傳結果:
4125
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4126
			#$result["error"],錯誤訊息陣列
4127
			#$result["function"],當前執行的函數名稱.
4128
			#$result["argu"],使用的參數.
4129
			#$result["oriStr"],要分割的原始字串內容
4130
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4131
			#$result["dataCounts"],爲總共分成幾段
4132
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 4133
			#必填參數:
1 liveuser 4134
			#$conf["stringIn"],字串,要處理的字串.
4135
			$conf["stringProcess::spiltString"]["stringIn"]=$result["path"];
4136
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4137
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4138
			#可省略參數:
4139
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4140
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
4141
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4142
			unset($conf["stringProcess::spiltString"]);
4143
 
4144
			#如果檢查過程出錯
51 liveuser 4145
			if($spiltString["status"]==="false")
1 liveuser 4146
			{
4147
 
4148
				#設置執行失敗
4149
				$result["status"]="false";
4150
 
4151
				#設置執行錯誤訊息
4152
				$result["error"]=$spiltString;
4153
 
4154
				#回傳結果
4155
				return $result;
4156
 
4157
			}#if end
4158
 
4159
			#初始化儲存 path
4160
			$path="";
4161
 
4162
			#針對n-1段的內容
4163
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++)
4164
			{
4165
				#串接路徑
4166
				$path=$path."/".$spiltString["dataArray"][$i];
4167
 
4168
			}#for end
443 liveuser 4169
 
4170
			#如果路徑為空
4171
			if($path===""){
4172
 
4173
				#則與設為根目錄
4174
				$path="/";
4175
 
4176
				}#if end	
4177
 
1 liveuser 4178
			#設置檔案名稱
4179
			$result["fileName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
4180
 
4181
			#取得不含檔案名稱的路徑
4182
			$conf["path"]=$path;
4183
			$result["path"]=$path;
4184
 
827 liveuser 4185
		}#if end
4186
 
43 liveuser 4187
		#函式說明:
1 liveuser 4188
		#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
43 liveuser 4189
		#回傳結果:
1 liveuser 4190
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
4191
		#$result["error"],錯誤訊息陣列
43 liveuser 4192
		#必填參數:
1 liveuser 4193
		$conf["fileAccess::createFolderAfterCheck"]["dirPositionAndName"]=$conf["path"];#新建的位置與名稱
4194
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4195
		$conf["fileAccess::createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];
4196
		#可省略參數:
4197
		#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
4198
		$conf["fileAccess::createFolderAfterCheck"]["dirPermission"]=$conf["dirPermission"];
4199
		$conf["fileAccess::createFolderAfterCheck"]["web"]="false";
4200
		#參考資料:
4201
		#mkdir=>http://php.net/manual/en/function.mkdir.php
4202
		#chmod=>http://php.net/manual/en/function.chmod.php
4203
		$createFolderAfterCheck=fileAccess::createFolderAfterCheck($conf["fileAccess::createFolderAfterCheck"]);
4204
		unset($conf["fileAccess::createFolderAfterCheck"]);
4205
 
4206
		#如果建立路徑過程出錯
4207
		if($createFolderAfterCheck["status"]==="false"){
4208
 
4209
			#設置執行失敗
4210
			$result["status"]="false";
4211
 
4212
			#設置執行錯誤訊息
4213
			$result["error"]=$createFolderAfterCheck;
4214
 
4215
			#回傳結果
4216
			return $result;
4217
 
4218
			}#if end
4219
 
4220
		#如果有警告訊息
4221
		if(count($createFolderAfterCheck["warning"])>0){
4222
 
4223
			#取得警告訊息
4224
			$result["error"]=$createFolderAfterCheck["warning"];
4225
 
4226
			#設置執行失敗
4227
			$result["status"]="false";
4228
 
4229
			#回傳結果
4230
			return $result;
4231
 
4232
			}#if end
4233
 
4234
		#執行到這邊代表成功
4235
		$result["status"]="true";
4236
 
4237
		#回傳結果
4238
		return $result;
4239
 
4240
		}#function validatePath end
4241
 
827 liveuser 4242
	/*
4243
	#函式說明:
4244
	#解析路徑的每個層級.
4245
	#回傳結果:
4246
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4247
	#$result["error"],錯誤訊息陣列.
4248
	#$resutl["function"],當前執行的涵式名稱.
4249
	#$result["argu"],使用的參數.
4250
	#$result["content"],解析出來的路徑階層.
4251
	#必填參數:
4252
	#$conf["path"],要檢查的路徑
4253
	$conf["path"]="";
4254
	#可省略參數:
4255
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4256
	#$conf["haveFileName"]="false";
4257
	#參考資料:
4258
	#無.
4259
	#備註:
4260
	#無.
4261
	*/
4262
	public static function parsePath(&$conf){
4263
 
4264
		#初始化要回傳的內容
4265
		$result=array();
4266
 
4267
		#取得當前執行的函數名稱
4268
		$result["function"]=__FUNCTION__;
4269
 
4270
		#如果 $conf 不為陣列
4271
		if(gettype($conf)!="array"){
4272
 
4273
			#設置執行失敗
4274
			$result["status"]="false";
4275
 
4276
			#設置執行錯誤訊息
4277
			$result["error"][]="\$conf變數須為陣列形態";
4278
 
4279
			#如果傳入的參數為 null
4280
			if($conf==null){
4281
 
4282
				#設置執行錯誤訊息
4283
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4284
 
4285
				}#if end
4286
 
4287
			#回傳結果
4288
			return $result;
4289
 
4290
			}#if end
4291
 
4292
		#記錄使用的參數
4293
		$result["argu"]=$conf;
4294
 
4295
		#檢查參數
4296
		#函式說明:
4297
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4298
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4299
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4300
		#$result["function"],當前執行的函式名稱.
4301
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4302
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4303
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4304
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4305
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4306
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4307
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4308
		#必填寫的參數:
4309
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4310
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4311
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4312
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
4313
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4314
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4315
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4316
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4317
		#可以省略的參數:
4318
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4319
		#$conf["canBeEmptyString"]="false";
4320
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4321
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4322
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4323
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4324
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4325
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4326
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4327
		#$conf["arrayCountEqualCheck"][]=array();
4328
		#參考資料來源:
4329
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4330
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4331
		unset($conf["variableCheck::checkArguments"]);
4332
 
4333
		#如果檢查有誤
4334
		if($checkResult["status"]=="false"){
4335
 
4336
			#設置錯誤識別
4337
			$result["status"]="false";
4338
 
4339
			#設置錯誤訊息
4340
			$result["error"]=$checkResult;
4341
 
4342
			#回傳結果
4343
			return $result;
4344
 
4345
			}#if end
4346
 
4347
		#如果檢查不通過
4348
		if($checkResult["passed"]=="false"){
4349
 
4350
			#設置錯誤識別
4351
			$result["status"]="false";
4352
 
4353
			#設置錯誤訊息
4354
			$result["error"]=$checkResult;
4355
 
4356
			#回傳結果
4357
			return $result;
4358
 
4359
			}#if end
4360
 
4361
		#函式說明:
4362
		#將固定格式的字串分開,並回傳分開的結果.
4363
		#回傳結果:
4364
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4365
		#$result["error"],錯誤訊息陣列
4366
		#$result["function"],當前執行的函數名稱.
4367
		#$result["argu"],使用的參數.
4368
		#$result["oriStr"],要分割的原始字串內容
4369
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4370
		#$result["dataCounts"],爲總共分成幾段
4371
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
4372
		#必填參數:
4373
		#$conf["stringIn"],字串,要處理的字串.
4374
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];
4375
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
4376
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
4377
		#可省略參數:
4378
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
4379
		#$conf["allowEmptyStr"]="false";
4380
		#參考資料:
4381
		#無.
4382
		#備註:
4383
		#無.
4384
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
4385
		unset($conf["stringProcess::spiltString"]);
4386
 
4387
		#如果檢查有誤
4388
		if($spiltString["status"]==="false"){
4389
 
4390
			#設置錯誤識別
4391
			$result["status"]="false";
4392
 
4393
			#設置錯誤訊息
4394
			$result["error"]=$spiltString;
4395
 
4396
			#回傳結果
4397
			return $result;
4398
 
4399
			}#if end
4400
 
4401
		#確認是否為絕對路徑
4402
		#函式說明:
4403
		#取得符合特定字首與字尾的字串
4404
		#回傳結果:
4405
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4406
		#$result["function"],當前執行的函數名稱.
4407
		#$result["error"],錯誤訊息陣列.
4408
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4409
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4410
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4411
		#$result["argu"],使用的參數.
4412
		#必填參數:
4413
		#$conf["checkString"],字串,要檢查的字串.
4414
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
4415
		#可省略參數:
4416
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4417
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
4418
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4419
		#$conf["search::getMeetConditionsString"]["tailWord"]="";
4420
		#參考資料:
4421
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4422
		#備註:
4423
		#無.
4424
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
4425
		unset($conf["search::getMeetConditionsString"]);
4426
 
4427
		#如果檢查有誤
4428
		if($getMeetConditionsString["status"]==="false"){
4429
 
4430
			#設置錯誤識別
4431
			$result["status"]="false";
4432
 
4433
			#設置錯誤訊息
4434
			$result["error"]=$getMeetConditionsString;
4435
 
4436
			#回傳結果
4437
			return $result;
4438
 
4439
			}#if end
4440
 
4441
		#如果是絕對路徑
4442
		if($getMeetConditionsString["founded"]==="true"){
4443
 
4444
			#初始化路徑為 "/"
4445
			$result["content"][]="/";
4446
 
4447
			}#if end
4448
 
4449
		#針對每個切割出來的路徑階層
4450
		foreach($spiltString["dataArray"] as $index => $dir){
4451
 
4452
			#如果路徑結尾含有檔案名稱
4453
			if($conf["haveFileName"]==="true"){
4454
 
4455
				#如果是最後一段
4456
				if($index===$spiltString["dataCounts"]-1){
4457
 
4458
					#忽略
4459
					continue;
4460
 
4461
					}#if end
4462
 
4463
				}#if end
4464
 
4465
			#後面加上 資料夾名稱 跟 "/"
4466
			$newPath=$dir."/";
4467
 
4468
			#如果有 content
4469
			if(isset($result["content"])){
4470
 
4471
				#如果有上個資料夾
4472
				if(isset($result["content"][count($result["content"])-1])){
4473
 
4474
					#後面加上 上個資料夾名稱 加上資料夾名稱 跟 "/"
4475
					$newPath=$result["content"][count($result["content"])-1].$dir."/";
4476
 
4477
					}#if end
4478
 
4479
				}#if end
4480
 
4481
			#並新增置結果
4482
			$result["content"][]=$newPath;
4483
 
4484
			}#foreach end
4485
 
4486
		#var_dump($result["content"]);
4487
 
4488
		#設置執行正常
4489
		$result["status"]="true";
4490
 
4491
		#回傳結果
4492
		return $result;
4493
 
4494
		}#function parsePath end
4495
 
4496
	/*
4497
	#函式說明:
4498
	#檢查路徑是否存在.
4499
	#回傳結果:
4500
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4501
	#$result["error"],錯誤訊息陣列.
4502
	#$resutl["function"],當前執行的涵式名稱.
4503
	#$result["argu"],使用的參數.
4504
	#$result["found"],路徑是否存在,"true"代表存在,"false"代表不存在.
4505
	#$result["content"],每個階層路徑的檢查結果,每個元素有檢查的路徑"path"跟是否有存在或可存取的識別"found".
4506
	#必填參數:
4507
	#$conf["path"],要檢查的路徑
4508
	$conf["path"]="";
4509
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4510
	$conf["fileArgu"]=__FILE__;
4511
	#可省略參數:
4512
	#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4513
	#$conf["haveFileName"]="false";
4514
	#參考資料:
4515
	#無.
4516
	#備註:
4517
	#無.
4518
	*/
4519
	public static function checkPathExist(&$conf){
4520
 
4521
		#初始化要回傳的內容
4522
		$result=array();
4523
 
4524
		#取得當前執行的函數名稱
4525
		$result["function"]=__FUNCTION__;
4526
 
4527
		#如果 $conf 不為陣列
4528
		if(gettype($conf)!="array"){
4529
 
4530
			#設置執行失敗
4531
			$result["status"]="false";
4532
 
4533
			#設置執行錯誤訊息
4534
			$result["error"][]="\$conf變數須為陣列形態";
4535
 
4536
			#如果傳入的參數為 null
4537
			if($conf==null){
4538
 
4539
				#設置執行錯誤訊息
4540
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4541
 
4542
				}#if end
4543
 
4544
			#回傳結果
4545
			return $result;
4546
 
4547
			}#if end
4548
 
4549
		#記錄使用的參數
4550
		$result["argu"]=$conf;
4551
 
4552
		#檢查參數
4553
		#函式說明:
4554
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4555
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4556
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4557
		#$result["function"],當前執行的函式名稱.
4558
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4559
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4560
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4561
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4562
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4563
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4564
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4565
		#必填寫的參數:
4566
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4567
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4568
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4569
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
4570
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); 
4571
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
4572
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4573
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4574
		#可以省略的參數:
4575
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4576
		#$conf["canBeEmptyString"]="false";
4577
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4578
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");
4579
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4580
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
4581
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4582
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
4583
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4584
		#$conf["arrayCountEqualCheck"][]=array();
4585
		#參考資料來源:
4586
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4587
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4588
		unset($conf["variableCheck::checkArguments"]);
4589
 
4590
		#如果檢查有誤
4591
		if($checkResult["status"]=="false"){
4592
 
4593
			#設置錯誤識別
4594
			$result["status"]="false";
4595
 
4596
			#設置錯誤訊息
4597
			$result["error"]=$checkResult;
4598
 
4599
			#回傳結果
4600
			return $result;
4601
 
4602
			}#if end
4603
 
4604
		#如果檢查不通過
4605
		if($checkResult["passed"]=="false"){
4606
 
4607
			#設置錯誤識別
4608
			$result["status"]="false";
4609
 
4610
			#設置錯誤訊息
4611
			$result["error"]=$checkResult;
4612
 
4613
			#回傳結果
4614
			return $result;
4615
 
4616
			}#if end
4617
 
4618
		#函式說明:
4619
		#解析路徑的每個層級.
4620
		#回傳結果:
4621
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4622
		#$result["error"],錯誤訊息陣列.
4623
		#$resutl["function"],當前執行的涵式名稱.
4624
		#$result["argu"],使用的參數.
4625
		#$result["content"],解析出來的路徑階層.
4626
		#必填參數:
4627
		#$conf["path"],要檢查的路徑
4628
		$conf["fileAccess::parsePath"]["path"]=$conf["path"];
4629
		#可省略參數:
4630
		#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".
4631
		$conf["fileAccess::parsePath"]["haveFileName"]=$conf["haveFileName"];
4632
		#參考資料:
4633
		#無.
4634
		#備註:
4635
		#無.
4636
		$parsePath=fileAccess::parsePath($conf["fileAccess::parsePath"]);
4637
		unset($conf["fileAccess::parsePath"]);
4638
 
4639
		#如果檢查有誤
4640
		if($parsePath["status"]==="false"){
4641
 
4642
			#設置錯誤識別
4643
			$result["status"]="false";
4644
 
4645
			#設置錯誤訊息
4646
			$result["error"]=$parsePath;
4647
 
4648
			#回傳結果
4649
			return $result;
4650
 
4651
			}#if end
4652
 
4653
		#函式說明:
4654
		#檢查多個檔案與資料夾是否存在.
4655
		#回傳的結果:
4656
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
4657
		#$result["error"],錯誤訊息陣列.
4658
		#$resutl["function"],當前執行的涵式名稱.
4659
		#$result["argu"],使用的參數.
4660
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
4661
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
4662
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
4663
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
4664
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
4665
		#必填參數:
4666
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
4667
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$parsePath["content"];
4668
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
4669
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
4670
		#可省略參數:
4671
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
4672
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="true";
4673
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
4674
		$conf["fileAccess::checkMultiFileExist"]["userDir"]="false";
4675
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
4676
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
4677
		#參考資料:
4678
		#http://php.net/manual/en/function.file-exists.php
4679
		#http://php.net/manual/en/control-structures.foreach.php
4680
		#備註:
4681
		#函數file_exists檢查的路徑為檔案系統的路徑
4682
		#$result["varName"][$i]結果未實作
4683
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
4684
		unset($conf["fileAccess::checkMultiFileExist"]);
4685
 
4686
		#如果執行異常
4687
		if($checkMultiFileExist["status"]==="false"){
4688
 
4689
			#設置錯誤識別
4690
			$result["status"]="false";
4691
 
4692
			#設置錯誤訊息
4693
			$result["error"]=$checkMultiFileExist;
4694
 
4695
			#回傳結果
4696
			return $result;
4697
 
4698
			}#if end
4699
 
4700
		#如果有路徑無法存取
4701
		if($checkMultiFileExist["allExist"]==="false"){
4702
 
4703
			#設置執行正常識別
4704
			$result["status"]="true";
4705
 
4706
			#設置路徑找不到
4707
			$result["found"]="false";
4708
 
4709
			#針對每個路徑的搜尋結果
4710
			foreach($checkMultiFileExist["varExist"] as $index => $found){
4711
 
4712
				#設置路徑尋找結果
4713
				$result["content"][]=array("found"=>$found,"path"=>$checkMultiFileExist["varNameFullPath"][$index]);
4714
 
4715
				}#foreach end
4716
 
4717
			#回傳結果
4718
			return $result;
4719
 
4720
			}#if end
4721
 
4722
		#設置路徑有找到
4723
		$result["found"]="true";
4724
 
4725
		#設置執行正常識別
4726
		$result["status"]="true";
4727
 
4728
		#回傳結果
4729
		return $result;
4730
 
4731
		}#function checkPathExist end
4732
 
1 liveuser 4733
	/*	
43 liveuser 4734
	#函式說明:
1 liveuser 4735
	#demo建立pdf檔
43 liveuser 4736
	#必填參數:
1 liveuser 4737
	#無
43 liveuser 4738
	#可省略參數:
1 liveuser 4739
	#無
4740
	#參考資料:
4741
	#tcpdf=>http://www.tcpdf.org/examples.php
187 liveuser 4742
	#備註:
4743
	#開發中,需要安裝 php-tcpdf 套件.
1 liveuser 4744
	*/
4745
	public static function demoCreateTcPdfFile(){
4746
 
4747
		#避免 TCPDF ERROR: Some data has already been output, can't send PDF file 錯誤產生
4748
		ob_end_clean();
4749
 
4750
		#create new PDF document
4751
		$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
4752
 
4753
		#set document information
4754
		$pdf->SetCreator(PDF_CREATOR);
4755
		$pdf->SetAuthor('qbpwc');
4756
		$pdf->SetTitle('pdf sample title');
4757
		$pdf->SetSubject('pdf sample subject');
4758
		$pdf->SetKeywords('pdf, sample, tcpdf, qbpwc');
4759
 
4760
		#set default header data
4761
		$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
4762
		$pdf->setFooterData(array(0,64,0), array(0,64,128));
4763
 
4764
		#set header and footer fonts
4765
		$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
4766
		$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
4767
 
4768
		#set default monospaced font
4769
		$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
4770
 
4771
		#set margins
4772
		$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
4773
		$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
4774
		$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
4775
 
4776
		#set auto page breaks
4777
		$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
4778
 
4779
		#set image scale factor
4780
		$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
4781
 
4782
		#set some language-dependent strings (optional)
4783
		if (@file_exists(dirname(__FILE__).'/lang/eng.php')){
4784
 
4785
			require_once(dirname(__FILE__).'/lang/eng.php');
4786
 
4787
			$pdf->setLanguageArray($l);
4788
 
4789
			}#if end
4790
 
4791
		#set default font subsetting mode
4792
		$pdf->setFontSubsetting(true);
4793
 
4794
		#Set font
4795
		#dejavusans is a UTF-8 Unicode font, if you only need to
4796
		#print standard ASCII chars, you can use core fonts like
4797
		#helvetica or times to reduce file size.
4798
		$pdf->SetFont('dejavusans', '', 14, '', true);
4799
 
4800
		#Add a page
4801
		#This method has several options, check the source code documentation for more information.
4802
		$pdf->AddPage();
4803
 
4804
		#set text shadow effect
4805
		$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));
4806
 
4807
		#Set some content to print
4808
		$html="<h5>Hello World!</h5>";
4809
 
4810
		// Print text using writeHTMLCell()
4811
		$pdf->writeHTMLCell(0,0,'','',$html,0,1,0,true,'',true);
4812
 
4813
		// Close and output PDF document
4814
		// This method has several options, check the source code documentation for more information.
4815
		$pdf->Output('fileAccessT/example_001.pdf','I');
4816
 
4817
		}#function demoCreateTcPdfFile end
4818
 
4819
	/*
43 liveuser 4820
	#函式說明:
1 liveuser 4821
	#取得檔案路徑字串的路徑與檔案的名稱與檔案副檔名
4822
	#回傳的結果:
4823
	#$result["status"],執行是否正常,"true"正常,"false"代表不正常.
4824
	#$result["error"],錯誤訊息.
4825
	#$result["function"],當前執行的函式名稱.
4826
	#$result["filePath"],路徑字串.
4827
	#$result["fileName"],檔案名稱字串.
4828
	#$result["fileExtention"],檔案的副檔名.
4829
	#$result["fullFileName"],含副檔名的檔案名稱.
4830
	#$result["fullFilePathAndName"],完整的檔案路徑(含副檔名).
43 liveuser 4831
	#必填參數:
1 liveuser 4832
	#$conf["fileAddressAndName"],字串,檔案名稱與其路徑.
4833
	$conf["fileAddressAndName"]="";
43 liveuser 4834
	#可省略參數:
1 liveuser 4835
	#無.
187 liveuser 4836
	#參考資料:
4837
	#無.
1 liveuser 4838
	#備註:
842 liveuser 4839
	#無.
1 liveuser 4840
	*/
4841
	public static function getFileAddressAndNameAndFileExtention(&$conf){
4842
 
4843
		#初始化要回傳的參數
4844
		$result=array();
4845
 
4846
		#取得當前執行函數名稱
4847
		$result["function"]=__FUNCTION__;
4848
 
4849
		#如果 $conf 不為陣列
4850
		if(gettype($conf)!="array"){
4851
 
4852
			#設置執行失敗
4853
			$result["status"]="false";
4854
 
4855
			#設置執行錯誤訊息
4856
			$result["error"][]="\$conf變數須為陣列形態";
4857
 
4858
			#如果傳入的參數為 null
4859
			if($conf==null){
4860
 
4861
				#設置執行錯誤訊息
4862
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4863
 
4864
				}#if end
4865
 
4866
			#回傳結果
4867
			return $result;
4868
 
4869
			}#if end
4870
 
4871
		#檢查參數
43 liveuser 4872
		#函式說明:
1 liveuser 4873
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
4874
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4875
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
4876
		#$result["function"],當前執行的函式名稱.
4877
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4878
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4879
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4880
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
4881
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4882
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4883
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4884
		#必填寫的參數:
4885
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4886
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4887
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4888
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileAddressAndName");
4889
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
4890
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
4891
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4892
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4893
		#可以省略的參數:
4894
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
4895
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
4896
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4897
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("outputAddress","noDownload");
4898
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
4899
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
4900
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4901
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".bin/".$conf["cppAddress"].".bin","true");
4902
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4903
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
4904
		#參考資料來源:
4905
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4906
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4907
		unset($conf["variableCheck::checkArguments"]);
4908
 
4909
		#如果 $checkArguments["status"] 等於 "false"
4910
		if($checkArguments["status"]=="false"){
4911
 
4912
			#設置 $result["status"] 為 "false"
4913
			$result["status"]="false";
4914
 
4915
			#設置 $result["error"]
4916
			$result["error"]=$checkArguments;
4917
 
4918
			#回傳結果
4919
			return $result;
4920
 
4921
			}#if end
4922
 
4923
		#如果 $checkArguments["passed"] 等於 "false"
4924
		if($checkArguments["passed"]=="false"){
4925
 
4926
			#設置 $result["status"] 為 "false"
4927
			$result["status"]="false";
4928
 
4929
			#設置 $result["error"]
4930
			$result["error"]=$checkArguments;
4931
 
4932
			#回傳結果
4933
			return $result;
4934
 
4935
			}#if end
4936
 
842 liveuser 4937
		#確認路徑是否為絕對路徑
4938
		#函式說明:
4939
		#取得符合特定字首與字尾的字串
4940
		#回傳結果:
4941
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
4942
		#$result["function"],當前執行的函數名稱.
4943
		#$result["error"],錯誤訊息陣列.
4944
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
4945
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
4946
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
4947
		#$result["argu"],使用的參數.
4948
		#必填參數:
4949
		#$conf["checkString"],字串,要檢查的字串.
4950
		$conf["fileAccess::getMeetConditionsString"]["checkString"]=$conf["fileAddressAndName"];
4951
		#可省略參數:
4952
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
4953
		$conf["fileAccess::getMeetConditionsString"]["frontWord"]="/";
4954
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
4955
		#$conf["tailWord"]="";
4956
		#參考資料:
4957
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
4958
		#備註:
4959
		#無.
4960
		$getMeetConditionsString=search::getMeetConditionsString($conf["fileAccess::getMeetConditionsString"]);
4961
		unset($conf["fileAccess::getMeetConditionsString"]);
4962
 
4963
		#如果執行出錯
4964
		if($getMeetConditionsString["status"]==="false"){
4965
 
4966
			#設置錯誤識別
4967
			$result["status"]="false";
4968
 
4969
			#設置錯誤訊息
4970
			$result["error"]=$getMeetConditionsString;
4971
 
4972
			#回傳結果
4973
			return $result;
4974
 
4975
			}#if end
4976
 
4977
		#預設參數 $conf["fileAddressAndName"] 不為 "/" 開始
4978
		$fileAddressAndNameStarFromRoot="true";
4979
 
4980
		#如果是 "/" 開頭
4981
		if($getMeetConditionsString["founded"]==="false"){
4982
 
4983
			#設置參數 $conf["fileAddressAndName"] 為 "/" 開始
4984
			$fileAddressAndNameStarFromRoot="true";
4985
 
4986
			}#if end
4987
 
1 liveuser 4988
		#檢查是否有路徑資訊 
43 liveuser 4989
		#函式說明:
1 liveuser 4990
		#將固定格式的字串分開,並回傳分開的結果。
4991
		#回傳的參數:
4992
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4993
		#$result["error"],錯誤訊息陣列
4994
		#$result["oriStr"],要分割的原始字串內容
4995
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
4996
		#$result["dataCounts"],爲總共分成幾段
43 liveuser 4997
		#必填參數:
1 liveuser 4998
		$conf["stringProcess"]["spiltString"]["stringIn"]=$conf["fileAddressAndName"];#要處理的字串。
4999
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
5000
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5001
		unset($conf["stringProcess"]["spiltString"]);
5002
 
5003
		#如果 $spiledResult["status"] 等於 "false"
842 liveuser 5004
		if($spiledResult["status"]==="false"){
1 liveuser 5005
 
5006
			#設置錯誤識別
5007
			$result["status"]="false";
5008
 
5009
			#設置錯誤訊息
5010
			$result["error"]=$spiledResult;
5011
 
5012
			#回傳結果
5013
			return $result;
5014
 
5015
			}#if end
5016
 
5017
		#如果 $spiledResult["dataCounts"] 大於 1
5018
		if($spiledResult["dataCounts"]>1){
5019
 
5020
			#代表有路徑字串
5021
 
5022
			#初始化路徑字串暫存變數
5023
			$tempPathStr="";
5024
 
842 liveuser 5025
			#如果是絕對路徑
5026
			if($fileAddressAndNameStarFromRoot==="true"){
5027
 
5028
				#加上根目錄
5029
				$tempPathStr=$tempPathStr."/";
5030
 
5031
				}#if end
5032
 
1 liveuser 5033
			#取得路徑字串
5034
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5035
 
5036
				#串連片段路徑字串
5037
				$tempPathStr=$tempPathStr.$spiledResult["dataArray"][$i]."/";
5038
 
5039
				}#for end
5040
 
5041
			#取得檔案的路徑
5042
			$result["filePath"]=$tempPathStr;
5043
 
5044
			}#if end
5045
 
5046
		#反之 $spiledResult["dataCounts"] 等於 1
5047
		else{
5048
 
5049
			#檔案的路徑設為""
5050
			$result["filePath"]="";
5051
 
5052
			}#else end
5053
 
5054
		#取得檔案名稱(含副檔名)
5055
		$result["fullFileName"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5056
 
5057
		#取得副檔名
43 liveuser 5058
		#函式說明:
1 liveuser 5059
		#將固定格式的字串分開,並回傳分開的結果。
5060
		#回傳的參數:
5061
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5062
		#$result["error"],錯誤訊息陣列
5063
		#$result["oriStr"],要分割的原始字串內容
5064
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
5065
		#$result["dataCounts"],爲總共分成幾段
43 liveuser 5066
		#必填參數:
1 liveuser 5067
		$conf["stringProcess"]["spiltString"]["stringIn"]=$result["fullFileName"];#要處理的字串。
5068
		$conf["stringProcess"]["spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
5069
		$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);
5070
		unset($conf["stringProcess"]["spiltString"]);
5071
 
5072
		#如果 $spiledResult["status"] 等於 "false"
5073
		if($spiledResult["status"]=="false"){
5074
 
5075
			#設置錯誤識別
5076
			$result["status"]="false";
5077
 
5078
			#設置錯誤訊息
5079
			$result["error"]=$spiledResult;
5080
 
5081
			#回傳結果
5082
			return $result;
5083
 
5084
			}#if end
5085
 
5086
		#如果 $spiledResult["dataCounts"] 大於 1
5087
		if($spiledResult["dataCounts"]>1){
5088
 
5089
			#代表有副檔名
5090
 
5091
			#初始化檔名字串暫存變數
5092
			$tempFileNameStr="";
5093
 
5094
			#取得路徑字串
5095
			for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){
5096
 
5097
				#如果是最後一個小黑點前面的字串片段
5098
				if($i==$spiledResult["dataCounts"]-2){
5099
 
5100
					#串連片段路徑字串
5101
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i];
5102
 
842 liveuser 5103
					}#if end
1 liveuser 5104
 
5105
				#反之不是最後一個小黑點前面的字串片段
5106
				else{
5107
 
5108
					#串連片段路徑字串(含小黑點)
5109
					$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i].".";
5110
 
5111
					}#else end
5112
 
5113
				}#for end
5114
 
5115
			#取得檔名
5116
			$result["fileName"]=$tempFileNameStr;
5117
 
5118
			#取得副檔名
5119
			$result["fileExtention"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];
5120
 
5121
			}#if end
5122
 
5123
		#反之 $spiledResult["dataCounts"] 等於 1
5124
		else{
5125
 
5126
			#檔案的副檔名設為""
5127
			$result["fileExtention"]="";
5128
 
5129
			#取得檔案的名稱
5130
			$result["fileName"]=$spiledResult["dataArray"][0];
5131
 
5132
			}#else end
5133
 
5134
		#如果 $result["fileExtention"] 不等於 ""
5135
		if($result["fileExtention"]!=""){
5136
 
5137
			#將副檔名用小黑點跟檔案名稱連在一塊
5138
			$result["fullFileName"]=$result["fileName"].".".$result["fileExtention"];
5139
 
5140
			}#if end
5141
 
5142
		#反之代表沒有副檔名
5143
		else{
5144
 
5145
			#取得含副檔名的檔案名稱
5146
			$result["fullFileName"]=$result["fileName"].$result["fileExtention"];
5147
 
5148
			}#else end
5149
 
5150
		#完整的檔案路徑(含副檔名).
5151
		$result["fullFilePathAndName"]=$result["filePath"].$result["fullFileName"];
5152
 
5153
		#設置執行正常的識別
5154
		$result["status"]="true";
5155
 
5156
		#回傳結果
5157
		return $result;
5158
 
5159
		}#funciton getFileAddressAndNameAndFileExtention end
5160
 
5161
	/*
43 liveuser 5162
	#函式說明:
1 liveuser 5163
	#將資料夾或檔案打包成tar檔案
43 liveuser 5164
	#回傳結果:
1 liveuser 5165
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5166
	#$result["function"],當前執行的函數名稱
5167
	#$result["error"],錯誤訊息.
5168
	#$result["content"],檔案輸出後的位置與名稱.
43 liveuser 5169
	#必填參數:
1 liveuser 5170
	#$conf["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5171
	$conf["packetTarget"]=array("");
5172
	#$conf["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5173
	$conf["createdTarFile"]="";
5174
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5175
	$conf["fileArgu"]=__FILE__;
43 liveuser 5176
	#可省略參數:
5177
	#無.
187 liveuser 5178
	#參考資料:
5179
	#無.
43 liveuser 5180
	#備註:
5181
	#無.
1 liveuser 5182
	*/
5183
	public static function makeTarFile(&$conf){
5184
 
5185
		#初始化要回傳的內容
5186
		$result=array();
5187
 
5188
		#記錄當前執行的函數名稱
5189
		$result["function"]=__FUNCTION__;
5190
 
5191
		#如果 $conf 不為陣列
5192
		if(gettype($conf)!="array"){
5193
 
5194
			#設置執行失敗
5195
			$result["status"]="false";
5196
 
5197
			#設置執行錯誤訊息
5198
			$result["error"][]="\$conf變數須為陣列形態";
5199
 
5200
			#如果傳入的參數為 null
5201
			if($conf==null){
5202
 
5203
				#設置執行錯誤訊息
5204
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5205
 
5206
				}#if end
5207
 
5208
			#回傳結果
5209
			return $result;
5210
 
5211
			}#if end
5212
 
5213
		#檢查參數
43 liveuser 5214
		#函式說明:
1 liveuser 5215
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5216
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5217
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5218
		#$result["function"],當前執行的函式名稱.
5219
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5220
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5221
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5222
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5223
		#必填寫的參數:
5224
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5225
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5226
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5227
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","packetTarget","createdTarFile");
5228
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5229
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5230
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5231
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5232
		#可以省略的參數:
5233
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5234
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5235
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5236
		#$conf["skipableVariableName"]=array();
5237
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5238
		#$conf["skipableVariableType"]=array();
5239
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5240
		#$conf["skipableVarDefaultValue"]=array("");
5241
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5242
		#$conf["arrayCountEqualCheck"][]=array();
5243
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5244
		unset($conf["variableCheck::checkArguments"]);
5245
 
5246
		#若檢查失敗
5247
		if($checkResult["status"]=="false"){
5248
 
5249
			#設置執行失敗
5250
			$result["status"]="false";
5251
 
5252
			#設置執行錯誤訊息
5253
			$result["error"]=$checkResult;
5254
 
5255
			#回傳結果
5256
			return $result;
5257
 
5258
			}#if end
5259
 
5260
		#若檢查不通過
5261
		if($checkResult["passed"]=="false"){
5262
 
5263
			#設置執行失敗
5264
			$result["status"]="false";
5265
 
5266
			#設置執行錯誤訊息
5267
			$result["error"]=$checkResult;
5268
 
5269
			#回傳結果
5270
			return $result;
5271
 
5272
			}#if end
5273
 
454 liveuser 5274
		#初始化打包要用的tar指令參數
5275
		$paramsArray=array("-cvf",$conf["createdTarFile"].".tar");
1 liveuser 5276
 
5277
		#檢查要打包的檔案是否存在
43 liveuser 5278
		#函式說明:
1 liveuser 5279
		#檢查多個檔案與資料夾是否存在.
5280
		#回傳的結果:
5281
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5282
		#$result["error"],錯誤訊息陣列.
5283
		#$resutl["function"],當前執行的涵式名稱.
5284
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5285
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5286
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5287
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5288
		#必填參數:
5289
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5290
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$conf["packetTarget"];
5291
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5292
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5293
		#可省略參數
5294
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5295
		#$conf["disableWebSearch"]="false";
5296
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5297
		#$conf["userDir"]="true";
5298
		#參考資料來源:
5299
		#http://php.net/manual/en/function.file-exists.php
5300
		#http://php.net/manual/en/control-structures.foreach.php
5301
		#備註:
5302
		#函數file_exists檢查的路徑為檔案系統的路徑
5303
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5304
		unset($conf["fileAccess::checkMultiFileExist"]);
5305
 
5306
		#如果檢查要打包的檔案失敗
5307
		if($checkMultiFileExist["status"]=="false"){
5308
 
5309
			#設置執行失敗
5310
			$result["status"]="false";
5311
 
5312
			#設置執行錯誤訊息
5313
			$result["error"]=$checkMultiFileExist;
5314
 
5315
			#回傳結果
5316
			return $result;
5317
 
5318
			}#if end
5319
 
5320
		#如果要打包的檔案有缺
5321
		if($checkMultiFileExist["allExist"]=="false"){
5322
 
5323
			#設置執行失敗
5324
			$result["status"]="false";
5325
 
5326
			#設置執行錯誤訊息
5327
			$result["error"]=$checkMultiFileExist;
5328
 
5329
			#回傳結果
5330
			return $result;
5331
 
5332
			}#if end
5333
 
5334
		#有幾個要打包的目標就執行幾次
5335
		for($i=0;$i<count($conf["packetTarget"]);$i++){
5336
 
5337
			#串接上要打包的檔案或資料夾
454 liveuser 5338
			$paramsArray[]=$conf["packetTarget"][$i];
1 liveuser 5339
 
5340
			}#for end
5341
 
43 liveuser 5342
		#函式說明:
1 liveuser 5343
		#呼叫shell執行系統命令,並取得回傳的內容.
454 liveuser 5344
		#回傳結果:
1 liveuser 5345
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
454 liveuser 5346
		#$result["error"],錯誤訊息陣列.
5347
		#$result["function"],當前執行的函數名稱.
5348
		#$result["argu"],使用的參數.
5349
		#$result["cmd"],執行的指令內容.
5350
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
5351
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
5352
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
5353
		#$result["running"],是否還在執行.
5354
		#$result["pid"],pid.
5355
		#$result["statusCode"],執行結束後的代碼.
5356
		#$result["escape"],陣列,儲存出新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
5357
		#必填參數:
5358
		#$conf["command"],字串,要執行的指令.
5359
		$conf["external::callShell"]["command"]="tar";
5360
		#$conf["fileArgu"],字串,變數__FILE__的內容.
1 liveuser 5361
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
454 liveuser 5362
		#可省略參數:
5363
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
5364
		$conf["external::callShell"]["argu"]=$paramsArray;
5365
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
5366
		#$conf["arguIsAddr"]=array();
5367
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
5368
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
5369
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
5370
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5371
		#$conf["enablePrintDescription"]="true";
5372
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
5373
		#$conf["printDescription"]="";
5374
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
5375
		$conf["external::callShell"]["escapeshellarg"]="true";
5376
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
5377
		#$conf["thereIsShellVar"]=array();
5378
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
5379
		#$conf["username"]="";
5380
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
5381
		#$conf["password"]="";
5382
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
5383
		#$conf["useScript"]="";
5384
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
5385
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
5386
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
5387
		#$conf["inBackGround"]="";
5388
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
5389
		#$conf["getErr"]="false";
5390
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
5391
		#$conf["doNotRun"]="false";
1 liveuser 5392
		#參考資料:
454 liveuser 5393
		#exec=>http://php.net/manual/en/function.exec.php
5394
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
5395
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
5396
		#備註:
5397
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
5398
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
5399
		$conf["external::callShell"]=external::callShell($conf["external::callShell"]);
1 liveuser 5400
		unset($conf["external::callShell"]);
5401
 
5402
		#如果執行shell失敗
5403
		if($callShell["status"]=="false"){
5404
 
5405
			#設置執行失敗
5406
			$result["status"]="false";
5407
 
5408
			#設置執行錯誤訊息
5409
			$result["error"]=$callShell;
5410
 
5411
			#回傳結果
5412
			return $result;
5413
 
5414
			}#if end
5415
 
5416
		#打包好的檔案位置與名稱
5417
		$result["content"]=$conf["createdTarFile"].".tar";
5418
 
5419
		#執行到這邊代表執行正常
5420
		$result["status"]="true";
5421
 
5422
		#回傳結果
5423
		return $result;
5424
 
5425
		}#function makeTarFile end
5426
 
5427
	/*
43 liveuser 5428
	#函式說明:
1 liveuser 5429
	#將一個檔案壓縮成xz檔案
43 liveuser 5430
	#回傳結果:
1 liveuser 5431
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5432
	#$result["function"],當前執行的函數名稱
5433
	#$result["error"],錯誤訊息.
5434
	#$result["content"],檔案輸出後的位置與名稱.
43 liveuser 5435
	#必填參數:
1 liveuser 5436
	#$conf["compressTarget"],字串,要打包的每個資料夾與檔案位置
5437
	$conf["compressTarget"]="";
5438
	#$conf["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5439
	$conf["createdXzFile"]="";
5440
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5441
	$conf["fileArgu"]=__FILE__;
43 liveuser 5442
	#可省略參數:
5443
	#無.
187 liveuser 5444
	#參考資料:
5445
	#無.
43 liveuser 5446
	#備註:
5447
	#無.
1 liveuser 5448
	*/
5449
	public static function makeXzFile(&$conf){
5450
 
5451
		#初始化要回傳的內容
5452
		$result=array();
5453
 
5454
		#記錄當前執行的函數名稱
5455
		$result["function"]=__FUNCTION__;
5456
 
5457
		#如果 $conf 不為陣列
5458
		if(gettype($conf)!="array"){
5459
 
5460
			#設置執行失敗
5461
			$result["status"]="false";
5462
 
5463
			#設置執行錯誤訊息
5464
			$result["error"][]="\$conf變數須為陣列形態";
5465
 
5466
			#如果傳入的參數為 null
5467
			if($conf==null){
5468
 
5469
				#設置執行錯誤訊息
5470
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5471
 
5472
				}#if end
5473
 
5474
			#回傳結果
5475
			return $result;
5476
 
5477
			}#if end
5478
 
5479
		#檢查參數
43 liveuser 5480
		#函式說明:
1 liveuser 5481
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5482
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5483
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5484
		#$result["function"],當前執行的函式名稱.
5485
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5486
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5487
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5488
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5489
		#必填寫的參數:
5490
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5491
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5492
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5493
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdXzFile");
5494
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5495
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
5496
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5497
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5498
		#可以省略的參數:
5499
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5500
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5501
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5502
		#$conf["skipableVariableName"]=array();
5503
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5504
		#$conf["skipableVariableType"]=array();
5505
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5506
		#$conf["skipableVarDefaultValue"]=array("");
5507
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5508
		#$conf["arrayCountEqualCheck"][]=array();
5509
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5510
		unset($conf["variableCheck::checkArguments"]);
5511
 
5512
		#若檢查失敗
5513
		if($checkResult["status"]=="false"){
5514
 
5515
			#設置執行失敗
5516
			$result["status"]="false";
5517
 
5518
			#設置執行錯誤訊息
5519
			$result["error"]=$checkResult;
5520
 
5521
			#回傳結果
5522
			return $result;
5523
 
5524
			}#if end
5525
 
5526
		#若檢查不通過
5527
		if($checkResult["passed"]=="false"){
5528
 
5529
			#設置執行失敗
5530
			$result["status"]="false";
5531
 
5532
			#設置執行錯誤訊息
5533
			$result["error"]=$checkResult;
5534
 
5535
			#回傳結果
5536
			return $result;
5537
 
5538
			}#if end
5539
 
5540
		#檢查要用xz壓縮的檔案是否存在
43 liveuser 5541
		#函式說明:
1 liveuser 5542
		#檢查多個檔案與資料夾是否存在.
5543
		#回傳的結果:
5544
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
5545
		#$result["error"],錯誤訊息陣列.
5546
		#$resutl["function"],當前執行的涵式名稱.
5547
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
5548
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
5549
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
5550
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
5551
		#必填參數:
5552
		#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。
5553
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["compressTarget"]);
5554
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5555
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
5556
		#可省略參數
5557
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
5558
		#$conf["disableWebSearch"]="false";
5559
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
5560
		#$conf["userDir"]="true";
5561
		#參考資料來源:
5562
		#http://php.net/manual/en/function.file-exists.php
5563
		#http://php.net/manual/en/control-structures.foreach.php
5564
		#備註:
5565
		#函數file_exists檢查的路徑為檔案系統的路徑
5566
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
5567
		unset($conf["fileAccess::checkMultiFileExist"]);
5568
 
5569
		#如果檢查要用xz壓縮的檔案失敗
5570
		if($checkMultiFileExist["status"]=="false"){
5571
 
5572
			#設置執行失敗
5573
			$result["status"]="false";
5574
 
5575
			#設置執行錯誤訊息
5576
			$result["error"]=$checkMultiFileExist;
5577
 
5578
			#回傳結果
5579
			return $result;
5580
 
5581
			}#if end
5582
 
5583
		#如果要用xz壓縮的檔案有缺
5584
		if($checkMultiFileExist["allExist"]=="false"){
5585
 
5586
			#設置執行失敗
5587
			$result["status"]="false";
5588
 
5589
			#設置執行錯誤訊息
5590
			$result["error"]=$checkMultiFileExist;
5591
 
5592
			#回傳結果
5593
			return $result;
5594
 
5595
			}#if end
5596
 
5597
		#壓縮要用的xz語法
43 liveuser 5598
		#函式說明:
1 liveuser 5599
		#呼叫shell執行系統命令,並取得回傳的內容.
5600
		#回傳的結果:
5601
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5602
		#$result["error"],錯誤訊息陣列
5603
		#$result["output"],爲執行完二元碼後的輸出陣列
5604
		#必填的參數
454 liveuser 5605
		$conf["external::callShell"]["command"]="xz";#要執行的指令與參數
1 liveuser 5606
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5607
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
5608
		#可省略參數:
5609
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
454 liveuser 5610
		$conf["external::callShell"]["argu"]=array("-v","-v","-z","-c",$conf["compressTarget"],">",$conf["createdXzFile"].".xz ");
1 liveuser 5611
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
5612
		#$conf["enablePrintDescription"]="true";
5613
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
5614
		#$conf["printDescription"]="";
5615
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
454 liveuser 5616
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 5617
		#參考資料:
5618
		#http://php.net/manual/en/function.exec.php
5619
		$callShell=external::callShell($conf["external::callShell"]);
5620
		unset($conf["external::callShell"]);
5621
 
5622
		#如果執行shell失敗
5623
		if($callShell["status"]=="false"){
5624
 
5625
			#設置執行失敗
5626
			$result["status"]="false";
5627
 
5628
			#設置執行錯誤訊息
5629
			$result["error"]=$callShell;
5630
 
5631
			#回傳結果
5632
			return $result;
5633
 
5634
			}#if end
5635
 
5636
		#壓縮好的檔案位置與名稱
5637
		$result["content"]=$conf["createdXzFile"].".xz";
5638
 
5639
		#執行到這邊代表執行正常
5640
		$result["status"]="status";
5641
 
5642
		#回傳結果
5643
		return $result;
5644
 
5645
		}#function makeXzFile end
5646
 
5647
	/*
43 liveuser 5648
	#函式說明:
1 liveuser 5649
	#將資料夾或檔案打包壓縮成tar.xz檔案
43 liveuser 5650
	#回傳結果:
1 liveuser 5651
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5652
	#$result["function"],當前執行的函數名稱
5653
	#$result["error"],錯誤訊息.
5654
	#$result["content"],檔案輸出後的位置與名稱.
43 liveuser 5655
	#必填參數:
1 liveuser 5656
	#$conf["compressTarget"],陣列,要打包壓縮的每個資料夾與檔案位置
5657
	$conf["compressTarget"]=array();
5658
	#$conf["createdTarXzFile"],字串,打包壓縮好的檔案要放在哪裡,副檔名.tar.xz會自動加上.
5659
	$conf["createdTarXzFile"]="";
5660
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5661
	$conf["fileArgu"]=__FILE__;
5662
	#可省略參數:
5663
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
5664
	#$conf["commentsArray"]=array("");
5665
	#$conf["includeDotStart"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「.」開頭的檔案目錄,預設為"false",不包含,"true"為要包含.
5666
	#$conf["includeDotStart"]="false";
5667
	#$conf["includeWaveEnd"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「~」結尾的檔案.預設為"false",不包含,"true"為要包含.
5668
	#$conf["includeWaveEnd"]="false";
187 liveuser 5669
	#參考資料:
5670
	#無.
1 liveuser 5671
	#備註:
5672
	#建議加上 --exclude-backups, --exclude-caches-all 	
5673
	*/
5674
	public static function makeTarXzFile(&$conf){
5675
 
5676
		#初始化要回傳的內容
5677
		$result=array();
5678
 
5679
		#記錄當前執行的函數名稱
5680
		$result["function"]=__FUNCTION__;
5681
 
5682
		#如果 $conf 不為陣列
5683
		if(gettype($conf)!="array"){
5684
 
5685
			#設置執行失敗
5686
			$result["status"]="false";
5687
 
5688
			#設置執行錯誤訊息
5689
			$result["error"][]="\$conf變數須為陣列形態";
5690
 
5691
			#如果傳入的參數為 null
5692
			if($conf==null){
5693
 
5694
				#設置執行錯誤訊息
5695
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
5696
 
5697
				}#if end
5698
 
5699
			#回傳結果
5700
			return $result;
5701
 
5702
			}#if end
5703
 
5704
		#檢查參數
43 liveuser 5705
		#函式說明:
1 liveuser 5706
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
5707
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5708
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
5709
		#$result["function"],當前執行的函式名稱.
5710
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
5711
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
5712
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
5713
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
5714
		#必填寫的參數:
5715
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
5716
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
5717
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
5718
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdTarXzFile");
5719
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
5720
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");
5721
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
5722
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
5723
		#可以省略的參數:
5724
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
5725
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
5726
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
5727
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","includeDotStart","includeWaveEnd");
5728
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
5729
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");
5730
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
5731
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");
5732
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
5733
		#$conf["arrayCountEqualCheck"][]=array();
5734
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
5735
		unset($conf["variableCheck::checkArguments"]);
5736
 
5737
		#若檢查失敗
5738
		if($checkResult["status"]=="false"){
5739
 
5740
			#設置執行失敗
5741
			$result["status"]="false";
5742
 
5743
			#設置執行錯誤訊息
5744
			$result["error"]=$checkResult;
5745
 
5746
			#回傳結果
5747
			return $result;
5748
 
5749
			}#if end
5750
 
5751
		#若檢查不通過
5752
		if($checkResult["passed"]=="false"){
5753
 
5754
			#設置執行失敗
5755
			$result["status"]="false";
5756
 
5757
			#設置執行錯誤訊息
5758
			$result["error"]=$checkResult;
5759
 
5760
			#回傳結果
5761
			return $result;
5762
 
5763
			}#if end
5764
 
5765
		#如果 $conf["commentsArray"] 有設定
5766
		if(isset($conf["commentsArray"])){
5767
 
5768
			#印出提示文字
5769
			#函式說明:
5770
			#印出多行文字,結尾自動換行.
5771
			#回傳的結果:
5772
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
5773
			#$result["function"],當前執行的函數名稱.
5774
			#$result["error"],錯誤訊息陣列.
43 liveuser 5775
			#必填參數:
1 liveuser 5776
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
5777
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
5778
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
5779
			unset($conf["cmd::echoMultiLine"]);
5780
 
5781
			#如果印出提示文字失敗
5782
			if($echoMultiLine["status"]=="false"){
5783
 
5784
				#設置執行失敗
5785
				$result["status"]="false";
5786
 
5787
				#設置執行錯誤訊息
5788
				$result["error"]=$echoMultiLine;
5789
 
5790
				#回傳結果
5791
				return $result;
5792
 
5793
				}#if end
5794
 
5795
			}#if end	
5796
 
5797
		#解析要處理的檔案路徑
43 liveuser 5798
		#函式說明:
1 liveuser 5799
		#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
5800
		#回傳結果:
5801
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5802
		#$result["error"],錯誤訊息陣列.
5803
		#$result["function"],函數名稱. 
5804
		#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
5805
		#$result["pathCount"],整數,有幾個路徑.
5806
		#必填參數:
5807
		#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
5808
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["path"]=$conf["compressTarget"];
5809
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5810
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
5811
		#可省略參數:
5812
		#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
5813
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["includeDotStart"]==="true"?"false":"true";
5814
		#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
5815
		$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["includeWaveEnd"]==="true"?"false":"true";
5816
		$realPathArray=fileAccess::resolveMultiPostionStringWhichContainStarSymbol($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5817
		unset($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);
5818
 
5819
		#如果解析路徑失敗
5820
		if($realPathArray["status"]=="false"){
5821
 
5822
			#設置執行失敗
5823
			$result["status"]="false";
5824
 
5825
			#設置執行錯誤訊息
5826
			$result["error"]=$realPathArray;
5827
 
5828
			#回傳結果
5829
			return $result;
5830
 
5831
			}#if end
5832
 
5833
		#取得解析好的檔案路徑陣列
5834
		$conf["compressTarget"]=$realPathArray["content"];	
5835
 
5836
		#將路徑轉換成相對路徑
43 liveuser 5837
		#函式說明:
1 liveuser 5838
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
5839
		#回傳結果:
5840
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
5841
		#$result["error"],錯誤訊息陣列.
5842
		#$result["function"],函數名稱. 
5843
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
5844
		#必填參數:
5845
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
5846
		$conf["fileAccess::getRelativePath"]["path"]=$conf["compressTarget"];
5847
		#$conf["fileArgu"],字串,當前路徑.
5848
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
5849
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
5850
		unset($conf["fileAccess::getRelativePath"]);
5851
 
5852
		#如果轉換失敗
5853
		if($getRelativePath["status"]=="false"){
5854
 
5855
			#設置執行失敗
5856
			$result["status"]="false";
5857
 
5858
			#設置執行錯誤訊息
5859
			$result["error"]=$getRelativePat;
5860
 
5861
			#回傳結果
5862
			return $result;
5863
 
5864
			}#if end	
5865
 
5866
		#打包成tar檔
43 liveuser 5867
		#函式說明:
1 liveuser 5868
		#將資料夾或檔案打包成tar檔案
5869
		#回傳的結果:
5870
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5871
		#$result["function"],當前執行的函數名稱
5872
		#$result["error"],錯誤訊息.
5873
		#$result["content"],檔案輸出後的位置與名稱.
43 liveuser 5874
		#必填參數:
1 liveuser 5875
		#$conf["fileAccess::makeTarFile"]["packetTarget"],陣列,要打包的每個資料夾與檔案位置
5876
		$conf["fileAccess::makeTarFile"]["packetTarget"]=$getRelativePath["content"];
5877
		#$conf["fileAccess::makeTarFile"]["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.
5878
		$conf["fileAccess::makeTarFile"]["createdTarFile"]=$conf["createdTarXzFile"];
5879
		#$conf["fileAccess::makeTarFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5880
		$conf["fileAccess::makeTarFile"]["fileArgu"]=$conf["fileArgu"];
5881
		$makeTarFile=fileAccess::makeTarFile($conf["fileAccess::makeTarFile"]);
5882
		unset($conf["fileAccess::makeTarFile"]);
5883
 
5884
		#如果打包失敗
5885
		if($makeTarFile["status"]=="false"){
5886
 
5887
			#設置執行不正常
5888
			$result["status"]="false";
5889
 
5890
			#設置錯誤訊息
5891
			$result["error"]=$makeTarFile;
5892
 
5893
			#回傳結果
5894
			return $result;
5895
 
5896
			}#if end
5897
 
5898
		#壓縮成xz檔
43 liveuser 5899
		#函式說明:
1 liveuser 5900
		#將一個檔案壓縮成xz檔案
5901
		#回傳的結果:
5902
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5903
		#$result["function"],當前執行的函數名稱
5904
		#$result["error"],錯誤訊息.
5905
		#$result["content"],檔案輸出後的位置與名稱.
43 liveuser 5906
		#必填參數:
1 liveuser 5907
		#$conf["fileAccess::makeXzFile"]["compressTarget"],字串,要打包的每個資料夾與檔案位置
5908
		$conf["fileAccess::makeXzFile"]["compressTarget"]=$makeTarFile["content"];
5909
		#$conf["fileAccess::makeXzFile"]["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.
5910
		$conf["fileAccess::makeXzFile"]["createdXzFile"]=$makeTarFile["content"];
5911
		#$conf["fileAccess::makeXzFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5912
		$conf["fileAccess::makeXzFile"]["fileArgu"]=$conf["fileArgu"];
5913
		$makeXzFile=fileAccess::makeXzFile($conf["fileAccess::makeXzFile"]);
5914
		unset($conf["fileAccess::makeXzFile"]);
5915
 
5916
		#如果壓縮失敗
5917
		if($makeXzFile["status"]=="false"){
5918
 
5919
			#設置執行不正常
5920
			$result["status"]="false";
5921
 
5922
			#設置錯誤訊息
5923
			$result["error"]=$makeXzFile;
5924
 
5925
			#回傳結果
5926
			return $result;
5927
 
5928
			}#if end
5929
 
5930
		#移除tar檔案
43 liveuser 5931
		#函式說明:
1 liveuser 5932
		#移除檔案
43 liveuser 5933
		#回傳結果:
1 liveuser 5934
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
5935
		#$result["error"],錯誤訊息陣列
5936
		#$result["warning"],警告訊息陣列
5937
		#$result["function"],當前執行的函數名稱
43 liveuser 5938
		#必填參數:
1 liveuser 5939
		$conf["fileAccess::delFile"]["fileAddress"]=$makeTarFile["content"];#要移除檔案的位置
5940
		#$conf["fileAccess::delFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
5941
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
5942
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
5943
		unset($conf["fileAccess::delFile"]);
5944
 
5945
		#如果移除tar檔案失敗
5946
		if($delFile["status"]=="false"){
5947
 
5948
			#設置執行不正常
5949
			$result["status"]="false";
5950
 
5951
			#設置錯誤訊息
5952
			$result["error"]=$delFile;
5953
 
5954
			#回傳結果
5955
			return $result;
5956
 
5957
			}#if end
5958
 
5959
		#取得壓縮好的檔案位置與名稱
5960
		$result["content"]=$makeXzFile["content"];
5961
 
5962
		#執行到這邊代表執行正常
5963
		$result["status"]="true";
5964
 
5965
		#回傳結果
5966
		return $result;
5967
 
5968
		}#function makeTarXzFile end
5969
 
5970
	/*
43 liveuser 5971
	#函式說明:
1 liveuser 5972
	#移動檔案
5973
	#回傳結果:
5974
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
5975
	#$result["function"],當前執行的函數名稱
5976
	#$result["error"],錯誤訊息.
5977
	#$result["content"],檔案輸出後的位置與名稱.
5978
	#必填參數:
5979
	#$conf["from"],字串,要移動的檔案名稱與位置.
5980
	$conf["from"]="";
5981
	#$conf["to"],字串,要移動到的位置與名稱
5982
	$conf["to"]="";
5983
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
5984
	$conf["fileArgu"]=__FILE__;
5985
	#可省略參數:
5986
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
5987
	#$conf["commentsArray"]=array("");
187 liveuser 5988
	#參考資料:
5989
	#無.
43 liveuser 5990
	#備註:
5991
	#無.
1 liveuser 5992
	*/
5993
	public static function mv(&$conf){
5994
 
5995
		#初始化要回傳的結果
5996
		$result=array();
5997
 
5998
		#取得當前執行的函數名稱
5999
		$result["function"]=__FUNCTION__;
6000
 
6001
		#如果 $conf 不為陣列
6002
		if(gettype($conf)!="array"){
6003
 
6004
			#設置執行失敗
6005
			$result["status"]="false";
6006
 
6007
			#設置執行錯誤訊息
6008
			$result["error"][]="\$conf變數須為陣列形態";
6009
 
6010
			#如果傳入的參數為 null
6011
			if($conf==null){
6012
 
6013
				#設置執行錯誤訊息
6014
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6015
 
6016
				}#if end
6017
 
6018
			#回傳結果
6019
			return $result;
6020
 
6021
			}#if end
6022
 
6023
		#檢查參數
43 liveuser 6024
		#函式說明:
1 liveuser 6025
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
6026
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6027
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6028
		#$result["function"],當前執行的函式名稱.
6029
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6030
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6031
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6032
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6033
		#必填寫的參數:
6034
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
6035
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
6036
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
6037
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("from","to","fileArgu");
6038
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
6039
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
6040
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
6041
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
6042
		#可以省略的參數:
6043
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
6044
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
6045
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
6046
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");
6047
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
6048
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
6049
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
6050
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
6051
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
6052
		#$conf["arrayCountEqualCheck"][]=array();
6053
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
6054
		unset($conf["variableCheck::checkArguments"]);
6055
 
6056
		#若檢查失敗
6057
		if($checkResult["status"]=="false"){
6058
 
6059
			#設置執行失敗
6060
			$result["status"]="false";
6061
 
6062
			#設置執行錯誤訊息
6063
			$result["error"]=$checkResult;
6064
 
6065
			#回傳結果
6066
			return $result;
6067
 
6068
			}#if end
6069
 
6070
		#若檢查不通過
6071
		if($checkResult["passed"]=="false"){
6072
 
6073
			#設置執行失敗
6074
			$result["status"]="false";
6075
 
6076
			#設置執行錯誤訊息
6077
			$result["error"]=$checkResult;
6078
 
6079
			#回傳結果
6080
			return $result;
6081
 
6082
			}#if end
6083
 
6084
		#如果 $conf["commentsArray"] 有設定
6085
		if(isset($conf["commentsArray"])){
6086
 
6087
			#印出提示文字
6088
			#函式說明:
6089
			#印出多行文字,結尾自動換行.
6090
			#回傳的結果:
6091
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
6092
			#$result["function"],當前執行的函數名稱.
6093
			#$result["error"],錯誤訊息陣列.
43 liveuser 6094
			#必填參數:
1 liveuser 6095
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
6096
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
6097
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
6098
			unset($conf["cmd::echoMultiLine"]);
6099
 
6100
			#如果印出提示文字失敗
6101
			if($echoMultiLine["status"]=="false"){
6102
 
6103
				#設置執行失敗
6104
				$result["status"]="false";
6105
 
6106
				#設置執行錯誤訊息
6107
				$result["error"]=$echoMultiLine;
6108
 
6109
				#回傳結果
6110
				return $result;
6111
 
6112
				}#if end
6113
 
6114
			}#if end	
6115
 
6116
		#檢查要移動的檔案是否存在
43 liveuser 6117
		#函式說明:
1 liveuser 6118
		#檢查多個檔案與資料夾是否存在.
6119
		#回傳的結果:
6120
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6121
		#$result["error"],錯誤訊息陣列.
6122
		#$resutl["function"],當前執行的涵式名稱.
6123
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6124
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6125
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
43 liveuser 6126
		#必填參數:
1 liveuser 6127
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["from"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6128
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6129
		#參考資料來源:
6130
		#http://php.net/manual/en/function.file-exists.php
6131
		#http://php.net/manual/en/control-structures.foreach.php
6132
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6133
		unset($conf["fileAccess::checkMultiFileExist"]);
6134
 
6135
		#如果檢查失敗
6136
		if($checkMultiFileExist["status"]=="false"){
6137
 
6138
			#設置執行失敗
6139
			$result["status"]="false";
6140
 
6141
			#設置執行錯誤訊息
6142
			$result["error"]=$checkMultiFileExist;
6143
 
6144
			#回傳結果
6145
			return $result;
6146
 
6147
			}#if end	
6148
 
6149
		#如果來源檔案不存在
6150
		if($checkMultiFileExist["allExist"]=="false"){
6151
 
6152
			#設置執行失敗
6153
			$result["status"]="false";
6154
 
6155
			#設置執行錯誤訊息
6156
			$result["error"][]="檔案「".$conf["from"]."」不存在";
6157
 
6158
			#回傳結果
6159
			return $result;
6160
 
6161
			}#if end
6162
 
43 liveuser 6163
		#函式說明:
1 liveuser 6164
		#呼叫shell執行系統命令,並取得回傳的內容.
6165
		#回傳的結果:
6166
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6167
		#$result["error"],錯誤訊息陣列
6168
		#$result["output"],爲執行完二元碼後的輸出陣列
6169
		#必填的參數
6170
		$conf["external::callShell"]["command"]="mv";#要執行的指令與參數
6171
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"]; #__FILE__的內容
6172
		#可省略參數:
6173
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
6174
		$conf["external::callShell"]["argu"]=array("-v",$conf["from"],$conf["to"]);
6175
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
6176
		#$conf["external::callShell"]["enablePrintDescription"]="true";
6177
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
6178
		#$conf["printDescription"]="";
6179
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
454 liveuser 6180
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 6181
		#參考資料:
6182
		#http://php.net/manual/en/function.exec.php
6183
		$callShell=external::callShell($conf["external::callShell"]);
6184
		unset($conf["external::callShell"]);
6185
 
6186
		#如果移動檔案失敗
6187
		if($callShell["status"]=="false"){
6188
 
6189
			#設置執行失敗
6190
			$result["status"]="false";
6191
 
6192
			#設置執行錯誤訊息
6193
			$result["error"]=$callShell;
6194
 
6195
			#回傳結果
6196
			return $result;
6197
 
6198
			}#if end
6199
 
6200
		#執行到這邊代表正常
6201
		$result["status"]="true";
6202
 
6203
		#儲存移動後的位置與名稱
6204
		$result["content"]=$conf["to"];
6205
 
6206
		#回傳結果
6207
		return $result;
6208
 
6209
		}#function mv end
6210
 
6211
	/*
43 liveuser 6212
	#函式說明:
1 liveuser 6213
	#取得目錄底下所有目錄與檔案的樹狀結構.
43 liveuser 6214
	#回傳結果:
1 liveuser 6215
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6216
	#$result["error"],錯誤訊息陣列.
6217
	#$result["function"],函數名稱.
6218
	#$result["position"],根目錄位置.
6219
	#$result["content"],陣列,檔案目錄的樹狀結構.
6220
	#$result["content"][$i]["name"],根目錄底下第$i+1個檔案或目錄的名稱
6221
	#$result["content"][$i]["folder"],根目錄底下第$i+1個名稱是目錄("true")還是檔案("false").
6222
	#$result["content"][$i]["position"],根目錄底下第$i+1個名稱或目錄的位置.
711 liveuser 6223
	#$result["content"][$i]["ownerPerm"],根目錄底下第$i+1個使用者的權限.
6224
	#$result["content"][$i]["groupPerm"],根目錄底下第$i+1個群組使用者的權限.
6225
	#$result["content"][$i]["otherPerm"],根目錄底下第$i+1個其他使用者的權限.
6226
	#$result["content"][$i]["ownerName"],根目錄底下第$i+1個擁有者賬戶.
6227
	#$result["content"][$i]["groupName"],根目錄底下第$i+1個群組擁有者賬戶.
1 liveuser 6228
	#$result["content"][$i]["next"][$j]["name"],第$i+1個為目錄的名稱的目錄底下第$j+1個檔案或目錄的名稱
6229
	#$result["content"][$i]["next"][$j]["folder"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱是目錄("true")還是檔案("false").
6230
	#$result["content"][$i]["next"][$j]["position"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱或目錄的位置.
711 liveuser 6231
	#$result["content"][$i]["next"][$j]["ownerPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個使用者的權限.
6232
	#$result["content"][$i]["next"][$j]["groupPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組使用者的權限.
6233
	#$result["content"][$i]["next"][$j]["otherPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個其他使用者的權限.
6234
	#$result["content"][$i]["next"][$j]["ownerName"],第$i+1個為目錄的名稱的目錄底下第$j+1個擁有者賬戶.
6235
	#$result["content"][$i]["next"][$j]["groupName"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組擁有者賬戶.
1 liveuser 6236
	#以此類推...		
43 liveuser 6237
	#必填參數:
1 liveuser 6238
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6239
	$conf["position"]="";
6240
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6241
	$conf["fileArgu"]=__FILE__;
43 liveuser 6242
	#可省略參數:
6243
	#無.
187 liveuser 6244
	#參考資料:
6245
	#無.
43 liveuser 6246
	#備註:
6247
	#無.
1 liveuser 6248
	*/
6249
	public static function getListTree(&$conf){
6250
 
6251
		#初始化要回傳的結果
6252
		$result=array();
6253
 
6254
		#設置當其函數名稱
6255
		$result["function"]=__FUNCTION__;
6256
 
6257
		#如果 $conf 不為陣列
6258
		if(gettype($conf)!="array"){
6259
 
6260
			#設置執行失敗
6261
			$result["status"]="false";
6262
 
6263
			#設置執行錯誤訊息
6264
			$result["error"][]="\$conf變數須為陣列形態";
6265
 
6266
			#如果傳入的參數為 null
6267
			if($conf==null){
6268
 
6269
				#設置執行錯誤訊息
6270
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6271
 
6272
				}#if end
6273
 
6274
			#回傳結果
6275
			return $result;
6276
 
6277
			}#if end
6278
 
6279
		#檢查必填參數
43 liveuser 6280
		#函式說明:
1 liveuser 6281
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6282
		#回傳的結果:
6283
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6284
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6285
		#$result["function"],當前執行的函式名稱.
6286
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6287
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6288
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6289
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6290
		#必填寫的參數:
6291
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6292
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6293
		#可以省略的參數:
6294
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6295
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6296
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6297
		unset($conf["variableCheck.isexistMulti"]);
6298
 
6299
		#如果檢查失敗
6300
		if($checkResult["status"]=="false"){
6301
 
6302
			#設置錯誤識別
6303
			$result["status"]="false";
6304
 
6305
			#設置錯誤訊息
6306
			$result["error"]=$checkResult;
6307
 
6308
			#回傳結果
6309
			return $result;
6310
 
6311
			}#if end
6312
 
6313
		#如果檢查不通過
6314
		if($checkResult["passed"]=="false"){
6315
 
6316
			#設置錯誤識別
6317
			$result["status"]="false";
6318
 
6319
			#設置錯誤訊息
6320
			$result["error"]=$checkResult;
6321
 
6322
			#回傳結果
6323
			return $result;
6324
 
6325
			}#if end
6326
 
6327
		#如果目錄不為 . 與 ..
6328
		if(basename($conf["position"])!="." && basename($conf["position"])!=".."){
6329
 
6330
			#檢查目錄是否存在
43 liveuser 6331
			#函式說明:
1 liveuser 6332
			#檢查多個檔案與資料夾是否存在.
6333
			#回傳的結果:
6334
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
6335
			#$result["error"],錯誤訊息陣列.
6336
			#$resutl["function"],當前執行的涵式名稱.
6337
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
6338
			#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
6339
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
43 liveuser 6340
			#必填參數:
1 liveuser 6341
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["position"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
6342
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6343
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
6344
			#參考資料來源:
6345
			#http://php.net/manual/en/function.file-exists.php
6346
			#http://php.net/manual/en/control-structures.foreach.php
6347
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
6348
			unset($conf["fileAccess::checkMultiFileExist"]);
6349
 
6350
			#如果檢查目錄失敗
6351
			if($checkMultiFileExist["status"]=="false"){
6352
 
6353
				#設置錯誤識別
6354
				$result["status"]="false";
6355
 
6356
				#設置錯誤訊息
6357
				$result["error"]=$checkMultiFileExist;
6358
 
6359
				#回傳結果
6360
				return $result;
6361
 
6362
				}#if end	
6363
 
6364
			#如果目錄不存在
6365
			if($checkMultiFileExist["varExist"][0]=="false"){
6366
 
6367
				#設置錯誤識別
6368
				$result["status"]="false";
6369
 
6370
				#設置錯誤訊息
6371
				$result["error"]=$checkMultiFileExist;
6372
 
6373
				#回傳結果
6374
				return $result;
6375
 
6376
				}#if end	
6377
 
6378
			}#if end
6379
 
711 liveuser 6380
		#取得根目錄的樹狀結構
43 liveuser 6381
		#函式說明:
1 liveuser 6382
		#取得目錄底下所有目錄與檔案清單.
43 liveuser 6383
		#回傳結果:
1 liveuser 6384
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6385
		#$result["error"],錯誤訊息陣列.
6386
		#$result["function"],函數名稱.
6387
		#$result["content"],陣列,目錄底下的檔案與子目錄.
6388
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6389
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
6390
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6391
		#$result["position"],目前的位置.
43 liveuser 6392
		#必填參數:
1 liveuser 6393
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6394
		$conf["fileAccess::getList"]["position"]=$conf["position"];
6395
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6396
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 6397
		#可省略參數:
1 liveuser 6398
		#無
6399
		#參考資料來源:
6400
		#opendir=>http://php.net/manual/en/function.opendir.php
6401
		#is_dir=>http://php.net/manual/en/function.is-dir.php
6402
		$rootList=fileAccess::getList($conf["fileAccess::getList"]);
6403
		unset($conf["fileAccess::getList"]);	
6404
 
6405
		#如果取得根目錄底下的資料失敗
6406
		if($rootList["status"]=="false"){
6407
 
6408
			#設置錯誤識別
6409
			$result["status"]="false";
6410
 
6411
			#設置錯誤訊息
6412
			$result["error"]=$rootList;
6413
 
6414
			#回傳結果
6415
			return $result;
6416
 
6417
			}#if end
6418
 
6419
		#取得當前目錄	
6420
		$result["position"]=$rootList["position"];	
6421
 
6422
		#取得根目錄層級可以看到的檔案與目錄
6423
		$result["content"]=$rootList["content"];
6424
 
6425
		#如果當前目錄有檔案與子目錄
6426
		if(isset($result["content"])){
6427
 
6428
			#當前層級有幾個檔案目錄就執行幾次
6429
			for($i=0;$i<count($result["content"]);$i++){
6430
 
6431
				#如果該單位是目錄
6432
				if($result["content"][$i]["folder"]=="true"){
6433
 
6434
					#呼叫當前函數,取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
43 liveuser 6435
					#函式說明:
1 liveuser 6436
					#取得目錄底下所有目錄與檔案的樹狀結構.
43 liveuser 6437
					#回傳結果:
1 liveuser 6438
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6439
					#$result["error"],錯誤訊息陣列.
6440
					#$result["function"],函數名稱.
6441
					#$result["content"],陣列,檔案目錄的樹狀結構.
6442
					#$result["total"],根目錄底下有多少目錄與檔案
43 liveuser 6443
					#必填參數:
1 liveuser 6444
					#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6445
					$conf["fileAccess::getListTree"]["position"]=$conf["position"]."/".$result["content"][$i]["name"];
6446
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6447
					$conf["fileAccess::getListTree"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 6448
					#可省略參數:
1 liveuser 6449
					#無
6450
					$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6451
					unset($conf["fileAccess::getListTree"]);
6452
 
6453
					#如果取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊失敗
6454
					if($getListTree["status"]=="false"){
6455
 
6456
						#設置錯誤識別
6457
						$result["status"]="false";
6458
 
6459
						#設置錯誤訊息
6460
						$result["error"]=$getListTree;
6461
 
6462
						#回傳結果
6463
						return $result;
6464
 
6465
						}#if end
6466
 
6467
					#如果 $conf["position"]."/".$result["content"][$i]["name"] 目錄有檔案與子目錄
6468
					if(isset($getListTree["content"])){	
6469
 
6470
						#取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊
6471
						$result["content"][$i]["next"]=$getListTree["content"];
6472
 
6473
						}#if end
6474
 
6475
					#取得當前目錄	
6476
					$result["content"][$i]["position"]=$rootList["position"];	
6477
 
6478
					}#if end
6479
 
6480
				}#for end
6481
 
6482
			}#if end
6483
 
6484
		#執行到這邊代表執行正常
6485
		$result["status"]="true";
6486
 
6487
		#回傳結果
6488
		return $result;
6489
 
6490
		}#function getListTree end
6491
 
6492
	/*
43 liveuser 6493
	#函式說明:
1 liveuser 6494
	#取得目錄底下所有目錄與檔案清單.
43 liveuser 6495
	#回傳結果:
1 liveuser 6496
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6497
	#$result["error"],錯誤訊息陣列.
6498
	#$result["function"],函數名稱.
6499
	#$result["content"],陣列,目錄底下的檔案與子目錄.
6500
	#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
6501
	#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
711 liveuser 6502
	#$result["content"][$i]["ownerPerm"],字串,使用者的權限.
6503
	#$result["content"][$i]["groupPerm"],字串,群組使用者的權限.
6504
	#$result["content"][$i]["otherPerm"],字串,其他使用者的權限.
6505
	#$result["content"][$i]["ownerName"],字串,擁有者賬戶.
6506
	#$result["content"][$i]["groupName"],字串,群組擁有者賬戶.
1 liveuser 6507
	#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
6508
	#$result["position"],目前的位置.
43 liveuser 6509
	#必填參數:
1 liveuser 6510
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6511
	$conf["position"]="";
6512
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6513
	$conf["fileArgu"]=__FILE__;
43 liveuser 6514
	#可省略參數:
1 liveuser 6515
	#無
187 liveuser 6516
	#參考資料:
1 liveuser 6517
	#opendir=>http://php.net/manual/en/function.opendir.php
6518
	#is_dir=>http://php.net/manual/en/function.is-dir.php
43 liveuser 6519
	#備註:
6520
	#無.
1 liveuser 6521
	*/
402 liveuser 6522
	public static function getList(&$conf){
1 liveuser 6523
 
6524
		#初始化要回傳的結果
6525
		$result=array();
6526
 
6527
		#設置當其函數名稱
6528
		$result["function"]=__FUNCTION__;
6529
 
6530
		#初始化記載檔案目錄名單的陣列
6531
		$result["content"]=array();
6532
 
6533
		#如果 $conf 不為陣列
6534
		if(gettype($conf)!="array"){
6535
 
6536
			#設置執行失敗
6537
			$result["status"]="false";
6538
 
6539
			#設置執行錯誤訊息
6540
			$result["error"][]="\$conf變數須為陣列形態";
6541
 
6542
			#如果傳入的參數為 null
6543
			if($conf==null){
6544
 
6545
				#設置執行錯誤訊息
6546
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6547
 
6548
				}#if end
6549
 
6550
			#回傳結果
6551
			return $result;
6552
 
6553
			}#if end
6554
 
6555
		#檢查必填參數
43 liveuser 6556
		#函式說明:
1 liveuser 6557
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6558
		#回傳的結果:
6559
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6560
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6561
		#$result["function"],當前執行的函式名稱.
6562
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6563
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6564
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6565
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6566
		#必填寫的參數:
6567
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6568
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6569
		#可以省略的參數:
6570
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6571
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6572
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6573
		unset($conf["variableCheck.isexistMulti"]);
6574
 
6575
		#如果檢查失敗
6576
		if($checkResult["status"]=="false"){
6577
 
6578
			#設置錯誤識別
6579
			$result["status"]="false";
6580
 
6581
			#設置錯誤訊息
6582
			$result["error"]=$checkResult;
6583
 
6584
			#回傳結果
6585
			return $result;
6586
 
6587
			}#if end
6588
 
6589
		#如果檢查不通過
6590
		if($checkResult["passed"]==="false"){
6591
 
6592
			#設置錯誤識別
6593
			$result["status"]="false";
6594
 
6595
			#設置錯誤訊息
6596
			$result["error"]=$checkResult;
6597
 
6598
			#回傳結果
6599
			return $result;
6600
 
6601
			}#if end
6602
 
6603
		#檢查目標路徑是否為「/」開頭的路徑
43 liveuser 6604
		#函式說明:
1 liveuser 6605
		#取得符合特定字首與字尾的字串
43 liveuser 6606
		#回傳結果:
1 liveuser 6607
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
6608
		#$result["function"],當前執行的函數名稱.
6609
		#$result["error"],錯誤訊息陣列.
6610
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
6611
		#$result["returnString"],爲符合字首條件的字串內容。
6612
		#必填參數:
6613
		#$conf["checkString"],字串,要檢查的字串.
6614
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["position"];
6615
		#可省略參數:
6616
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
6617
		$conf["search::getMeetConditionsString"]["frontWord"]="/";
6618
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
6619
		#$conf["tailWord"]="";
6620
		#參考資料:
6621
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
6622
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
6623
		unset($conf["search::getMeetConditionsString"]);
6624
 
6625
		#如果檢查關鍵字失敗
6626
		if($getMeetConditionsString["status"]=="false"){
6627
 
6628
			#設置錯誤識別
6629
			$result["status"]="false";
6630
 
6631
			#設置錯誤訊息
6632
			$result["error"]=$getMeetConditionsString;
6633
 
6634
			#回傳結果
6635
			return $result;
6636
 
6637
			}#if end					
6638
 
6639
		#如果目標路徑不為「/」開頭的路徑,則為相對路徑
6640
		if($getMeetConditionsString["founded"]=="false"){
6641
 
6642
			#取得目標位置的路徑
43 liveuser 6643
			#函式說明:
1 liveuser 6644
			#將檔案的位置名稱變成網址
6645
			#回傳結果:
6646
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6647
			#$result["error"],錯誤訊息陣列.
6648
			#$result["function"],函數名稱. 
6649
			#$result["content"],網址.
6650
			#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
6651
			#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
6652
			#必填參數:
6653
			#$conf["address"],字串,檔案的相對位置.
6654
			$conf["fileAccess::getInternetAddress"]["address"]=$conf["position"];
6655
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
6656
			$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
6657
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
6658
			#$conf["fileAccess::getInternetAddress"]["userDir"]="true";
6659
			$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
6660
			unset($conf["fileAccess::getInternetAddress"]);	
6661
 
6662
			#如果將檔案的位置名稱變成網址失敗
6663
			if($getInternetAddress["status"]=="false"){
6664
 
6665
				#設置錯誤識別
6666
				$result["status"]="false";
6667
 
6668
				#設置錯誤訊息
6669
				$result["error"]=$getInternetAddress;
6670
 
6671
				#回傳結果
6672
				return $result;
6673
 
6674
				}#if end	
6675
 
6676
			#置換目標位置為檔案系統路徑的絕對位置
6677
			$conf["position"]=$getInternetAddress["fileSystemAbsoulutePosition"];
6678
 
6679
			}#if end						
6680
 
6681
		#如果目標是資料夾	
6682
		if(is_dir($conf["position"])) {
6683
 
6684
			#設置為資料夾
6685
			$result["folder"]="true";
6686
 
6687
			#如果開啟資料夾成功
6688
			if($dh=opendir($conf["position"])){
6689
 
6690
				#初始化計數變數
6691
				$count=0;
6692
 
6693
				#如果資料夾裡面有檔案
6694
				while(($fileName=readdir($dh))!==false){
6695
 
6696
					#debug
6697
					#echo "有檔案";
6698
 
6699
					#如果名稱是「.」或「..」
6700
					if($fileName=="." || $fileName==".."){
6701
 
6702
						#則跳過
6703
						continue;
6704
 
6705
						}#if end
6706
 
6707
					#取得檔案或子目錄名稱
6708
					$result["content"][$count]["name"]=$fileName;					
6709
 
711 liveuser 6710
					#取得詳細資訊
6711
					#函式說明:
6712
					#取得節點的資訊.
6713
					#回傳結果:
6714
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6715
					#$result["error"],錯誤訊息陣列.
6716
					#$result["function"],函數名稱. 
6717
					#$result["content"],檔案資訊陣列.
6718
					#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
6719
					#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
6720
					#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
6721
					#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
6722
					#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
6723
					#$result["content"]["ownerName"],檔案擁有着資訊.
6724
					#$result["content"]["groupName"],檔案所屬擁有着資訊.
6725
					#$result["content"]["size"],檔案大小.
6726
					#$result["content"]["modifyDate"],檔案變更年月日.
6727
					#$result["content"]["modifyTime"],檔案變更時分秒.
6728
					#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
6729
					#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
6730
					#必填參數:
6731
					#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
733 liveuser 6732
					$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];
711 liveuser 6733
					#$conf["file"],字串,要查看擁有者資訊的檔案.
733 liveuser 6734
					$conf["fileAccess::fileInfo"]["file"]=$conf["position"]."/".$fileName;
711 liveuser 6735
					#可省略參數:
6736
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
733 liveuser 6737
					$conf["fileAccess::fileInfo"]["web"]="false";
711 liveuser 6738
					#參考資料:
6739
					#fileowner=>http://php.net/manual/en/function.fileowner.php
6740
					#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
6741
					#備註:
6742
					#無.
733 liveuser 6743
					$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);
6744
					unset($conf["fileAccess::fileInfo"]);
711 liveuser 6745
 
6746
					#如果執行失敗
6747
					if($fileInfo["status"]=="false"){
1 liveuser 6748
 
711 liveuser 6749
						#設置錯誤識別
6750
						$result["status"]="false";
1 liveuser 6751
 
711 liveuser 6752
						#設置錯誤訊息
6753
						$result["error"]=$fileInfo;
1 liveuser 6754
 
711 liveuser 6755
						#回傳結果
6756
						return $result;
1 liveuser 6757
 
711 liveuser 6758
						}#if end
1 liveuser 6759
 
711 liveuser 6760
					#設置是否為資料夾
6761
					$result["content"][$count]["folder"]=$fileInfo["content"]["is_folder"];
6762
 
6763
					#設置使用者的權限
6764
					$result["content"][$count]["ownerPerm"]=$fileInfo["content"]["ownerPerm"];
1 liveuser 6765
 
711 liveuser 6766
					#設置群組的權限
6767
					$result["content"][$count]["groupPerm"]=$fileInfo["content"]["groupPerm"];
6768
 
6769
					#設置其他使用者的權限
6770
					$result["content"][$count]["otherPerm"]=$fileInfo["content"]["otherPerm"];
6771
 
6772
					#設置其擁有者賬戶
6773
					$result["content"][$count]["ownerName"]=$fileInfo["content"]["ownerName"];
6774
 
6775
					#設置其群組擁有者賬戶
6776
					$result["content"][$count]["groupName"]=$fileInfo["content"]["groupName"];
6777
 
1 liveuser 6778
					#計數加1
6779
					$count++;
6780
 
6781
					}#while
6782
 
6783
				#關閉資料夾
6784
				closedir($dh);
6785
 
6786
				}#if end
6787
 
6788
			#開啟資料夾失敗	
6789
			else{
6790
 
6791
				#設置執行失敗
6792
				$result["status"]="false";
6793
 
6794
				#設置執行錯誤訊息
6795
				$result["error"][]="開啟資料夾「".$conf["position"]."」失敗";
6796
 
6797
				#回傳結果
6798
				return $result;
6799
 
6800
				}#else end
6801
 
6802
			}#if end
6803
 
6804
		#反之是檔案
6805
		else{
6806
 
6807
			#設置不為目錄
6808
			$result["folder"]="false";
6809
 
6810
			}#else end
6811
 
6812
		#取得目前位置
6813
		$result["position"]=$conf["position"];	
6814
 
6815
		#執行到這邊代表執行正常
6816
		$result["status"]="true";
6817
 
6818
		#回傳結果
6819
		return $result;	
6820
 
402 liveuser 6821
		}#function getList end
1 liveuser 6822
 
6823
	/*
43 liveuser 6824
	#函式說明:
1 liveuser 6825
	#取得目錄底下所有目錄與檔案的樹狀結構.
43 liveuser 6826
	#回傳結果:
1 liveuser 6827
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6828
	#$result["error"],錯誤訊息陣列.
6829
	#$result["function"],函數名稱.
6830
	#$result["content"],陣列,檔案目錄的樹狀結構.
43 liveuser 6831
	#必填參數:
1 liveuser 6832
	#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6833
	$conf["position"]="";
43 liveuser 6834
	#可省略參數:
6835
	#無.
187 liveuser 6836
	#參考資料:
6837
	#無.
43 liveuser 6838
	#備註:
6839
	#無.
1 liveuser 6840
	*/
6841
	public static function exportListTree(&$conf){
6842
 
6843
		#初始化要回傳的結果
6844
		$result=array();
6845
 
6846
		#設置當其函數名稱
6847
		$result["function"]=__FUNCTION__;
6848
 
6849
		#如果 $conf 不為陣列
6850
		if(gettype($conf)!="array"){
6851
 
6852
			#設置執行失敗
6853
			$result["status"]="false";
6854
 
6855
			#設置執行錯誤訊息
6856
			$result["error"][]="\$conf變數須為陣列形態";
6857
 
6858
			#如果傳入的參數為 null
6859
			if($conf==null){
6860
 
6861
				#設置執行錯誤訊息
6862
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
6863
 
6864
				}#if end
6865
 
6866
			#回傳結果
6867
			return $result;
6868
 
6869
			}#if end
6870
 
6871
		#檢查必填參數
43 liveuser 6872
		#函式說明:
1 liveuser 6873
		#檢查陣列裡面的特定元素是否存在以及其變數型態是否正確,如果沒有設定則回傳提示訊息。
6874
		#回傳的結果:
6875
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
6876
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
6877
		#$result["function"],當前執行的函式名稱.
6878
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
6879
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
6880
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
6881
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
6882
		#必填寫的參數:
6883
		$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數
6884
		$conf["variableCheck.isexistMulti"]["variableCheck"]=array("position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");
6885
		#可以省略的參數:
6886
		$conf["variableCheck.isexistMulti"]["variableType"]=array("string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double"); 
6887
		$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。
6888
		$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);
6889
		unset($conf["variableCheck.isexistMulti"]);
6890
 
6891
		#如果檢查失敗
6892
		if($checkResult["status"]=="false"){
6893
 
6894
			#設置錯誤識別
6895
			$result["status"]="false";
6896
 
6897
			#設置錯誤訊息
6898
			$result["error"]=$checkResult;
6899
 
6900
			#回傳結果
6901
			return $result;
6902
 
6903
			}#if end
6904
 
6905
		#如果檢查不通過
6906
		if($checkResult["passed"]=="false"){
6907
 
6908
			#設置錯誤識別
6909
			$result["status"]="false";
6910
 
6911
			#設置錯誤訊息
6912
			$result["error"]=$checkResult;
6913
 
6914
			#回傳結果
6915
			return $result;
6916
 
6917
			}#if end
6918
 
43 liveuser 6919
		#函式說明:
1 liveuser 6920
		#取得目錄底下所有目錄與檔案的樹狀結構.
43 liveuser 6921
		#回傳結果:
1 liveuser 6922
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6923
		#$result["error"],錯誤訊息陣列.
6924
		#$result["function"],函數名稱.
6925
		#$result["content"],陣列,檔案目錄的樹狀結構.
43 liveuser 6926
		#必填參數:
1 liveuser 6927
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
6928
		$conf["fileAccess::getListTree"]["position"]=$conf["position"];
43 liveuser 6929
		#可省略參數:
1 liveuser 6930
		#無
6931
		#備註:
6932
		#若檔案與目錄的名稱含有「[」與「]」與「(」與「)」將會無法取得其目錄底下的內容	
6933
		#若檔案與目錄的名稱含有「 」將會無法檢查檔案是否存在
6934
		#改用opendir()函數應該可以解決大部分的bug.
6935
		$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);
6936
		unset($conf["fileAccess::getListTree"]);
6937
 
6938
		#如果取得 目標目錄底下所有目錄與檔案的樹狀結構 失敗
711 liveuser 6939
		if($getListTree["status"]==="false"){
1 liveuser 6940
 
6941
			#設置錯誤識別
6942
			$result["status"]="false";
6943
 
6944
			#設置錯誤訊息
6945
			$result["error"]=$getListTree;
6946
 
6947
			#回傳結果
6948
			return $result;
6949
 
6950
			}#if end
6951
 
6952
		#目標目錄底下有幾個
6953
 
6954
		}#function exportListTree end
6955
 
6956
	/*
43 liveuser 6957
	#函式說明:
1 liveuser 6958
	#解壓縮tar.xz檔案,解壓縮完畢後,tar.xz檔案會被移除.
6959
	#回傳結果:
6960
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
6961
	#$result["error"],錯誤訊息陣列.
6962
	#$result["function"],函數名稱. 
6963
	#必填參數:
6964
	#$conf["tarXzFile"],字串變數,壓縮檔的位置與名稱,副檔名".tar.xz"會自動補上.
6965
	$conf["tarXzFile"]="";
6966
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
6967
	$conf["fileArgu"]=__FILE__;
6968
	#可省略參數:
6969
	#$conf["extractTo"],字串,要解壓縮到哪邊,預設為當前路徑"."
6970
	#$conf["extractTo"]=".";
6971
	#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
6972
	#$conf["commentsArray"]=array("");
187 liveuser 6973
	#參考資料:
6974
	#無.
43 liveuser 6975
	#備註:
6976
	#無.
1 liveuser 6977
	*/
6978
	public static function unpackTarXzFile(&$conf){
6979
 
6980
		#初始化要回傳的內容
6981
		$result=array();
6982
 
6983
		#記錄當前執行的函數名稱
6984
		$result["function"]=__FUNCTION__;
6985
 
6986
		#如果 $conf 不為陣列
6987
		if(gettype($conf)!="array"){
6988
 
6989
			#設置執行失敗
6990
			$result["status"]="false";
6991
 
6992
			#設置執行錯誤訊息
6993
			$result["error"][]="\$conf變數須為陣列形態";
6994
 
6995
			#如果傳入的參數為 null
6996
			if($conf==null){
6997
 
6998
				#設置執行錯誤訊息
6999
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7000
 
7001
				}#if end
7002
 
7003
			#回傳結果
7004
			return $result;
7005
 
7006
			}#if end
7007
 
7008
		#檢查參數
43 liveuser 7009
		#函式說明:
1 liveuser 7010
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7011
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7012
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7013
		#$result["function"],當前執行的函式名稱.
7014
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7015
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7016
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7017
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7018
		#必填寫的參數:
7019
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7020
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7021
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7022
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","tarXzFile");
7023
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7024
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7025
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7026
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7027
		#可以省略的參數:
7028
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7029
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7030
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7031
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","extractTo");
7032
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7033
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");
7034
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7035
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,".");
7036
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7037
		#$conf["arrayCountEqualCheck"][]=array();
7038
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7039
		unset($conf["variableCheck::checkArguments"]);
7040
 
7041
		#若檢查失敗
7042
		if($checkResult["status"]=="false"){
7043
 
7044
			#設置執行失敗
7045
			$result["status"]="false";
7046
 
7047
			#設置執行錯誤訊息
7048
			$result["error"]=$checkResult;
7049
 
7050
			#回傳結果
7051
			return $result;
7052
 
7053
			}#if end
7054
 
7055
		#若檢查不通過
7056
		if($checkResult["passed"]=="false"){
7057
 
7058
			#設置執行失敗
7059
			$result["status"]="false";
7060
 
7061
			#設置執行錯誤訊息
7062
			$result["error"]=$checkResult;
7063
 
7064
			#回傳結果
7065
			return $result;
7066
 
7067
			}#if end
7068
 
7069
		#如果 $conf["commentsArray"] 有設定
7070
		if(isset($conf["commentsArray"])){
7071
 
7072
			#印出提示文字
7073
			#函式說明:
7074
			#印出多行文字,結尾自動換行.
7075
			#回傳的結果:
7076
			#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
7077
			#$result["function"],當前執行的函數名稱.
7078
			#$result["error"],錯誤訊息陣列.
43 liveuser 7079
			#必填參數:
1 liveuser 7080
			#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.
7081
			$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];
7082
			$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);
7083
			unset($conf["cmd::echoMultiLine"]);
7084
 
7085
			#如果印出提示文字失敗
7086
			if($echoMultiLine["status"]=="false"){
7087
 
7088
				#設置執行失敗
7089
				$result["status"]="false";
7090
 
7091
				#設置執行錯誤訊息
7092
				$result["error"]=$echoMultiLine;
7093
 
7094
				#回傳結果
7095
				return $result;
7096
 
7097
				}#if end
7098
 
7099
			}#if end
7100
 
7101
		#檢查要移動的檔案是否存在
43 liveuser 7102
		#函式說明:
1 liveuser 7103
		#檢查多個檔案與資料夾是否存在.
7104
		#回傳的結果:
7105
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
7106
		#$result["error"],錯誤訊息陣列.
7107
		#$resutl["function"],當前執行的涵式名稱.
7108
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
7109
		#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。
7110
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
43 liveuser 7111
		#必填參數:
1 liveuser 7112
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["tarXzFile"].".tar.xz");#要檢查書否存在的檔案有哪些,須爲一維陣列數值。
7113
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
7114
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
7115
		#參考資料來源:
7116
		#http://php.net/manual/en/function.file-exists.php
7117
		#http://php.net/manual/en/control-structures.foreach.php
7118
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
7119
		unset($conf["fileAccess::checkMultiFileExist"]);
7120
 
7121
		#如果檢查失敗
7122
		if($checkMultiFileExist["status"]=="false"){
7123
 
7124
			#設置執行失敗
7125
			$result["status"]="false";
7126
 
7127
			#設置執行錯誤訊息
7128
			$result["error"]=$checkMultiFileExist;
7129
 
7130
			#回傳結果
7131
			return $result;
7132
 
7133
			}#if end	
7134
 
7135
		#如果來源檔案不存在
7136
		if($checkMultiFileExist["allExist"]=="false"){
7137
 
7138
			#設置執行失敗
7139
			$result["status"]="false";
7140
 
7141
			#設置執行錯誤訊息
7142
			$result["error"][]="檔案「".$conf["tarXzFile"].".tar.xz」不存在";
7143
 
7144
			#回傳結果
7145
			return $result;
7146
 
7147
			}#if end
7148
 
7149
		#進行解壓縮xz檔
43 liveuser 7150
		#函式說明:
1 liveuser 7151
		#呼叫shell執行系統命令,並取得回傳的內容.
7152
		#回傳的結果:
7153
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7154
		#$result["error"],錯誤訊息陣列.
7155
		#$result["function"],當前執行的函數名稱.
7156
		#$result["cmd"],執行的指令內容.
7157
		#$result["output"],爲執行完二元碼後的輸出陣列.
7158
		#必填的參數
7159
		#$conf["command"],字串,要執行的指令與.
7160
		$conf["fileAccess::callShell"]["command"]="xz -v -v -d -f ".$conf["tarXzFile"].".tar.xz";
7161
		#可省略參數:
7162
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
7163
		#$conf["fileAccess::callShell"]["argu"]=array();
7164
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7165
		#$conf["enablePrintDescription"]="true";
7166
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7167
		#$conf["printDescription"]="";
7168
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
7169
		#$conf["escapeshellarg"]="true";
7170
		#備註:
7171
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7172
		#參考資料:
7173
		#exec=>http://php.net/manual/en/function.exec.php
7174
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7175
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7176
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7177
		unset($conf["fileAccess::callShell"]);
7178
 
7179
		#如果解壓縮xz檔案失敗
7180
		if($callShell["status"]=="false"){
7181
 
7182
			#設置執行失敗
7183
			$result["status"]="false";
7184
 
7185
			#設置執行錯誤訊息
7186
			$result["error"]=$callShell;
7187
 
7188
			#回傳結果
7189
			return $result;
7190
 
7191
			}#if end
7192
 
7193
		#解壓縮tar檔
43 liveuser 7194
		#函式說明:
1 liveuser 7195
		#呼叫shell執行系統命令,並取得回傳的內容.
7196
		#回傳的結果:
7197
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7198
		#$result["error"],錯誤訊息陣列.
7199
		#$result["function"],當前執行的函數名稱.
7200
		#$result["cmd"],執行的指令內容.
7201
		#$result["output"],爲執行完二元碼後的輸出陣列.
7202
		#必填的參數
7203
		#$conf["command"],字串,要執行的指令與.
454 liveuser 7204
		$conf["fileAccess::callShell"]["command"]="tar";
1 liveuser 7205
		#可省略參數:
7206
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
454 liveuser 7207
		$conf["fileAccess::callShell"]["argu"]=array("-xvf",$conf["tarXzFile"]."tar",$conf["extractTo"]);
1 liveuser 7208
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
7209
		#$conf["enablePrintDescription"]="true";
7210
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
7211
		#$conf["printDescription"]="";
7212
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".
454 liveuser 7213
		$conf["fileAccess::callShell"]["escapeshellarg"]="true";
1 liveuser 7214
		#備註:
7215
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.
7216
		#參考資料:
7217
		#exec=>http://php.net/manual/en/function.exec.php
7218
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
7219
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
7220
		$callShell=external::callShell($conf["fileAccess::callShell"]);
7221
		unset($conf["fileAccess::callShell"]);
7222
 
7223
		#如果解壓縮xz檔案失敗
7224
		if($callShell["status"]=="false"){
7225
 
7226
			#設置執行失敗
7227
			$result["status"]="false";
7228
 
7229
			#設置執行錯誤訊息
7230
			$result["error"]=$callShell;
7231
 
7232
			#回傳結果
7233
			return $result;
7234
 
7235
			}#if end
7236
 
7237
		#移除tar檔
43 liveuser 7238
		#函式說明:
1 liveuser 7239
		#移除檔案
43 liveuser 7240
		#回傳結果:
1 liveuser 7241
		#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7242
		#$result["error"],錯誤訊息陣列
7243
		#$result["warning"],警告訊息陣列
7244
		#$result["function"],當前執行的函數名稱
43 liveuser 7245
		#必填參數:
1 liveuser 7246
		$conf["fileAccess::delFile"]["fileAddress"]=$conf["tarXzFile"].".tar";#要移除檔案的位置
7247
		#可省略參數:
7248
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7249
		$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
7250
		#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
7251
		#$conf["commentsArray"]=array("");
7252
		$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
7253
		unset($conf["fileAccess::delFile"]);	
7254
 
7255
		#如果移除檔案失敗
7256
		if($delFile["status"]=="false"){
7257
 
7258
			#設置執行失敗
7259
			$result["status"]="false";
7260
 
7261
			#設置執行錯誤訊息
7262
			$result["error"]=$delFile;
7263
 
7264
			#回傳結果
7265
			return $result;
7266
 
7267
			}#if end	
7268
 
7269
		#執行到這邊代表執行正常
7270
		$result["status"]="true";
7271
 
7272
		#回傳結果
7273
		return $result;
7274
 
7275
		}#function unpackTarXzFile end
7276
 
7277
	/*
43 liveuser 7278
	#函式說明:
1 liveuser 7279
	#用data:mimeType;base64,fileVar的形式來提供檔案的連結,亦即檔案儲存在變數裡面.
7280
	#回傳結果:
7281
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7282
	#$result["error"],錯誤訊息
7283
	#$result["content"],檔案變數的內容
7284
	#$result["fileTypeName"],副檔名,ex:「.tar.xz」.
7285
	#$result["function"],當前執行的函數名稱 
7286
	#必填參數:
7287
	#$conf["filePosition"],要轉存成2元碼的檔案位置與名稱
7288
	$conf["filePosition"]="";
7289
	#$conf["mimeType"],2元碼的內容是什麼
7290
	$conf["mimeType"]="";
7291
	#可省略參數:
7292
	#$conf["compressType"],2元碼壓縮的方式,預設為"base64".
7293
	#$conf["compressType"]="base64";
7294
	#$conf["delFile"],讀取完檔案後,要移除檔案嗎?"true"代表要移除,"false"代表不要移除,預設為"false".
7295
	#$conf["delFile"]="false";
7296
	#參考資料:
7297
	#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php
7298
	#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php
43 liveuser 7299
	#備註:
7300
	#無.
1 liveuser 7301
	*/
7302
	public static function data(&$conf){
7303
 
7304
		#初始化要回傳的內容
7305
		$result=array();
7306
 
7307
		#取得當前執行的函數名稱
7308
		$result["function"]=__FUNCTION__;
7309
 
7310
		#如果 $conf 不為陣列
7311
		if(gettype($conf)!="array"){
7312
 
7313
			#設置執行失敗
7314
			$result["status"]="false";
7315
 
7316
			#設置執行錯誤訊息
7317
			$result["error"][]="\$conf變數須為陣列形態";
7318
 
7319
			#如果傳入的參數為 null
7320
			if($conf==null){
7321
 
7322
				#設置執行錯誤訊息
7323
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7324
 
7325
				}#if end
7326
 
7327
			#回傳結果
7328
			return $result;
7329
 
7330
			}#if end
7331
 
7332
		#檢查參數
43 liveuser 7333
		#函式說明:
1 liveuser 7334
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7335
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7336
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7337
		#$result["function"],當前執行的函式名稱.
7338
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7339
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7340
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7341
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7342
		#必填寫的參數:
7343
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7344
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7345
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7346
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePosition");
7347
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7348
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
7349
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7350
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7351
		#可以省略的參數:
7352
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7353
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7354
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7355
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");
7356
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7357
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
7358
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7359
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");
7360
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7361
		#$conf["arrayCountEqualCheck"][]=array();
7362
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7363
		unset($conf["variableCheck::checkArguments"]);
7364
 
7365
		#如果檢查參數失敗
7366
		if($checkResult["status"]=="false"){
7367
 
7368
			#設置執行失敗
7369
			$result["status"]="false";
7370
 
7371
			#設置錯誤訊息
7372
			$result["error"]=$checkResult;
7373
 
7374
			#回傳結果
7375
			return $result;
7376
 
7377
			}#if end
7378
 
7379
		#如果檢查參數不通過
7380
		if($checkResult["passed"]=="false"){
7381
 
7382
			#設置執行失敗
7383
			$result["status"]="false";
7384
 
7385
			#設置錯誤訊息
7386
			$result["error"]=$checkResult;
7387
 
7388
			#回傳結果
7389
			return $result;
7390
 
7391
			}#if end
7392
 
7393
		#依據檔案名稱取得副檔名 $result["fileTypeName"]
43 liveuser 7394
		#函式說明:
1 liveuser 7395
		#將固定格式的字串分開,並回傳分開的結果。
7396
		#回傳的參數:
7397
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7398
		#$result["error"],錯誤訊息陣列
7399
		#$result["function"],當前執行的函數名稱.
7400
		#$result["oriStr"],要分割的原始字串內容
7401
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7402
		#$result["dataCounts"],爲總共分成幾段
43 liveuser 7403
		#必填參數:
1 liveuser 7404
		$conf["stringProcess::spiltString"]["stringIn"]=basename($conf["filePosition"]);#要處理的字串。
7405
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
7406
		#備註:
7407
		#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
7408
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7409
		unset($conf["stringProcess::spiltString"]);
7410
 
7411
		#如果分割字串失敗
7412
		if($spiltString["status"]=="false"){
7413
 
7414
			#設置執行失敗
7415
			$result["status"]="false";
7416
 
7417
			#設置錯誤訊息
7418
			$result["error"]=$spiltString;
7419
 
7420
			#回傳結果
7421
			return $result;
7422
 
7423
			}#if end
7424
 
7425
		#初始化副檔名
7426
		$result["fileTypeName"]="";	
7427
 
7428
		#如果只有一段代表沒有副檔名
7429
		if($spiltString["dataCounts"]==1){
7430
 
7431
			#副檔名設置為 "unknow"
7432
			$result["fileTypeName"]="unknow";
7433
 
7434
			}#if end
7435
 
7436
		#不符合以上條件,但至少有兩段
7437
		else if($spiltString["dataCounts"]>=2){
7438
 
7439
			#執行 $spiltString["dataCounts"] 減一次的迴圈
7440
			for($i=1;$i<$spiltString["dataCounts"];$i++){
7441
 
7442
				#串接副檔名
7443
				$result["fileTypeName"]=$result["fileTypeName"].".".$spiltString["dataArray"][$i];
7444
 
7445
				}#for end
7446
 
7447
			}#if end
7448
 
7449
		#讀取檔案內容
7450
		$fileBin=file_get_contents($conf["filePosition"],"rb");
7451
 
7452
		#編碼檔案
7453
		$base64fileBin=base64_encode($fileBin);
7454
 
7455
		#如果 $conf["delFile"] 等於 "true"
7456
		if($conf["delFile"]=="true"){
7457
 
7458
			#移除檔案
43 liveuser 7459
			#函式說明:
1 liveuser 7460
			#移除檔案
43 liveuser 7461
			#回傳結果:
1 liveuser 7462
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
7463
			#$result["error"],錯誤訊息陣列
7464
			#$result["warning"],警告訊息陣列
7465
			#$result["function"],當前執行的函數名稱
43 liveuser 7466
			#必填參數:
1 liveuser 7467
			$conf["fileAccess::delFile"]["fileAddress"]=$conf["filePosition"];#要移除檔案的位置
7468
			$del=fileAccess::delFile($conf["fileAccess::delFile"]);
7469
			unset($conf["fileAccess::delFile"]);
7470
 
7471
			#如果移除圖片失敗
7472
			if($del["status"]=="false"){
7473
 
7474
				#設置執行失敗
7475
				$result["status"]="false";
7476
 
7477
				#設置錯誤訊息
7478
				$result["error"]=$del;
7479
 
7480
				#回傳結果
7481
				return $result;
7482
 
7483
				}#if end
7484
 
7485
			}#if end
7486
 
7487
		#放置檔案的語法
7488
		$result["content"]="data:".$conf["mimeType"].";".$conf["compressType"].",".$base64fileBin;
7489
 
7490
		#執行到這邊代表執行正常
7491
		$result["status"]="true";
7492
 
7493
		#回傳結果
7494
		return $result;
7495
 
7496
		}#function data end
7497
 
7498
	/*
43 liveuser 7499
	#函式說明:
1 liveuser 7500
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7501
	#回傳結果:
7502
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7503
	#$result["error"],錯誤訊息陣列.
7504
	#$result["function"],函數名稱. 
7505
	#$result["argu"],使用的參數.
7506
	#$result["content"],網址,若是在命令列執行,則為"null".
7507
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7508
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
7509
	#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
7510
	#必填參數:
7511
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7512
	$conf["address"]="";
7513
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7514
	$conf["fileArgu"]=__FILE__;
7515
	#可省略參數:
7516
	#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
7517
	#$conf["userDir"]="true";
187 liveuser 7518
	#參考資料:
7519
	#無.
43 liveuser 7520
	#備註:
7521
	#無.
1 liveuser 7522
	*/
7523
	public static function getInternetAddress(&$conf){
7524
 
7525
		#初始化要回傳的變數
7526
		$result=array();
7527
 
7528
		#記錄當前執行的函數名稱
7529
		$result["function"]=__FUNCTION__;
7530
 
7531
		#如果 $conf 不為陣列
7532
		if(gettype($conf)!="array"){
7533
 
7534
			#設置執行失敗
7535
			$result["status"]="false";
7536
 
7537
			#設置執行錯誤訊息
7538
			$result["error"][]="\$conf變數須為陣列形態";
7539
 
7540
			#如果傳入的參數為 null
7541
			if($conf==null){
7542
 
7543
				#設置執行錯誤訊息
7544
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
7545
 
7546
				}#if end
7547
 
7548
			#回傳結果
7549
			return $result;
7550
 
7551
			}#if end
7552
 
7553
		#取得使用的參數
7554
		$result["argu"]=$conf;
7555
 
7556
		#檢查參數
43 liveuser 7557
		#函式說明:
1 liveuser 7558
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7559
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7560
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7561
		#$result["function"],當前執行的函式名稱.
7562
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7563
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7564
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7565
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
7566
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7567
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7568
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
7569
		#必填寫的參數:
7570
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7571
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7572
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7573
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
7574
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
7575
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7576
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7577
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7578
		#可以省略的參數:
7579
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
7580
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
7581
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
7582
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("userDir");
7583
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
7584
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
7585
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
7586
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
7587
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
7588
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();
7589
		#參考資料來源:
7590
		#array_keys=>http://php.net/manual/en/function.array-keys.php
7591
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
7592
		unset($conf["variableCheck::checkArguments"]);
7593
 
7594
		#如果檢查失敗
7595
		if($checkResult["status"]==="false"){
7596
 
7597
			#設置錯誤狀態
7598
			$result["status"]="false";
7599
 
7600
			#設置錯誤提示
7601
			$result["error"]=$checkResult;
7602
 
7603
			#回傳結果
7604
			return $result;
7605
 
7606
			}#if end
7607
 
7608
		#如果檢查不通過
7609
		if($checkResult["passed"]==="false"){
7610
 
7611
			#設置錯誤狀態
7612
			$result["status"]="false";
7613
 
7614
			#設置錯誤提示
7615
			$result["error"]=$checkResult;
7616
 
7617
			#回傳結果
7618
			return $result;
7619
 
7620
			}#if end
7621
 
7622
		#如果是本來就是網址了
7623
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
7624
 
7625
			#設置執行正常
7626
			$result["status"]="true";
7627
 
7628
			#取得網址
7629
			$result["content"]=$conf["address"];
7630
 
7631
			#回傳結果
7632
			return $result;			
7633
 
7634
			}#if end	
7635
 
7636
		#解析 $conf["fileArgu"]
43 liveuser 7637
		#函式說明:
1 liveuser 7638
		#將固定格式的字串分開,並回傳分開的結果。
7639
		#回傳的參數:
7640
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7641
		#$result["error"],錯誤訊息陣列
7642
		#$result["function"],當前執行的函數名稱.
7643
		#$result["oriStr"],要分割的原始字串內容
7644
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7645
		#$result["dataCounts"],爲總共分成幾段
43 liveuser 7646
		#必填參數:
1 liveuser 7647
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7648
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7649
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7650
		unset($conf["stringProcess::spiltString"]); 
7651
 
7652
		#如果分割字串失敗
7653
		if($spiltString["status"]==="false"){
7654
 
7655
			#設置錯誤狀態
7656
			$result["status"]="false";
7657
 
7658
			#設置錯誤提示
7659
			$result["error"]=$spiltString;
7660
 
7661
			#回傳結果
7662
			return $result;
7663
 
7664
			}#if end
7665
 
43 liveuser 7666
		#函式說明:
1 liveuser 7667
		#將多個路徑字串變成相對於當前路徑的相對路徑字串
7668
		#回傳結果:
7669
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7670
		#$result["error"],錯誤訊息陣列.
7671
		#$result["function"],函數名稱. 
7672
		#$result["content"],字串陣列,多個轉換好的相對路徑字串.
7673
		#必填參數:
7674
		#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
7675
		$conf["fileAccess::getRelativePath"]["path"]=array($conf["address"]);
7676
		#$conf["fileArgu"],字串,當前路徑.
7677
		$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
7678
		$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
7679
		unset($conf["fileAccess::getRelativePath"]);
7680
 
7681
		#如果取得相對位置失敗
7682
		if($getRelativePath["status"]==="false"){
7683
 
7684
			#設置錯誤狀態
7685
			$result["status"]="false";
7686
 
7687
			#設置錯誤提示
7688
			$result["error"]=$getRelativePath;
7689
 
7690
			#回傳結果
7691
			return $result;
7692
 
7693
			}#if end			
7694
 
7695
		#取得轉換成相對路徑的位置
7696
		$result["fileSystemRelativePosition"]=$getRelativePath["content"][0];
7697
 
7698
		#解析 $conf["fileArgu"]
43 liveuser 7699
		#函式說明:
1 liveuser 7700
		#將固定格式的字串分開,並回傳分開的結果。
7701
		#回傳的參數:
7702
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7703
		#$result["error"],錯誤訊息陣列
7704
		#$result["function"],當前執行的函數名稱.
7705
		#$result["oriStr"],要分割的原始字串內容
7706
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7707
		#$result["dataCounts"],爲總共分成幾段
43 liveuser 7708
		#必填參數:
1 liveuser 7709
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
7710
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7711
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7712
		unset($conf["stringProcess::spiltString"]); 
7713
 
7714
		#如果分割字串失敗
7715
		if($spiltString["status"]==="false"){
7716
 
7717
			#設置錯誤狀態
7718
			$result["status"]="false";
7719
 
7720
			#設置錯誤提示
7721
			$result["error"]=$spiltString;
7722
 
7723
			#回傳結果
7724
			return $result;
7725
 
7726
			}#if end
7727
 
7728
		#debug
7729
		#var_dump($spiltString);
7730
		#var_dump($_SERVER);
7731
 
7732
		#初始化檔案在伺服器上的檔案系統位置
7733
		$result["fileSystemAbsoulutePosition"]="/";
7734
 
7735
		#將最後一段捨棄
7736
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7737
 
7738
			$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$spiltString["dataArray"][$i]."/";
7739
 
7740
			}#for end				
7741
 
7742
		#取得非直觀的絕對位置
7743
		$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$result["fileSystemRelativePosition"];
7744
 
7745
		#將檔案的相對路徑進行整理,變成可以直接讀的路徑.
7746
		#函式說明:
7747
		#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
7748
		#回傳的結果:
7749
		#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
7750
		#$result["function"],當前執行的函數.
7751
		#$result["error"],錯誤訊息陣列.
7752
		#$result["changedPath"],處理完後回傳的目錄字串.
7753
		#$result["oriPath"],原始的路徑字串
43 liveuser 7754
		#必填參數:
1 liveuser 7755
		#$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"],字串,要處理的檔案目錄字串.
7756
		$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$result["fileSystemAbsoulutePosition"];
7757
		$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
7758
		unset($conf["stringProcess::changeDirByDotDotSolidus"]);
7759
 
7760
		#如果處理失敗
7761
		if($changeDirByDotDotSolidus["status"]==="false"){
7762
 
7763
			#設置錯誤狀態
7764
			$result["status"]="false";
7765
 
7766
			#設置錯誤提示
7767
			$result["error"]=$changeDirByDotDotSolidus;
7768
 
7769
			#回傳結果
7770
			return $result;
7771
 
7772
			}#if end
7773
 
7774
		#改變為易讀的絕對路徑
7775
		$result["fileSystemAbsoulutePosition"]=$changeDirByDotDotSolidus["changedPath"];	
7776
 
7777
		#如果 $conf["userDir"] 為 "true"
7778
		if($conf["userDir"]==="true"){
7779
 
7780
			#重設為 絕對路徑 [/~家目錄名稱」
7781
			$result["webPathFromRoot"]="/~".$spiltString["dataArray"][1];
7782
 
7783
			#從第四段到倒數第二段,將其內容合併
7784
			for($i=3;$i<$spiltString["dataCounts"]-1;$i++){
7785
 
7786
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7787
 
7788
				}#for end
7789
 
7790
			}#if end
7791
 
7792
		#反之 $conf["userDir"] 為 "false",
7793
		else{
7794
 
7795
			#重設為 ""
7796
			$result["webPathFromRoot"]="";
7797
 
7798
			#可能的根目錄層級 - start 
7799
 
7800
			#解析 $conf["fileArgu"]
43 liveuser 7801
			#函式說明:
1 liveuser 7802
			#將固定格式的字串分開,並回傳分開的結果。
7803
			#回傳的參數:
7804
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7805
			#$result["error"],錯誤訊息陣列
7806
			#$result["function"],當前執行的函數名稱.
7807
			#$result["oriStr"],要分割的原始字串內容
7808
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
7809
			#$result["dataCounts"],爲總共分成幾段
43 liveuser 7810
			#必填參數:
1 liveuser 7811
			$conf["stringProcess::spiltString"]["stringIn"]=$_SERVER["PHP_SELF"];#要處理的字串。
7812
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
7813
			$keyWord=stringProcess::spiltString($conf["stringProcess::spiltString"]);
7814
			unset($conf["stringProcess::spiltString"]); 
7815
 
7816
			#如果處理失敗
7817
			if($keyWord["status"]==="false"){
7818
 
7819
				#設置錯誤狀態
7820
				$result["status"]="false";
7821
 
7822
				#設置錯誤提示
7823
				$result["error"]=$keyWord;
7824
 
7825
				#回傳結果
7826
				return $result;
7827
 
7828
				}#if end
7829
 
7830
			#取得關鍵字
7831
			$keyWord=$keyWord["dataArray"][0];
7832
 
7833
			#預設層級為4層
7834
			$layer=4;
7835
 
7836
			#檢查每個絕對路徑片段
7837
			for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
7838
 
7839
				#如果路徑片段等於 $keyWord
7840
				if($spiltString["dataArray"][$i]===$keyWord){
7841
 
7842
					#取得層級
908 liveuser 7843
					$layer=$i;
1 liveuser 7844
 
7845
					#跳出迴圈
7846
					break;
7847
 
7848
					}#if end
7849
 
7850
				}#for end
7851
 
7852
			#可能的根目錄層級 - end
7853
 
7854
			#網頁於檔案系統中的存放路徑可能為「/var/www/html」,從第四段到倒數第二段,將其內容合併
7855
			for($i=$layer;$i<$spiltString["dataCounts"]-1;$i++){
7856
 
7857
				$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];
7858
 
7859
				}#for end
7860
 
7861
			}#else end
7862
 
7863
		#加上檔案的路徑
7864
		$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$conf["address"];			
7865
 
7866
		#取得檔案位於網頁伺服器的絕對位置
43 liveuser 7867
		#函式說明:
1 liveuser 7868
		#取得用戶端的資訊,並依據需要寫入到資料表裡面
43 liveuser 7869
		#回傳結果:
1 liveuser 7870
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
7871
		#$result["error"],錯誤訊息.
7872
		#$result["function"],檔前執行的函數名稱.
7873
		#$result["userBrowserType"],爲使用者的瀏覽器資訊
7874
		#$result["userIp"],爲使用者的IP
7875
		#$result["serverIp"],為伺服器的IP
7876
		#$result["scheme"],通訊協定
7877
		#$result["serverPort"],伺服器給對外下載網頁的port
7878
		#$result["requestUri"],爲使用者要求的網址
7879
		#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
7880
		#$result["clientRequestIP"],用戶端要求的ip與port
43 liveuser 7881
		#必填參數:
1 liveuser 7882
		$conf["csInformation::getConnectionInfo"]["getAccount"]="false";#是否要取得帳號
43 liveuser 7883
		#可省略參數:
1 liveuser 7884
		#$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]
7885
		#$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存
7886
		#$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。
7887
		#$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。
7888
		#$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7889
		#$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
7890
		#$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,
7891
			#例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
7892
			#寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間
7893
			#$conf["saveToDb"]設為"true",則該參數為必填。
7894
		#$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
7895
		$getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
7896
		unset($conf["csInformation::getConnectionInfo"]);	
7897
 
7898
		#如果取得連線資訊失敗
7899
		if($getConnectionInfo["status"]==="false"){
7900
 
7901
			#設置錯誤狀態
7902
			$result["status"]="false";
7903
 
7904
			#設置錯誤提示
7905
			$result["error"]=$getConnectionInfo;
7906
 
7907
			#回傳結果
7908
			return $result;
7909
 
7910
			}#if end
7911
 
7912
		#如果運行環境為 "web"
7913
		if($getConnectionInfo["mode"]=="web"){
7914
 
7915
			#為絕對路徑加上通訊協定與ip與port
7916
			#$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["serverIp"].":".$getConnectionInfo["serverPort"].$result["webPathFromRoot"];	
7917
 
7918
			#為絕對路徑加上用戶端通訊協定與ip與port	
7919
			$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["clientRequestIP"].$result["webPathFromRoot"];
908 liveuser 7920
 
1 liveuser 7921
			}#if end
7922
 
7923
		#反之如果為 "cmd" 環境
7924
		else{
7925
 
7926
			$result["content"]="null";
7927
 
908 liveuser 7928
			}#else end
7929
 
1 liveuser 7930
		#設置執行正常
7931
		$result["status"]="true";
7932
 
7933
		#回傳結果
7934
		return $result;
7935
 
7936
		}#function getInternetAddress end
7937
 
7938
	/*
43 liveuser 7939
	#函式說明:
1 liveuser 7940
	#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
7941
	#回傳結果:
7942
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
7943
	#$result["error"],錯誤訊息陣列.
7944
	#$result["function"],函數名稱. 
7945
	#$result["argu"],使用的參數.
7946
	#$result["content"],網址,若是在命令列執行,則為"null".
7947
	#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
7948
	#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
7949
	#必填參數:
7950
	#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
7951
	$conf["address"]="";
7952
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
7953
	$conf["fileArgu"]=__FILE__;
7954
	#可省略參數:
7955
	#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
7956
	#$conf["web"]="true";
187 liveuser 7957
	#參考資料:
7958
	#無.
1 liveuser 7959
	#備註:
409 liveuser 7960
	#無.
1 liveuser 7961
	*/
7962
	public static function getInternetAddressV2(&$conf){
7963
 
7964
		#初始化要回傳的變數
7965
		$result=array();
7966
 
7967
		#記錄當前執行的函數名稱
7968
		$result["function"]=__FUNCTION__;
7969
 
7970
		#取得參數
7971
		$result["argu"]=$conf;
7972
 
7973
		#檢查參數
7974
		#函式說明:
7975
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
7976
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
7977
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
7978
		#$result["function"],當前執行的函式名稱.
7979
		#$result["argu"],設置給予的參數.
7980
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
7981
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
7982
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
7983
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
7984
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
7985
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
7986
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
7987
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
7988
		#必填寫的參數:
7989
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
7990
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
7991
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
7992
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
7993
		#可以省略的參數:
7994
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
7995
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");
7996
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
7997
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
7998
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
7999
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8000
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
8001
		#$conf["canNotBeEmpty"]=array();
8002
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
8003
		#$conf["canBeEmpty"]=array();
8004
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
8005
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
8006
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8007
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
8008
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
8009
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
8010
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8011
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
8012
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
8013
		#$conf["disallowAllSkipableVarIsEmpty"]="";
8014
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
8015
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
8016
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8017
		#$conf["arrayCountEqualCheck"][]=array();
8018
		#參考資料來源:
8019
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8020
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8021
		unset($conf["variableCheck::checkArguments"]);
8022
 
8023
		#如果檢查失敗
8024
		if($checkArguments["status"]==="false"){
8025
 
8026
			#設置錯誤狀態
8027
			$result["status"]="false";
8028
 
8029
			#設置錯誤提示
8030
			$result["error"]=$checkArguments;
8031
 
8032
			#回傳結果
8033
			return $result;
8034
 
8035
			}#if end
8036
 
8037
		#如果檢查不通過
8038
		if($checkArguments["passed"]==="false"){
8039
 
8040
			#設置錯誤狀態
8041
			$result["status"]="false";
8042
 
8043
			#設置錯誤提示
8044
			$result["error"]=$checkArguments;
8045
 
8046
			#回傳結果
8047
			return $result;
8048
 
8049
			}#if end
8050
 
8051
		#如果是本來就是網址了
8052
		if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){
8053
 
8054
			#取得網址
8055
			$result["content"]=$conf["address"];
8056
 
8057
			}#if end
8058
 
8059
		#反之是絕對或相對路徑
8060
		else{
8061
 
8062
			#如果不是絕對位置
8063
			if(strpos($conf["address"],"/")!==0){
8064
 
8065
				#如果有這些參數
8066
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8067
 
8068
					#網址
8069
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8070
 
8071
					}#if end
8072
 
8073
				#反之
8074
				else{
8075
 
8076
					#網址設置為 null
8077
					$result["content"]=null;
8078
 
8079
					}#else
8080
 
8081
				}#if end
8082
 
8083
			#反之是絕對位置
8084
			else{
8085
 
8086
				#移除開頭的 "/"
8087
				$conf["address"]=substr($conf["address"],1);
8088
 
8089
				#如果有這些參數
8090
				if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){
8091
 
8092
					#網址
8093
					$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];
8094
 
8095
					}#if end
8096
 
8097
				#反之
8098
				else{
8099
 
8100
					#網址設置為 null
8101
					$result["content"]=null;
8102
 
8103
					}#else
8104
 
8105
				}#else end
8106
 
8107
			#取得 doc root;
8108
			$docRoot=$_SERVER['DOCUMENT_ROOT'];
8109
 
8110
			#如果不是網路環境
8111
			if($conf["web"]==="false"){
8112
 
8113
				#不採用 docRoot
8114
				$docRoot="";
8115
 
8116
				}#if end
8117
 
8118
			#如果不存在 DOCUMENT_ROOT 變數或 web 參數為 "false" 且為相對位置.
8119
			if( ($_SERVER['DOCUMENT_ROOT']==="" || $conf["web"]==="false") && (strpos($result["argu"]["address"],"/")!==0) ){
8120
 
8121
				#執行 "pwd" 取得當前位置
8122
				exec("pwd",$output,$status);
8123
 
8124
				#預設為`pwd`的結果加"/"
8125
				$docRoot=$output[0]."/";
8126
 
8127
				}#if end	
8128
 
8129
			#如果是絕對位置
8130
			else if(strpos($result["argu"]["address"],"/")===0){
8131
 
8132
				#補回 "/" 
8133
				$conf["address"]="/".$conf["address"];
8134
 
8135
				}#if end
8136
 
8137
			#針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
8138
			$result["fileSystemAbsoulutePosition"]=$docRoot.$conf["address"];
908 liveuser 8139
 
1 liveuser 8140
			}#else end
8141
 
8142
		#設置執行正常
8143
		$result["status"]="true";	
8144
 
8145
		#回傳結果
8146
		return $result;
8147
 
8148
		}#function getInternetAddressV2 end
8149
 
8150
	/*
43 liveuser 8151
	#函式說明:
1 liveuser 8152
	#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
8153
	#回傳結果:
8154
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8155
	#$result["error"],錯誤訊息陣列.
8156
	#$result["function"],函數名稱. 
8157
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
8158
	#必填參數:
8159
	#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
8160
	$conf["path"]="";
8161
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8162
	$conf["fileArgu"]=__FILE__;
8163
	#可省略參數:
8164
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
8165
	#$conf["noDotStart"]="true";
8166
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
8167
	#$conf["noWaveEnd"]="true";
187 liveuser 8168
	#參考資料:
8169
	#無.
43 liveuser 8170
	#備註:
8171
	#無.
1 liveuser 8172
	*/
8173
	public static function resolvePostionStringWhichContainStarSymbol(&$conf){
8174
 
8175
		#初始化要回傳的結果
8176
		$result=array();
8177
 
8178
		#設置當其函數名稱
8179
		$result["function"]=__FUNCTION__;
8180
 
8181
		#如果 $conf 不為陣列
8182
		if(gettype($conf)!="array"){
8183
 
8184
			#設置執行失敗
8185
			$result["status"]="false";
8186
 
8187
			#設置執行錯誤訊息
8188
			$result["error"][]="\$conf變數須為陣列形態";
8189
 
8190
			#如果傳入的參數為 null
8191
			if($conf==null){
8192
 
8193
				#設置執行錯誤訊息
8194
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
8195
 
8196
				}#if end
8197
 
8198
			#回傳結果
8199
			return $result;
8200
 
8201
			}#if end
8202
 
8203
		#檢查參數
43 liveuser 8204
		#函式說明:
1 liveuser 8205
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
8206
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8207
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
8208
		#$result["function"],當前執行的函式名稱.
8209
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
8210
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
8211
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
8212
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
8213
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
8214
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
8215
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
8216
		#必填寫的參數:
8217
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
8218
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
8219
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
8220
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
8221
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
8222
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
8223
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
8224
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
8225
		#可以省略的參數:
8226
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
8227
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
8228
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
8229
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
8230
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
8231
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
8232
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
8233
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
8234
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
8235
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
8236
		#參考資料來源:
8237
		#array_keys=>http://php.net/manual/en/function.array-keys.php
8238
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
8239
		unset($conf["variableCheck::checkArguments"]);
8240
 
8241
		#如果 $checkResult["status"] 等於 "fasle"
8242
		if($checkResult["status"]==="false"){
8243
 
8244
			#設置錯誤識別
8245
			$result["status"]="false";
8246
 
8247
			#設置錯誤訊息
8248
			$result["error"]=$checkResult;
8249
 
8250
			#回傳結果
8251
			return $result;
8252
 
8253
			}#if end
8254
 
8255
		#如果 $checkResult["passed"] 等於 "fasle"
8256
		if($checkResult["passed"]==="false"){
8257
 
8258
			#設置錯誤識別
8259
			$result["status"]="false";
8260
 
8261
			#設置錯誤訊息
8262
			$result["error"]=$checkResult;
8263
 
8264
			#回傳結果
8265
			return $result;
8266
 
8267
			}#if end
8268
 
8269
		#轉換檔案路徑為相對於伺服器檔案系統的絕對路徑
43 liveuser 8270
		#函式說明:
1 liveuser 8271
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
8272
		#回傳結果:
8273
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8274
		#$result["error"],錯誤訊息陣列.
8275
		#$result["function"],函數名稱. 
8276
		#$result["content"],網址.
8277
		#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
8278
		#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.
8279
		#必填參數:
8280
		#$conf["address"],字串,檔案的相對位置.
8281
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["path"];
8282
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
8283
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
8284
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.
8285
		$conf["fileAccess::getInternetAddress"]["userDir"]="true";
8286
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
8287
		unset($conf["fileAccess::getInternetAddress"]);
8288
 
8289
		#如果轉換路徑失敗
8290
		if($getInternetAddress["status"]=="false"){
8291
 
8292
			#設置錯誤識別
8293
			$result["status"]="false";
8294
 
8295
			#設置錯誤訊息
8296
			$result["error"]=$checkResult;
8297
 
8298
			#回傳結果
8299
			return $result;
8300
 
8301
			}#if end
8302
 
8303
		#取得轉換好的路徑
8304
		$conf["path"]=$getInternetAddress["fileSystemAbsoulutePosition"];
8305
 
8306
		#檢查檔案路徑字串是否含有「*」
43 liveuser 8307
		#函式說明:
1 liveuser 8308
		#檢查字串裡面有無指定的關鍵字
43 liveuser 8309
		#回傳結果:
1 liveuser 8310
		#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8311
		#$result["error"],錯誤訊息
8312
		#$result["function"],當前執行的函數名稱.
8313
		#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8314
		#$result["keyWordCount"],找到的關鍵字數量.
43 liveuser 8315
		#必填參數:
1 liveuser 8316
		$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8317
		$conf["search::findKeyWord"]["string"]=$conf["path"];#要被搜尋的字串內容
43 liveuser 8318
		#可省略參數:
1 liveuser 8319
		#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8320
		$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8321
		unset($conf["search::findKeyWord"]);
8322
 
8323
		#如果尋找關鍵字出錯
8324
		if($findKeyWord["status"]=="false"){
8325
 
8326
			#設置錯誤識別
8327
			$result["status"]="false";
8328
 
8329
			#設置錯誤訊息
8330
			$result["error"]=$findKeyWord;
8331
 
8332
			#回傳結果
8333
			return $result;
8334
 
8335
			}#if end
8336
 
8337
		#如果含有「*」
8338
		if($findKeyWord["founded"]=="true"){
8339
 
8340
			#透過「/」分割路徑字串
43 liveuser 8341
			#函式說明:
1 liveuser 8342
			#將固定格式的字串分開,並回傳分開的結果。
8343
			#回傳的參數:
8344
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8345
			#$result["error"],錯誤訊息陣列
8346
			#$result["function"],當前執行的函數名稱.
8347
			#$result["oriStr"],要分割的原始字串內容
8348
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8349
			#$result["dataCounts"],爲總共分成幾段
43 liveuser 8350
			#必填參數:
1 liveuser 8351
			$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];#要處理的字串。
8352
			$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8353
			$spiltPathStr=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8354
			unset($conf["stringProcess::spiltString"]);
8355
 
8356
			#如果分割字串失敗
8357
			if($spiltPathStr["status"]=="false"){
8358
 
8359
				#設置錯誤識別
8360
				$result["status"]="false";
8361
 
8362
				#設置錯誤訊息
8363
				$result["error"]=$spiltPathStr;
8364
 
8365
				#回傳結果
8366
				return $result;
8367
 
8368
				}#if end
8369
 
8370
			#初始化暫存展開後的檔案路徑字串
8371
			$extendPath=array("");			
8372
 
8373
			#要解析的路徑分成幾段就執行幾次
8374
			foreach($spiltPathStr["dataArray"] as $pathPart){
8375
 
8376
				#檢查該段名稱是否有「*」
43 liveuser 8377
				#函式說明:
1 liveuser 8378
				#檢查字串裡面有無指定的關鍵字
43 liveuser 8379
				#回傳結果:
1 liveuser 8380
				#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8381
				#$result["error"],錯誤訊息
8382
				#$result["function"],當前執行的函數名稱.
8383
				#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8384
				#$result["keyWordCount"],找到的關鍵字數量.
43 liveuser 8385
				#必填參數:
1 liveuser 8386
				$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字
8387
				$conf["search::findKeyWord"]["string"]=$pathPart;#要被搜尋的字串內容
43 liveuser 8388
				#可省略參數:
1 liveuser 8389
				#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8390
				$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8391
				unset($conf["search::findKeyWord"]);
8392
 
8393
				#如果尋找關鍵字出錯
8394
				if($findKeyWord["status"]=="false"){
8395
 
8396
					#設置錯誤識別
8397
					$result["status"]="false";
8398
 
8399
					#設置錯誤訊息
8400
					$result["error"]=$findKeyWord;
8401
 
8402
					#回傳結果
8403
					return $result;
8404
 
8405
					}#if end									
8406
 
8407
				#如果不含「*」
8408
				if($findKeyWord["founded"]=="false"){
8409
 
8410
					#針對每個既有的路徑
8411
					for($i=0;$i<count($extendPath);$i++){
8412
 
8413
						#加上切割好的路徑
8414
						$extendPath[$i]=$extendPath[$i]."/".$pathPart;
8415
 
8416
						}#for end
8417
 
8418
					}#if end
8419
 
8420
				#反之該段含有「*」	
8421
				else{
8422
 
8423
					#用「*」分割該段
43 liveuser 8424
					#函式說明:
1 liveuser 8425
					#將固定格式的字串分開,並回傳分開的結果。
8426
					#回傳的參數:
8427
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8428
					#$result["error"],錯誤訊息陣列
8429
					#$result["function"],當前執行的函數名稱.
8430
					#$result["oriStr"],要分割的原始字串內容
8431
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8432
					#$result["dataCounts"],爲總共分成幾段
43 liveuser 8433
					#必填參數:
1 liveuser 8434
					$conf["stringProcess::spiltString"]["stringIn"]=$pathPart;#要處理的字串。
8435
					$conf["stringProcess::spiltString"]["spiltSymbol"]="*";#爲以哪個符號作爲分割
8436
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8437
					unset($conf["stringProcess::spiltString"]);
8438
 
8439
					#如果分字串失敗
8440
					if($spiltString["status"]=="false"){
8441
 
8442
						#設置錯誤識別
8443
						$result["status"]="false";
8444
 
8445
						#設置錯誤訊息
8446
						$result["error"]=$spiltStringByStar;
8447
 
8448
						#回傳結果
8449
						return $result;
8450
 
8451
						}#if end
8452
 
8453
					#如果用「*」分割後的段數為0
8454
					if($spiltString["dataCounts"]==0){
8455
 
8456
						#初始化儲存符合條件的路徑
8457
						$newExtendPath=array();
8458
 
8459
						#代表沒有塞選條件
8460
						#當前有幾個符合條件的路徑就執行幾次
8461
						for($i=0;$i<count($extendPath);$i++){
8462
 
8463
							#取得該目錄下所有的東西
8464
							#取得該目錄底下的檔案目錄清單
43 liveuser 8465
							#函式說明:
1 liveuser 8466
							#取得目錄底下所有目錄與檔案清單.
43 liveuser 8467
							#回傳結果:
1 liveuser 8468
							#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8469
							#$result["error"],錯誤訊息陣列.
8470
							#$result["function"],函數名稱.
8471
							#$result["content"],陣列,目錄底下的檔案與子目錄.
8472
							#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8473
							#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8474
							#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8475
							#$result["position"],目前的位置.
43 liveuser 8476
							#必填參數:
1 liveuser 8477
							#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8478
							$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8479
							#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8480
							$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 8481
							#可省略參數:
1 liveuser 8482
							#無
8483
							#參考資料來源:
8484
							#opendir=>http://php.net/manual/en/function.opendir.php
8485
							#is_dir=>http://php.net/manual/en/function.is-dir.php
8486
							$getList=fileAccess::getList($conf["fileAccess::getList"]);
8487
							unset($conf["fileAccess::getList"]);										
8488
 
8489
							#如果取得目標目錄底下的檔案目錄清單失敗
8490
							if($getList["status"]=="false"){
8491
 
8492
								#設置錯誤識別
8493
								$result["status"]="false";
8494
 
8495
								#設置錯誤訊息
8496
								$result["error"]=$getList;																				
8497
 
8498
								#回傳結果
8499
								return $result;
8500
 
8501
								}#if end
8502
 
8503
							#如果底下有東西
8504
							if(count($getList["content"])>0){
8505
 
8506
								#初始化儲存要檢查的檔案或資料夾名稱陣列
8507
								$list=array();
8508
 
8509
								#針對每個檔案或資料夾
8510
								foreach($getList["content"] as $num=>$array){
8511
 
8512
									#儲存該名稱
8513
									$list[]=$array["name"];
8514
 
8515
									}#foreach end
8516
 
8517
								#初始化儲存符合新條件字串的陣列
8518
								$tempExtendPath=array();
8519
 
8520
								#針對每個現有的路徑字串
8521
								for($j=0;$j<count($extendPath);$j++){
8522
 
8523
									#附加每個符合條件的名稱到路徑字串裡面
8524
									for($k=0;$k<count($list);$k++){
8525
 
8526
										#如果 $conf["noDotStart"] 為 "true"
8527
										if($conf["noDotStart"]==="true"){
8528
 
8529
											#將 $list[$k] 用 "/" 分割
43 liveuser 8530
											#函式說明:
1 liveuser 8531
											#將固定格式的字串分開,並回傳分開的結果。
8532
											#回傳結果:
8533
											#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
8534
											#$result["error"],錯誤訊息陣列
8535
											#$result["function"],當前執行的函數名稱.
8536
											#$result["oriStr"],要分割的原始字串內容
8537
											#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
8538
											#$result["dataCounts"],爲總共分成幾段
8539
											#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 8540
											#必填參數:
1 liveuser 8541
											$conf["stringProcess::spiltString"]["stringIn"]=$list[$k];#要處理的字串。
8542
											$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
8543
											#可省略參數:
8544
											#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
8545
											$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
8546
											$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
8547
											unset($conf["stringProcess::spiltString"]);
8548
 
8549
											#如果分割路徑失敗
8550
											if($spiltString["status"]==="false"){
8551
 
8552
												#設置執行錯誤識別
8553
												$result["status"]="false";
8554
 
8555
												#取得錯誤訊息
8556
												$result["error"]=$spiltString;
8557
 
8558
												#回傳結果
8559
												return $result;
8560
 
8561
												}#if end
8562
 
8563
											#如果有關鍵字「/」存在
8564
											if($spiltString["found"]==="true"){
8565
 
8566
												#針對每個段落
8567
												foreach($spiltString["dataArray"] as $pp){
8568
 
8569
													#看該符合的名稱開頭是否包含「.」
43 liveuser 8570
													#函式說明:
1 liveuser 8571
													#取得符合特定字首與字尾的字串
43 liveuser 8572
													#回傳結果:
1 liveuser 8573
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8574
													#$result["function"],當前執行的函數名稱.
8575
													#$result["error"],錯誤訊息陣列.
8576
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8577
													#$result["returnString"],爲符合字首條件的字串內容。
8578
													#必填參數:
8579
													#$conf["checkString"],字串,要檢查的字串.
8580
													$conf["search::getMeetConditionsString"]["checkString"]=$pp;
8581
													#可省略參數:
8582
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8583
													$conf["search::getMeetConditionsString"]["frontWord"]=".";
8584
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8585
													#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8586
													#參考資料:
8587
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8588
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8589
													unset($conf["search::getMeetConditionsString"]);
8590
 
8591
													#如果 取得符合特定字首的字串 出錯
8592
													if($getMeetConditionsString["status"]=="false"){
8593
 
8594
														#設置執行錯誤識別
8595
														$result["status"]="false";
8596
 
8597
														#設置錯誤訊息
8598
														$result["error"]=$getMeetConditionsString;
8599
 
8600
														#回傳結果
8601
														return $result;
8602
 
8603
														}#if end
8604
 
8605
													#如果有「.」在開頭
8606
													if($getMeetConditionsString["founded"]=="true"){
8607
 
8608
														#忽略這個名稱 
8609
														continue 2;
8610
 
8611
														}#if end
8612
 
8613
													}#foreach end
8614
 
8615
												}#if end
8616
 
8617
											#反之沒有關鍵字「/」存在
8618
											else{
8619
 
8620
												#看該符合的名稱開頭是否包含「.」
43 liveuser 8621
												#函式說明:
1 liveuser 8622
												#取得符合特定字首與字尾的字串
43 liveuser 8623
												#回傳結果:
1 liveuser 8624
												#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8625
												#$result["function"],當前執行的函數名稱.
8626
												#$result["error"],錯誤訊息陣列.
8627
												#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8628
												#$result["returnString"],爲符合字首條件的字串內容。
8629
												#必填參數:
8630
												#$conf["checkString"],字串,要檢查的字串.
8631
												$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8632
												#可省略參數:
8633
												#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8634
												$conf["search::getMeetConditionsString"]["frontWord"]=".";
8635
												#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8636
												#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8637
												#參考資料:
8638
												#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8639
												$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8640
												unset($conf["search::getMeetConditionsString"]);
8641
 
8642
												#如果 取得符合特定字首的字串 出錯
8643
												if($getMeetConditionsString["status"]=="false"){
8644
 
8645
													#設置執行錯誤識別
8646
													$result["status"]="false";
8647
 
8648
													#設置錯誤訊息
8649
													$result["error"]=$getMeetConditionsString;
8650
 
8651
													#回傳結果
8652
													return $result;
8653
 
8654
													}#if end
8655
 
8656
												#如果有「.」在開頭
8657
												if($getMeetConditionsString["founded"]=="true"){
8658
 
8659
													#忽略這個名稱 
8660
													continue;
8661
 
8662
													}#if end
8663
 
8664
												}#else end
8665
 
8666
											}#if end
8667
 
8668
										#如果 $conf["noWaveEnd"] 為 "true"
8669
										if($conf["noWaveEnd"]==="true"){
8670
 
8671
											#看該符合的名稱結尾是否包含「~」
43 liveuser 8672
											#函式說明:
1 liveuser 8673
											#取得符合特定字首與字尾的字串
43 liveuser 8674
											#回傳結果:
1 liveuser 8675
											#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8676
											#$result["function"],當前執行的函數名稱.
8677
											#$result["error"],錯誤訊息陣列.
8678
											#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8679
											#$result["returnString"],爲符合字首條件的字串內容。
8680
											#必填參數:
8681
											#$conf["checkString"],字串,要檢查的字串.
8682
											$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];
8683
											#可省略參數:
8684
											#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8685
											#$conf["search::getMeetConditionsString"]["frontWord"]=".";
8686
											#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8687
											$conf["search::getMeetConditionsString"]["tailWord"]="~";
8688
											#參考資料:
8689
											#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8690
											$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8691
											unset($conf["search::getMeetConditionsString"]);
8692
 
8693
											#如果 取得符合特定字首的字串 出錯
8694
											if($getMeetConditionsString["status"]=="false"){
8695
 
8696
												#設置執行錯誤識別
8697
												$result["status"]="false";
8698
 
8699
												#設置錯誤訊息
8700
												$result["error"]=$getMeetConditionsString;
8701
 
8702
												#回傳結果
8703
												return $result;
8704
 
8705
												}#if end
8706
 
8707
											#如果有「~」在結尾
8708
											if($getMeetConditionsString["founded"]=="true"){
8709
 
8710
												#忽略這個名稱
8711
												continue;
8712
 
8713
												}#if end
8714
 
8715
											}#if end
8716
 
8717
										#暫存該符合的路徑
8718
										$tempExtendPath[]=$extendPath[$j]."/".$list[$k];
8719
 
8720
										}#for end
8721
 
8722
									}#for end	
8723
 
8724
								#該次有幾個符合的路徑就執行幾次
8725
								foreach($tempExtendPath as $path){
8726
 
8727
									#暫存符合的路徑
8728
									$newExtendPath[]=$path;
8729
 
8730
									}#for end	
8731
 
8732
								}#if end
8733
 
8734
							#反之該目錄底下沒有東西
8735
							else{
8736
 
8737
								#移除該 $extendPath[$i]
8738
								unset($extendPath[$i]);
8739
 
8740
								}#else end					
8741
 
8742
							}#for end
8743
 
8744
						#置換原始符合條件字串的路徑字串陣列
8745
						$extendPath=$newExtendPath;
8746
 
8747
						}#if end
8748
 
8749
						#反之用「*」分割後有分段
8750
						else{
8751
 
8752
							#初始化暫存符合條件的新路徑陣列變數
8753
							$newExtendPath=array();
8754
 
8755
							#當前有幾個符合條件的路徑就執行幾次
8756
							for($i=0;$i<count($extendPath);$i++){
8757
 
8758
								#取得該目錄下所有的東西
43 liveuser 8759
								#函式說明:
1 liveuser 8760
								#取得目錄底下所有目錄與檔案清單.
43 liveuser 8761
								#回傳結果:
1 liveuser 8762
								#$result["status"],"true"爲建立成功,"false"爲建立失敗.
8763
								#$result["error"],錯誤訊息陣列.
8764
								#$result["function"],函數名稱.
8765
								#$result["content"],陣列,目錄底下的檔案與子目錄.
8766
								#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
8767
								#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
8768
								#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
8769
								#$result["position"],目前的位置.
43 liveuser 8770
								#必填參數:
1 liveuser 8771
								#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
8772
								$conf["fileAccess::getList"]["position"]=$extendPath[$i];
8773
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
8774
								$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
43 liveuser 8775
								#可省略參數:
1 liveuser 8776
								#無
8777
								#參考資料來源:
8778
								#opendir=>http://php.net/manual/en/function.opendir.php
8779
								#is_dir=>http://php.net/manual/en/function.is-dir.php
8780
								$getList=fileAccess::getList($conf["fileAccess::getList"]);
8781
								unset($conf["fileAccess::getList"]);										
8782
 
8783
								#如果取得目標目錄底下的檔案目錄清單失敗
8784
								if($getList["status"]=="false"){
8785
 
8786
									#設置錯誤識別
8787
									$result["status"]="false";
8788
 
8789
									#設置錯誤訊息
8790
									$result["error"]=$getList;																				
8791
 
8792
									#回傳結果
8793
									return $result;
8794
 
8795
									}#if end
8796
 
8797
								#如果底下有東西
8798
								if(count($getList["content"])>0){
8799
 
8800
									#初始化儲存要檢查的檔案或資料夾名稱陣列
8801
									$list=array();
8802
 
8803
									#針對每個檔案或資料夾
8804
									foreach($getList["content"] as $num=>$array){
8805
 
8806
										#儲存該名稱
8807
										$list[]=$array["name"];
8808
 
8809
										}#foreach end
8810
 
8811
									#初始化儲存符合的名稱
8812
									$passedName=array();
8813
 
8814
									#依據每個檔案目錄名稱,檢查有無符合篩選條件
8815
									foreach($list as $filteredName){
8816
 
8817
										#初始化儲存被檢查的片段檔案資料夾名稱
8818
										$partName=$filteredName;
8819
 
8820
										#依據 $pathPart 分割成幾段(關鍵字數量)就執行幾次
8821
										for($i=0;$i<$spiltString["dataCounts"];$i++){
8822
 
8823
											#尋找關鍵字 $spiltString["dataArray"][$i]
43 liveuser 8824
											#函式說明:
1 liveuser 8825
											#檢查字串裡面有無指定的關鍵字
43 liveuser 8826
											#回傳結果:
1 liveuser 8827
											#$result["status"],"true"代表執行成功,"false"代表執行失敗。
8828
											#$result["error"],錯誤訊息
8829
											#$result["function"],當前執行的函數名稱.
8830
											#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
8831
											#$result["keyWordCount"],找到的關鍵字數量.
43 liveuser 8832
											#必填參數:
1 liveuser 8833
											$conf["search::findKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#想要搜尋的關鍵字
8834
											$conf["search::findKeyWord"]["string"]=$partName;#要被搜尋的字串內容
43 liveuser 8835
											#可省略參數:
1 liveuser 8836
											#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
8837
											$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
8838
											unset($conf["search::findKeyWord"]);
8839
 
8840
											#如果尋找關鍵字失敗
8841
											if($findKeyWord["status"]=="false"){
8842
 
8843
												#設置執行錯誤識別
8844
												$result["status"]="false";
8845
 
8846
												#設置錯誤訊息
8847
												$result["error"]=$findKeyWord;
8848
 
8849
												#回傳結果
8850
												return $result;
8851
 
8852
												}#if end
8853
 
8854
											#如果有找到關鍵字
8855
											if($findKeyWord["founded"]=="true"){
8856
 
8857
												#如果是最後一段要檢查的關鍵字
8858
												if($i==$spiltString["dataCounts"]-1){
8859
 
8860
													#判斷該關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的開頭
43 liveuser 8861
													#函式說明:
1 liveuser 8862
													#取得符合特定字首與字尾的字串
43 liveuser 8863
													#回傳結果:
1 liveuser 8864
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8865
													#$result["function"],當前執行的函數名稱.
8866
													#$result["error"],錯誤訊息陣列.
8867
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8868
													#$result["returnString"],爲符合字首條件的字串內容。
8869
													#必填參數:
8870
													#$conf["checkString"],字串,要檢查的字串.
8871
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
8872
													#可省略參數:
8873
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8874
													$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8875
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8876
													#$conf["tailWord"]="";
8877
													#參考資料:
8878
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8879
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8880
													unset($conf["search::getMeetConditionsString"]);
8881
 
8882
													#如果 取得符合特定字首的字串 出錯
8883
													if($getMeetConditionsString["status"]=="false"){
8884
 
8885
														#設置執行錯誤識別
8886
														$result["status"]="false";
8887
 
8888
														#設置錯誤訊息
8889
														$result["error"]=$getMeetConditionsString;
8890
 
8891
														#回傳結果
8892
														return $result;
8893
 
8894
														}#if end
8895
 
8896
													#如果關鍵字是在開頭
8897
													if($getMeetConditionsString["founded"]=="true"){
8898
 
8899
														#判斷關鍵字是否在該檔案目錄名稱的開頭
43 liveuser 8900
														#函式說明:
1 liveuser 8901
														#取得符合特定字首與字尾的字串
43 liveuser 8902
														#回傳結果:
1 liveuser 8903
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8904
														#$result["function"],當前執行的函數名稱.
8905
														#$result["error"],錯誤訊息陣列.
8906
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8907
														#$result["returnString"],爲符合字首條件的字串內容。
8908
														#必填參數:
8909
														#$conf["checkString"],字串,要檢查的字串.
8910
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
8911
														#可省略參數:
8912
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8913
														$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];
8914
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8915
														#$conf["tailWord"]="";
8916
														#參考資料:
8917
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8918
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8919
														unset($conf["search::getMeetConditionsString"]);
8920
 
8921
														#如果 取得符合特定字首的字串 出錯
8922
														if($getMeetConditionsString["status"]=="false"){
8923
 
8924
															#設置執行錯誤識別
8925
															$result["status"]="false";
8926
 
8927
															#設置錯誤訊息
8928
															$result["error"]=$getMeetConditionsString;
8929
 
8930
															#回傳結果
8931
															return $result;
8932
 
8933
															}#if end
8934
 
8935
														#如果關鍵字不在開頭
8936
														if($getMeetConditionsString["founded"]=="false"){
8937
 
8938
															#不符合條件,跳過該檔案目錄名稱
8939
															break;
8940
 
8941
															}#if end
8942
 
8943
														}#if end
8944
 
8945
													#判斷最後一個關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的結尾
43 liveuser 8946
													#函式說明:
1 liveuser 8947
													#取得符合特定字首與字尾的字串
43 liveuser 8948
													#回傳結果:
1 liveuser 8949
													#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8950
													#$result["function"],當前執行的函數名稱.
8951
													#$result["error"],錯誤訊息陣列.
8952
													#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8953
													#$result["returnString"],爲符合字首條件的字串內容。
8954
													#必填參數:
8955
													#$conf["checkString"],字串,要檢查的字串.
8956
													$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;
8957
													#可省略參數:
8958
													#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8959
													#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
8960
													#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
8961
													$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
8962
													#參考資料:
8963
													#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
8964
													$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
8965
													unset($conf["search::getMeetConditionsString"]);
8966
 
8967
													#如果 取得符合特定字尾的字串 出錯
8968
													if($getMeetConditionsString["status"]=="false"){
8969
 
8970
														#設置執行錯誤識別
8971
														$result["status"]="false";
8972
 
8973
														#設置錯誤訊息
8974
														$result["error"]=$getMeetConditionsString;
8975
 
8976
														#回傳結果
8977
														return $result;
8978
 
8979
														}#if end
8980
 
8981
													#如果關鍵字是在字尾
8982
													if($getMeetConditionsString["founded"]=="true"){
8983
 
8984
														#判斷關鍵字是否在該片段的開頭
43 liveuser 8985
														#函式說明:
1 liveuser 8986
														#取得符合特定字首與字尾的字串
43 liveuser 8987
														#回傳結果:
1 liveuser 8988
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
8989
														#$result["function"],當前執行的函數名稱.
8990
														#$result["error"],錯誤訊息陣列.
8991
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
8992
														#$result["returnString"],爲符合字首條件的字串內容。
8993
														#必填參數:
8994
														#$conf["checkString"],字串,要檢查的字串.
8995
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
8996
														#可省略參數:
8997
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
8998
														#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;
8999
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9000
														$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9001
														#參考資料:
9002
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9003
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9004
														unset($conf["search::getMeetConditionsString"]);
9005
 
9006
														#如果 取得符合特定字首的字串 出錯
9007
														if($getMeetConditionsString["status"]=="false"){
9008
 
9009
															#設置執行錯誤識別
9010
															$result["status"]="false";
9011
 
9012
															#設置錯誤訊息
9013
															$result["error"]=$getMeetConditionsString;
9014
 
9015
															#回傳結果
9016
															return $result;
9017
 
9018
															}#if end
9019
 
9020
														#如果關鍵字不在結尾
9021
														if($getMeetConditionsString["founded"]=="false"){
9022
 
9023
															#不符合條件,跳過該檔案目錄名稱
9024
															break;
9025
 
9026
															}#if end
9027
 
9028
														}#if end
9029
 
9030
													#如果 $conf["noDotStart"] 為 "true"
9031
													if($conf["noDotStart"]==="true"){
9032
 
9033
														#看該符合的名稱開頭是否包含「.」
43 liveuser 9034
														#函式說明:
1 liveuser 9035
														#取得符合特定字首與字尾的字串
43 liveuser 9036
														#回傳結果:
1 liveuser 9037
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9038
														#$result["function"],當前執行的函數名稱.
9039
														#$result["error"],錯誤訊息陣列.
9040
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9041
														#$result["returnString"],爲符合字首條件的字串內容。
9042
														#必填參數:
9043
														#$conf["checkString"],字串,要檢查的字串.
9044
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9045
														#可省略參數:
9046
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9047
														$conf["search::getMeetConditionsString"]["frontWord"]=".";
9048
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9049
														#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9050
														#參考資料:
9051
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9052
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9053
														unset($conf["search::getMeetConditionsString"]);
9054
 
9055
														#如果 取得符合特定字首的字串 出錯
9056
														if($getMeetConditionsString["status"]=="false"){
9057
 
9058
															#設置執行錯誤識別
9059
															$result["status"]="false";
9060
 
9061
															#設置錯誤訊息
9062
															$result["error"]=$getMeetConditionsString;
9063
 
9064
															#回傳結果
9065
															return $result;
9066
 
9067
															}#if end
9068
 
9069
														#如果有「.」在開頭
9070
														if($getMeetConditionsString["founded"]=="true"){
9071
 
9072
															#中斷迴圈
9073
															break;
9074
 
9075
															}#if end
9076
 
9077
														}#if end
9078
 
9079
													#如果 $conf["noWaveEnd"] 為 "true"
9080
													if($conf["noWaveEnd"]==="true"){
9081
 
9082
														#看該符合的名稱結尾是否包含「~」
43 liveuser 9083
														#函式說明:
1 liveuser 9084
														#取得符合特定字首與字尾的字串
43 liveuser 9085
														#回傳結果:
1 liveuser 9086
														#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9087
														#$result["function"],當前執行的函數名稱.
9088
														#$result["error"],錯誤訊息陣列.
9089
														#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9090
														#$result["returnString"],爲符合字首條件的字串內容。
9091
														#必填參數:
9092
														#$conf["checkString"],字串,要檢查的字串.
9093
														$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;
9094
														#可省略參數:
9095
														#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9096
														#$conf["search::getMeetConditionsString"]["frontWord"]=".";
9097
														#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9098
														$conf["search::getMeetConditionsString"]["tailWord"]="~";
9099
														#參考資料:
9100
														#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9101
														$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9102
														unset($conf["search::getMeetConditionsString"]);
9103
 
9104
														#如果 取得符合特定字首的字串 出錯
9105
														if($getMeetConditionsString["status"]=="false"){
9106
 
9107
															#設置執行錯誤識別
9108
															$result["status"]="false";
9109
 
9110
															#設置錯誤訊息
9111
															$result["error"]=$getMeetConditionsString;
9112
 
9113
															#回傳結果
9114
															return $result;
9115
 
9116
															}#if end
9117
 
9118
														#如果有「~」在結尾
9119
														if($getMeetConditionsString["founded"]=="true"){
9120
 
9121
															#中斷迴圈
9122
															break;
9123
 
9124
															}#if end
9125
 
9126
														}#if end
9127
 
9128
													#取得該符合的名稱
9129
													$passedName[]=$filteredName;
9130
 
9131
													#中斷迴圈
9132
													break;
9133
 
9134
													}#if end
9135
 
9136
												#將 $partName 從左到關鍵字結束的部份剔除
9137
												#函式說明:
9138
												#將特定字串前面的內容剔除
9139
												#回傳結果:
9140
												#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9141
												#$result["error"],錯誤訊息陣列.
9142
												#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
9143
												#$result["function"],當前執行的函數名稱.
9144
												#$result["oriStr"],要處理的原始字串內容.
9145
												#$result["content"],處理好的的字串內容.
43 liveuser 9146
												#必填參數:
1 liveuser 9147
												$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$partName;#要處理的字串.
9148
												$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#特定字串.
9149
												$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
9150
												unset($conf["stringProcess::delStrBeforeKeyWord"]);
9151
 
9152
												#如果將 $partName 從左到關鍵字結束的部份剔除失敗
9153
												if($delStrBeforeKeyWord["status"]=="false"){
9154
 
9155
													#設置執行錯誤識別
9156
													$result["status"]="false";
9157
 
9158
													#設置錯誤訊息
9159
													$result["error"]=$delStrBeforeKeyWord;
9160
 
9161
													#回傳結果
9162
													return $result;
9163
 
9164
													}#if end
9165
 
9166
												#如果沒有找到特定關鍵字字串
9167
												if($delStrBeforeKeyWord["founded"]=="false"){
9168
 
9169
													#設置執行錯誤識別
9170
													$result["status"]="false";
9171
 
9172
													#設置錯誤訊息
9173
													$result["error"]=$delStrBeforeKeyWord;
9174
 
9175
													#回傳結果
9176
													return $result;
9177
 
9178
													}#if end
9179
 
9180
												#取得剔除過關鍵字前字串的字串	
9181
												$partName=$delStrBeforeKeyWord["content"];
9182
 
9183
												}#if end
9184
 
9185
											#反之關鍵字不存在	
9186
											else{
9187
 
9188
												#儲存被拋棄的片段
9189
												#$result["dismissLog"][]="片段「".$partName."」沒有關鍵字「".$spiltString["dataArray"][$i]."」";
9190
 
9191
												#該名稱不符合條件
9192
												break;
9193
 
9194
												}#else end
9195
 
9196
											}#for end
9197
 
9198
										}#foreach end
9199
 
9200
									#初始化儲存符合的暫存路徑
9201
									$tempExtendPath=array();
9202
 
9203
									#針對每個現有的路徑字串
9204
									for($j=0;$j<count($extendPath);$j++){
9205
 
9206
										#附加每個符合條件的名稱到路徑字串裡面
9207
										for($k=0;$k<count($passedName);$k++){
9208
 
9209
											#暫存該符合的路徑
9210
											$tempExtendPath[]=$extendPath[$j]."/".$passedName[$k];
9211
 
9212
											}#for end
9213
 
9214
										}#for end	
9215
 
9216
									#該次有幾個符合的路徑就執行幾次
9217
									foreach($tempExtendPath as $path){
9218
 
9219
										#暫存符合的路徑
9220
										$newExtendPath[]=$path;
9221
 
9222
										}#foreach end	
9223
 
9224
									}#if end
9225
 
9226
								#反之該目錄底下沒有東西
9227
								else{
9228
 
9229
									#移除該 $extendPath[$i]
9230
									unset($extendPath[$i]);
9231
 
9232
									}#else end					
9233
 
9234
								}#for end
9235
 
9236
							#如果有新的路徑產生
9237
							if(count($newExtendPath)>0){
9238
 
9239
								#置換原始符合條件字串的路徑字串陣列
9240
								$extendPath=$newExtendPath;
9241
 
9242
								}#if end
9243
 
9244
							#反之找不到後續符合的路徑
9245
							else{
9246
 
9247
								$extendPath=array();
9248
 
9249
								}#else end
9250
 
9251
							}#else end
9252
 
9253
					}#else end
9254
 
9255
				}#foreach end
9256
 
9257
			}#if end
9258
 
9259
		#反之沒有含有「*」
9260
		else{
9261
 
9262
			#判斷 $conf["path"] 是否存在
43 liveuser 9263
			#函式說明:
1 liveuser 9264
			#檢查多個檔案與資料夾是否存在.
9265
			#回傳的結果:
9266
			#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
9267
			#$result["error"],錯誤訊息陣列.
9268
			#$resutl["function"],當前執行的涵式名稱.
9269
			#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
9270
			#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
9271
			#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
9272
			#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
9273
			#必填參數:
9274
			#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
9275
			$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["path"]);
9276
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
9277
			$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
9278
			#可省略參數
9279
			#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
9280
			#$conf["disableWebSearch"]="false";
9281
			#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
9282
			#$conf["userDir"]="true";
9283
			#參考資料來源:
9284
			#http://php.net/manual/en/function.file-exists.php
9285
			#http://php.net/manual/en/control-structures.foreach.php
9286
			#備註:
9287
			#函數file_exists檢查的路徑為檔案系統的路徑
9288
			$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
9289
			unset($conf["fileAccess::checkMultiFileExist"]);
9290
 
9291
			#如果檢查失敗
9292
			if($checkMultiFileExist["status"]=="false"){
9293
 
9294
				#設置錯誤識別
9295
				$result["status"]="false";
9296
 
9297
				#設置錯誤訊息
9298
				$result["error"]=$checkMultiFileExist;
9299
 
9300
				#回傳結果
9301
				return $result;
9302
 
9303
				}#if end
9304
 
9305
			#如果存在
9306
			if($checkMultiFileExist["varExist"][0]=="true"){
9307
 
9308
				#初始化暫存展開後的檔案路徑字串
9309
				$extendPath=array($conf["path"]);
9310
 
9311
				}#if end
9312
 
9313
			#反之不存在
9314
			else{
9315
 
9316
				#置換符合的路徑為空字串
9317
				$extendPath=array();
9318
 
9319
				}#else end
9320
 
9321
			#初始化暫存展開後的檔案路徑字串
9322
			$extendPath=array($conf["path"]);
9323
 
9324
			}#else end
9325
 
9326
		#取得解析完「*」的檔案路徑字串
9327
		$result["content"]=$extendPath;
9328
 
9329
		#取得有幾個檔案路徑
9330
		$result["pathCount"]=count($result["content"]);
9331
 
9332
		#設置執行正常
9333
		$result["status"]="true";
9334
 
9335
		#回傳結果
9336
		return $result;
9337
 
9338
		}#function resolvePostionStringWhichContainStarSymbol end
9339
 
9340
	/*
43 liveuser 9341
	#函式說明:
1 liveuser 9342
	#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.
9343
	#回傳結果:
9344
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9345
	#$result["error"],錯誤訊息陣列.
9346
	#$result["function"],函數名稱. 
9347
	#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9348
	#$result["pathCount"],整數,有幾個路徑.
9349
	#必填參數:
9350
	#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.
9351
	$conf["path"]=array();
9352
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9353
	$conf["fileArgu"]=__FILE__;
9354
	#可省略參數:
9355
	#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9356
	#$conf["noDotStart"]="true";
9357
	#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9358
	#$conf["noWaveEnd"]="true";
187 liveuser 9359
	#參考資料:
9360
	#無.
43 liveuser 9361
	#備註:
9362
	#無.
1 liveuser 9363
	*/
9364
	public static function resolveMultiPostionStringWhichContainStarSymbol(&$conf){
9365
 
9366
		#初始化要回傳的結果
9367
		$result=array();
9368
 
9369
		#設置當其函數名稱
9370
		$result["function"]=__FUNCTION__;
9371
 
9372
		#如果 $conf 不為陣列
9373
		if(gettype($conf)!="array"){
9374
 
9375
			#設置執行失敗
9376
			$result["status"]="false";
9377
 
9378
			#設置執行錯誤訊息
9379
			$result["error"][]="\$conf變數須為陣列形態";
9380
 
9381
			#如果傳入的參數為 null
9382
			if($conf==null){
9383
 
9384
				#設置執行錯誤訊息
9385
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9386
 
9387
				}#if end
9388
 
9389
			#回傳結果
9390
			return $result;
9391
 
9392
			}#if end
9393
 
9394
		#檢查參數
43 liveuser 9395
		#函式說明:
1 liveuser 9396
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9397
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9398
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9399
		#$result["function"],當前執行的函式名稱.
9400
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9401
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9402
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9403
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9404
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9405
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9406
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9407
		#必填寫的參數:
9408
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9409
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9410
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9411
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9412
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9413
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9414
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9415
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9416
		#可以省略的參數:
9417
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9418
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9419
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
9420
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");
9421
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
9422
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
9423
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
9424
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");
9425
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9426
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9427
		#參考資料來源:
9428
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9429
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9430
		unset($conf["variableCheck::checkArguments"]);
9431
 
9432
		#如果 $checkResult["status"] 等於 "fasle"
9433
		if($checkResult["status"]=="false"){
9434
 
9435
			#設置錯誤識別
9436
			$result["status"]="false";
9437
 
9438
			#設置錯誤訊息
9439
			$result["error"]=$checkResult;
9440
 
9441
			#回傳結果
9442
			return $result;
9443
 
9444
			}#if end
9445
 
9446
		#如果 $checkResult["passed"] 等於 "fasle"
9447
		if($checkResult["passed"]=="false"){
9448
 
9449
			#設置錯誤識別
9450
			$result["status"]="false";
9451
 
9452
			#設置錯誤訊息
9453
			$result["error"]=$checkResult;
9454
 
9455
			#回傳結果
9456
			return $result;
9457
 
9458
			}#if end
9459
 
9460
		#針對每個要解析的路徑字串
9461
		foreach($conf["path"] as $path){
9462
 
43 liveuser 9463
			#函式說明:
1 liveuser 9464
			#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.
9465
			#回傳結果:
9466
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9467
			#$result["error"],錯誤訊息陣列.
9468
			#$result["function"],函數名稱. 
9469
			#$result["content"],字串陣列,多個解析回來的檔案路徑字串.
9470
			#必填參數:
9471
			#$conf["path"],字串,要解析含有「*」的檔案路徑字串.
9472
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["path"]=$path;
9473
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
9474
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];
9475
			#可省略參數:
9476
			#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.
9477
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["noDotStart"];
9478
			#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.
9479
			$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["noWaveEnd"];
9480
			$resolvePostionStringWhichContainStarSymbol=fileAccess::resolvePostionStringWhichContainStarSymbol($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9481
			unset($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);
9482
 
9483
			#如果解析失敗
9484
			if($resolvePostionStringWhichContainStarSymbol["status"]=="false"){
9485
 
9486
				#設置錯誤識別
9487
				$result["status"]="false";
9488
 
9489
				#設置錯誤訊息
9490
				$result["error"]=$resolvePostionStringWhichContainStarSymbol;
9491
 
9492
				#回傳結果
9493
				return $result;
9494
 
9495
				}#if end
9496
 
9497
			#針對每個解析出來的路徑
9498
			foreach($resolvePostionStringWhichContainStarSymbol["content"] as $filteredPath){
9499
 
9500
				#儲存符合條件的路徑
9501
				$result["content"][]=$filteredPath;
9502
 
9503
				}#foreach end
9504
 
9505
			}#foreach end
9506
 
9507
		#如果有路徑存在
9508
		if(isset($result["content"])){
9509
 
9510
			#取得有幾個路徑
9511
			$result["pathCount"]=count($result["content"]);
9512
 
9513
			}#if end
9514
 
9515
		#反之 
9516
		else{
9517
 
9518
			#設置空的路徑結果
9519
			$result["content"]=array();
9520
 
9521
			#取得有幾個路徑
9522
			$result["pathCount"]=count($result["content"]);
9523
 
9524
			}#else end
9525
 
9526
		#設置執行正常
9527
		$result["status"]="true";
9528
 
9529
		#回傳結果
9530
		return $result;
9531
 
9532
		}#function resolveMultiPostionStringWhichContainStarSymbol end
9533
 
9534
	/*
43 liveuser 9535
	#函式說明:
1 liveuser 9536
	#將多個路徑字串變成相對於當前路徑的相對路徑字串
9537
	#回傳結果:
9538
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9539
	#$result["error"],錯誤訊息陣列.
9540
	#$result["function"],函數名稱. 
9541
	#$result["argu"],使用的參數.
9542
	#$result["content"],字串陣列,多個轉換好的相對路徑字串.
488 liveuser 9543
	#$result["cmd"],使用的指令.
1 liveuser 9544
	#必填參數:
9545
	#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
9546
	$conf["path"]=array();
9547
	#$conf["fileArgu"],字串,當前路徑.
9548
	$conf["fileArgu"]=__FILE__;
43 liveuser 9549
	#可省略參數:
409 liveuser 9550
	#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
9551
	#$conf["baseFrom"]="";
187 liveuser 9552
	#參考資料:
9553
	#無.
43 liveuser 9554
	#備註:
9555
	#無.
1 liveuser 9556
	*/
9557
	public static function getRelativePath(&$conf){
9558
 
9559
		#初始化要回傳的結果
9560
		$result=array();
9561
 
9562
		#設置當其函數名稱
9563
		$result["function"]=__FUNCTION__;
9564
 
9565
		#如果 $conf 不為陣列
9566
		if(gettype($conf)!="array"){
9567
 
9568
			#設置執行失敗
9569
			$result["status"]="false";
9570
 
9571
			#設置執行錯誤訊息
9572
			$result["error"][]="\$conf變數須為陣列形態";
9573
 
9574
			#如果傳入的參數為 null
9575
			if($conf==null){
9576
 
9577
				#設置執行錯誤訊息
9578
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
9579
 
9580
				}#if end
9581
 
9582
			#回傳結果
9583
			return $result;
9584
 
9585
			}#if end
9586
 
9587
		#檢查參數
43 liveuser 9588
		#函式說明:
1 liveuser 9589
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
9590
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9591
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
9592
		#$result["function"],當前執行的函式名稱.
9593
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
9594
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
9595
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
9596
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
9597
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
9598
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
9599
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
9600
		#必填寫的參數:
9601
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
9602
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
9603
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
9604
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");
9605
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
9606
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");
9607
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
9608
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
9609
		#可以省略的參數:
9610
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
9611
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
9612
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
409 liveuser 9613
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("baseFrom");
1 liveuser 9614
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
409 liveuser 9615
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1 liveuser 9616
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
409 liveuser 9617
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
1 liveuser 9618
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
9619
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
9620
		#參考資料來源:
9621
		#array_keys=>http://php.net/manual/en/function.array-keys.php
9622
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
9623
		unset($conf["variableCheck::checkArguments"]);
9624
 
409 liveuser 9625
		#如果 $checkResult["status"] 等於 "false"
1 liveuser 9626
		if($checkResult["status"]=="false"){
9627
 
9628
			#設置錯誤識別
9629
			$result["status"]="false";
9630
 
9631
			#設置錯誤訊息
9632
			$result["error"]=$checkResult;
9633
 
9634
			#回傳結果
9635
			return $result;
9636
 
9637
			}#if end
9638
 
9639
		#如果 $checkResult["passed"] 等於 "fasle"
9640
		if($checkResult["passed"]=="false"){
9641
 
9642
			#設置錯誤識別
9643
			$result["status"]="false";
9644
 
9645
			#設置錯誤訊息
9646
			$result["error"]=$checkResult;
9647
 
9648
			#回傳結果
9649
			return $result;
9650
 
9651
			}#if end
9652
 
9653
		#取得參數
9654
		$result["argu"]=$conf;
9655
 
486 liveuser 9656
		#函式說明:
9657
		#將固定格式的字串分開,並回傳分開的結果.
9658
		#回傳結果:
9659
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9660
		#$result["error"],錯誤訊息陣列
9661
		#$result["function"],當前執行的函數名稱.
9662
		#$result["argu"],使用的參數.
9663
		#$result["oriStr"],要分割的原始字串內容
9664
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9665
		#$result["dataCounts"],爲總共分成幾段
9666
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9667
		#必填參數:
9668
		#$conf["stringIn"],字串,要處理的字串.
9669
		$conf["fileAccess::spiltString"]["stringIn"]=$conf["fileArgu"];
9670
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9671
		$conf["fileAccess::spiltString"]["spiltSymbol"]="/";
9672
		#可省略參數:
9673
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9674
		$conf["fileAccess::spiltString"]["allowEmptyStr"]="false";
9675
		#參考資料:
9676
		#無.
9677
		#備註:
9678
		#無.
9679
		$spiltString=stringProcess::spiltString($conf["fileAccess::spiltString"]);
9680
		unset($conf["fileAccess::spiltString"]);
9681
 
9682
		#如果執行失敗
9683
		if($spiltString["status"]==="false"){
9684
 
9685
			#設置錯誤識別
9686
			$result["status"]="false";
1 liveuser 9687
 
486 liveuser 9688
			#設置錯誤訊息
9689
			$result["error"]=$spiltString;
9690
 
9691
			#回傳結果
9692
			return $result;
9693
 
9694
			}#if end
9695
 
9696
		#如果沒有關鍵字
9697
		if($spiltString["found"]==="false"){
9698
 
9699
			#設置錯誤識別
9700
			$result["status"]="false";
9701
 
9702
			#設置錯誤訊息
9703
			$result["error"]=$spiltString;
9704
 
9705
			#回傳結果
9706
			return $result;
9707
 
9708
			}#if end
9709
 
9710
		#取得 $conf["fileArgu"] 的路徑
9711
		#函式說明:
9712
		#將固定格式的字串分開,並回傳分開的結果.
9713
		#回傳結果:
9714
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9715
		#$result["error"],錯誤訊息陣列
9716
		#$result["function"],當前執行的函數名稱.
9717
		#$result["argu"],使用的參數.
9718
		#$result["oriStr"],要分割的原始字串內容
9719
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9720
		#$result["dataCounts"],爲總共分成幾段
9721
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
9722
		#必填參數:
9723
		#$conf["stringIn"],字串,要處理的字串.
9724
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];
9725
		#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
9726
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";
9727
		#可省略參數:
9728
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
9729
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
9730
		#參考資料:
9731
		#無.
9732
		#備註:
9733
		#無.
9734
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
9735
		unset($conf["stringProcess::spiltString"]);
9736
 
9737
		#如果執行失敗
9738
		if($spiltString["status"]==="false"){
9739
 
9740
			#設置錯誤識別
9741
			$result["status"]="false";
9742
 
9743
			#設置錯誤訊息
9744
			$result["error"]=$spiltString;
9745
 
9746
			#回傳結果
9747
			return $result;
9748
 
9749
			}#if end
9750
 
488 liveuser 9751
		/*
9752
		#break point
9753
		var_dump($spiltString);
9754
		exit;
9755
		*/
9756
 
9757
		#預設 fileArgu 的路徑為 ""
486 liveuser 9758
		$fileArguPath="";
9759
 
9760
		#針對每個目錄
9761
		for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
9762
 
9763
			#串接路徑
488 liveuser 9764
			$fileArguPath=$fileArguPath."/".$spiltString["dataArray"][$i];
486 liveuser 9765
 
9766
			}#for end
9767
 
9768
		#取得相對於目標的當前位置
9769
		#函式說明:
9770
		#呼叫shell執行系統命令,並取得回傳的內容.
9771
		#回傳結果:
9772
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9773
		#$result["error"],錯誤訊息陣列.
9774
		#$result["function"],當前執行的函數名稱.
9775
		#$result["argu"],使用的參數.
9776
		#$result["cmd"],執行的指令內容.
9777
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
9778
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
9779
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
9780
		#$result["running"],是否還在執行.
9781
		#$result["pid"],pid.
9782
		#$result["statusCode"],執行結束後的代碼.
9783
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
9784
		#必填參數:
9785
		#$conf["command"],字串,要執行的指令.
9786
		$conf["external::callShell"]["command"]="cd";
9787
		#$conf["fileArgu"],字串,變數__FILE__的內容.
9788
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
9789
		#可省略參數:
9790
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
9791
		$conf["external::callShell"]["argu"]=array($fileArguPath,";","pwd");
9792
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
9793
		#$conf["arguIsAddr"]=array();
9794
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
9795
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
9796
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
9797
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
9798
		#$conf["enablePrintDescription"]="true";
9799
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
9800
		#$conf["printDescription"]="";
9801
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
9802
		$conf["external::callShell"]["escapeshellarg"]="true";
9803
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
9804
		#$conf["thereIsShellVar"]=array();
9805
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
9806
		#$conf["username"]="";
9807
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
9808
		#$conf["password"]="";
9809
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
9810
		#$conf["useScript"]="";
9811
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
9812
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
9813
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
9814
		#$conf["inBackGround"]="";
9815
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
9816
		#$conf["getErr"]="false";
9817
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
9818
		#$conf["doNotRun"]="false";
9819
		#參考資料:
9820
		#exec=>http://php.net/manual/en/function.exec.php
9821
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
9822
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
9823
		#備註:
9824
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
9825
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
9826
		$callShell=external::callShell($conf["external::callShell"]);
9827
		unset($conf["external::callShell"]);
9828
 
9829
		#如果執行失敗
9830
		if($callShell["status"]==="false"){
9831
 
9832
			#設置錯誤識別
9833
			$result["status"]="false";
9834
 
9835
			#設置錯誤訊息
9836
			$result["error"]=$callShell;
9837
 
9838
			#回傳結果
9839
			return $result;
9840
 
9841
			}#if end
488 liveuser 9842
 
486 liveuser 9843
		#如果執行失敗
9844
		if(!isset($callShell["output"][0])){
9845
 
9846
			#設置錯誤識別
9847
			$result["status"]="false";
9848
 
9849
			#設置錯誤訊息
9850
			$result["error"]=$callShell;
9851
 
9852
			#回傳結果
9853
			return $result;
9854
 
9855
			}#if end	
9856
 
488 liveuser 9857
		/*
9858
		#break point
9859
		var_dump($callShell);
9860
		exit;
9861
		*/
9862
 
9863
		#記錄執行的指令
9864
		$result["cmd"][]=$callShell["cmd"];
9865
 
486 liveuser 9866
		#保存相對於目標的當前位置
9867
		$pwd=$callShell["output"][0];
9868
 
9869
		#更新 fileArgu
9870
		$conf["fileArgu"]=$pwd."/".$spiltString["dataArray"][$spiltString["dataCounts"]-1];
9871
 
1 liveuser 9872
		#針對每個 $conf["path"]
9873
		foreach($conf["path"] as $path){
9874
 
9875
			#將 $path 變成易讀的格式
9876
			#函式說明:
9877
			#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
9878
			#回傳的結果:
9879
			#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
9880
			#$result["function"],當前執行的函數.
9881
			#$result["error"],錯誤訊息陣列.
9882
			#$result["changedPath"],處理完後回傳的目錄字串.
9883
			#$result["oriPath"],原始的路徑字串
43 liveuser 9884
			#必填參數:
1 liveuser 9885
			#$conf["dirStr"],字串,要處理的檔案目錄字串.
9886
			$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$path;
9887
			$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
9888
			unset($conf["stringProcess::changeDirByDotDotSolidus"]);
9889
 
9890
			#如果處理失敗
9891
			if($changeDirByDotDotSolidus["status"]==="false"){
9892
 
9893
				#設置錯誤識別
9894
				$result["status"]="false";
9895
 
9896
				#設置錯誤訊息
9897
				$result["error"]=$changeDirByDotDotSolidus;
9898
 
9899
				#回傳結果
9900
				return $result;
9901
 
9902
				}#if end
9903
 
9904
			#取得易讀的路徑
9905
			$path=$changeDirByDotDotSolidus["changedPath"];
9906
 
9907
			#判斷 $path 是否為絕對路徑
43 liveuser 9908
			#函式說明:
1 liveuser 9909
			#取得符合特定字首與字尾的字串
43 liveuser 9910
			#回傳結果:
1 liveuser 9911
			#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
9912
			#$result["function"],當前執行的函數名稱.
9913
			#$result["error"],錯誤訊息陣列.
9914
			#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
9915
			#$result["returnString"],爲符合字首條件的字串內容。
9916
			#必填參數:
9917
			#$conf["checkString"],字串,要檢查的字串.
9918
			$conf["search::getMeetConditionsString"]["checkString"]=$path;
9919
			#可省略參數:
9920
			#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
9921
			$conf["search::getMeetConditionsString"]["frontWord"]="/";
9922
			#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
9923
			#$conf["tailWord"]="";
9924
			#參考資料:
9925
			#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
9926
			$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
9927
			unset($conf["search::getMeetConditionsString"]);			
9928
 
9929
			#如果檢查失敗
9930
			if($getMeetConditionsString["status"]=="false"){
9931
 
9932
				#設置錯誤識別
9933
				$result["status"]="false";
9934
 
9935
				#設置錯誤訊息
9936
				$result["error"]=$getMeetConditionsString;
9937
 
9938
				#回傳結果
9939
				return $result;
9940
 
9941
				}#if end
9942
 
9943
			#如果沒有「/」開頭
9944
			if($getMeetConditionsString["founded"]==="false"){
9945
 
9946
				#將 $conf["fileArgu"] 最後面的檔案或目錄名稱剔除
43 liveuser 9947
				#函式說明:
1 liveuser 9948
				#將固定格式的字串分開,並回傳分開的結果。
9949
				#回傳結果:
9950
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
9951
				#$result["error"],錯誤訊息陣列
9952
				#$result["function"],當前執行的函數名稱.
9953
				#$result["oriStr"],要分割的原始字串內容
9954
				#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
9955
				#$result["dataCounts"],爲總共分成幾段
43 liveuser 9956
				#必填參數:
1 liveuser 9957
				$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。
9958
				$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
9959
				$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
9960
				unset($conf["stringProcess::spiltString"]);
9961
 
9962
				#如果分割字串失敗
9963
				if($spiltString["status"]=="false"){
9964
 
9965
					#設置錯誤識別
9966
					$result["status"]="false";
9967
 
9968
					#設置錯誤訊息
9969
					$result["error"]=$spiltString;
9970
 
9971
					#回傳結果
9972
					return $result;
9973
 
9974
					}#if end
9975
 
9976
				#初始化相對路徑為開頭片段""
791 liveuser 9977
				$relativePathPart="/";
409 liveuser 9978
 
1 liveuser 9979
				#剔除最後一段
9980
				for($i=0;$i<$spiltString["dataCounts"]-1;$i++){
791 liveuser 9981
 
1 liveuser 9982
					#串接起來
9983
					$relativePathPart=$relativePathPart.$spiltString["dataArray"][$i]."/";
9984
 
9985
					}#for end
9986
 
409 liveuser 9987
				#如果有設定 baseFrom
9988
				if(isset($conf["baseFrom"])){
9989
 
9990
					#函式說明:
9991
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
9992
					#回傳結果:
9993
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
9994
					#$result["error"],錯誤訊息陣列.
9995
					#$result["function"],函數名稱. 
9996
					#$result["argu"],使用的參數.
9997
					#$result["content"],網址,若是在命令列執行,則為"null".
9998
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
9999
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10000
					#必填參數:
10001
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10002
					$conf["fileAccess::getInternetAddressV2"]["address"]=$path;
10003
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10004
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10005
					#可省略參數:
10006
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10007
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10008
					#參考資料:
10009
					#無.
10010
					#備註:
10011
					#無.
10012
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10013
					unset($conf["fileAccess::getInternetAddressV2"]);
10014
 
414 liveuser 10015
					##var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10016
 
409 liveuser 10017
					#如果執行失敗
10018
					if($getInternetAddressV2["status"]==="false"){
10019
 
10020
						#設置錯誤識別
10021
						$result["status"]="false";
10022
 
10023
						#設置錯誤訊息
10024
						$result["error"]=$getInternetAddressV2;
10025
 
10026
						#回傳結果
10027
						return $result;
10028
 
10029
						}#if end
10030
 
10031
					#取得絕對位置
10032
					$path=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10033
 
10034
					#函式說明:
10035
					#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
10036
					#回傳結果:
10037
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10038
					#$result["error"],錯誤訊息陣列.
10039
					#$result["function"],函數名稱. 
10040
					#$result["argu"],使用的參數.
10041
					#$result["content"],網址,若是在命令列執行,則為"null".
10042
					#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
10043
					#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
10044
					#必填參數:
10045
					#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
10046
					$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["baseFrom"];
10047
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
10048
					$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
10049
					#可省略參數:
10050
					#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
10051
					$conf["fileAccess::getInternetAddressV2"]["web"]="false";
10052
					#參考資料:
10053
					#無.
10054
					#備註:
10055
					#無.
10056
					$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
10057
					unset($conf["fileAccess::getInternetAddressV2"]);
10058
 
414 liveuser 10059
					#var_dump(__LINE__." ".print_r($getInternetAddressV2,true));
10060
 
409 liveuser 10061
					#如果執行失敗
10062
					if($getInternetAddressV2["status"]==="false"){
10063
 
10064
						#設置錯誤識別
10065
						$result["status"]="false";
10066
 
10067
						#設置錯誤訊息
10068
						$result["error"]=$getInternetAddressV2;
10069
 
10070
						#回傳結果
10071
						return $result;
10072
 
10073
						}#if end
10074
 
10075
					#取得絕對位置
10076
					$conf["baseFrom"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];
10077
 
10078
					#函式說明:
10079
					#將多個路徑字串變成相對於當前路徑的相對路徑字串
10080
					#回傳結果:
10081
					#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10082
					#$result["error"],錯誤訊息陣列.
10083
					#$result["function"],函數名稱. 
10084
					#$result["argu"],使用的參數.
10085
					#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10086
					#必填參數:
10087
					#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10088
					$conf["fileAccess::getRelativePath"]["path"]=array($path);
10089
					#$conf["fileArgu"],字串,當前路徑.
414 liveuser 10090
					$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["baseFrom"]."/name";
409 liveuser 10091
					#可省略參數:
10092
					#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
10093
					#$conf["baseFrom"]="";
10094
					#參考資料:
10095
					#無.
10096
					#備註:
10097
					#無.
10098
					$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10099
					unset($conf["fileAccess::getRelativePath"]);
10100
 
414 liveuser 10101
					#var_dump(__LINE__." ".print_r($getRelativePath,true));
409 liveuser 10102
 
10103
					#如果執行失敗
10104
					if($getRelativePath["status"]==="false"){
10105
 
10106
						#設置錯誤識別
10107
						$result["status"]="false";
10108
 
10109
						#設置錯誤訊息
10110
						$result["error"]=$getRelativePath;
10111
 
10112
						#回傳結果
10113
						return $result;
10114
 
10115
						}#if end
10116
 
10117
					#取得轉換好的絕對路徑
10118
					$relativePathPart=$getRelativePath["content"][0]."/";
10119
 
10120
					#清空path,避免出錯
10121
					$path="";
10122
 
10123
					}#if end
10124
 
1 liveuser 10125
				#轉換成易讀的相對路徑
10126
				#函式說明:
10127
				#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.
10128
				#回傳的結果:
10129
				#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.
10130
				#$result["function"],當前執行的函數.
10131
				#$result["error"],錯誤訊息陣列.
10132
				#$result["changedPath"],處理完後回傳的目錄字串.
10133
				#$result["oriPath"],原始的路徑字串
43 liveuser 10134
				#必填參數:
1 liveuser 10135
				#$conf["dirStr"],字串,要處理的檔案目錄字串.
10136
				$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$relativePathPart.$path;
10137
				$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);
10138
				unset($conf["stringProcess::changeDirByDotDotSolidus"]);
10139
 
10140
				#var_dump($changeDirByDotDotSolidus);	
10141
 
10142
				#如果轉換失敗
10143
				if($changeDirByDotDotSolidus["status"]=="false"){
10144
 
10145
					#設置錯誤識別
10146
					$result["status"]="false";
10147
 
10148
					#設置錯誤訊息
10149
					$result["error"]=$changeDirByDotDotSolidus;
10150
 
10151
					#回傳結果
10152
					return $result;
10153
 
10154
					}#if end
10155
 
10156
				#轉換為相對路徑
43 liveuser 10157
				#函式說明:
1 liveuser 10158
				#將多個路徑字串變成相對於當前路徑的相對路徑字串
10159
				#回傳結果:
10160
				#$result["status"],"true"爲建立成功,"false"爲建立失敗.
10161
				#$result["error"],錯誤訊息陣列.
10162
				#$result["function"],函數名稱. 
10163
				#$result["content"],字串陣列,多個轉換好的相對路徑字串.
10164
				#必填參數:
10165
				#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
10166
				$conf["fileAccess::getRelativePath"]["path"]=array($changeDirByDotDotSolidus["changedPath"]);
10167
				#$conf["fileArgu"],字串,當前路徑.
10168
				$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
10169
				$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
10170
				unset($conf["fileAccess::getRelativePath"]);
10171
 
10172
				#var_dump($getRelativePath);	
10173
 
10174
				#如果轉換路徑失敗
10175
				if($getRelativePath["status"]==="false"){
10176
 
10177
					#設置錯誤識別
10178
					$result["status"]="false";
10179
 
10180
					#設置錯誤訊息
10181
					$result["error"]=$changeDirByDotDotSolidus;
10182
 
10183
					#回傳結果
10184
					return $result;
10185
 
10186
					}#if end
10187
 
10188
				#取得相對路徑
10189
				$result["content"][]=$getRelativePath["content"][0];
10190
 
10191
				}#if end
10192
 
10193
			#反之有「/」開頭
10194
			else{
10195
				#函式說明:
10196
				#移除多個絕對路徑字串開頭相同的部分
10197
				#回傳結果:
10198
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10199
				#$result["error"],錯誤訊息陣列.
10200
				#$result["function"],當前執行的函數名稱.
10201
				#$result["content"],處理好的的字串內容.
43 liveuser 10202
				#必填參數:
1 liveuser 10203
				#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10204
				$conf["fileAccess::delSamePathHead"]["pathIn"]=array($path,$conf["fileArgu"]);		
10205
				$delSamePathHead=fileAccess::delSamePathHead($conf["fileAccess::delSamePathHead"]);
10206
				unset($conf["fileAccess::delSamePathHead"]);
10207
 
409 liveuser 10208
				#var_dump($delSamePathHead);
10209
 
1 liveuser 10210
				#如果移除多個絕對路徑字串開頭相同的部分失敗
10211
				if($delSamePathHead["status"]==="false"){
10212
 
10213
					#設置錯誤識別
10214
					$result["status"]="false";
10215
 
10216
					#設置錯誤訊息
10217
					$result["error"]=$delSameHead;
10218
 
10219
					#回傳結果
10220
					return $result;
10221
 
10222
					}#if end
10223
 
10224
				#如果 $conf["fileArgu"] 剩下空
10225
				if($delSamePathHead["content"][1]===""){
10226
 
10227
					#檢查 $delSamePathHead[0] 開頭是否為「/」
43 liveuser 10228
					#函式說明:
1 liveuser 10229
					#取得符合特定字首與字尾的字串
43 liveuser 10230
					#回傳結果:
1 liveuser 10231
					#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10232
					#$result["function"],當前執行的函數名稱.
10233
					#$result["error"],錯誤訊息陣列.
10234
					#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10235
					#$result["returnString"],爲符合字首條件的字串內容。
10236
					#必填參數:
10237
					#$conf["checkString"],字串,要檢查的字串.
10238
					$conf["search::getMeetConditionsString"]["checkString"]=$delSamePathHead["content"][0];
10239
					#可省略參數:
10240
					#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10241
					$conf["search::getMeetConditionsString"]["frontWord"]="/";
10242
					#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10243
					#$conf["tailWord"]="";
10244
					#參考資料:
10245
					#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10246
					$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
10247
					unset($conf["search::getMeetConditionsString"]);
10248
 
10249
					#如果檢查失敗
10250
					if($getMeetConditionsString["status"]=="false"){
10251
 
10252
						#設置錯誤識別
10253
						$result["status"]="false";
10254
 
10255
						#設置錯誤訊息
10256
						$result["error"]=$getMeetConditionsString;
10257
 
10258
						#回傳結果
10259
						return $result;
10260
 
10261
						}#if end
10262
 
10263
					#如果有開頭有「/」
10264
					if($getMeetConditionsString["founded"]==="true"){
10265
 
10266
						#函式說明:
10267
						#將字串特定關鍵字與其前面的內容剔除
10268
						#回傳結果:
10269
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10270
						#$result["error"],錯誤訊息陣列.
10271
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10272
						#$result["function"],當前執行的函數名稱.
10273
						#$result["oriStr"],要處理的原始字串內容.
10274
						#$result["content"],處理好的的字串內容.
43 liveuser 10275
						#必填參數:
1 liveuser 10276
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delSamePathHead["content"][0];#要處理的字串.
10277
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";#特定字串.
10278
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
10279
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
10280
 
10281
						#如果 將字串特定關鍵字與其前面的內容剔除 失敗
10282
						if($delStrBeforeKeyWord["status"]=="false"){
10283
 
10284
							#設置錯誤識別
10285
							$result["status"]="false";
10286
 
10287
							#設置錯誤訊息
10288
							$result["error"]=$delStrBeforeKeyWord;
10289
 
10290
							#回傳結果
10291
							return $result;
10292
 
10293
							}#if end
10294
 
10295
						#取得相對位置
10296
						$result["content"][]=$delStrBeforeKeyWord["content"];
10297
 
10298
						}#if end
10299
 
10300
					#反之
10301
					else{
10302
 
10303
						#取得相對位置
10304
						$result["content"][]=$delSamePathHead["content"][0];
10305
 
10306
						}#else end	
10307
 
10308
					}#if end
10309
 
10310
				#反之剩下的 $conf["fileArgu"] 不為空
10311
				else{
10312
 
10313
					#檢查 $delSamePathHead["content"][1] 有幾個「/」
43 liveuser 10314
					#函式說明:
1 liveuser 10315
					#檢查字串裡面有無指定的關鍵字
43 liveuser 10316
					#回傳結果:
1 liveuser 10317
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
10318
					#$result["error"],錯誤訊息
10319
					#$result["function"],當前執行的函數名稱.
10320
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
10321
					#$result["keyWordCount"],找到的關鍵字數量.
43 liveuser 10322
					#必填參數:
1 liveuser 10323
					$conf["search::findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字
10324
					$conf["search::findKeyWord"]["string"]=$delSamePathHead["content"][1];#要被搜尋的字串內容
43 liveuser 10325
					#可省略參數:
1 liveuser 10326
					#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
10327
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
10328
					unset($conf["search::findKeyWord"]);
10329
 
10330
					#如果 檢查字串裡面有無指定的關鍵字 失敗
10331
					if($findKeyWord["status"]==="false"){
10332
 
10333
						#設置錯誤識別
10334
						$result["status"]="false";
10335
 
10336
						#設置錯誤訊息
10337
						$result["error"]=$findKeyWord;
10338
 
10339
						#回傳結果
10340
						return $result;
10341
 
10342
						}#if end
10343
 
10344
					#有幾個「/」就執行幾次
10345
					for($i=0;$i<$findKeyWord["keyWordCount"];$i++){
10346
 
10347
						#在前面加上 "../"
10348
						$delSamePathHead["content"][0]="../".$delSamePathHead["content"][0];
10349
 
10350
						}#for end
10351
 
10352
					#取得相對位置
10353
					$result["content"][]=$delSamePathHead["content"][0];
10354
 
10355
					}#else end
10356
 
10357
				}#else end
10358
 
10359
			}#foreach end
10360
 
10361
		#設置執行正常
10362
		$result["status"]="true";
10363
 
10364
		#回傳結果
10365
		return $result;
10366
 
10367
		}#function getRelativeParh end
10368
 
10369
	/*
10370
	#函式說明:
10371
	#移除多個絕對路徑字串開頭相同的部分
10372
	#回傳結果:
10373
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10374
	#$result["error"],錯誤訊息陣列.
10375
	#$result["function"],當前執行的函數名稱.
10376
	#$result["argu"],參數.
10377
	#$result["content"],處理好的的字串內容.
43 liveuser 10378
	#必填參數:
1 liveuser 10379
	#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.
10380
	$conf["pathIn"]=array();		
43 liveuser 10381
	#可省略參數:
10382
	#無
187 liveuser 10383
	#參考資料:
10384
	#無.
43 liveuser 10385
	#備註:
10386
	#無.
1 liveuser 10387
	*/
10388
	public static function delSamePathHead(&$conf){
10389
 
10390
		#初始化要回傳的結果
10391
		$result=array();
10392
 
10393
		#取得當前執行的函數名稱
10394
		$result["function"]=__FUNCTION__;
10395
 
10396
		#如果沒有參數
10397
		if(func_num_args()==0){
10398
 
10399
			#設置執行失敗
10400
			$result["status"]="false";
10401
 
10402
			#設置執行錯誤訊息
10403
			$result["error"]="函數".$result["function"]."需要參數";
10404
 
10405
			#回傳結果
10406
			return $result;
10407
 
10408
			}#if end
10409
 
10410
		#如果 $conf 不為陣列
10411
		if(gettype($conf)!="array"){
10412
 
10413
			#設置執行失敗
10414
			$result["status"]="false";
10415
 
10416
			#設置執行錯誤訊息
10417
			$result["error"][]="\$conf變數須為陣列形態";
10418
 
10419
			#如果傳入的參數為 null
10420
			if($conf==null){
10421
 
10422
				#設置執行錯誤訊息
10423
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10424
 
10425
				}#if end
10426
 
10427
			#回傳結果
10428
			return $result;
10429
 
10430
			}#if end
10431
 
10432
		#取得參數
10433
		$result["argv"]=$conf;	
10434
 
10435
		#檢查參數
43 liveuser 10436
		#函式說明:
1 liveuser 10437
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10438
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10439
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10440
		#$result["function"],當前執行的函式名稱.
10441
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10442
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10443
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10444
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
10445
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10446
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10447
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10448
		#必填寫的參數:
10449
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10450
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10451
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10452
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("pathIn");
10453
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
10454
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
10455
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10456
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10457
		#可以省略的參數:
10458
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
10459
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
10460
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10461
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
10462
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10463
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10464
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
10465
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
10466
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10467
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
10468
		#參考資料來源:
10469
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10470
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10471
		unset($conf["variableCheck::checkArguments"]);
10472
 
10473
		#如果 $checkResult["status"] 等於 "fasle"
10474
		if($checkResult["status"]=="false"){
10475
 
10476
			#設置錯誤識別
10477
			$result["status"]="false";
10478
 
10479
			#設置錯誤訊息
10480
			$result["error"]=$checkResult;
10481
 
10482
			#回傳結果
10483
			return $result;
10484
 
10485
			}#if end
10486
 
10487
		#如果 $checkResult["passed"] 等於 "fasle"
10488
		if($checkResult["passed"]=="false"){
10489
 
10490
			#設置錯誤識別
10491
			$result["status"]="false";
10492
 
10493
			#設置錯誤訊息
10494
			$result["error"]=$checkResult;
10495
 
10496
			#回傳結果
10497
			return $result;
10498
 
10499
			}#if end
10500
 
10501
		#檢查是否都為絕對路徑
43 liveuser 10502
		#函式說明:
1 liveuser 10503
		#取得多個符合特定字首與字尾的字串.
43 liveuser 10504
		#回傳結果:
1 liveuser 10505
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
10506
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
10507
		#$result["function"],當前執行的函數名稱.
10508
		#$result["returnString"],爲符合字首條件的字串陣列內容。
43 liveuser 10509
		#必填參數:
1 liveuser 10510
		#$conf["checkString"],陣列字串,要檢查的字串們.
10511
		$conf["search::getMeetConditionsStringMulti"]["checkString"]=$conf["pathIn"];#要檢查的字串陣列
10512
		#可省略參數:
10513
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
10514
		$conf["search::getMeetConditionsStringMulti"]["frontWord"]="/";
10515
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
10516
		#$conf["tailWord"]="";
10517
		#參考資料:
10518
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
10519
		$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
10520
		unset($conf["search::getMeetConditionsStringMulti"]);
10521
 
10522
		#如果檢測是否為絕對路徑失敗
10523
		if($getMeetConditionsStringMulti["status"]=="false"){
10524
 
10525
			#設置錯誤識別
10526
			$result["status"]="false";
10527
 
10528
			#設置錯誤訊息
10529
			$result["error"]=$getMeetConditionsStringMulti;
10530
 
10531
			#增加額外的錯誤訊息
10532
			$result["error"][]="僅接受絕對路徑字串";
10533
 
10534
			#回傳結果
10535
			return $result;
10536
 
10537
			}#if end
10538
 
43 liveuser 10539
		#函式說明:
1 liveuser 10540
		#將多個固定格式的字串分開,並回傳分開的結果
10541
		#回傳的參數:
10542
		#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
10543
		#$result["error"],錯誤訊息陣列.
10544
		#$result["function"],當前執行的函數名稱.
10545
		#$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
10546
		#$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
10547
		#$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
10548
		#$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
43 liveuser 10549
		#必填參數:
1 liveuser 10550
		#$conf["stringIn"],字串陣列,要處理的字串陣列.
10551
		$conf["stringProcess::spiltMutiString"]["stringIn"]=$conf["pathIn"];
10552
		#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
10553
		$conf["stringProcess::spiltMutiString"]["spiltSymbol"]="/";
10554
		$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
10555
 
10556
		#如果分割所有路徑字串失敗
10557
		if($spiltMutiString["status"]=="false"){
10558
 
10559
			#設置錯誤識別
10560
			$result["status"]="false";
10561
 
10562
			#設置錯誤訊息
10563
			$result["error"]=$spiltMutiString;				
10564
 
10565
			#回傳結果
10566
			return $result;
10567
 
10568
			}#if end
10569
 
10570
		#初始化暫存每個路徑分割成的段數
10571
		$spiltedPathCount=array();					
10572
 
10573
		#取得每個路徑分割成的段數
10574
		#針對每個 $spiltMutiString["spiltString"]
10575
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10576
 
10577
			$spiltedPathCount[]=$spiltMutiString["spiltString"][$i]["dataCounts"];
10578
 
10579
			}#for end
10580
 
10581
		#取得所有路徑字串分割後的最小數量
10582
		#涵式說明
10583
		#找最小值,結果會回傳最小值
10584
		#回傳的內容
10585
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
10586
		#$result["error"],錯誤訊息陣列.
10587
		#$result["function"],當前執行的函數名稱.
10588
		#$result["key"],最大值原先的key.
10589
		#$result["value"],陣列裏面最小的數值.
43 liveuser 10590
		#必填參數:
1 liveuser 10591
		$conf["math::getMinValue"]["rawDataArray"]=$spiltedPathCount;#爲原始數據
10592
		$getMinValue=math::getMinValue($conf["math::getMinValue"]);
10593
		unset($conf["math::getMinValue"]);
10594
 
10595
		#如果取得最小數值失敗
10596
		if($getMinValue["status"]=="false"){
10597
 
10598
			#設置錯誤識別
10599
			$result["status"]="false";
10600
 
10601
			#設置錯誤訊息
10602
			$result["error"]=$getMinValue;				
10603
 
10604
			#回傳結果
10605
			return $result;
10606
 
10607
			}#if end	
10608
 
10609
		#初始化暫存每個路徑字串的前面幾個片段是相同的
10610
		$samePartCount=0;
10611
 
10612
		#var_dump($getMinValue["value"]);	
10613
 
10614
		#依據所有路徑字串分割後的最小數量
10615
		for($j=0;$j<$getMinValue["value"];$j++){
10616
 
10617
			#初始化暫存第一個路徑的片段字串
10618
			$firstPathPart="";
10619
 
10620
			#針對每個 $spiltMutiString["spiltString"]
10621
			for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){
10622
 
10623
				#暫存分割的字串
10624
				$spiltedPath=$spiltMutiString["spiltString"][$i];
10625
 
10626
				#如果是第一個路徑
10627
				if($i==0){
10628
 
10629
					#取得第一個路徑的片段字串
10630
					$firstPathPart=$spiltedPath["dataArray"][$j];
10631
 
10632
					}#if end									
10633
 
10634
				#如果第$i+1個路徑片段不跟第1個路徑的片段字串一樣
10635
				if($spiltedPath["dataArray"][$j]!=$firstPathPart){
10636
 
10637
					#讓最外層迴圈中止
10638
					$getMinValue["value"]=-1;
10639
 
10640
					#跳出迴圈
10641
					break;
10642
 
10643
					}#if end			
10644
 
10645
				}#for end
10646
 
10647
			#代表每個路徑字串的第$j段是一樣的.
10648
			$samePartCount=$j;
10649
 
10650
			}#for end
10651
 
10652
		#var_dump($samePartCount);
10653
 
10654
		#依據每個路徑
10655
		for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){			
10656
 
10657
			#初始化儲存第$i+1個處理好的路徑字串
10658
			$result["content"][$i]="";			
10659
 
10660
			#依據 $samePartCount 與 路徑的段數
10661
			for($j=$samePartCount;$j<$spiltMutiString["spiltString"][$i]["dataCounts"];$j++){
10662
 
10663
				#如果不是第一段
10664
				if($j!=$samePartCount){
10665
 
10666
					#組裝每個路徑片段
10667
					$result["content"][$i]=$result["content"][$i]."/".$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10668
 
10669
					}#if end
10670
 
10671
				#反之為第一段
10672
				else{
10673
 
10674
					#組裝每個路徑片段
10675
					$result["content"][$i]=$result["content"][$i].$spiltMutiString["spiltString"][$i]["dataArray"][$j];
10676
 
10677
					}#else end
10678
 
10679
				}#for end
10680
 
10681
			}#for end
10682
 
10683
		#設置執行正常
10684
		$result["status"]="true";
10685
 
10686
		#回傳結果
10687
		return $result;
10688
 
10689
		}#function delSamePathHead end
10690
 
10691
	/*
43 liveuser 10692
	#函式說明:
629 liveuser 10693
	#於本套件位置底下的tmp資料夾下建立與回傳暫存檔案名稱路徑 
1 liveuser 10694
	#回傳結果:
10695
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10696
	#$result["error"],錯誤訊息.
10697
	#$result["function"],當前執行的函數名稱.
10698
	#$result["content"],暫存檔案的路徑與名稱.
833 liveuser 10699
	#$result["fileName"],暫存檔案的名稱.
10700
	#$result["path"],暫存檔案的路徑.
1 liveuser 10701
	#必填參數:
363 liveuser 10702
	#無.
1 liveuser 10703
	#可省略參數:
363 liveuser 10704
	#無.
187 liveuser 10705
	#參考資料:
10706
	#無.
43 liveuser 10707
	#備註:
332 liveuser 10708
	#無.
1 liveuser 10709
	*/
363 liveuser 10710
	public static function createTempFile(){
1 liveuser 10711
 
10712
		#初始化要回傳的結果
10713
		$result=array();
10714
 
10715
		#取得當前執行的函數名稱
10716
		$result["function"]=__FUNCTION__;
629 liveuser 10717
 
10718
		#取得相對於當前路徑的  tmp 目錄.
918 liveuser 10719
		exec("cd ".pathinfo(__FILE__)["dirname"]."/../../../var/qbpwcf/tmp;pwd;",$output,$status);
629 liveuser 10720
 
10721
		#如果執行失敗
10722
		if($status!==0){
10723
 
10724
			#設置執行失敗
10725
			$result["status"]="false";
10726
 
10727
			#設置執行錯誤訊息
10728
			$result["error"][]="取得暫存目錄失敗";
10729
 
10730
			#回傳結果
10731
			return $result;
10732
 
10733
			}#if end	
10734
 
10735
		#設置預設的暫存目錄
10736
		$defaultTmpDir=$output[0];	
10737
 
332 liveuser 10738
		#取得暫存檔案的路徑與名稱
629 liveuser 10739
		$result["content"]=tempnam($defaultTmpDir,"qbpwcf_tmpfile_");
332 liveuser 10740
 
833 liveuser 10741
		#函式說明:
10742
		#將字串特定關鍵字與其前面的內容剔除
10743
		#回傳結果:
10744
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10745
		#$result["error"],錯誤訊息陣列.
10746
		#$result["warning"],警告訊息鎮列.
10747
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10748
		#$result["function"],當前執行的函數名稱.
10749
		#$result["argu"],使用的參數.
10750
		#$result["oriStr"],要處理的原始字串內容.
10751
		#$result["content"],處理好的的字串內容.	
10752
		#必填參數:
10753
		#$conf["stringIn"],字串,要處理的字串.
10754
		$conf["stringPorcess::delStrBeforeKeyWord"]["stringIn"]=$result["content"];
10755
		#$conf["keyWord"],字串,特定字串.
10756
		$conf["stringPorcess::delStrBeforeKeyWord"]["keyWord"]=$defaultTmpDir."/qbpwcf_tmpfile_";
10757
		#可省略參數:
10758
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
10759
		#$conf["recursive"]="true";
10760
		#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
10761
		#$conf["lastResult"]=$delStrBeforeKeyWord;
10762
		#參考資料:
10763
		#無.
10764
		#備註:
10765
		#無.
10766
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringPorcess::delStrBeforeKeyWord"]);
10767
		unset($conf["stringPorcess::delStrBeforeKeyWord"]);
10768
 
10769
		#如果執行失敗
10770
		if($delStrBeforeKeyWord["status"]==="false"){
10771
 
10772
			#設置執行失敗
10773
			$result["status"]="false";
10774
 
10775
			#設置執行錯誤訊息
10776
			$result["error"]=$delStrBeforeKeyWord;
10777
 
10778
			#回傳結果
10779
			return $result;
10780
 
10781
			}#if end
10782
 
10783
		#如果應該要存在的路徑關鍵字不在
10784
		if($delStrBeforeKeyWord["founded"]==="false"){
10785
 
10786
			#設置執行失敗
10787
			$result["status"]="false";
10788
 
10789
			#設置執行錯誤訊息
10790
			$result["error"]=$delStrBeforeKeyWord;
10791
 
10792
			#回傳結果
10793
			return $result;
10794
 
10795
			}#if end
10796
 
10797
		#取得檔案名稱
10798
		$result["fileName"]=$delStrBeforeKeyWord["content"];
10799
 
10800
		#函式說明:
10801
		#將字串特定關鍵字與其後面的內容剔除
10802
		#回傳結果:
10803
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10804
		#$result["error"],錯誤訊息陣列.
10805
		#$result["warning"],警告訊息鎮列.
10806
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
10807
		#$result["function"],當前執行的函數名稱.
10808
		#$result["oriStr"],要處理的原始字串內容.
10809
		#$result["content"],處理好的的字串內容.
10810
		#$result["argu"],使用的參數.
10811
		#必填參數:
10812
		#$conf["stringIn"],字串,要處理的字串.
10813
		$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$result["content"];
10814
		#$conf["keyWord"],字串,特定字串.
10815
		$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$result["fileName"];
10816
		#可省略參數:
10817
		#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
10818
		#$conf["deleteLastRepeatedOne"]="";
10819
		#參考資料:
10820
		#無.
10821
		#備註:
10822
		#無.
10823
		$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
10824
		unset($conf["stringProcess::delStrAfterKeyWord"]);
10825
 
10826
		#如果執行失敗
10827
		if($delStrAfterKeyWord["status"]==="false"){
10828
 
10829
			#設置執行失敗
10830
			$result["status"]="false";
10831
 
10832
			#設置執行錯誤訊息
10833
			$result["error"]=$delStrAfterKeyWord;
10834
 
10835
			#回傳結果
10836
			return $result;
10837
 
10838
			}#if end
10839
 
10840
		#如果應該要存在的檔案名稱關鍵字不在
10841
		if($delStrAfterKeyWord["founded"]==="false"){
10842
 
10843
			#設置執行失敗
10844
			$result["status"]="false";
10845
 
10846
			#設置執行錯誤訊息
10847
			$result["error"]=$delStrAfterKeyWord;
10848
 
10849
			#回傳結果
10850
			return $result;
10851
 
10852
			}#if end
10853
 
10854
		#取得路徑
10855
		$result["path"]=$delStrAfterKeyWord["content"];
10856
 
1 liveuser 10857
		#設置執行正常
10858
		$result["status"]="true";
10859
 
10860
		#回傳結果
10861
		return $result;
10862
 
10863
		}#function createTempFile end
10864
 
10865
	/*
10866
	#函式說明:
10867
	#分割檔案,分割出來的檔案名稱編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
10868
	#回傳結果:
10869
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
10870
	#$result["error"],錯誤訊息陣列.
10871
	#$result["function"],當前執行的函數名稱.
10872
	#$result["cmd"],執行的指令.
10873
	#$result["content"],執行指令回傳的結果.
10874
	#必填參數:
10875
	#$conf["file"],字串,要分割的檔案名稱.
10876
	$conf["file"]="";	
10877
	#可省略參數:
10878
	#$conf["splitNameHead"],字串,分割成檔案的名稱開頭,預設為 $conf["file"]."-" .
10879
	#$conf["splitNameHead"]="";	
10880
	#$conf["partSize"],字串,分割檔的大小為多少?可以為XMB,XGB,XKB,可參見split指令的說明,預設為50MB.
10881
	#$conf["partSize"]="";
187 liveuser 10882
	#參考資料:
10883
	#無.
1 liveuser 10884
	#備註:
10885
	#需要有split指令
10886
	*/
10887
	public static function split(&$conf=array()){
10888
 
10889
		#初始化要回傳的結果
10890
		$result=array();
10891
 
10892
		#取得當前執行的函數名稱
10893
		$result["function"]=__FUNCTION__;
10894
 
10895
		#如果沒有參數
10896
		if(func_num_args()==0){
10897
 
10898
			#設置執行失敗
10899
			$result["status"]="false";
10900
 
10901
			#設置執行錯誤訊息
10902
			$result["error"]="函數".$result["function"]."需要參數";
10903
 
10904
			#回傳結果
10905
			return $result;
10906
 
10907
			}#if end
10908
 
43 liveuser 10909
		#函式說明:
1 liveuser 10910
		#判斷當前環境為web還是cmd
10911
		#回傳結果:
10912
		#$result,"web"或"cmd"
10913
		if(csInformation::getEnv()==="web"){
10914
 
10915
			#設置執行失敗
10916
			$result["status"]="false";
10917
 
10918
			#設置執行錯誤訊息
10919
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
10920
 
10921
			#回傳結果
10922
			return $result;
10923
 
10924
			}#if end
10925
 
10926
		#取得參數
10927
		$result["argu"]=$conf;
10928
 
10929
		#如果 $conf 不為陣列
10930
		if(gettype($conf)!=="array"){
10931
 
10932
			#設置執行失敗
10933
			$result["status"]="false";
10934
 
10935
			#設置執行錯誤訊息
10936
			$result["error"][]="\$conf變數須為陣列形態";
10937
 
10938
			#如果傳入的參數為 null
10939
			if($conf===null){
10940
 
10941
				#設置執行錯誤訊息
10942
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
10943
 
10944
				}#if end
10945
 
10946
			#回傳結果
10947
			return $result;
10948
 
10949
			}#if end
10950
 
10951
		#檢查參數
43 liveuser 10952
		#函式說明:
1 liveuser 10953
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
10954
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
10955
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
10956
		#$result["function"],當前執行的函式名稱.
10957
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
10958
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
10959
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
10960
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
10961
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
10962
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
10963
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
10964
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
10965
		#必填寫的參數:
10966
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
10967
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
10968
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
10969
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file");
10970
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
10971
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
10972
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
10973
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
10974
		#可以省略的參數:
10975
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
10976
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
10977
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
10978
		#$conf["canNotBeEmpty"]=array();
10979
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
10980
		#$conf["canBeEmpty"]=array();
10981
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
10982
		#$conf["skipableVariableCanNotBeEmpty"]=array();
10983
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
10984
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("splitNameHead","partSize");
10985
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
10986
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
10987
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]",若後面需要加上內容,則可以再補上\",後面再補上要串接的內容.
10988
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"file\"]\"-","50MB");
10989
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
10990
		#$conf["arrayCountEqualCheck"][]=array();
10991
		#參考資料來源:
10992
		#array_keys=>http://php.net/manual/en/function.array-keys.php
10993
		#建議:
10994
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
10995
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
10996
		unset($conf["variableCheck::checkArguments"]);
10997
 
10998
		#如果檢查參數失敗
10999
		if($checkArguments["status"]==="false"){
11000
 
11001
			#設置執行失敗
11002
			$result["status"]="false";
11003
 
11004
			#設置錯誤訊息
11005
			$result["error"]=$checkArguments;
11006
 
11007
			#回傳結果
11008
			return $result;
11009
 
11010
			}#if end
11011
 
11012
		#如果要分割的檔案存在
11013
		if(file_exists($conf["file"])){
11014
 
11015
			#取得執行的指令
11016
			$result["cmd"]="split -b ".$conf["partSize"]." '".$conf["file"]."' '".$conf["splitNameHead"]."'";
11017
 
11018
			#執行還原的指令
11019
			exec($result["cmd"],$output,$status);
11020
 
11021
			#取得執行後的輸出
11022
			$result["content"]=$output;
11023
 
11024
			}#if end
11025
 
11026
		#反之
11027
		else{
11028
 
11029
			#設置執行失敗
11030
			$result["status"]="false";
11031
 
11032
			#設置執行錯誤訊息
11033
			$result["error"][]="要分割的檔案「".$conf["file"]."」不存在";
11034
 
11035
			#回傳結果
11036
			return $result;
11037
 
11038
			}#else end
11039
 
11040
		#設置執行正常
11041
		$result["status"]="true";
11042
 
11043
		#回傳結果
11044
		return $result;
11045
 
11046
		}#function split end
11047
 
11048
	/*
11049
	#函式說明:
11050
	#合併檔案,檔案編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.
11051
	#回傳結果:
11052
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11053
	#$result["error"],錯誤訊息陣列.
11054
	#$result["function"],當前執行的函數名稱.
11055
	#$result["cmd"],執行的指令.
11056
	#$result["content"],執行指令回傳的結果.
11057
	#必填參數:
11058
	#$conf["filePartHead"],字串,分割檔案的名稱開頭.
11059
	$conf["filePartHead"]="";
11060
	#$conf["oriFileName"],字串,合併後的檔案名稱.
11061
	$conf["oriFileName"]="";
11062
	#可省略參數:
11063
	#無
187 liveuser 11064
	#參考資料:
11065
	#無.
1 liveuser 11066
	#備註:
43 liveuser 11067
	#需要有cat指令.
1 liveuser 11068
	#僅能在命令列執行.
11069
	*/
11070
	public static function merge(&$conf=array()){
11071
 
11072
		#初始化要回傳的結果
11073
		$result=array();
11074
 
11075
		#取得當前執行的函數名稱
11076
		$result["function"]=__FUNCTION__;
11077
 
11078
		#如果沒有參數
11079
		if(func_num_args()==0){
11080
 
11081
			#設置執行失敗
11082
			$result["status"]="false";
11083
 
11084
			#設置執行錯誤訊息
11085
			$result["error"]="函數".$result["function"]."需要參數";
11086
 
11087
			#回傳結果
11088
			return $result;
11089
 
11090
			}#if end
11091
 
43 liveuser 11092
		#函式說明:
1 liveuser 11093
		#判斷當前環境為web還是cmd
11094
		#回傳結果:
11095
		#$result,"web"或"cmd"
11096
		if(csInformation::getEnv()==="web"){
11097
 
11098
			#設置執行失敗
11099
			$result["status"]="false";
11100
 
11101
			#設置執行錯誤訊息
11102
			$result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";
11103
 
11104
			#回傳結果
11105
			return $result;
11106
 
11107
			}#if end
11108
 
11109
		#取得參數
11110
		$result["argu"]=$conf;
11111
 
11112
		#如果 $conf 不為陣列
11113
		if(gettype($conf)!=="array"){
11114
 
11115
			#設置執行失敗
11116
			$result["status"]="false";
11117
 
11118
			#設置執行錯誤訊息
11119
			$result["error"][]="\$conf變數須為陣列形態";
11120
 
11121
			#如果傳入的參數為 null
11122
			if($conf===null){
11123
 
11124
				#設置執行錯誤訊息
11125
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11126
 
11127
				}#if end
11128
 
11129
			#回傳結果
11130
			return $result;
11131
 
11132
			}#if end
11133
 
11134
		#檢查參數
43 liveuser 11135
		#函式說明:
1 liveuser 11136
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11137
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11138
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11139
		#$result["function"],當前執行的函式名稱.
11140
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11141
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11142
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11143
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11144
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11145
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11146
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11147
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11148
		#必填寫的參數:
11149
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11150
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
11151
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11152
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePartHead","oriFileName");
11153
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11154
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11155
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11156
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11157
		#可以省略的參數:
11158
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11159
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
11160
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11161
		#$conf["canNotBeEmpty"]=array();
11162
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11163
		#$conf["canBeEmpty"]=array();
11164
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11165
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11166
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11167
		#$conf["skipableVariableName"]=array();
11168
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11169
		#$conf["skipableVariableType"]=array();
11170
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11171
		#$conf["skipableVarDefaultValue"]=array("");
11172
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11173
		#$conf["arrayCountEqualCheck"][]=array();
11174
		#參考資料來源:
11175
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11176
		#建議:
11177
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
11178
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11179
		unset($conf["variableCheck::checkArguments"]);
11180
 
11181
		#如果檢查參數失敗
11182
		if($checkArguments["status"]==="false"){
11183
 
11184
			#設置執行失敗
11185
			$result["status"]="false";
11186
 
11187
			#設置錯誤訊息
11188
			$result["error"]=$checkArguments;
11189
 
11190
			#回傳結果
11191
			return $result;
11192
 
11193
			}#if end
11194
 
11195
		#定義編號
11196
		$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");
11197
 
11198
		#定義分割檔案的前置字串
11199
		$filePartHead=$conf["filePartHead"];
11200
 
11201
		#要合併成的檔案名稱
11202
		$oriFileName=$conf["oriFileName"];
11203
 
11204
		#初始化要執行合併的語法
11205
		$restoreCmd="cat ";
11206
 
11207
		#有幾個編號就執行幾次
11208
		for($i=0;$i<count($charArray);$i++){
11209
 
11210
			#有幾個編號就執行幾次
11211
			for($j=0;$j<count($charArray);$j++){
11212
 
11213
				#如果該分割檔存在
11214
				if(file_exists($filePartHead.$charArray[$i].$charArray[$j])){
11215
 
11216
					#串接要還原的分割檔
11217
					$restoreCmd=$restoreCmd." '".$filePartHead.$charArray[$i].$charArray[$j]."'";
11218
 
11219
					}#if end
11220
 
11221
				#反之
11222
				else{
11223
 
11224
					#如果是第一個分割檔就找不到
11225
					if($i===0 && $j===0){
11226
 
11227
						#設置執行失敗
11228
						$result["status"]="false";
11229
 
11230
						#設置錯誤訊息
11231
						$result["error"][]="找不到第一個分割檔「".$filePartHead.$charArray[$i].$charArray[$j]."」";
11232
 
11233
						#回傳結果
11234
						return $result;
11235
 
11236
						}#if end
11237
 
11238
					#串接要還原成的檔案名稱
11239
					$restoreCmd=$restoreCmd." > '".$oriFileName."'";
11240
 
11241
					#取得執行的指令
11242
					$result["cmd"]=$restoreCmd;
11243
 
11244
					#執行還原的指令
11245
					exec($restoreCmd,$output,$status);
11246
 
11247
					#取得執行後的輸出
11248
					$result["content"]=$output;
11249
 
11250
					#結束回圈
11251
					break 2;
11252
 
11253
					}#else end
11254
 
11255
				}#for end
11256
 
11257
			}#for end
11258
 
11259
		#設置執行正常
11260
		$result["status"]="true";
11261
 
11262
		#回傳結果
11263
		return $result;
11264
 
11265
		}#function merge end
11266
 
11267
	/*
43 liveuser 11268
	#函式說明:
842 liveuser 11269
	#取得檔案的部分內容
11270
	#回傳結果:
11271
	#$result["status"],"true"代表移除成功,"false"代表移除失敗.
11272
	#$result["error"],錯誤訊息陣列.
11273
	#$result["function"],當前執行的函數名稱.
11274
	#$result["cmd"],執行的指令.
11275
	#$result["content"],取得的檔案內容.
11276
	#$result["length"],取得的內容長度.
11277
	#$result["EOF"],識別是否已經到檔案結尾,"true"代表是,"false"代表不是.
11278
	#必填參數:
11279
	#$conf["file"],字串,檔案的路徑與名稱.
11280
	$conf["file"]="";
11281
	#$conf["fileArgu"],字串,__FILE__的內容.
11282
	$conf["fileArgu"]=__FILE__;
11283
	#$conf["bytes"],整數字串,要讀取多少bytes.
11284
	$conf["bytes"]="";
11285
	#$conf["startIndex"],要從哪個bytes位置開始,起始點為0.
11286
	$conf["startIndex"]="";
11287
	#可省略參數:
11288
	#無
11289
	#參考資料:
11290
	#無.
11291
	#備註:
11292
	#無
11293
	*/
11294
	public static function getFilePart(&$conf){
11295
 
11296
		#初始化要回傳的結果
11297
		$result=array();
11298
 
11299
		#取得當前執行的函數名稱
11300
		$result["function"]=__FUNCTION__;
11301
 
11302
		#如果沒有參數
11303
		if(func_num_args()==0){
11304
 
11305
			#設置執行失敗
11306
			$result["status"]="false";
11307
 
11308
			#設置執行錯誤訊息
11309
			$result["error"]="函數".$result["function"]."需要參數";
11310
 
11311
			#回傳結果
11312
			return $result;
11313
 
11314
			}#if end
11315
 
11316
		#取得參數
11317
		$result["argu"]=$conf;
11318
 
11319
		#如果 $conf 不為陣列
11320
		if(gettype($conf)!=="array"){
11321
 
11322
			#設置執行失敗
11323
			$result["status"]="false";
11324
 
11325
			#設置執行錯誤訊息
11326
			$result["error"][]="\$conf變數須為陣列形態";
11327
 
11328
			#如果傳入的參數為 null
11329
			if(is_null($conf)){
11330
 
11331
				#設置執行錯誤訊息
11332
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11333
 
11334
				}#if end
11335
 
11336
			#回傳結果
11337
			return $result;
11338
 
11339
			}#if end
11340
 
11341
		#函式說明:
11342
		#檢查多個檔案與資料夾是否存在.
11343
		#回傳的結果:
11344
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11345
		#$result["error"],錯誤訊息陣列.
11346
		#$resutl["function"],當前執行的涵式名稱.
11347
		#$result["argu"],使用的參數.
11348
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11349
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11350
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
11351
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
11352
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11353
		#必填參數:
11354
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11355
		$conf["fileArray"]=array($conf["file"]);
11356
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11357
		$conf["fileArgu"]=__FILE__;
11358
		#可省略參數:
11359
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11360
		#$conf["disableWebSearch"]="false";
11361
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11362
		#$conf["userDir"]="true";
11363
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
11364
		#$conf["web"]="true";
11365
		#參考資料:
11366
		#http://php.net/manual/en/function.file-exists.php
11367
		#http://php.net/manual/en/control-structures.foreach.php
11368
		#備註:
11369
		#函數file_exists檢查的路徑為檔案系統的路徑
11370
		#$result["varName"][$i]結果未實作
11371
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11372
		unset($conf["fileAccess::checkMultiFileExist"]);
11373
 
11374
		#如果執行失敗
11375
		if($checkMultiFileExist["status"]==="false"){
11376
 
11377
			#設置執行失敗
11378
			$result["status"]="false";
11379
 
11380
			#設置執行錯誤訊息
11381
			$result["error"]=$checkMultiFileExist;
11382
 
11383
			#回傳結果
11384
			return $result;
11385
 
11386
			}#if end
11387
 
11388
		#如果檔案不存在
11389
		if($checkMultiFileExist["allExist"]==="false"){
11390
 
11391
			#設置執行失敗
11392
			$result["status"]="false";
11393
 
11394
			#設置執行錯誤訊息
11395
			$result["error"]=$checkMultiFileExist;
11396
 
11397
			#回傳結果
11398
			return $result;
11399
 
11400
			}#if end
11401
 
11402
		#透過 dd 指令,取得部分內容.
11403
		#函式說明:
11404
		#呼叫shell執行系統命令,並取得回傳的內容.
11405
		#回傳結果:
11406
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11407
		#$result["error"],錯誤訊息陣列.
11408
		#$result["function"],當前執行的函數名稱.
11409
		#$result["argu"],使用的參數.
11410
		#$result["cmd"],執行的指令內容.
11411
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
11412
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
11413
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
11414
		#$result["running"],是否還在執行.
11415
		#$result["pid"],pid.
11416
		#$result["statusCode"],執行結束後的代碼.
11417
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
11418
		#必填參數:
11419
		#$conf["command"],字串,要執行的指令.
11420
		$conf["external::callShell"]["command"]="dd";
11421
		#$conf["fileArgu"],字串,變數__FILE__的內容.
11422
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
11423
		#可省略參數:
11424
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
11425
		$conf["external::callShell"]["argu"]=array("if=".$conf["file"],"bs=".$conf["bytes"],"count=1","status=none");
11426
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
11427
		#$conf["arguIsAddr"]=array();
11428
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
11429
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
11430
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
11431
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
11432
		#$conf["enablePrintDescription"]="true";
11433
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
11434
		#$conf["printDescription"]="";
11435
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
11436
		#$conf["escapeshellarg"]="false";
11437
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
11438
		#$conf["thereIsShellVar"]=array();
11439
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
11440
		#$conf["username"]="";
11441
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
11442
		#$conf["password"]="";
11443
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
11444
		#$conf["useScript"]="";
11445
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
11446
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
11447
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
11448
		#$conf["inBackGround"]="";
11449
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
11450
		#$conf["getErr"]="false";
11451
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
11452
		#$conf["doNotRun"]="false";
11453
		#參考資料:
11454
		#exec=>http://php.net/manual/en/function.exec.php
11455
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
11456
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
11457
		#備註:
11458
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
11459
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
11460
		$callShell=external::callShell($conf["external::callShell"]);
11461
		unset($conf["external::callShell"]);
11462
 
11463
		#如果執行失敗
11464
		if($callShell["status"]==="false"){
11465
 
11466
			#設置執行失敗
11467
			$result["status"]="false";
11468
 
11469
			#設置執行錯誤訊息
11470
			$result["error"]=$callShell;
11471
 
11472
			#回傳結果
11473
			return $result;
11474
 
11475
			}#if end
11476
 
11477
		#取得結果
11478
		$result["content"]=$callShell["output"][0];
11479
 
11480
		#取得內容長度
11481
		$result["length"]=strlen($result["content"]);
11482
 
11483
		#預設尚未到檔案結尾 
11484
		$result["EOF"]="false";
11485
 
11486
		#如果取得的內容長度小於預期
11487
		if($result["length"]<$conf["bytes"]){
11488
 
11489
			#設置已經到檔案結尾了
11490
			$result["EOF"]="true";
11491
 
11492
			}#if end
11493
 
11494
		#設置執行正常
11495
		$result["status"]="true";
11496
 
11497
		#回傳結果
11498
		return $result;
11499
 
11500
		}#function getFilePart end
11501
 
11502
	/*
11503
	#函式說明:
711 liveuser 11504
	#取得節點的資訊.
1 liveuser 11505
	#回傳結果:
11506
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11507
	#$result["error"],錯誤訊息陣列.
11508
	#$result["function"],函數名稱. 
11509
	#$result["content"],檔案資訊陣列.
11510
	#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.	
11511
	#$result["content"]["ownerPerm"],檔案擁有者權限資訊.
11512
	#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.
11513
	#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.
11514
	#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.
11515
	#$result["content"]["ownerName"],檔案擁有着資訊.
11516
	#$result["content"]["groupName"],檔案所屬擁有着資訊.
11517
	#$result["content"]["size"],檔案大小.
11518
	#$result["content"]["modifyDate"],檔案變更年月日.
11519
	#$result["content"]["modifyTime"],檔案變更時分秒.
11520
	#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.
11521
	#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.
11522
	#必填參數:
11523
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
11524
	$conf["fileArgu"]=__FILE__;
11525
	#$conf["file"],字串,要查看擁有者資訊的檔案.
11526
	$conf["file"]="";
11527
	#可省略參數:
11528
	#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11529
	#$conf["web"]="true";
11530
	#參考資料:
11531
	#fileowner=>http://php.net/manual/en/function.fileowner.php
11532
	#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php
43 liveuser 11533
	#備註:
11534
	#無.
1 liveuser 11535
	*/
11536
	public static function fileInfo(&$conf=array()){
11537
 
11538
		#初始化要回傳的結果
11539
		$result=array();
11540
 
11541
		#取得當前執行的函數名稱
11542
		$result["function"]=__FUNCTION__;
11543
 
11544
		#如果沒有參數
11545
		if(func_num_args()==0){
11546
 
11547
			#設置執行失敗
11548
			$result["status"]="false";
11549
 
11550
			#設置執行錯誤訊息
11551
			$result["error"]="函數".$result["function"]."需要參數";
11552
 
11553
			#回傳結果
11554
			return $result;
11555
 
11556
			}#if end
11557
 
11558
		#取得參數
11559
		$result["argu"]=$conf;
11560
 
11561
		#如果 $conf 不為陣列
11562
		if(gettype($conf)!=="array"){
11563
 
11564
			#設置執行失敗
11565
			$result["status"]="false";
11566
 
11567
			#設置執行錯誤訊息
11568
			$result["error"][]="\$conf變數須為陣列形態";
11569
 
11570
			#如果傳入的參數為 null
11571
			if($conf===null){
11572
 
11573
				#設置執行錯誤訊息
11574
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11575
 
11576
				}#if end
11577
 
11578
			#回傳結果
11579
			return $result;
11580
 
11581
			}#if end
11582
 
11583
		#檢查參數
11584
		#函式說明:
11585
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11586
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11587
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
11588
		#$result["function"],當前執行的函式名稱.
11589
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
11590
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
11591
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
11592
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
11593
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
11594
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
11595
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
11596
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
11597
		#必填寫的參數:
11598
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
11599
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
11600
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
11601
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
11602
		#可以省略的參數:
11603
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
11604
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
11605
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
11606
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
11607
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
11608
		#$conf["canBeEmptyString"]="false";
11609
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
11610
		#$conf["ileAccess::checkArguments"]["canNotBeEmpty"]=array();
11611
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
11612
		#$conf["canBeEmpty"]=array();
11613
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
11614
		#$conf["skipableVariableCanNotBeEmpty"]=array();
11615
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
11616
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
11617
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
11618
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
11619
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
11620
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");
11621
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
11622
		#$conf["disallowAllSkipableVarIsEmpty"]="";
11623
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
11624
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
11625
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
11626
		#$conf["arrayCountEqualCheck"][]=array();
11627
		#參考資料來源:
11628
		#array_keys=>http://php.net/manual/en/function.array-keys.php
11629
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
11630
		unset($conf["variableCheck::checkArguments"]);
11631
 
11632
		#如果檢查參數失敗
11633
		if($checkArguments["status"]==="false"){
11634
 
11635
			#設置執行失敗
11636
			$result["status"]="false";
11637
 
11638
			#設置執行錯誤訊息
11639
			$result["error"]=$checkArguments;
11640
 
11641
			#回傳結果
11642
			return $result;
11643
 
11644
			}#if end
11645
 
11646
		#如果檢查參數不通過
11647
		if($checkArguments["passed"]==="false"){
11648
 
11649
			#設置執行失敗
11650
			$result["status"]="false";
11651
 
11652
			#設置執行錯誤訊息
11653
			$result["error"]=$checkArguments;
11654
 
11655
			#回傳結果
11656
			return $result;
11657
 
11658
			}#if end
11659
 
43 liveuser 11660
		#函式說明:
1 liveuser 11661
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
11662
		#回傳結果:
11663
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11664
		#$result["error"],錯誤訊息陣列.
11665
		#$result["function"],函數名稱. 
11666
		#$result["argu"],使用的參數.
11667
		#$result["content"],網址,若是在命令列執行,則為"null".
11668
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
11669
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.
11670
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
11671
		#必填參數:
11672
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
11673
		$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["file"];
11674
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
11675
		$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];
11676
		#可省略參數:
11677
		#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".
11678
		$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];
11679
		#備註:
11680
		#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.
11681
		$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);
11682
		unset($conf["fileAccess::getInternetAddressV2"]);
11683
 
11684
		#如果取得位置失敗
11685
		if($getInternetAddressV2["status"]==="false"){
11686
 
11687
			#設置執行失敗
11688
			$result["status"]="false";
11689
 
11690
			#設置執行錯誤訊息
11691
			$result["error"]=$getInternetAddressV2;
11692
 
11693
			#回傳結果
11694
			return $result;
11695
 
11696
			}#if end
11697
 
43 liveuser 11698
		#函式說明:
1 liveuser 11699
		#檢查多個檔案與資料夾是否存在.
11700
		#回傳的結果:
11701
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
11702
		#$result["error"],錯誤訊息陣列.
11703
		#$resutl["function"],當前執行的涵式名稱.
11704
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
11705
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
11706
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
11707
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
11708
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
11709
		#必填參數:
11710
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
11711
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($getInternetAddressV2["fileSystemAbsoulutePosition"]);
11712
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
11713
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
11714
		#可省略參數
11715
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
11716
		#$conf["disableWebSearch"]="false";
11717
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
11718
		#$conf["userDir"]="true";
11719
		#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
11720
		$conf["fileAccess::checkMultiFileExist"]["web"]="false";
11721
		#參考資料來源:
11722
		#http://php.net/manual/en/function.file-exists.php
11723
		#http://php.net/manual/en/control-structures.foreach.php
11724
		#備註:
11725
		#函數file_exists檢查的路徑為檔案系統的路徑
11726
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
11727
		unset($conf["fileAccess::checkMultiFileExist"]);
11728
 
11729
		#如果檢查檔案存在失敗
11730
		if($checkMultiFileExist["status"]==="false"){
11731
 
11732
			#設置執行失敗
11733
			$result["status"]="false";
11734
 
11735
			#設置執行錯誤訊息
11736
			$result["error"]=$checkMultiFileExist;
11737
 
11738
			#回傳結果
11739
			return $result;
11740
 
11741
			}#if end
11742
 
11743
		#如果檔案不存在
11744
		if($checkMultiFileExist["allExist"]==="false"){
11745
 
11746
			#設置執行失敗
11747
			$result["status"]="false";
11748
 
11749
			#設置執行錯誤訊息
11750
			$result["error"]=$checkMultiFileExist;
11751
 
11752
			#回傳結果
11753
			return $result;
11754
 
11755
			}#if end
11756
 
11757
		#透過ls指令取得檔案的資訊
43 liveuser 11758
		#函式說明:
1 liveuser 11759
		#呼叫shell執行系統命令,並取得回傳的內容.
11760
		#回傳的結果:
11761
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11762
		#$result["error"],錯誤訊息陣列.
11763
		#$result["function"],當前執行的函數名稱.
11764
		#$result["cmd"],執行的指令內容.
11765
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
11766
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
11767
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
11768
		#$result["running"],是否還在執行.
11769
		#$result["pid"],pid
11770
		#必填的參數
11771
		#$conf["command"],字串,要執行的指令
11772
		$conf["external::callShell"]["command"]="ls";
11773
		#$conf["fileArgu"],字串,變數__FILE__的內容.
11774
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
11775
		#可省略參數:
11776
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
861 liveuser 11777
		$conf["external::callShell"]["argu"]=array("-l","--full-time","-d",$conf["file"]);
1 liveuser 11778
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
861 liveuser 11779
		$conf["external::callShell"]["arguIsAddr"]=array("false","false","false","false");
1 liveuser 11780
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
11781
		#$conf["enablePrintDescription"]="true";
11782
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
11783
		#$conf["printDescription"]="";
11784
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
454 liveuser 11785
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 11786
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
11787
		#$conf["username"]="";
11788
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
11789
		#$conf["password"]="";
11790
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
11791
		#$conf["useScript"]="";
11792
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
11793
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
11794
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
11795
		#$conf["inBackGround"]="";
11796
		#備註:
11797
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
11798
		#參考資料:
11799
		#exec=>http://php.net/manual/en/function.exec.php
11800
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
11801
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
11802
		$callShell=external::callShell($conf["external::callShell"]);
11803
		unset($conf["external::callShell"]);
11804
 
11805
		#如果執行失敗
11806
		if($callShell["status"]==="false"){
11807
 
11808
			#設置執行失敗
11809
			$result["status"]="false";
11810
 
11811
			#設置執行錯誤訊息
11812
			$result["error"]=$callShell;
11813
 
11814
			#回傳結果
11815
			return $result;
11816
 
11817
			}#if end	
11818
 
11819
		#解析檔案資訊
11820
		#-rwxrwx--x. 1 apache apache 65K 2017-04-16 22:53:19.044545806 +0800 fileAccessT.php
11821
 
11822
		#取得權限資訊 -rwxrwx--x
11823
		$perm=substr($callShell["output"][0],0,strpos($callShell["output"][0],'.'));
11824
 
11825
		#如果是目錄
11826
		if(substr($perm,0,1)==="d"){
11827
 
11828
			#設定為目錄
11829
			$result["content"]["is_folder"]="true";
11830
 
11831
			}#if end
11832
 
11833
		#反之
11834
		else{
11835
 
11836
			#設定不為目錄
11837
			$result["content"]["is_folder"]="false";
11838
 
11839
			}#else end
11840
 
11841
		#解析檔案擁有者權限資訊
11842
		$result["content"]["ownerPerm"]=substr($perm,1,3);
11843
 
861 liveuser 11844
		#如果檔案擁有者名稱為空
11845
		if(empty($result["content"]["ownerPerm"])){
11846
 
11847
			#設置執行失敗
11848
			$result["status"]="false";
11849
 
11850
			#設置執行錯誤訊息
11851
			$result["error"]=$callShell;
11852
 
11853
			#回傳結果
11854
			return $result;
11855
 
11856
			}#if end
11857
 
1 liveuser 11858
		#解析檔案歸屬群組權限資訊
11859
		$result["content"]["groupPerm"]=substr($perm,4,3);
11860
 
11861
		#解析檔案對於其他身份使用者的權限資訊
11862
		$result["content"]["otherPerm"]=substr($perm,7,3);
11863
 
11864
		#取得目錄底下的檔案目錄數量起始點
11865
		$subElementStartPos=strpos($callShell["output"][0],' ');
11866
 
11867
		#取得目錄底下的檔案目錄數量結束點
11868
		$subElementEndPos=strpos($callShell["output"][0],' ',$subElementStartPos+1);
11869
 
11870
		#取得目錄底下的檔案目錄數量
11871
		$result["content"]["subElementCount"]=substr($callShell["output"][0],$subElementStartPos,$subElementEndPos-$subElementStartPos);
11872
 
11873
		#取得檔案擁有着資訊的起點
11874
		$ownerNameStrPos=strpos($callShell["output"][0],' ',$subElementEndPos)+1;
11875
 
11876
		#取得檔案擁有着資訊的結束點
11877
		$ownerNameEndPos=strpos($callShell["output"][0],' ',$ownerNameStrPos+1);
11878
 
11879
		#取得檔案擁有着資訊
11880
		$result["content"]["ownerName"]=substr($callShell["output"][0],$ownerNameStrPos,$ownerNameEndPos-$ownerNameStrPos);
11881
 
11882
		#取取得檔案群組擁有者資訊的起點
11883
		$groupNameStrPos=strpos($callShell["output"][0],' ',$ownerNameEndPos)+1;
11884
 
11885
		#取得檔案群組擁有者資訊的結束點
11886
		$groupNameEndPos=strpos($callShell["output"][0],' ',$groupNameStrPos);
11887
 
11888
		#取得檔案群組擁有者資訊
11889
		$result["content"]["groupName"]=substr($callShell["output"][0],$groupNameStrPos,$groupNameEndPos-$groupNameStrPos);
11890
 
11891
		#取得檔案大小的起點
11892
		$sizeStrPos=strpos($callShell["output"][0],' ',$groupNameEndPos)+1;
11893
 
11894
		#取得檔案大小的結束點
11895
		$sizeEndPos=strpos($callShell["output"][0],' ',$sizeStrPos);
11896
 
11897
		#取得檔案大小
11898
		$result["content"]["size"]=substr($callShell["output"][0],$sizeStrPos,$sizeEndPos-$sizeStrPos);
11899
 
11900
		#取得檔案變更年月日的起點
11901
		$modifyDateStrPos=strpos($callShell["output"][0],' ',$sizeEndPos)+1;
11902
 
11903
		#取得檔案變更年月日的結束點
11904
		$modifyDateEndPos=strpos($callShell["output"][0],' ',$modifyDateStrPos);
11905
 
11906
		#取得檔案變更年月日		
11907
		$result["content"]["modifyDate"]=substr($callShell["output"][0],$modifyDateStrPos,$modifyDateEndPos-$modifyDateStrPos);
11908
 
11909
		#取得檔案變更時分秒的起點
11910
		$modifyTimeStrPos=strpos($callShell["output"][0],' ',$modifyDateEndPos)+1;
11911
 
11912
		#取得檔案變更時分秒的結束點
11913
		$modifyTimeEndPos=strpos($callShell["output"][0],'.',$modifyTimeStrPos);
11914
 
11915
		#取得檔案變更時分秒
11916
		$result["content"]["modifyTime"]=substr($callShell["output"][0],$modifyTimeStrPos,$modifyTimeEndPos-$modifyTimeStrPos);
11917
 
11918
		#取得檔版變更時間秒的float數值起點
11919
		$modifyTimeFloatStrPos=strpos($callShell["output"][0],'.',$modifyTimeEndPos)+1;
11920
 
11921
		#取得檔版變更時間秒的float數值結束點
11922
		$modifyTimeFloatEndPos=strpos($callShell["output"][0],' ',$modifyTimeFloatStrPos);
11923
 
11924
		#取得檔版變更時間秒的float數值	
11925
		$result["content"]["modifyTimeFloat"]=substr($callShell["output"][0],$modifyTimeFloatStrPos,$modifyTimeFloatEndPos-$modifyTimeFloatStrPos);
11926
 
11927
		#取得時區起始點
11928
		$timezoneStrPos=strpos($callShell["output"][0],' ',$modifyTimeFloatEndPos)+1;
11929
 
11930
		#取得時區結束點
11931
		$timezoneEndPos=strpos($callShell["output"][0],' ',$timezoneStrPos)+1;	
11932
 
11933
		#取得檔案變更時間的時區與UTC的差距.
11934
		$result["content"]["timezone"]=substr($callShell["output"][0],$timezoneStrPos,$timezoneEndPos-$timezoneStrPos);			
11935
 
11936
		#設置執行正常
11937
		$result["status"]="true";
11938
 
11939
		#回傳結果
11940
		return $result;
11941
 
11942
		}#function fileInfo end
11943
 
11944
	/*
43 liveuser 11945
	#函式說明:
1 liveuser 11946
	#依據函數getListTree執行的結果,將其底下與其子目錄底下的特定檔案內容依據目錄層級輸出成html檔案 
11947
	#回傳結果:
11948
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
11949
	#$result["error"],錯誤訊息陣列.
11950
	#$result["function"],函數名稱. 
11951
	#$result["content"],html檔案輸出的位置與名稱.
11952
	#必填參數:
11953
	#$conf["getListTree"],陣列變數,函數getListTree執行的結果.
11954
	$conf["getListTree"]=$getListTree;
11955
	#可省略參數:
11956
	#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".
11957
	#$conf["fileToRead"]="help";
11958
	#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".
11959
	#$conf["output"]="help.html"; 
187 liveuser 11960
	#參考資料:
11961
	#無.
1 liveuser 11962
	#備註:
11963
	#建構中...
11964
	*/
11965
	public static function createHelpFile($conf){
11966
 
11967
		#初始化要回傳的結果
11968
		$result=array();
11969
 
11970
		#設置當其函數名稱
11971
		$result["function"]=__FUNCTION__;
11972
 
11973
		#如果 $conf 不為陣列
11974
		if(gettype($conf)!="array"){
11975
 
11976
			#設置執行失敗
11977
			$result["status"]="false";
11978
 
11979
			#設置執行錯誤訊息
11980
			$result["error"][]="\$conf變數須為陣列形態";
11981
 
11982
			#如果傳入的參數為 null
11983
			if($conf==null){
11984
 
11985
				#設置執行錯誤訊息
11986
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
11987
 
11988
				}#if end
11989
 
11990
			#回傳結果
11991
			return $result;
11992
 
11993
			}#if end
11994
 
11995
		#檢查參數
43 liveuser 11996
		#函式說明:
1 liveuser 11997
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
11998
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
11999
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12000
		#$result["function"],當前執行的函式名稱.
12001
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12002
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12003
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12004
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
12005
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12006
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12007
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12008
		#必填寫的參數:
12009
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12010
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12011
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12012
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("getListTree");
12013
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
12014
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
12015
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12016
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12017
		#可以省略的參數:
12018
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
12019
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12020
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12021
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");
12022
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12023
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");
12024
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12025
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");
12026
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12027
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");
12028
		#參考資料來源:
12029
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12030
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12031
		unset($conf["variableCheck::checkArguments"]);
12032
 
12033
		#如果 $checkResult["status"] 等於 "fasle"
12034
		if($checkResult["status"]=="false"){
12035
 
12036
			#設置錯誤識別
12037
			$result["status"]="false";
12038
 
12039
			#設置錯誤訊息
12040
			$result["error"]=$checkResult;
12041
 
12042
			#回傳結果
12043
			return $result;
12044
 
12045
			}#if end
12046
 
12047
		#如果 $checkResult["passed"] 等於 "fasle"
12048
		if($checkResult["passed"]=="false"){
12049
 
12050
			#設置錯誤識別
12051
			$result["status"]="false";
12052
 
12053
			#設置錯誤訊息
12054
			$result["error"]=$checkResult;
12055
 
12056
			#回傳結果
12057
			return $result;
12058
 
12059
			}#if end
12060
 
12061
		#如果 $conf["getListTree"]["status"] 不存在
12062
		if(!isset($conf["getListTree"]["status"])){
12063
 
12064
			#設置錯誤識別
12065
			$result["status"]="false";
12066
 
12067
			#設置錯誤訊息
12068
			$result["error"][]="getListTree參數必須為getListTree函數執行後的結果";
12069
 
12070
			#回傳結果
12071
			return $result;
12072
 
12073
			}#if end
12074
 
12075
		#如果 $conf["getListTree"] 執行失敗
12076
		if($conf["getListTree"]["status"]=="false"){
12077
 
12078
			#設置錯誤識別
12079
			$result["status"]="false";
12080
 
12081
			#設置錯誤訊息
12082
			$result["error"]=$conf["getListTree"];
12083
 
12084
			#回傳結果
12085
			return $result;
12086
 
12087
			}#if end
12088
 
12089
		#如果有目錄檔案
12090
		if(isset($conf["getListTree"]["content"])){
12091
 
12092
 
12093
 
12094
			}#if end
12095
 
12096
		}#function createHelpFile end
12097
 
12098
	/*
43 liveuser 12099
	#函式說明:
1 liveuser 12100
	#嵌入pdf檔案到網頁上面
12101
	#回傳結果:
12102
	#$result["status"],"true"爲建立成功,"false"爲建立失敗.
12103
	#$result["error"],錯誤訊息陣列.
12104
	#$result["function"],函數名稱. 
12105
	#$result["content"],嵌入pdf檔案的語法
12106
	#必填參數:
12107
	#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.
12108
	$conf["fileArgu"]=__FILE__;
12109
	#$conf["file"],字串,pdf檔案位置.
12110
	$conf["file"]="";
12111
	#可省略參數:
12112
	#$conf["type"],字串,要用"iframe"還是"object"的方式嵌入pdf檔案,預設為"iframe".
12113
	#$conf["type"]="iframe";
12114
	#參考資料:
12115
	#嵌入pdf到網頁=>https://stackoverflow.com/questions/14690000/embed-a-pdf-in-html5
12116
	#備註:
12117
	#如果是網址就會出錯.
12118
	*/
12119
	public static function embedPdf(&$conf=array()){
12120
 
12121
		#初始化要回傳的結果
12122
		$result=array();
12123
 
12124
		#取得當前執行的函數名稱
12125
		$result["function"]=__FUNCTION__;
12126
 
12127
		#如果沒有參數
12128
		if(func_num_args()==0){
12129
 
12130
			#設置執行失敗
12131
			$result["status"]="false";
12132
 
12133
			#設置執行錯誤訊息
12134
			$result["error"]="函數".$result["function"]."需要參數";
12135
 
12136
			#回傳結果
12137
			return $result;
12138
 
12139
			}#if end
12140
 
12141
		#取得參數
12142
		$result["argu"]=$conf;
12143
 
12144
		#如果 $conf 不為陣列
12145
		if(gettype($conf)!=="array"){
12146
 
12147
			#設置執行失敗
12148
			$result["status"]="false";
12149
 
12150
			#設置執行錯誤訊息
12151
			$result["error"][]="\$conf變數須為陣列形態";
12152
 
12153
			#如果傳入的參數為 null
12154
			if($conf===null){
12155
 
12156
				#設置執行錯誤訊息
12157
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12158
 
12159
				}#if end
12160
 
12161
			#回傳結果
12162
			return $result;
12163
 
12164
			}#if end
12165
 
12166
		#檢查參數
43 liveuser 12167
		#函式說明:
1 liveuser 12168
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12169
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12170
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
12171
		#$result["function"],當前執行的函式名稱.
12172
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12173
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12174
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12175
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12176
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12177
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12178
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12179
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12180
		#必填寫的參數:
12181
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12182
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
12183
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12184
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
12185
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12186
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12187
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12188
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12189
		#可以省略的參數:
12190
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12191
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";
12192
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12193
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("function");
12194
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12195
		#$conf["canBeEmpty"]=array();
12196
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12197
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("width","height");
12198
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12199
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("type");
12200
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12201
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12202
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12203
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("iframe");
12204
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12205
		#$conf["arrayCountEqualCheck"][]=array();
12206
		#參考資料來源:
12207
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12208
		#建議:
12209
		#增加可省略參數全部不能為空字串或空陣列的參數功能.
12210
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12211
		unset($conf["variableCheck::checkArguments"]);		
12212
 
12213
		#如果檢查參數失敗
12214
		if($checkArguments["status"]==="false"){
12215
 
12216
			#設置執行失敗
12217
			$result["status"]="false";
12218
 
12219
			#設置執行錯誤訊息
12220
			$result["error"]=$checkArguments;
12221
 
12222
			#回傳結果
12223
			return $result;
12224
 
12225
			}#if end
12226
 
12227
		#如果參數檢查不通過
12228
		if($checkArguments["passed"]==="false"){
12229
 
12230
			#設置執行失敗
12231
			$result["status"]="false";
12232
 
12233
			#設置執行錯誤訊息
12234
			$result["error"]=$checkArguments;
12235
 
12236
			#回傳結果
12237
			return $result;
12238
 
12239
			}#if end
12240
 
12241
		#檢查檔案是否存在
43 liveuser 12242
		#函式說明:
1 liveuser 12243
		#檢查多個檔案與資料夾是否存在.
12244
		#回傳的結果:
12245
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12246
		#$result["error"],錯誤訊息陣列.
12247
		#$resutl["function"],當前執行的涵式名稱.
12248
		#$result["argu"],使用的參數.
12249
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12250
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12251
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。
12252
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12253
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12254
		#必填參數:
12255
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12256
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
12257
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12258
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12259
		#可省略參數
12260
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12261
		$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="false";
12262
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12263
		#$conf["userDir"]="true";
12264
		#參考資料來源:
12265
		#http://php.net/manual/en/function.file-exists.php
12266
		#http://php.net/manual/en/control-structures.foreach.php
12267
		#備註:
12268
		#函數file_exists檢查的路徑為檔案系統的路徑
12269
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12270
		unset($conf["fileAccess::checkMultiFileExist"]);
12271
 
12272
		#如果檢查檔案是否存在失敗
12273
		if($checkMultiFileExist["status"]==="false"){
12274
 
12275
			#設置執行失敗
12276
			$result["status"]="false";
12277
 
12278
			#設置執行錯誤訊息
12279
			$result["error"]=$checkMultiFileExist;
12280
 
12281
			#回傳結果
12282
			return $result;
12283
 
12284
			}#if end
12285
 
12286
		#如果檔案不存在
12287
		if($checkMultiFileExist["allExist"]==="false"){
12288
 
12289
			#設置執行失敗
12290
			$result["status"]="false";
12291
 
12292
			#設置執行錯誤訊息
12293
			$result["error"]=$checkMultiFileExist;
12294
 
12295
			#回傳結果
12296
			return $result;
12297
 
12298
			}#if end
12299
 
12300
		#產生 base64 的 pdf 編碼字串
12301
		$base64pdf=base64_encode(file_get_contents($conf["file"]));
12302
 
12303
		#產生 base64 的 pdf 編碼字串 data
12304
		$base64pdfData="data:application/pdf;base64,".$base64pdf;
12305
 
12306
		#判斷要用哪種方式嵌入pdf
12307
		switch($conf["type"]){
12308
 
12309
			#如果是用 object 方式
12310
			case "object":
12311
 
12312
				#產生嵌入的語法
12313
				$embedSyntax="<object style=\"width:100%;height:100%;\" data=\"".$base64pdfData."\"></object>";
12314
 
12315
				#取得語法
12316
				$result["content"]=&$embedSyntax;
12317
 
12318
				#跳出 switch
12319
				break;
12320
 
12321
			#預設
12322
			default:
12323
 
12324
				#產生嵌入的語法
12325
				$embedSyntax="<iframe style=\"width:100%;height:100%;\" src=\"".$base64pdfData."\"></iframe>";
12326
 
12327
				#取得語法
12328
				$result["content"]=&$embedSyntax;
12329
 
12330
			}#switch end
12331
 
12332
		#設置執行正常
12333
		$result["status"]="true";
12334
 
12335
		#回傳結果
12336
		return $result;
12337
 
12338
		}#function embedPdf end
12339
 
12340
	/*
12341
	#函式說明:
12342
	#用linux unzip去解壓縮zip檔案 
12343
	#回傳結果:
12344
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12345
	#$result["error"],錯誤訊息.
12346
	#$result["function"],當前執行的函數名稱.
12347
	#$result["content"]["each"],每個檔案的資訊.
12348
	#$result["content"]["each"]["Length"][$i],各別檔案目錄的原始長度.
12349
	#$result["content"]["each"]["Method"][$i],各別檔案目錄的壓縮方法.
12350
	#$result["content"]["each"]["Size"][$i],各別檔案目錄的壓縮後長度.
12351
	#$result["content"]["each"]["Cmpr"][$i],各別檔案目錄的壓縮率.
12352
	#$result["content"]["each"]["Date"][$i],各別檔案目錄的最後修改日期.
12353
	#$result["content"]["each"]["Time"][$i],各別檔案目錄的最後修改時間.
12354
	#$result["content"]["each"]["CRC-32"][$i],各別檔案目錄的CRC-32檢查碼.
12355
	#$result["content"]["each"]["Name"][$i],各別檔案目錄的路徑與名稱.
12356
	#$result["content"]["total"],統整的資訊.
12357
	#$result["content"]["Length"],總共的檔案長度.
12358
	#$result["content"]["Size"],壓縮後的檔案長度.
12359
	#$result["content"]["Cmpr"],平均壓縮率.
12360
	#$result["content"]["count"],壓縮檔裡面總共的檔案跟目錄數目.
12361
	#必填參數;
12362
	#$conf["zip"],字串,要解壓縮的zip檔案.
12363
	$conf["zip"]="";
12364
	#$conf["fileArgu"],字串,__FILE__的內容.
12365
	$conf["fileArgu"]=__FILE__;
12366
	#可省略參數:
12367
	#$conf["extract"],字串,要解壓縮到那個路徑,預設為當前位置"./".
12368
	#$conf["extract"]="";
43 liveuser 12369
	#備註:
12370
	#建議加上特定邊碼的支援例如、單
1 liveuser 12371
	*/
12372
	public static function unzip(&$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["argu"],設置給予的參數.
12426
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
12427
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
12428
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
12429
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
12430
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
12431
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
12432
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
12433
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
12434
		#必填寫的參數:
12435
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
12436
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
12437
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
12438
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
12439
		#可以省略的參數:
12440
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
12441
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("zip","fileArgu");
12442
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
12443
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
12444
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
12445
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
12446
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
12447
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("zip","fileArgu");
12448
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
12449
		#$conf["canBeEmpty"]=array();
12450
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
12451
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("extract");
12452
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
12453
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("extract");
12454
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
12455
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
12456
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
12457
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("./");
12458
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
12459
		#$conf["disallowAllSkipableVarIsEmpty"]="";
12460
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
12461
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
12462
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
12463
		#$conf["arrayCountEqualCheck"][]=array();
12464
		#參考資料來源:
12465
		#array_keys=>http://php.net/manual/en/function.array-keys.php
12466
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
12467
		unset($conf["variableCheck::checkArguments"]);
12468
 
12469
		#如果檢查參數失敗
12470
		if($checkArguments["status"]==="false"){
12471
 
12472
			#設置執行不正常
12473
			$result["status"]="false";
12474
 
12475
			#設置錯誤訊息
12476
			$result["error"]=$checkArguments;
12477
 
12478
			#回傳結果
12479
			return $result;
12480
 
12481
			}#if end
12482
 
12483
		#如果檢查參數不通過
12484
		if($checkArguments["passed"]==="false"){
12485
 
12486
			#設置執行不正常
12487
			$result["status"]="false";
12488
 
12489
			#設置錯誤訊息
12490
			$result["error"]=$checkArguments;
12491
 
12492
			#回傳結果
12493
			return $result;
12494
 
12495
			}#if end
12496
 
12497
		#檢查要解壓縮的檔案是否存在
43 liveuser 12498
		#函式說明:
1 liveuser 12499
		#檢查多個檔案與資料夾是否存在.
12500
		#回傳的結果:
12501
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12502
		#$result["error"],錯誤訊息陣列.
12503
		#$resutl["function"],當前執行的涵式名稱.
12504
		#$result["argu"],使用的參數.
12505
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
12506
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
12507
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
12508
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
12509
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
12510
		#必填參數:
12511
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
12512
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["zip"]);
12513
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
12514
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
12515
		#可省略參數
12516
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
12517
		#$conf["disableWebSearch"]="false";
12518
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
12519
		#$conf["userDir"]="true";
12520
		#參考資料來源:
12521
		#http://php.net/manual/en/function.file-exists.php
12522
		#http://php.net/manual/en/control-structures.foreach.php
12523
		#備註:
12524
		#函數file_exists檢查的路徑為檔案系統的路徑
12525
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
12526
		unset($conf["fileAccess::checkMultiFileExist"]);
12527
 
12528
		#如果檢查檔案是否存在失敗
12529
		if($checkMultiFileExist["status"]==="false"){
12530
 
12531
			#設置執行不正常
12532
			$result["status"]="false";
12533
 
12534
			#設置錯誤訊息
12535
			$result["error"]=$checkMultiFileExist;
12536
 
12537
			#回傳結果
12538
			return $result;
12539
 
12540
			}#if end
12541
 
12542
		#如果要解壓縮的檔案不存在
12543
		if($checkMultiFileExist["allExist"]==="false"){
12544
 
12545
			#設置執行不正常
12546
			$result["status"]="false";
12547
 
12548
			#設置錯誤訊息
12549
			$result["error"]=$checkMultiFileExist;
12550
 
12551
			#回傳結果
12552
			return $result;
12553
 
12554
			}#if end
12555
 
43 liveuser 12556
		#函式說明:
1 liveuser 12557
		#呼叫shell執行系統命令,並取得回傳的內容.
43 liveuser 12558
		#回傳結果:
1 liveuser 12559
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12560
		#$result["error"],錯誤訊息陣列.
12561
		#$result["function"],當前執行的函數名稱.
12562
		#$result["argu"],使用的參數.
12563
		#$result["cmd"],執行的指令內容.
12564
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12565
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12566
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12567
		#$result["running"],是否還在執行.
12568
		#$result["pid"],pid
43 liveuser 12569
		#必填參數:
1 liveuser 12570
		#$conf["command"],字串,要執行的指令與.
12571
		$conf["external::callShell"]["command"]="unzip";
12572
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12573
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12574
		#可省略參數:
12575
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12576
		$conf["external::callShell"]["argu"]=array("-d",$conf["extract"],"-o","-q",$conf["zip"]);
12577
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12578
		#$conf["arguIsAddr"]=array();
12579
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12580
		#$conf["enablePrintDescription"]="true";
12581
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12582
		#$conf["printDescription"]="";
12583
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
454 liveuser 12584
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 12585
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12586
		#$conf["username"]="";
12587
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12588
		#$conf["password"]="";
12589
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12590
		#$conf["useScript"]="";
12591
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12592
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12593
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12594
		#$conf["inBackGround"]="";
12595
		#備註:
12596
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12597
		#參考資料:
12598
		#exec=>http://php.net/manual/en/function.exec.php
12599
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12600
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12601
		$callShell=external::callShell($conf["external::callShell"]);
12602
		unset($conf["external::callShell"]);
12603
 
12604
		#如果執行cmd失敗
12605
		if($callShell["status"]==="false"){
12606
 
12607
			#設置執行不正常
12608
			$result["status"]="false";
12609
 
12610
			#設置錯誤訊息
12611
			$result["error"]=$callShell;
12612
 
12613
			#回傳結果
12614
			return $result;
12615
 
12616
			}#if end
12617
 
43 liveuser 12618
		#函式說明:
1 liveuser 12619
		#呼叫shell執行系統命令,並取得回傳的內容.
12620
		#回傳的結果:
12621
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12622
		#$result["error"],錯誤訊息陣列.
12623
		#$result["function"],當前執行的函數名稱.
12624
		#$result["argu"],使用的參數.
12625
		#$result["cmd"],執行的指令內容.
12626
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
12627
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
12628
		#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
12629
		#$result["running"],是否還在執行.
12630
		#$result["pid"],pid
12631
		#必填的參數
12632
		#$conf["command"],字串,要執行的指令與.
12633
		$conf["external::callShell"]["command"]="unzip";
12634
		#$conf["fileArgu"],字串,變數__FILE__的內容.
12635
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
12636
		#可省略參數:
12637
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
12638
		$conf["external::callShell"]["argu"]=array("-v",$conf["zip"]);
12639
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
12640
		#$conf["arguIsAddr"]=array();
12641
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
12642
		#$conf["enablePrintDescription"]="true";
12643
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.
12644
		#$conf["printDescription"]="";
12645
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
454 liveuser 12646
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 12647
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
12648
		#$conf["username"]="";
12649
		#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
12650
		#$conf["password"]="";
12651
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
12652
		#$conf["useScript"]="";
12653
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
12654
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
12655
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
12656
		#$conf["inBackGround"]="";
12657
		#備註:
12658
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
12659
		#參考資料:
12660
		#exec=>http://php.net/manual/en/function.exec.php
12661
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
12662
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
12663
		$callShell=external::callShell($conf["external::callShell"]);
12664
		unset($conf["external::callShell"]);
12665
 
12666
		#如果執行cmd失敗
12667
		if($callShell["status"]==="false"){
12668
 
12669
			#設置執行不正常
12670
			$result["status"]="false";
12671
 
12672
			#設置錯誤訊息
12673
			$result["error"]=$callShell;
12674
 
12675
			#回傳結果
12676
			return $result;
12677
 
12678
			}#if end	
12679
 
12680
		#取得輸出的內容陣列
12681
		$unzipInfo=$callShell["output"];
12682
 
12683
		/*
12684
 
12685
		 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
12686
		--------  ------  ------- ---- ---------- ----- --------  ----
12687
		 4194304  Defl:X  2507269  40% 05-04-2002 17:30 9386a740  PS2 Bios 30004R V6 Pal.bin
12688
			   4  Defl:X        6 -50% 05-15-2005 06:45 054a6ec2  PS2 Bios 30004R V6 Pal.MEC
12689
			1024  Defl:X       22  98% 06-25-2005 14:55 3493bb06  PS2 Bios 30004R V6 Pal.NVM
12690
		  199680  Defl:X    70524  65% 06-02-2004 16:50 2c3bcd32  rom1.bin
12691
		 4194304  Defl:X  2637496  37% 02-20-2005 21:12 6f8e3c29  SCPH-70004_BIOS_V12_PAL_200.BIN
12692
		 3145728  Defl:X  3138427   0% 02-20-2005 21:12 bf3cbc65  SCPH-70004_BIOS_V12_PAL_200.EROM
12693
			1024  Defl:X      706  31% 02-20-2005 21:12 a8d51ead  SCPH-70004_BIOS_V12_PAL_200.NVM
12694
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM1
12695
		  524288  Defl:X   149924  71% 02-20-2005 21:12 0e8797c0  SCPH-70004_BIOS_V12_PAL_200.ROM2
12696
		 4194304  Defl:X  2213105  47% 10-18-2000 06:06 b7ef81a9  scph10000.bin
12697
			1024  Defl:X       11  99% 01-01-2005 00:42 efb5af2e  scph10000.NVM
12698
		 4194304  Defl:X  2511182  40% 06-27-2003 10:51 a19e0bf5  scph39001.bin
12699
			   4  Defl:X        6 -50% 05-14-2005 16:00 054a6ec2  scph39001.MEC
12700
			1024  Defl:X       20  98% 05-31-2005 16:09 e14a6cd6  scph39001.NVM
12701
		--------          -------  ---                            -------
12702
		21175304         13378622  37%                            14 files
12703
 
12704
		*/
12705
 
12706
		#取得行數
12707
		$lineCount=count($unzipInfo);
12708
 
12709
		#取得標題
43 liveuser 12710
		#函式說明:
1 liveuser 12711
		#將固定格式的字串分開,並回傳分開的結果。
12712
		#回傳結果:
12713
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12714
		#$result["error"],錯誤訊息陣列
12715
		#$result["function"],當前執行的函數名稱.
12716
		#$result["oriStr"],要分割的原始字串內容
12717
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12718
		#$result["dataCounts"],爲總共分成幾段
12719
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 12720
		#必填參數:
1 liveuser 12721
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[1];#要處理的字串。
12722
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12723
		#可省略參數:
12724
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12725
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12726
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12727
		unset($conf["stringProcess::spiltString"]);
12728
 
12729
		#如果分割字串失敗
12730
		if($spiltString["status"]==="false"){
12731
 
12732
			#設置執行不正常
12733
			$result["status"]="false";
12734
 
12735
			#設置錯誤訊息
12736
			$result["error"]=$spiltString;
12737
 
12738
			#回傳結果
12739
			return $result;
12740
 
12741
			}#if end
12742
 
12743
		#如果沒有分割用的關鍵字
12744
		if($spiltString["found"]==="false"){
12745
 
12746
			#設置執行不正常
12747
			$result["status"]="false";
12748
 
12749
			#設置錯誤訊息
12750
			$result["error"]=$spiltString;
12751
 
12752
			#回傳結果
12753
			return $result;
12754
 
12755
			}#if end
12756
 
12757
		#取得標題欄位
12758
		$titles=$spiltString["dataArray"];	
12759
 
12760
		#取得標題欄位數目
12761
		$titleCount=$spiltString["dataCounts"];
12762
 
12763
		#針對每列輸出
12764
		for($i=3;$i<$lineCount-2;$i++){
12765
 
12766
			#取得各欄位的內容
43 liveuser 12767
			#函式說明:
1 liveuser 12768
			#將固定格式的字串分開,並回傳分開的結果。
12769
			#回傳結果:
12770
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12771
			#$result["error"],錯誤訊息陣列
12772
			#$result["function"],當前執行的函數名稱.
12773
			#$result["oriStr"],要分割的原始字串內容
12774
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12775
			#$result["dataCounts"],爲總共分成幾段
12776
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 12777
			#必填參數:
1 liveuser 12778
			$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$i];#要處理的字串。
12779
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12780
			#可省略參數:
12781
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12782
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12783
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12784
			unset($conf["stringProcess::spiltString"]);
12785
 
12786
			#如果分割字串失敗
12787
			if($spiltString["status"]==="false"){
12788
 
12789
				#設置執行不正常
12790
				$result["status"]="false";
12791
 
12792
				#設置錯誤訊息
12793
				$result["error"]=$spiltString;
12794
 
12795
				#回傳結果
12796
				return $result;
12797
 
12798
				}#if end
12799
 
12800
			#如果沒有分割用的關鍵字
12801
			if($spiltString["found"]==="false"){
12802
 
12803
				#設置執行不正常
12804
				$result["status"]="false";
12805
 
12806
				#設置錯誤訊息
12807
				$result["error"]=$spiltString;
12808
 
12809
				#回傳結果
12810
				return $result;
12811
 
12812
				}#if end
12813
 
12814
			#取得各欄位的內容
12815
			$cols=$spiltString["dataArray"];
12816
 
12817
			#取得欄位的數目
12818
			$colsCount=$spiltString["dataCounts"];
12819
 
12820
			#如果實際抓出的內容欄位數量大於標題欄位數量,代表檔案/目錄名稱含有空格
12821
			if($colsCount>$titleCount){
12822
 
12823
				#新的檔案名稱
12824
				$newFileName="";
12825
 
12826
				#針對每個多出的欄位
12827
				for($j=$titleCount;$j<$colsCount;$j++){
12828
 
12829
					#串接屬於檔案名稱的部分
12830
					$newFileName=$newFileName.$cols[$j];
12831
 
12832
					#如果不是最後一個項目
12833
					if($j!==$colsCount-1){
12834
 
12835
						#增加空格
12836
						$newFileName=$newFileName." ";
12837
 
12838
						}#if end
12839
 
12840
					}#for end
12841
 
12842
				#取代成對的檔案名稱
12843
				$cols[$titleCount-1]=$newFileName;
12844
 
12845
				}#if end
12846
 
12847
			#針對每個欄位
12848
			for($j=0;$j<$titleCount;$j++){
12849
 
12850
				#取得欄位內容
12851
				$result["content"]["each"][$titles[$j]][]=$cols[$j];
12852
 
12853
				}#for end
12854
 
12855
			}#for end
12856
 
12857
		#取得 total 的輸出內容
43 liveuser 12858
		#函式說明:
1 liveuser 12859
		#將固定格式的字串分開,並回傳分開的結果。
12860
		#回傳結果:
12861
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
12862
		#$result["error"],錯誤訊息陣列
12863
		#$result["function"],當前執行的函數名稱.
12864
		#$result["oriStr"],要分割的原始字串內容
12865
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
12866
		#$result["dataCounts"],爲總共分成幾段
12867
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 12868
		#必填參數:
1 liveuser 12869
		$conf["stringProcess::spiltString"]["stringIn"]=$unzipInfo[$lineCount-1];#要處理的字串。
12870
		$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";#爲以哪個符號作爲分割
12871
		#可省略參數:
12872
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
12873
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
12874
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
12875
		unset($conf["stringProcess::spiltString"]);
12876
 
12877
		#如果分割字串失敗
12878
		if($spiltString["status"]==="false"){
12879
 
12880
			#設置執行不正常
12881
			$result["status"]="false";
12882
 
12883
			#設置錯誤訊息
12884
			$result["error"]=$spiltString;
12885
 
12886
			#回傳結果
12887
			return $result;
12888
 
12889
			}#if end
12890
 
12891
		#如果沒有分割用的關鍵字
12892
		if($spiltString["found"]==="false"){
12893
 
12894
			#設置執行不正常
12895
			$result["status"]="false";
12896
 
12897
			#設置錯誤訊息
12898
			$result["error"]=$spiltString;
12899
 
12900
			#回傳結果
12901
			return $result;
12902
 
12903
			}#if end
12904
 
12905
		#取得各欄位的內容
12906
		$cols=$spiltString["dataArray"];
12907
 
12908
		#取得總共的檔案長度
12909
		$result["content"]["total"][$titles[0]]=$cols[0];
12910
 
12911
		#取得壓縮時的總共檔案長度
12912
		$result["content"]["total"][$titles[2]]=$cols[1];
12913
 
12914
		#取得壓縮時的總共檔案長度
12915
		$result["content"]["total"][$titles[3]]=$cols[2];
12916
 
12917
		#取得解壓縮出了多少檔案跟目錄
12918
		$result["content"]["total"]["count"]=explode(" ",$cols[3])[0];
12919
 
12920
		#設置執行正常
12921
		$result["status"]="true";
12922
 
12923
		#回傳結果
12924
		return $result;
12925
 
12926
		}#function unzip end
12927
 
12928
	/*
12929
	#函式說明:
12930
	#接收Range: bytes=0-499格式的header, 輸出檔案的片段或完整檔案.
12931
	#回傳結果:
12932
	#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
12933
	#$result["error"],錯誤訊息.
12934
	#$result["function"],當前執行的函式名稱.
12935
	#必填參數:
12936
	#$conf["filePath"],字串,檔案的路徑.
12937
	$conf["filePath"]="";
12938
	#可省略參數:
12939
	#$conf["fileName"],字串,顯示的檔案名稱,預設為basename($conf["filePath"]);
12940
	#$conf["fileName"]="";
12941
	#參考資料:
12942
	#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/
12943
	#http://php.net/manual/en/function.filemtime.php
12944
	#http://php.net/manual/en/function.connection-status.php
12945
	#http://php.net/manual/en/function.fread.php
12946
	#備註:
12947
	#請勿在運行該函式前印出任何內容,這是要給用戶端接收的內容.
12948
	*/
12949
	public static function partDownload(&$conf=array()){
12950
 
12951
		#初始化要回傳的結果
12952
		$result=array();
12953
 
12954
		#取得當前執行的函數名稱
12955
		$result["function"]=__FUNCTION__;
12956
 
12957
		#如果沒有參數
12958
		if(func_num_args()==0){
12959
 
12960
			#設置執行失敗
12961
			$result["status"]="false";
12962
 
12963
			#設置執行錯誤訊息
12964
			$result["error"]="函數".$result["function"]."需要參數";
12965
 
12966
			#回傳結果
12967
			return $result;
12968
 
12969
		}#if end
12970
 
12971
		#取得參數
12972
		$result["argu"]=$conf;
12973
 
12974
		#如果 $conf 不為陣列
12975
		if(gettype($conf)!=="array"){
12976
 
12977
			#設置執行失敗
12978
			$result["status"]="false";
12979
 
12980
			#設置執行錯誤訊息
12981
			$result["error"][]="\$conf變數須為陣列形態";
12982
 
12983
			#如果傳入的參數為 null
12984
			if($conf===null){
12985
 
12986
				#設置執行錯誤訊息
12987
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
12988
 
12989
				}#if end
12990
 
12991
			#回傳結果
12992
			return $result;
12993
 
12994
			}#if end
12995
 
12996
		#檢查參數
12997
		#函式說明:
12998
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
12999
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13000
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13001
		#$result["function"],當前執行的函式名稱.
13002
		#$result["argu"],設置給予的參數.
13003
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13004
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13005
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13006
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13007
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13008
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13009
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13010
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13011
		#必填寫的參數:
13012
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13013
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13014
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13015
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13016
		#可以省略的參數:
13017
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13018
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePath");
13019
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13020
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
13021
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13022
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13023
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13024
		#$conf["canNotBeEmpty"]=array();
13025
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13026
		#$conf["canBeEmpty"]=array();
13027
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13028
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("fileName");
13029
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13030
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName");
13031
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13032
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
13033
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13034
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
13035
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13036
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13037
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13038
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13039
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13040
		#$conf["arrayCountEqualCheck"][]=array();
13041
		#參考資料來源:
13042
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13043
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13044
		unset($conf["variableCheck::checkArguments"]);
13045
 
13046
		#如果檢查參數失敗
13047
		if($checkArguments["status"]==="false"){
13048
 
13049
			#設置執行失敗
13050
			$result["status"]="false";
13051
 
13052
			#設置執行錯誤
13053
			$result["error"]=$checkArguments;
13054
 
13055
			#回傳結果
13056
			return $result;
13057
 
13058
			}#if end
13059
 
13060
		#如果檢查參數不通過
13061
		if($checkArguments["passed"]==="false"){
13062
 
13063
			#設置執行失敗
13064
			$result["status"]="false";
13065
 
13066
			#設置執行錯誤
13067
			$result["error"]=$checkArguments;
13068
 
13069
			#回傳結果
13070
			return $result;
13071
 
13072
			}#if end
13073
 
13074
		#如果沒有設置 $conf["fileName"]
13075
		if(!isset($conf["fileName"])){
13076
 
13077
			#取得檔案名稱
13078
			$filename=basename($conf["filePath"]);
13079
 
13080
			}#if end
13081
 
13082
		#反之
13083
		else{
13084
 
13085
			#取得設定好的檔案名稱
13086
			$filename=&$conf["fileName"];
13087
 
13088
			}#else end
13089
 
13090
		#取得檔案路徑
13091
		$location=$conf["filePath"];
13092
 
13093
		#取得mimetype
13094
		$mimetype=mime_content_type($location);
13095
 
13096
		#如果檔案不存在
13097
		if(!file_exists($location)){
13098
 
13099
			#提示找不到檔案
13100
			header("HTTP/1.1 404 Not Found");
13101
 
13102
			#設置執行失敗
13103
			$result["status"]="false";
13104
 
13105
			#設置錯誤訊息
13106
			$result["error"][]="檔案 ".$location." 不存在.";
13107
 
13108
			#回傳結果
13109
			return $result;
13110
 
13111
			}#if end
13112
 
13113
		#取得檔案的bytes長度
13114
		$size  = filesize($location);
13115
 
13116
		#取得檔案的最後變更日期
13117
		$time  = date('r', filemtime($location));
13118
 
13119
		#讀取檔案的2元碼內容
13120
		$fm = @fopen($location, 'rb');
13121
 
13122
		#如果開啟檔案失敗
13123
		if(!$fm){
13124
 
13125
			#提示錯誤
13126
			header("HTTP/1.1 505 Internal server error");
13127
 
13128
			#設置執行失敗
13129
			$result["status"]="false";
13130
 
13131
			#設置錯誤訊息
13132
			$result["error"][]="開啟檔案 ".$location." 失敗.";
13133
 
13134
			#回傳結果
13135
			return $result;
13136
 
13137
			}#if end
13138
 
13139
		#初始化要提供的bytes長度起始點
13140
		$begin  = 0;
13141
 
13142
		#初始化要提供的bytes長度結束點
13143
		$end  = $size - 1;
13144
 
13145
		#如果有接收到 'HTTP_RANGE' 的 header 訊息
13146
		if(isset($_SERVER['HTTP_RANGE'])){
13147
 
13148
			#接收到的範例
13149
			#Range: bytes=0-499 
13150
 
13151
			#取得要求的bytes位置範圍
13152
			sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d",$begin,$end);
13153
 
13154
			#如果 $begin 或 $end  有缺
13155
			if(!isset($begin) || !isset($end)){
13156
 
13157
				#設置執行失敗
13158
				$result["status"]="false";
13159
 
13160
				#設置錯誤訊息
13161
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13162
 
13163
				#回傳結果
13164
				return $result;
13165
 
13166
				}#if end
13167
 
13168
			#如果 $begin 沒有小於等於 $end
13169
			if(!($begin<=$end)){
13170
 
13171
				#設置執行失敗
13172
				$result["status"]="false";
13173
 
13174
				#設置錯誤訊息
13175
				$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";
13176
 
13177
				#回傳結果
13178
				return $result;
13179
 
13180
				}#if end
13181
 
13182
			}#if end
13183
 
13184
		#提示 200 ok
13185
		header('HTTP/1.1 200 OK');
13186
 
13187
		#提示 mimetype
13188
		header("Content-Type: $mimetype");
13189
 
13190
		#要先驗證cache中的資料,取得的內容放在快取的時間為0
13191
		header('Cache-Control: public, must-revalidate, max-age=0');
13192
 
13193
		#提示不要cache
13194
		header('Pragma: no-cache');  
13195
 
13196
		#提示接收的 Ranges 單位為 bytes
13197
		header('Accept-Ranges: bytes');
13198
 
13199
		#數值傳輸的內容長度為多少
13200
		header('Content-Length:' . (($end - $begin) + 1));
13201
 
13202
		#提示內容為檔案的哪邊到哪邊與總共的長度
13203
		header("Content-Range: bytes $begin-$end/$size");
13204
 
13205
		#提示檔案的名稱
13206
		header("Content-Disposition: inline; filename=$filename");
13207
 
13208
		#提示用2元碼傳輸
13209
		header("Content-Transfer-Encoding: binary");
13210
 
13211
		#提示檔案最後變更日期
13212
		header("Last-Modified: $time");
13213
 
13214
		#初始化當前位置
13215
		$cur  = $begin;
13216
 
13217
		#指定讀取的起始點為 $begin 
13218
		fseek($fm, $begin, 0);
13219
 
13220
		#讀取內容, 若不是檔案結尾, 且當前位置($cur)小於等於 本次要提供的長度結尾($end), 且connection_status為0
13221
		while(!feof($fm) && $cur<=$end && (connection_status()===0)){
13222
 
13223
			#一次最多印出 1024*16bytes 的長度,若剩下長度不足則只印出剩下的長度.
13224
			echo fread($fm, min(1024 * 16, ($end - $cur) + 1));
13225
 
13226
			#更改位置
13227
			$cur += 1024 * 16;
13228
 
13229
			}#while end
13230
 
13231
		}#function partDownload end
13232
 
13233
	/*
43 liveuser 13234
	#函式說明:
1 liveuser 13235
	#尋找檔案. 
13236
	#回傳結果:
13237
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13238
	#$result["error"],錯誤訊息.
13239
	#$result["warning"],警告訊息陣列.
13240
	#$result["function"],當前執行的函數名稱.
13241
	#$result["argu"],所使用的參數.
13242
	#$result["found"],是否有找到可以轉換的檔案,"true"代表有;"false"代表沒有.
13243
	#$result["content"],找到的檔案陣列.
13244
	#必填參數:
13245
	#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13246
	$conf["keyWord"]="";
13247
	#$conf["path"],字串陣列,虛擬硬碟檔案的搜尋路徑,預設為當前路徑.
13248
	$conf["path"]=array();
13249
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13250
	$conf["fileArgu"]=__FILE__;
13251
	#參考資料:
13252
	#http://php.net/manual/en/function.glob.php
43 liveuser 13253
	#備註:
13254
	#無.
1 liveuser 13255
	*/
13256
	public static function findFile(&$conf=array()){
13257
 
13258
		#初始化要回傳的結果
13259
		$result=array();
13260
 
13261
		#取得當前執行的函數名稱
13262
		$result["function"]=__FUNCTION__;
13263
 
13264
		#如果沒有參數
13265
		if(func_num_args()==0){
13266
 
13267
			#設置執行失敗
13268
			$result["status"]="false";
13269
 
13270
			#設置執行錯誤訊息
13271
			$result["error"]="函數".$result["function"]."需要參數";
13272
 
13273
			#回傳結果
13274
			return $result;
13275
 
13276
			}#if end		
13277
 
13278
		#取得參數
13279
		$result["argu"]=$conf;
13280
 
13281
		#如果 $conf 不為陣列
13282
		if(gettype($conf)!=="array"){
13283
 
13284
			#設置執行失敗
13285
			$result["status"]="false";
13286
 
13287
			#設置執行錯誤訊息
13288
			$result["error"][]="\$conf變數須為陣列形態";
13289
 
13290
			#如果傳入的參數為 null
13291
			if($conf===null){
13292
 
13293
				#設置執行錯誤訊息
13294
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13295
 
13296
				}#if end
13297
 
13298
			#回傳結果
13299
			return $result;
13300
 
13301
			}#if end
13302
 
13303
		#函式說明:
13304
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13305
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13306
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13307
		#$result["function"],當前執行的函式名稱.
13308
		#$result["argu"],設置給予的參數.
13309
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13310
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13311
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13312
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13313
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13314
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13315
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13316
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13317
		#必填寫的參數:
13318
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13319
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13320
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13321
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13322
		#可以省略的參數:
13323
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13324
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","keyWord","fileArgu");
13325
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13326
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");
13327
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13328
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13329
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13330
		#$conf["canNotBeEmpty"]=array();
13331
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13332
		#$conf["canBeEmpty"]=array();
13333
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13334
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13335
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13336
		#$conf["skipableVariableName"]=array();
13337
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13338
		#$conf["skipableVariableType"]=array();
13339
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13340
		#$conf["skipableVarDefaultValue"]=array("");
13341
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13342
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13343
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13344
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13345
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13346
		#$conf["arrayCountEqualCheck"][]=array();
13347
		#參考資料來源:
13348
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13349
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13350
		unset($conf["variableCheck::checkArguments"]);
13351
 
13352
		#如果檢查參數失敗
13353
		if($checkArguments["status"]==="false"){
13354
 
13355
			#設置執行失敗
13356
			$result["status"]="false";
13357
 
13358
			#設置執行失敗訊息
13359
			$result["error"]=$checkArguments;
13360
 
13361
			#回傳結果
13362
			return $result;
13363
 
13364
			}#if end
13365
 
13366
		#如果檢查參數不通過
13367
		if($checkArguments["passed"]==="false"){
13368
 
13369
			#設置執行失敗
13370
			$result["status"]="false";
13371
 
13372
			#設置執行失敗訊息
13373
			$result["error"]=$checkArguments;
13374
 
13375
			#回傳結果
13376
			return $result;
13377
 
13378
			}#if end
13379
 
13380
		#檢查要搜尋的路徑是否都存在
43 liveuser 13381
		#函式說明:
1 liveuser 13382
		#s檢查多個檔案與資料夾是否存在.
13383
		#回傳的結果:
13384
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
13385
		#$result["error"],錯誤訊息陣列.
13386
		#$resutl["function"],當前執行的涵式名稱.
13387
		#$result["argu"],使用的參數.
13388
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
13389
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
13390
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
13391
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
13392
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
13393
		#必填參數:
13394
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
13395
		$conf["self::checkMultiFileExist"]["fileArray"]=$conf["path"];
13396
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13397
		$conf["self::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
13398
		#可省略參數
13399
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
13400
		#$conf["disableWebSearch"]="false";
13401
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13402
		#$conf["userDir"]="true";
13403
		#參考資料來源:
13404
		#http://php.net/manual/en/function.file-exists.php
13405
		#http://php.net/manual/en/control-structures.foreach.php
13406
		#備註:
13407
		#函數file_exists檢查的路徑為檔案系統的路徑
13408
		$checkMultiFileExist=self::checkMultiFileExist($conf["self::checkMultiFileExist"]);
13409
		unset($conf["self::checkMultiFileExist"]);
13410
 
13411
		#如果檢查目錄存在失敗
13412
		if($checkMultiFileExist["status"]==="false"){
13413
 
13414
			#設置執行失敗
13415
			$result["status"]="false";
13416
 
13417
			#設置執行失敗訊息
13418
			$result["error"]=$checkMultiFileExist;
13419
 
13420
			#回傳結果
13421
			return $result;
13422
 
13423
			}#if end	
13424
 
13425
		#如果目錄不存在
13426
		if($checkMultiFileExist["status"]==="false"){
13427
 
13428
			#設置執行失敗
13429
			$result["status"]="false";
13430
 
13431
			#設置執行失敗訊息
13432
			$result["error"]=$checkMultiFileExist;
13433
 
13434
			#回傳結果
13435
			return $result;
13436
 
13437
			}#if end
13438
 
13439
		#如果有路徑不存在
13440
		if($checkMultiFileExist["allExist"]==="false"){
13441
 
13442
			#設置執行失敗
13443
			$result["status"]="false";
13444
 
13445
			#設置執行失敗訊息
13446
			$result["error"]=$checkMultiFileExist;
13447
 
13448
			#設置提示有路徑不存在的訊息
13449
			$result["warning"][]="參數path的路徑沒有每個都存在";
13450
 
13451
			#回傳結果
13452
			return $result;
13453
 
13454
			}#if end
13455
 
13456
		#預設沒有找到檔案
13457
		$result["found"]="false";	
13458
 
13459
		#針對每個要搜尋的路徑
13460
		foreach($conf["path"] as $path){
13461
 
43 liveuser 13462
			#函式說明:
1 liveuser 13463
			#用find指令尋找檔案
13464
			#回傳結果:
13465
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13466
			#$result["error"],錯誤訊息.
13467
			#$result["function"],當前執行的函數名稱.
13468
			#$result["argu"],所使用的參數.
13469
			#$result["found"],是否有找到符合的檔案,"true"代表有;"false"代表沒有.
13470
			#$result["content"],找到的檔案陣列.
13471
			#必填參數:
13472
			#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.
13473
			$conf["cmd::find"]["keyWord"]=$conf["keyWord"];	
13474
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13475
			$conf["cmd::find"]["fileArgu"]=$conf["fileArgu"];
13476
			#可省略參數:
13477
			#$conf["path"],字串,搜尋的路徑,預設為"/".
13478
			$conf["cmd::find"]["path"]=$path;
13479
			#$conf["fileOnly"],字串,"true"代表只要找檔案,"false"代表.
13480
			$conf["cmd::find"]["fileOnly"]="true";
13481
			#參考資料:
13482
			#http://php.net/manual/en/function.glob.php
13483
			$find=cmd::find($conf["cmd::find"]);
13484
			unset($conf["cmd::find"]);
13485
 
13486
			#如果尋找檔案失敗
13487
			if($find["status"]==="false"){
13488
 
13489
				#設置執行失敗
13490
				$result["status"]="false";
13491
 
13492
				#設置執行失敗訊息
13493
				$result["error"]=$find;
13494
 
13495
				#回傳結果
13496
				return $result;
13497
 
13498
				}#if end
13499
 
13500
			#如果有找到符合的檔案
13501
			if($find["found"]==="true"){
13502
 
13503
				#設置有找到檔案
13504
				$result["found"]="true";
13505
 
13506
				#針對每個找到的檔案
13507
				foreach($find["content"] as $filtedFile){
13508
 
13509
					#設置有找到的檔案
13510
					$result["content"][]=$filtedFile;
13511
 
13512
					}#foreach end
13513
 
13514
				}#if end
13515
 
13516
			}#foreach end		
13517
 
13518
		#設置執行正常
13519
		$result["status"]="true";
13520
 
13521
		#回傳結果
13522
		return $result;
13523
 
13524
		}#function findFile end
13525
 
13526
	/*
43 liveuser 13527
	#函式說明:
1 liveuser 13528
	#判斷檔案位於哪個分割區
13529
	#回傳結果:
13530
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13531
	#$result["error"],錯誤訊息.
13532
	#$result["function"],當前執行的函數名稱.
13533
	#$result["argu"],所使用的參數.
13534
	#$result["content"],找到的檔案所屬分割區資訊.
13535
	#必填參數:
13536
	#$conf["file"],字串,檔案的路徑與名稱.
13537
	$conf["file"]="";
13538
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13539
	$conf["fileArgu"]=__FILE__;
43 liveuser 13540
	#可省略參數:
13541
	#無.
187 liveuser 13542
	#參考資料:
13543
	#無.
43 liveuser 13544
	#備註:
13545
	#無.
1 liveuser 13546
	*/
13547
	public static function addrInMountPoint(&$conf=array()){
13548
 
13549
		#初始化要回傳的結果
13550
		$result=array();
13551
 
13552
		#取得當前執行的函數名稱
13553
		$result["function"]=__FUNCTION__;
13554
 
13555
		#如果沒有參數
13556
		if(func_num_args()==0){
13557
 
13558
			#設置執行失敗
13559
			$result["status"]="false";
13560
 
13561
			#設置執行錯誤訊息
13562
			$result["error"]="函數".$result["function"]."需要參數";
13563
 
13564
			#回傳結果
13565
			return $result;
13566
 
13567
			}#if end		
13568
 
13569
		#取得參數
13570
		$result["argu"]=$conf;
13571
 
13572
		#如果 $conf 不為陣列
13573
		if(gettype($conf)!=="array"){
13574
 
13575
			#設置執行失敗
13576
			$result["status"]="false";
13577
 
13578
			#設置執行錯誤訊息
13579
			$result["error"][]="\$conf變數須為陣列形態";
13580
 
13581
			#如果傳入的參數為 null
13582
			if($conf===null){
13583
 
13584
				#設置執行錯誤訊息
13585
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13586
 
13587
				}#if end
13588
 
13589
			#回傳結果
13590
			return $result;
13591
 
13592
			}#if end
13593
 
13594
		#函式說明:
13595
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13596
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13597
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13598
		#$result["function"],當前執行的函式名稱.
13599
		#$result["argu"],設置給予的參數.
13600
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13601
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13602
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13603
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13604
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13605
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13606
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13607
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13608
		#必填寫的參數:
13609
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13610
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13611
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13612
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13613
		#可以省略的參數:
13614
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13615
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
13616
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13617
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13618
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13619
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13620
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13621
		#$conf["canNotBeEmpty"]=array();
13622
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13623
		#$conf["canBeEmpty"]=array();
13624
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13625
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13626
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13627
		#$conf["skipableVariableName"]=array();
13628
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13629
		#$conf["skipableVariableType"]=array();
13630
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13631
		#$conf["skipableVarDefaultValue"]=array("");
13632
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13633
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13634
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13635
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13636
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13637
		#$conf["arrayCountEqualCheck"][]=array();
13638
		#參考資料來源:
13639
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13640
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13641
		unset($conf["variableCheck::checkArguments"]);
13642
 
13643
		#如果檢查參數失敗
13644
		if($checkArguments["status"]==="false"){
13645
 
13646
			#設置執行失敗
13647
			$result["status"]="false";
13648
 
13649
			#設置執行失敗訊息
13650
			$result["error"]=$checkArguments;
13651
 
13652
			#回傳結果
13653
			return $result;
13654
 
13655
			}#if end
13656
 
13657
		#如果檢查參數不通過
13658
		if($checkArguments["passed"]==="false"){
13659
 
13660
			#設置執行失敗
13661
			$result["status"]="false";
13662
 
13663
			#設置執行失敗訊息
13664
			$result["error"]=$checkArguments;
13665
 
13666
			#回傳結果
13667
			return $result;
13668
 
13669
			}#if end
13670
 
43 liveuser 13671
		#函式說明:
1 liveuser 13672
		#透過lsblk指令的輸出取得已經掛載的blk.
13673
		#回傳結果:
13674
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13675
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13676
		#$result["function"],當前執行的函式名稱.
13677
		#$result["content"],lsblk的輸出內容.
13678
		#必填參數:
13679
		#$conf["fileArgu"],字串,變數__FILE__的內容.
13680
		$conf["cmd::lsblk"]["fileArgu"]=$conf["fileArgu"];
13681
		#可省略參數:
13682
		#無.	
13683
		$lsblk=cmd::lsblk($conf["cmd::lsblk"]);
13684
		unset($conf["cmd::lsblk"]);
13685
 
13686
		#如果執行失敗
13687
		if($lsblk["status"]==="false"){
13688
 
13689
			#設置執行失敗
13690
			$result["status"]="false";
13691
 
13692
			#設置執行失敗訊息
13693
			$result["error"]=$lsblk;
13694
 
13695
			#回傳結果
13696
			return $result;
13697
 
13698
			}#if end
13699
 
13700
		#將 $conf["file"] 轉換成絕對路徑
43 liveuser 13701
		#函式說明:
1 liveuser 13702
		#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.
13703
		#回傳結果:
13704
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
13705
		#$result["error"],錯誤訊息陣列.
13706
		#$result["function"],函數名稱. 
13707
		#$result["argu"],使用的參數.
13708
		#$result["content"],網址,若是在命令列執行,則為"null".
13709
		#$result["webPathFromRoot"],相對於網頁根目錄的路徑.
13710
		#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.
13711
		#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.
13712
		#必填參數:
13713
		#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.
13714
		$conf["fileAccess::getInternetAddress"]["address"]=$conf["file"];
13715
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
13716
		$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];
13717
		#可省略參數:
13718
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
13719
		#$conf["userDir"]="true";
13720
		$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);
13721
		unset($conf["fileAccess::getInternetAddress"]);
13722
 
13723
		#如果執行失敗
13724
		if($getInternetAddress["status"]==="false"){
13725
 
13726
			#設置執行失敗
13727
			$result["status"]="false";
13728
 
13729
			#設置執行失敗訊息
13730
			$result["error"]=$getInternetAddress;
13731
 
13732
			#回傳結果
13733
			return $result;
13734
 
13735
			}#if end	
13736
 
13737
		#使用絕對位置作為輸入字串
13738
		#函式說明:
13739
		#尋找字串是否存在對應的關鍵字,且符合的最常關鍵字為何?
13740
		#回傳結果:
13741
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13742
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13743
		#$result["function"],當前執行的函式名稱.
13744
		#$result["argu"],所使用的參數.
13745
		#$result["founded"],是否有找到關鍵字,"true"代表有找到,"false"代表沒有找到.
13746
		#$result["content"],最符合的字串完整內容.
13747
		#必填參數:
13748
		#$conf["input"],字串,要比對的字串陣列.
13749
		$conf["search::findLikelyStr"]["input"]=$getInternetAddress["fileSystemAbsoulutePosition"];
13750
		#$conf["keyWord"],字串陣列,要搜尋的關鍵字.
13751
		$conf["search::findLikelyStr"]["keyWord"]=$lsblk["content"]["MOUNTPOINT"];
13752
		$findLikelyStr=search::findLikelyStr($conf["search::findLikelyStr"]);
13753
		unset($conf["search::findLikelyStr"]);
13754
 
13755
		#如果執行失敗
13756
		if($findLikelyStr["status"]==="false"){
13757
 
13758
			#設置執行失敗
13759
			$result["status"]="false";
13760
 
13761
			#設置執行失敗訊息
13762
			$result["error"]=$findLikelyStr;
13763
 
13764
			#回傳結果
13765
			return $result;
13766
 
13767
			}#if end
13768
 
13769
		#如果找不到歸屬的分割區
13770
		if($findLikelyStr["found"]==="false"){
13771
 
13772
			#設置執行失敗
13773
			$result["status"]="false";
13774
 
13775
			#設置執行失敗訊息
13776
			$result["error"]=$findLikelyStr;
13777
 
13778
			#回傳結果
13779
			return $result;
13780
 
13781
			}#if end
13782
 
13783
		#設置歸屬的分割區資訊
13784
		$result["content"]=$findLikelyStr["content"];
13785
 
13786
		#設置執行正常
13787
		$result["status"]="true";
13788
 
13789
		#回傳結果
13790
		return $result;
13791
 
13792
		}#function addrInMountPoint end
13793
 
13794
	/*
43 liveuser 13795
	#函式說明:
1 liveuser 13796
	#取得檔案的副檔名
13797
	#回傳結果:
13798
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13799
	#$result["error"],錯誤訊息.
13800
	#$result["function"],當前執行的函數名稱.
13801
	#$result["argu"],所使用的參數.	
13802
	#$result["content"],副檔名.
13803
	#$result["name"],不含副檔的名稱.
13804
	#$result["fullName"],含副檔的名稱.
13805
	#$result["path"],檔案所處的路徑.
13806
	#必填參數:
13807
	#$conf["file"],字串,檔案的路徑與名稱.
13808
	$conf["file"]="";
13809
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
13810
	$conf["fileArgu"]=__FILE__;
43 liveuser 13811
	#可省略參數:
13812
	#無.
187 liveuser 13813
	#參考資料:
13814
	#無.
43 liveuser 13815
	#備註:
13816
	#無.
1 liveuser 13817
	*/
13818
	public static function getExtension(&$conf=array()){
13819
 
13820
		#初始化要回傳的結果
13821
		$result=array();
13822
 
13823
		#取得當前執行的函數名稱
13824
		$result["function"]=__FUNCTION__;
13825
 
13826
		#如果沒有參數
13827
		if(func_num_args()==0){
13828
 
13829
			#設置執行失敗
13830
			$result["status"]="false";
13831
 
13832
			#設置執行錯誤訊息
13833
			$result["error"]="函數".$result["function"]."需要參數";
13834
 
13835
			#回傳結果
13836
			return $result;
13837
 
13838
			}#if end		
13839
 
13840
		#取得參數
13841
		$result["argu"]=$conf;
13842
 
13843
		#如果 $conf 不為陣列
13844
		if(gettype($conf)!=="array"){
13845
 
13846
			#設置執行失敗
13847
			$result["status"]="false";
13848
 
13849
			#設置執行錯誤訊息
13850
			$result["error"][]="\$conf變數須為陣列形態";
13851
 
13852
			#如果傳入的參數為 null
13853
			if($conf===null){
13854
 
13855
				#設置執行錯誤訊息
13856
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
13857
 
13858
				}#if end
13859
 
13860
			#回傳結果
13861
			return $result;
13862
 
13863
			}#if end
13864
 
13865
		#函式說明:
13866
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
13867
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13868
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
13869
		#$result["function"],當前執行的函式名稱.
13870
		#$result["argu"],設置給予的參數.
13871
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
13872
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
13873
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
13874
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
13875
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
13876
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
13877
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
13878
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
13879
		#必填寫的參數:
13880
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
13881
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
13882
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
13883
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
13884
		#可以省略的參數:
13885
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
13886
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
13887
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
13888
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
13889
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
13890
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
13891
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
13892
		#$conf["canNotBeEmpty"]=array();
13893
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
13894
		#$conf["canBeEmpty"]=array();
13895
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
13896
		#$conf["skipableVariableCanNotBeEmpty"]=array();
13897
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
13898
		#$conf["skipableVariableName"]=array();
13899
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
13900
		#$conf["skipableVariableType"]=array();
13901
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
13902
		#$conf["skipableVarDefaultValue"]=array("");
13903
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
13904
		#$conf["disallowAllSkipableVarIsEmpty"]="";
13905
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
13906
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
13907
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
13908
		#$conf["arrayCountEqualCheck"][]=array();
13909
		#參考資料來源:
13910
		#array_keys=>http://php.net/manual/en/function.array-keys.php
13911
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
13912
		unset($conf["variableCheck::checkArguments"]);
13913
 
13914
		#如果檢查參數失敗
13915
		if($checkArguments["status"]==="false"){
13916
 
13917
			#設置執行失敗
13918
			$result["status"]="false";
13919
 
13920
			#設置執行失敗訊息
13921
			$result["error"]=$checkArguments;
13922
 
13923
			#回傳結果
13924
			return $result;
13925
 
13926
			}#if end
13927
 
13928
		#如果檢查參數不通過
13929
		if($checkArguments["passed"]==="false"){
13930
 
13931
			#設置執行失敗
13932
			$result["status"]="false";
13933
 
13934
			#設置執行失敗訊息
13935
			$result["error"]=$checkArguments;
13936
 
13937
			#回傳結果
13938
			return $result;
13939
 
13940
			}#if end
13941
 
13942
		#初始化檔案的路徑
13943
		$result["path"]="./";
13944
 
13945
		#用 "/" 來分割字串
43 liveuser 13946
		#函式說明:
1 liveuser 13947
		#將固定格式的字串分開,並回傳分開的結果。
13948
		#回傳結果:
13949
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13950
		#$result["error"],錯誤訊息陣列
13951
		#$result["function"],當前執行的函數名稱.
13952
		#$result["oriStr"],要分割的原始字串內容
13953
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
13954
		#$result["dataCounts"],爲總共分成幾段
13955
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 13956
		#必填參數:
1 liveuser 13957
		$conf["stringProcess::spiltString"]["stringIn"]=$conf["file"];#要處理的字串。
13958
		$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
13959
		#可省略參數:
13960
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
13961
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
13962
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
13963
		unset($conf["stringProcess::spiltString"]);
13964
 
13965
		#如果檢查參數失敗
13966
		if($spiltString["status"]==="false"){
13967
 
13968
			#設置執行失敗
13969
			$result["status"]="false";
13970
 
13971
			#設置執行失敗訊息
13972
			$result["error"]=$spiltString;
13973
 
13974
			#回傳結果
13975
			return $result;
13976
 
13977
			}#if end
13978
 
13979
		#初始化含副檔名的檔案名稱
13980
		$result["fullName"]=$conf["file"];
13981
 
13982
		#如果有"/"存在
13983
		if($spiltString["found"]==="true"){
13984
 
13985
			#取得含副檔名的檔案名稱
13986
			$result["fullName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
13987
 
13988
			#取得檔案的路徑
13989
			$result["path"]=substr($conf["file"],0,strlen($conf["file"])-strlen($result["fullName"]));
13990
 
13991
			}#if end
13992
 
13993
		#用 "." 來分割字串
43 liveuser 13994
		#函式說明:
1 liveuser 13995
		#將固定格式的字串分開,並回傳分開的結果。
13996
		#回傳結果:
13997
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
13998
		#$result["error"],錯誤訊息陣列
13999
		#$result["function"],當前執行的函數名稱.
14000
		#$result["oriStr"],要分割的原始字串內容
14001
		#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
14002
		#$result["dataCounts"],爲總共分成幾段
14003
		#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
43 liveuser 14004
		#必填參數:
1 liveuser 14005
		$conf["stringProcess::spiltString"]["stringIn"]=$result["fullName"];#要處理的字串。
14006
		$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
14007
		#可省略參數:
14008
		#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
14009
		$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
14010
		$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
14011
		unset($conf["stringProcess::spiltString"]);
14012
 
14013
		#如果檢查參數失敗
14014
		if($spiltString["status"]==="false"){
14015
 
14016
			#設置執行失敗
14017
			$result["status"]="false";
14018
 
14019
			#設置執行失敗訊息
14020
			$result["error"]=$spiltString;
14021
 
14022
			#回傳結果
14023
			return $result;
14024
 
14025
			}#if end
14026
 
14027
		#預設副檔名為 ""
14028
		$result["content"]="";
14029
 
14030
		#預設不含副檔名的檔案名稱
14031
		$result["name"]=$result["fullName"];
14032
 
14033
		#如果有"."存在
14034
		if($spiltString["found"]==="true"){
14035
 
14036
			#取得含副檔名
14037
			$result["content"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
14038
 
14039
			#取得不含副檔名的檔案名稱
14040
			$result["name"]=substr($result["fullName"],0,strlen($result["fullName"])-strlen($result["content"])-1);	
14041
 
14042
			}#if end
14043
 
14044
		#設置執行正常
14045
		$result["status"]="true";
14046
 
14047
		#回傳結果
14048
		return $result;
14049
 
14050
		}#function getExtension end
14051
 
14052
	/*
43 liveuser 14053
	#函式說明:
1 liveuser 14054
	#從檔案尾部開始讀取
14055
	#回傳結果:
14056
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14057
	#$result["error"],錯誤訊息.
14058
	#$result["function"],當前執行的函數名稱.
14059
	#$result["argu"],所使用的參數.	
14060
	#$result["content"],讀取到的內容陣列.
14061
	#$result["totalLineCount"],檔案的總共行數.
14062
	#$result["lines"],取得輸出的行數.
14063
	#$result["lineNum"],取得當前行數.
14064
	#必填參數:
14065
	#$conf["file"],字串,檔案的路徑與名稱.
14066
	$conf["file"]="";
14067
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14068
	$conf["fileArgu"]=__FILE__;
14069
	#可省略參數:
14070
	#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14071
	#$conf["web"]="false";
14072
	#$conf["line2start"],字串,從第幾列開始,預設為總行書減去linesPerTime+1.
14073
	#$conf["line2start"]="";
14074
	#$conf["linesPerTime"],字串,一次最多讀取幾列,預設爲10列.
14075
	#$conf["linesPerTime"]="10";	
187 liveuser 14076
	#參考資料:
14077
	#無.
43 liveuser 14078
	#備註:
14079
	#無.
1 liveuser 14080
	*/
14081
	public static function tail(&$conf){
14082
 
14083
		#初始化要回傳的結果
14084
		$result=array();
14085
 
14086
		#取得當前執行的函數名稱
14087
		$result["function"]=__FUNCTION__;
14088
 
14089
		#如果沒有參數
14090
		if(func_num_args()==0){
14091
 
14092
			#設置執行失敗
14093
			$result["status"]="false";
14094
 
14095
			#設置執行錯誤訊息
14096
			$result["error"]="函數".$result["function"]."需要參數";
14097
 
14098
			#回傳結果
14099
			return $result;
14100
 
14101
			}#if end		
14102
 
14103
		#取得參數
14104
		$result["argu"]=$conf;
14105
 
14106
		#如果 $conf 不為陣列
14107
		if(gettype($conf)!=="array"){
14108
 
14109
			#設置執行失敗
14110
			$result["status"]="false";
14111
 
14112
			#設置執行錯誤訊息
14113
			$result["error"][]="\$conf變數須為陣列形態";
14114
 
14115
			#如果傳入的參數為 null
14116
			if($conf===null){
14117
 
14118
				#設置執行錯誤訊息
14119
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14120
 
14121
				}#if end
14122
 
14123
			#回傳結果
14124
			return $result;
14125
 
14126
			}#if end
14127
 
14128
		#函式說明:
14129
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14130
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14131
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14132
		#$result["function"],當前執行的函式名稱.
14133
		#$result["argu"],設置給予的參數.
14134
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14135
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14136
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14137
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14138
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14139
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14140
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14141
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14142
		#必填寫的參數:
14143
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14144
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14145
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14146
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14147
		#可以省略的參數:
14148
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14149
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");
14150
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14151
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
14152
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14153
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14154
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14155
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu");
14156
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14157
		#$conf["canBeEmpty"]=array();
14158
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14159
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web","line2start","linesPerTime");
14160
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14161
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web","line2start","linesPerTime");
14162
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14163
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
14164
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14165
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,"10");
14166
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14167
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14168
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14169
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14170
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14171
		#$conf["arrayCountEqualCheck"][]=array();
14172
		#參考資料來源:
14173
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14174
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14175
		unset($conf["variableCheck::checkArguments"]);
14176
 
14177
		#如果檢查參數失敗
14178
		if($checkArguments["status"]==="false"){
14179
 
14180
			#設置執行失敗
14181
			$result["status"]="false";
14182
 
14183
			#設置執行失敗訊息
14184
			$result["error"]=$checkArguments;
14185
 
14186
			#回傳結果
14187
			return $result;
14188
 
14189
			}#if end
14190
 
14191
		#如果檢查參數不通過
14192
		if($checkArguments["passed"]==="false"){
14193
 
14194
			#設置執行失敗
14195
			$result["status"]="false";
14196
 
14197
			#設置執行失敗訊息
14198
			$result["error"]=$checkArguments;
14199
 
14200
			#回傳結果
14201
			return $result;
14202
 
14203
			}#if end
14204
 
14205
		#檢查檔案是否存在
43 liveuser 14206
		#函式說明:
1 liveuser 14207
		#檢查多個檔案與資料夾是否存在.
14208
		#回傳的結果:
14209
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
14210
		#$result["error"],錯誤訊息陣列.
14211
		#$resutl["function"],當前執行的涵式名稱.
14212
		#$result["argu"],使用的參數.
14213
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
14214
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
14215
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
14216
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
14217
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
14218
		#必填參數:
14219
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
14220
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
14221
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14222
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
14223
		#可省略參數
14224
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
14225
		#$conf["disableWebSearch"]="false";
14226
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
14227
		#$conf["userDir"]="true";
14228
		#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".
14229
		$conf["fileAccess::checkMultiFileExist"]["web"]=$conf["web"];
14230
		#參考資料來源:
14231
		#http://php.net/manual/en/function.file-exists.php
14232
		#http://php.net/manual/en/control-structures.foreach.php
14233
		#備註:
14234
		#函數file_exists檢查的路徑為檔案系統的路徑
14235
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
14236
		unset($conf["fileAccess::checkMultiFileExist"]);
14237
 
14238
		#如果執行失敗
14239
		if($checkMultiFileExist["status"]==="false"){
14240
 
14241
			#設置執行失敗
14242
			$result["status"]="false";
14243
 
14244
			#設置執行失敗訊息
14245
			$result["error"]=$checkMultiFileExist;
14246
 
14247
			#回傳結果
14248
			return $result;
14249
 
14250
			}#if end
14251
 
14252
		#如果檔案無法存取
14253
		if($checkMultiFileExist["allExist"]==="false"){
14254
 
14255
			#設置執行失敗
14256
			$result["status"]="false";
14257
 
14258
			#設置執行失敗訊息
14259
			$result["error"]=$checkMultiFileExist;
14260
 
14261
			#回傳結果
14262
			return $result;
14263
 
14264
			}#if end
14265
 
14266
		#取得檔案的行數
43 liveuser 14267
		#函式說明:
1 liveuser 14268
		#呼叫shell執行系統命令,並取得回傳的內容.
14269
		#回傳的結果:
14270
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14271
		#$result["error"],錯誤訊息陣列.
14272
		#$result["function"],當前執行的函數名稱.
14273
		#$result["argu"],使用的參數.
14274
		#$result["cmd"],執行的指令內容.
14275
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14276
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14277
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14278
		#$result["running"],是否還在執行.
14279
		#$result["pid"],pid.
14280
		#$result["statusCode"],執行結束後的代碼.
14281
		#必填的參數
14282
		#$conf["command"],字串,要執行的指令與.
14283
		$conf["external::callShell"]["command"]="cat";
14284
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14285
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14286
		#可省略參數:
14287
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14288
		$conf["external::callShell"]["argu"]=array($conf["file"],"|","wc","-l");
14289
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14290
		#$conf["arguIsAddr"]=array();	
14291
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14292
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14293
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14294
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14295
		#$conf["enablePrintDescription"]="true";
14296
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14297
		#$conf["printDescription"]="";
14298
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
454 liveuser 14299
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 14300
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14301
		#$conf["username"]="";
14302
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14303
		#$conf["password"]="";
14304
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14305
		#$conf["useScript"]="";
14306
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14307
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14308
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14309
		#$conf["inBackGround"]="";
14310
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14311
		#$conf["getErr"]="false";
14312
		#備註:
14313
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14314
		#參考資料:
14315
		#exec=>http://php.net/manual/en/function.exec.php
14316
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14317
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14318
		$callShell=external::callShell($conf["external::callShell"]);
14319
		unset($conf["external::callShell"]);
14320
 
14321
		#如果檢查參數失敗
14322
		if($callShell["status"]==="false"){
14323
 
14324
			#設置執行失敗
14325
			$result["status"]="false";
14326
 
14327
			#設置執行失敗訊息
14328
			$result["error"]=$callShell;
14329
 
14330
			#回傳結果
14331
			return $result;
14332
 
14333
			}#if end
14334
 
14335
		#取得檔案總行數
14336
		$result["totalLineCount"]=$callShell["output"][0];
14337
 
14338
		#如果未設置 $conf["line2start"]
14339
		if(!isset($conf["line2start"])){
14340
 
14341
			#$conf["line2start"]為總行數減去一次要看的行數減1
14342
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14343
 
14344
			}#if end	
14345
 
14346
		#如果開始行數小於1		
14347
		if($conf["line2start"]<1){
14348
 
14349
			#$conf["line2start"]為總行數減去一次要看的行數減1
14350
			$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;
14351
 
14352
			}#if end
14353
 
14354
		#如果開始行數小於1		
14355
		if($conf["line2start"]<1){
14356
 
14357
			#$conf["line2start"]為1
14358
			$conf["line2start"]=1;
14359
 
14360
			}#if end
14361
 
14362
		#取得指定範圍的行數
14363
		#取得檔案的行數
43 liveuser 14364
		#函式說明:
1 liveuser 14365
		#呼叫shell執行系統命令,並取得回傳的內容.
14366
		#回傳的結果:
14367
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14368
		#$result["error"],錯誤訊息陣列.
14369
		#$result["function"],當前執行的函數名稱.
14370
		#$result["argu"],使用的參數.
14371
		#$result["cmd"],執行的指令內容.
14372
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
14373
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
14374
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
14375
		#$result["running"],是否還在執行.
14376
		#$result["pid"],pid.
14377
		#$result["statusCode"],執行結束後的代碼.
14378
		#必填的參數
14379
		#$conf["command"],字串,要執行的指令與.
14380
		$conf["external::callShell"]["command"]="sed";
14381
		#$conf["fileArgu"],字串,變數__FILE__的內容.
14382
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];		
14383
		#可省略參數:
14384
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
14385
		$conf["external::callShell"]["argu"]=array("-n",$conf["line2start"].",".($conf["line2start"]+$conf["linesPerTime"]-1)."p",$conf["file"]);
14386
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
14387
		#$conf["arguIsAddr"]=array();	
14388
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
14389
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
14390
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
14391
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
14392
		#$conf["enablePrintDescription"]="true";
14393
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
14394
		#$conf["printDescription"]="";
14395
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".
454 liveuser 14396
		$conf["external::callShell"]["escapeshellarg"]="true";
1 liveuser 14397
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
14398
		#$conf["username"]="";
14399
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
14400
		#$conf["password"]="";
14401
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
14402
		#$conf["useScript"]="";
14403
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
14404
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
14405
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
14406
		#$conf["inBackGround"]="";
14407
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
14408
		#$conf["getErr"]="false";
14409
		#備註:
14410
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
14411
		#參考資料:
14412
		#exec=>http://php.net/manual/en/function.exec.php
14413
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
14414
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
14415
		$callShell=external::callShell($conf["external::callShell"]);
14416
		unset($conf["external::callShell"]);
14417
 
14418
		#如果檢查參數失敗
14419
		if($callShell["status"]==="false"){
14420
 
14421
			#設置執行失敗
14422
			$result["status"]="false";
14423
 
14424
			#設置執行失敗訊息
14425
			$result["error"]=$callShell;
14426
 
14427
			#回傳結果
14428
			return $result;
14429
 
14430
			}#if end
14431
 
14432
		#取得輸出的行數
14433
		$result["lines"]=count($callShell["output"]);
14434
 
14435
		#取得目前的輸出內容
14436
		$result["content"]=$callShell["output"];
14437
 
14438
		#取得當前行數
14439
		$result["lineNum"]=$conf["line2start"]+$result["lines"]-1;
14440
 
14441
		#如果當前行號小於總行數 
14442
		if($result["lineNum"]<$result["totalLineCount"]){
14443
 
14444
			#設置還有剩餘的內容
14445
			$result["left"]="true";
14446
 
14447
			}#if end
14448
 
14449
		#反之 
14450
		else{
14451
 
14452
			#設置無剩餘的內容
14453
			$result["left"]="false";
14454
 
14455
			}#else end
14456
 
14457
		#設置執行正常
14458
		$result["status"]="true";
14459
 
14460
		#回傳結果
14461
		return $result;
14462
 
14463
		}#function tail end
14464
 
14465
	/*
43 liveuser 14466
	#函式說明:
1 liveuser 14467
	#解析PHP檔案裡面的變數.
14468
	#回傳結果:
14469
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14470
	#$result["error"],錯誤訊息.
14471
	#$result["function"],當前執行的函數名稱.
14472
	#$result["argu"],所使用的參數.	
553 liveuser 14473
	#$result["content"],找到的變數內容陣列,若有多個變數則會用array來表示.
1 liveuser 14474
	#必填參數:
14475
	#$conf["file"],字串,檔案的路徑與名稱.
14476
	$conf["file"]="";
14477
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14478
	$conf["fileArgu"]=__FILE__;
14479
	#$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".
14480
	$conf["varName"]=array();
14481
	#可省略參數:
14482
	#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".
14483
	#$conf["web"]="true";
14484
	#參考資料:
14485
	#https://www.php.net/manual/en/function.parse-str.php
43 liveuser 14486
	#備註:
14487
	#無.
1 liveuser 14488
	*/
14489
	public static function parseVaraiableInPHPfile(&$conf){
14490
 
14491
		#初始化要回傳的結果
14492
		$result=array();
14493
 
14494
		#取得當前執行的函數名稱
14495
		$result["function"]=__FUNCTION__;
14496
 
14497
		#如果沒有參數
14498
		if(func_num_args()==0){
14499
 
14500
			#設置執行失敗
14501
			$result["status"]="false";
14502
 
14503
			#設置執行錯誤訊息
14504
			$result["error"]="函數".$result["function"]."需要參數";
14505
 
14506
			#回傳結果
14507
			return $result;
14508
 
14509
			}#if end		
14510
 
14511
		#取得參數
14512
		$result["argu"]=$conf;
14513
 
14514
		#如果 $conf 不為陣列
14515
		if(gettype($conf)!=="array"){
14516
 
14517
			#設置執行失敗
14518
			$result["status"]="false";
14519
 
14520
			#設置執行錯誤訊息
14521
			$result["error"][]="\$conf變數須為陣列形態";
14522
 
14523
			#如果傳入的參數為 null
14524
			if($conf===null){
14525
 
14526
				#設置執行錯誤訊息
14527
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14528
 
14529
				}#if end
14530
 
14531
			#回傳結果
14532
			return $result;
14533
 
14534
			}#if end
14535
 
14536
		#函式說明:
14537
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14538
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14539
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14540
		#$result["function"],當前執行的函式名稱.
14541
		#$result["argu"],設置給予的參數.
14542
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14543
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14544
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14545
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14546
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14547
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14548
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14549
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14550
		#必填寫的參數:
14551
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14552
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14553
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14554
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14555
		#可以省略的參數:
14556
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14557
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu","varName");
14558
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14559
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","array");
14560
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14561
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14562
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14563
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu","varName");
14564
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14565
		#$conf["canBeEmpty"]=array();
14566
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14567
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
14568
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14569
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
14570
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14571
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
14572
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14573
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
14574
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14575
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14576
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14577
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14578
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14579
		#$conf["arrayCountEqualCheck"][]=array();
14580
		#參考資料來源:
14581
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14582
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14583
		unset($conf["variableCheck::checkArguments"]);
14584
 
14585
		#如果檢查參數失敗
14586
		if($checkArguments["status"]==="false"){
14587
 
14588
			#設置執行失敗
14589
			$result["status"]="false";
14590
 
14591
			#設置執行失敗訊息
14592
			$result["error"]=$checkArguments;
14593
 
14594
			#回傳結果
14595
			return $result;
14596
 
14597
			}#if end
14598
 
14599
		#如果檢查參數不通過
14600
		if($checkArguments["passed"]==="false"){
14601
 
14602
			#設置執行失敗
14603
			$result["status"]="false";
14604
 
14605
			#設置執行失敗訊息
14606
			$result["error"]=$checkArguments;
14607
 
14608
			#回傳結果
14609
			return $result;
14610
 
14611
			}#if end
14612
 
14613
		#初始化儲存解析出來的變數內容
14614
		$result["content"]=array();
14615
 
14616
		#讀取檔案
43 liveuser 14617
		#函式說明:
1 liveuser 14618
		#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
14619
		#回傳的變數說明:
14620
		#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
14621
		#$result["error"],錯誤訊息提示.
14622
		#$result["warning"],警告訊息.
14623
		#$result["function"],當前執行的函數名稱.
14624
		#$result["fileContent"],爲檔案的內容陣列.
14625
		#$result["lineCount"],爲檔案內容總共的行數.
14626
		#$result["fullContent"],為檔案的完整內容.
14627
		#$result["base64data"],為檔案的base64內容.
14628
		#$result["mimeType"],為檔案的mime type.
43 liveuser 14629
		#必填參數:
1 liveuser 14630
		#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
14631
		$conf["ileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
14632
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
14633
		$conf["ileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
14634
		#可省略參數:
14635
		#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
14636
		$conf["ileAccess::getFileContent"]["web"]=$conf["web"];
14637
		#參考資料:
14638
		#file(),取得檔案內容的行數.
14639
		#file=>http:#php.net/manual/en/function.file.php
14640
		#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
14641
		#filesize=>http://php.net/manual/en/function.filesize.php
14642
		$getFileContent=fileAccess::getFileContent($conf["ileAccess::getFileContent"]);
14643
		unset($conf["ileAccess::getFileContent"]);
14644
 
14645
		#如果讀取檔案失敗
14646
		if($getFileContent["status"]==="false"){
14647
 
14648
			#設置執行失敗
14649
			$result["status"]="false";
14650
 
14651
			#設置執行失敗訊息
14652
			$result["error"]=$getFileContent;
14653
 
14654
			#回傳結果
14655
			return $result;
14656
 
14657
			}#if end
14658
 
14659
		#針對每列檔案內容
14660
		foreach($getFileContent["fileContent"] as $line){
14661
 
14662
			#針對每個要搜尋的變數
14663
			foreach($conf["varName"] as $keyWord){
14664
 
14665
				#如果關鍵字小於被搜尋的字串長度
14666
				if( strlen($line) < strlen($keyWord)+1 ){
14667
 
14668
					#跳過
14669
					continue;
14670
 
14671
					}#if end
14672
 
43 liveuser 14673
				#函式說明:
1 liveuser 14674
				#取得符合特定字首與字尾的字串
43 liveuser 14675
				#回傳結果:
1 liveuser 14676
				#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
14677
				#$result["function"],當前執行的函數名稱.
14678
				#$result["error"],錯誤訊息陣列.
14679
				#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
14680
				#$result["returnString"],爲符合字首條件的字串內容。
14681
				#$result["argu"],使用的參數.
14682
				#必填參數:
14683
				#$conf["checkString"],字串,要檢查的字串.
14684
				$conf["search::getMeetConditionsString"]["checkString"]=$line;
14685
				#可省略參數:
14686
				#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
14687
				$conf["search::getMeetConditionsString"]["frontWord"]="$".$keyWord;
14688
				#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
529 liveuser 14689
				$conf["search::getMeetConditionsString"]["tailWord"]=";";
1 liveuser 14690
				#參考資料:
14691
				#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
14692
				$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
14693
				unset($conf["search::getMeetConditionsString"]);
14694
 
14695
				#如果失敗
14696
				if($getMeetConditionsString["status"]==="false"){
14697
 
14698
					#設置執行失敗
14699
					$result["status"]="false";
14700
 
14701
					#設置執行失敗訊息
14702
					$result["error"]=$getMeetConditionsString;
14703
 
14704
					#回傳結果
14705
					return $result;
14706
 
14707
					}#if end	
14708
 
14709
				#如果有找到關鍵字
14710
				if($getMeetConditionsString["founded"]==="true"){
14711
 
529 liveuser 14712
					#剔除變數名稱
43 liveuser 14713
					#函式說明:
529 liveuser 14714
					#將字串特定關鍵字與其前面的內容剔除
43 liveuser 14715
					#回傳結果:
1 liveuser 14716
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14717
					#$result["error"],錯誤訊息陣列.
529 liveuser 14718
					#$result["warning"],警告訊息鎮列.
14719
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
14720
					#$result["function"],當前執行的函數名稱.
14721
					#$result["oriStr"],要處理的原始字串內容.
14722
					#$result["content"],處理好的的字串內容.	
43 liveuser 14723
					#必填參數:
529 liveuser 14724
					#$conf["stringIn"],字串,要處理的字串.
14725
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$line;
14726
					#$conf["keyWord"],字串,特定字串.
14727
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="$".$keyWord;
43 liveuser 14728
					#可省略參數:
529 liveuser 14729
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14730
					#$conf["recursive"]="true";
14731
					#參考資料:
14732
					#無.
1 liveuser 14733
					#備註:
14734
					#無.
529 liveuser 14735
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
14736
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
14737
 
14738
					#如果執行失敗
531 liveuser 14739
					if($delStrBeforeKeyWord["status"]==="false"){
1 liveuser 14740
 
14741
						#設置執行失敗
14742
						$result["status"]="false";
14743
 
14744
						#設置執行失敗訊息
529 liveuser 14745
						$result["error"]=$delStrBeforeKeyWord;
1 liveuser 14746
 
14747
						#回傳結果
14748
						return $result;
14749
 
529 liveuser 14750
						}#if end
525 liveuser 14751
 
529 liveuser 14752
					#如果沒有找到應該存在的php變數
14753
					if($delStrBeforeKeyWord["founded"]==="false"){
1 liveuser 14754
 
525 liveuser 14755
						#設置執行失敗
14756
						$result["status"]="false";
14757
 
14758
						#設置執行失敗訊息
529 liveuser 14759
						$result["error"]=$delStrBeforeKeyWord;
525 liveuser 14760
 
14761
						#回傳結果
14762
						return $result;
14763
 
529 liveuser 14764
						}#if end
1 liveuser 14765
 
529 liveuser 14766
					#剔除 "=" 前面的內容
43 liveuser 14767
					#函式說明:
529 liveuser 14768
					#將字串特定關鍵字與其前面的內容剔除
43 liveuser 14769
					#回傳結果:
1 liveuser 14770
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14771
					#$result["error"],錯誤訊息陣列.
529 liveuser 14772
					#$result["warning"],警告訊息鎮列.
14773
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
14774
					#$result["function"],當前執行的函數名稱.
14775
					#$result["oriStr"],要處理的原始字串內容.
14776
					#$result["content"],處理好的的字串內容.	
43 liveuser 14777
					#必填參數:
529 liveuser 14778
					#$conf["stringIn"],字串,要處理的字串.
14779
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
14780
					#$conf["keyWord"],字串,特定字串.
14781
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="=";
43 liveuser 14782
					#可省略參數:
529 liveuser 14783
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14784
					#$conf["recursive"]="true";
14785
					#參考資料:
14786
					#無.
1 liveuser 14787
					#備註:
14788
					#無.
529 liveuser 14789
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
14790
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
14791
 
14792
					#如果執行失敗
531 liveuser 14793
					if($delStrBeforeKeyWord["status"]==="false"){
1 liveuser 14794
 
14795
						#設置執行失敗
14796
						$result["status"]="false";
14797
 
14798
						#設置執行失敗訊息
529 liveuser 14799
						$result["error"]=$delStrBeforeKeyWord;
1 liveuser 14800
 
14801
						#回傳結果
14802
						return $result;
14803
 
529 liveuser 14804
						}#if end
14805
 
14806
					#如果沒有找“=”關鍵字
14807
					if($delStrBeforeKeyWord["founded"]==="false"){
1 liveuser 14808
 
529 liveuser 14809
						#跳過
14810
						continue;
1 liveuser 14811
 
529 liveuser 14812
						}#if end
14813
 
14814
					#剔除 value 前面的空白
43 liveuser 14815
					#函式說明:
529 liveuser 14816
					#將字串特定關鍵字與其前面的內容剔除
1 liveuser 14817
					#回傳結果:
14818
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
529 liveuser 14819
					#$result["error"],錯誤訊息陣列.
14820
					#$result["warning"],警告訊息鎮列.
14821
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
1 liveuser 14822
					#$result["function"],當前執行的函數名稱.
529 liveuser 14823
					#$result["oriStr"],要處理的原始字串內容.
14824
					#$result["content"],處理好的的字串內容.	
43 liveuser 14825
					#必填參數:
1 liveuser 14826
					#$conf["stringIn"],字串,要處理的字串.
529 liveuser 14827
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
14828
					#$conf["keyWord"],字串,特定字串.
14829
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";
1 liveuser 14830
					#可省略參數:
529 liveuser 14831
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.
14832
					$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
14833
					#參考資料:
14834
					#無.
14835
					#備註:
14836
					#無.
14837
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
14838
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
1 liveuser 14839
 
14840
					#如果執行失敗
531 liveuser 14841
					if($delStrBeforeKeyWord["status"]==="false"){
1 liveuser 14842
 
14843
						#設置執行失敗
14844
						$result["status"]="false";
14845
 
14846
						#設置執行失敗訊息
529 liveuser 14847
						$result["error"]=$delStrBeforeKeyWord;
1 liveuser 14848
 
14849
						#回傳結果
14850
						return $result;
14851
 
14852
						}#if end
14853
 
529 liveuser 14854
					#取得找到的變數
553 liveuser 14855
					eval("\$result[\"content\"][\"".$keyWord."\"][]=".$delStrBeforeKeyWord["content"]);
529 liveuser 14856
 
14857
					}#if end
1 liveuser 14858
 
14859
				}#foreach end
14860
 
14861
			}#foreach end
14862
 
14863
		#設置執行正常
14864
		$result["status"]="true";
14865
 
14866
		#回傳結果
14867
		return $result;
14868
 
14869
		}#function parseVaraiableInPHPfile end
14870
 
66 liveuser 14871
	/*
14872
	#函式說明:
14873
	#開啟特定目錄,取得底下的檔案路徑清單.
14874
	#回傳結果:
14875
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14876
	#$result["error"],錯誤訊息.
14877
	#$result["function"],當前執行的函數名稱.
842 liveuser 14878
	#$result["argu"],所使用的參數.
66 liveuser 14879
	#$result["content"],讀取到的內容陣列.
374 liveuser 14880
	#$result["content"][$i],第$i+1個結果.
14881
	#$result["content"][$i]["name"],第$i+1個名稱.
842 liveuser 14882
	#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.
374 liveuser 14883
	#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.
14884
	#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).
66 liveuser 14885
	#必填參數:
14886
	#$conf["path"],字串,要取得檔案資訊的所屬路徑.
14887
	$conf["path"]="";
14888
	#可省略參數:
14889
	#無.
14890
	#參考資料
14891
	#無.
14892
	#備註:
14893
	#無.
14894
	*/
14895
	public static function listInfo(&$conf){
14896
 
14897
		#初始化要回傳的結果
14898
		$result=array();
14899
 
14900
		#取得當前執行的函數名稱
14901
		$result["function"]=__FUNCTION__;
14902
 
14903
		#如果沒有參數
14904
		if(func_num_args()==0){
14905
 
14906
			#設置執行失敗
14907
			$result["status"]="false";
14908
 
14909
			#設置執行錯誤訊息
14910
			$result["error"]="函數".$result["function"]."需要參數";
14911
 
14912
			#回傳結果
14913
			return $result;
14914
 
14915
			}#if end		
14916
 
14917
		#取得參數
14918
		$result["argu"]=$conf;
14919
 
14920
		#如果 $conf 不為陣列
14921
		if(gettype($conf)!=="array"){
14922
 
14923
			#設置執行失敗
14924
			$result["status"]="false";
14925
 
14926
			#設置執行錯誤訊息
14927
			$result["error"][]="\$conf變數須為陣列形態";
14928
 
14929
			#如果傳入的參數為 null
14930
			if($conf===null){
14931
 
14932
				#設置執行錯誤訊息
14933
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
14934
 
14935
				}#if end
14936
 
14937
			#回傳結果
14938
			return $result;
14939
 
14940
			}#if end
14941
 
14942
		#函式說明:
14943
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
14944
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
14945
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
14946
		#$result["function"],當前執行的函式名稱.
14947
		#$result["argu"],設置給予的參數.
14948
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
14949
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
14950
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
14951
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
14952
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
14953
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
14954
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
14955
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
14956
		#必填寫的參數:
14957
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
14958
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
14959
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
14960
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
14961
		#可以省略的參數:
14962
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
14963
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
14964
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
14965
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
14966
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
14967
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
14968
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
14969
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
14970
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
14971
		#$conf["canBeEmpty"]=array();
14972
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
14973
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
14974
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
14975
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
14976
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
14977
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
14978
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
14979
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
14980
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
14981
		#$conf["disallowAllSkipableVarIsEmpty"]="";
14982
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
14983
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
14984
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
14985
		#$conf["arrayCountEqualCheck"][]=array();
14986
		#參考資料來源:
14987
		#array_keys=>http://php.net/manual/en/function.array-keys.php
14988
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
14989
		unset($conf["variableCheck::checkArguments"]);
14990
 
14991
		#如果檢查參數失敗
14992
		if($checkArguments["status"]==="false"){
14993
 
14994
			#設置執行失敗
14995
			$result["status"]="false";
14996
 
14997
			#設置執行失敗訊息
14998
			$result["error"]=$checkArguments;
14999
 
15000
			#回傳結果
15001
			return $result;
15002
 
15003
			}#if end
15004
 
15005
		#如果檢查參數不通過
15006
		if($checkArguments["passed"]==="false"){
15007
 
15008
			#設置執行失敗
15009
			$result["status"]="false";
15010
 
15011
			#設置執行失敗訊息
15012
			$result["error"]=$checkArguments;
15013
 
15014
			#回傳結果
15015
			return $result;
15016
 
15017
			}#if end
15018
 
15019
		#初始化儲存解析出來的變數內容
15020
		$result["content"]=array();
15021
 
15022
		#取得特定位置的資訊
15023
		$pathInfo=@dir($conf["path"]);
15024
 
15025
		#如果取得路徑資訊失敗
15026
		if($pathInfo===false){
15027
 
15028
			#設置執行失敗
15029
			$result["status"]="false";
15030
 
15031
			#設置執行失敗訊息
15032
			$result["error"][]="無法存取路徑(".$conf["path"].")";
15033
 
15034
			#回傳結果
15035
			return $result;
15036
 
15037
			}#if end
15038
 
15039
		#讀取底下一個檔案,暫存到 $tmpItem 裡面,且當結果不為 false 時進入迴圈.
15040
		while(false !== $tmpItem = $pathInfo->read()){
15041
 
15042
			#宣告儲存資訊的變數
15043
			$item=array();
15044
 
15045
			#儲存名稱
15046
			$item["name"]=$tmpItem;
15047
 
15048
			#預設不為資料夾
15049
			$item["dir"]="false";
15050
 
15051
			#若為資料夾
15052
			if(is_dir($conf["path"]."/".$tmpItem)){
15053
 
15054
				#設置為"true"
15055
				$item["dir"]="true";
15056
 
15057
				}#if end
15058
 
15059
			#取得檔案識別器
15060
			$finfo = finfo_open(FILEINFO_MIME);
15061
 
15062
			#取得 info
15063
			$item["info"]=@finfo_file($finfo,$conf["path"]."/".$tmpItem);
15064
 
15065
			#取得檔案大小
15066
			$item["size"]=filesize($conf["path"]."/".$tmpItem);
15067
 
15068
			#close connection
15069
			finfo_close($finfo);
15070
 
15071
			#記錄該檔案資訊
15072
			$result["content"][]=$item;
15073
 
15074
			}#while end
15075
 
15076
		#設置執行正常
15077
		$result["status"]="true";
15078
 
15079
		#回傳結果
15080
		return $result;
15081
 
15082
		}#function listInfo end
15083
 
382 liveuser 15084
	/*
15085
	#函式說明:
486 liveuser 15086
	#取得目錄底下的詳細資訊.
15087
	#回傳結果:
15088
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15089
	#$result["error"],錯誤訊息.
15090
	#$result["function"],當前執行的函數名稱.
15091
	#$result["size"],該清單的大小,單位為bytes.
15092
	#$result["dataCount"],該清單的長度.
849 liveuser 15093
	#$result["path"],字串,檢視的路徑,必為"/"結尾.
486 liveuser 15094
	#$result["content"],指定目錄底下的所有檔案資訊.
15095
	#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
705 liveuser 15096
	#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.
486 liveuser 15097
	#$result["content"][$i]["permission"],第$i個節點權限.
15098
	#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
15099
	#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
15100
	#$result["content"][$i]["bytes"],第$i個節點大小.
15101
	#$result["content"][$i]["date"],第$i個節點最後變更日期.
15102
	#$result["content"][$i]["time"],第$i個節點最後異動時間.
15103
	#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
15104
	#$result["content"][$i]["timezone"],第$i個節點的時區.
15105
	#$result["content"][$i]["name"],第$i個節點的名稱.
849 liveuser 15106
	#$result["content"][$i]["secondName"],第$i個節點為檔案時,若有附檔名,會記錄在這.
15107
	#$result["content"][$i]["mimeType"],第$i個節點為檔案且可以讀取時,會有 mime type 可取得.
486 liveuser 15108
	#必填參數:
827 liveuser 15109
	#$conf["path"],字串,要檢視的路徑,若非"/"結尾,會自動補上.
486 liveuser 15110
	$conf["path"]="";
15111
	#可省略參數:
15112
	#無.
15113
	#參考資料:
15114
	#https://www.businessweekly.com.tw/careers/Blog/14307
15115
	#備註:
842 liveuser 15116
	#無.
486 liveuser 15117
	*/
15118
	public static function ls(&$conf){
15119
 
15120
		#初始化要回傳的結果
15121
		$result=array();
15122
 
15123
		#取得當前執行的函數名稱
15124
		$result["function"]=__FUNCTION__;
15125
 
15126
		#如果沒有參數
15127
		if(func_num_args()==0){
15128
 
15129
			#設置執行失敗
15130
			$result["status"]="false";
15131
 
15132
			#設置執行錯誤訊息
15133
			$result["error"]="函數".$result["function"]."需要參數";
15134
 
15135
			#回傳結果
15136
			return $result;
15137
 
15138
			}#if end
15139
 
15140
		#取得參數
15141
		$result["argu"]=$conf;
15142
 
15143
		#如果 $conf 不為陣列
15144
		if(gettype($conf)!=="array"){
15145
 
15146
			#設置執行失敗
15147
			$result["status"]="false";
15148
 
15149
			#設置執行錯誤訊息
15150
			$result["error"][]="\$conf變數須為陣列形態";
15151
 
15152
			#如果傳入的參數為 null
15153
			if(is_null($conf)){
15154
 
15155
				#設置執行錯誤訊息
15156
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15157
 
15158
				}#if end
15159
 
15160
			#回傳結果
15161
			return $result;
15162
 
15163
			}#if end
15164
 
15165
		#函式說明:
15166
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
15167
		#回傳結果:
15168
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15169
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15170
		#$result["simpleError"],簡單表示的錯誤訊息.
15171
		#$result["function"],當前執行的函式名稱.
15172
		#$result["argu"],設置給予的參數.
15173
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15174
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15175
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15176
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15177
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15178
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15179
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15180
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15181
		#必填參數:
15182
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15183
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
15184
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15185
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15186
		#可省略參數:
15187
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15188
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");
15189
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15190
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15191
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15192
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15193
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15194
		#$conf["canNotBeEmpty"]=array();
15195
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15196
		#$conf["canBeEmpty"]=array();
15197
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15198
		#$conf["skipableVariableCanNotBeEmpty"]=array();
15199
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15200
		#$conf["skipableVariableName"]=array();
15201
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
15202
		#$conf["skipableVariableType"]=array();
15203
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15204
		#$conf["skipableVarDefaultValue"]=array("");
15205
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15206
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15207
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15208
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15209
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15210
		#$conf["arrayCountEqualCheck"][]=array();
15211
		#參考資料:
15212
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15213
		#備註:
15214
		#無.
15215
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15216
		unset($conf["variableCheck::checkArguments"]);
15217
 
15218
		#如果執行失敗
15219
		if($checkArguments["status"]==="false"){
15220
 
15221
			#設置執行錯誤
15222
			$result["status"]="false";
15223
 
15224
			#設置錯誤訊息
15225
			$result["error"]=$checkArguments;
15226
 
15227
			#回傳結果
15228
			return $result;
15229
 
15230
			}#if end
15231
 
15232
		#如果參數檢查不通過
15233
		if($checkArguments["passed"]==="false"){
15234
 
15235
			#設置執行錯誤
15236
			$result["status"]="false";
15237
 
15238
			#設置錯誤訊息
15239
			$result["error"]=$checkArguments;
15240
 
15241
			#回傳結果
15242
			return $result;
15243
 
15244
			}#if end
15245
 
827 liveuser 15246
		#確認 $conf["path"] 是否為 "/" 結尾
486 liveuser 15247
		#函式說明:
827 liveuser 15248
		#取得符合特定字首與字尾的字串
15249
		#回傳結果:
15250
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
15251
		#$result["function"],當前執行的函數名稱.
15252
		#$result["error"],錯誤訊息陣列.
15253
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
15254
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
15255
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
15256
		#$result["argu"],使用的參數.
15257
		#必填參數:
15258
		#$conf["checkString"],字串,要檢查的字串.
15259
		$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];
15260
		#可省略參數:
15261
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
15262
		#$conf["frontWord"]="";
15263
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
15264
		$conf["search::getMeetConditionsString"]["tailWord"]="/";
15265
		#參考資料:
15266
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
15267
		#備註:
15268
		#無.
15269
		$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);
15270
		unset($conf["search::getMeetConditionsString"]);
15271
 
15272
		#如果執行失敗
15273
		if($getMeetConditionsString["status"]==="false"){
15274
 
15275
			#設置執行錯誤
15276
			$result["status"]="false";
15277
 
15278
			#設置錯誤訊息
15279
			$result["error"]=$getMeetConditionsString;
15280
 
15281
			#回傳結果
15282
			return $result;
15283
 
15284
			}#if end
15285
 
15286
		#如果沒有 "/" 結尾
15287
		if($getMeetConditionsString["founded"]==="false"){
15288
 
15289
			#於結尾加上 "/"
15290
			$conf["path"]=$conf["path"]."/";
849 liveuser 15291
 
827 liveuser 15292
			}#if end
849 liveuser 15293
 
15294
		#記錄真正的路徑
15295
		$result["path"]=$conf["path"];
827 liveuser 15296
 
15297
		#函式說明:
486 liveuser 15298
		#呼叫shell執行系統命令,並取得回傳的內容.
15299
		#回傳結果:
15300
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15301
		#$result["error"],錯誤訊息陣列.
15302
		#$result["function"],當前執行的函數名稱.
15303
		#$result["argu"],使用的參數.
15304
		#$result["cmd"],執行的指令內容.
15305
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
15306
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
15307
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
15308
		#$result["running"],是否還在執行.
15309
		#$result["pid"],pid.
15310
		#$result["statusCode"],執行結束後的代碼.
15311
		#$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu").
15312
		#必填參數:
15313
		#$conf["command"],字串,要執行的指令.
15314
		$conf["external::callShell"]["command"]="ls";
15315
		#$conf["fileArgu"],字串,變數__FILE__的內容.
15316
		$conf["external::callShell"]["fileArgu"]=__FILE__;
15317
		#可省略參數:
15318
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
15319
		$conf["external::callShell"]["argu"]=array("-al","--full-time","-t","-B",$conf["path"]);
15320
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
15321
		#$conf["arguIsAddr"]=array();
15322
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
15323
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
15324
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
15325
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
15326
		#$conf["enablePrintDescription"]="true";
15327
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
15328
		#$conf["printDescription"]="";
15329
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
15330
		$conf["external::callShell"]["escapeshellarg"]="true";
15331
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
15332
		#$conf["thereIsShellVar"]=array();
15333
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
15334
		#$conf["username"]="";
15335
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
15336
		#$conf["password"]="";
15337
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
15338
		#$conf["useScript"]="";
15339
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
15340
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
15341
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
15342
		#$conf["inBackGround"]="";
15343
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
15344
		#$conf["getErr"]="false";
15345
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
15346
		#$conf["doNotRun"]="false";
15347
		#參考資料:
15348
		#exec=>http://php.net/manual/en/function.exec.php
15349
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
15350
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
15351
		#備註:
15352
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
15353
		#若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
15354
		$callShell=external::callShell($conf["external::callShell"]);
15355
		unset($conf["external::callShell"]);
15356
 
815 liveuser 15357
		#debug
15358
		#var_dump(__FILE__,__LINE__,$callShell);
15359
 
486 liveuser 15360
		#如果執行失敗
15361
		if($callShell["status"]==="false"){
15362
 
15363
			#設置執行錯誤
15364
			$result["status"]="false";
15365
 
15366
			#設置錯誤訊息
15367
			$result["error"]=$callShell;
15368
 
15369
			#回傳結果
15370
			return $result;
15371
 
15372
			}#if end
15373
 
815 liveuser 15374
		#初始化儲存檔案資訊為空
15375
		$result["content"]=array();
15376
 
486 liveuser 15377
		#針對每行輸出
15378
		foreach($callShell["output"] as $index=>$line){
15379
 
15380
			#如果是第一筆
15381
			if($index===0){
15382
 
15383
				#取得資料筆數
15384
				$result["dataCount"]=explode(" ",$line)[0];
15385
 
15386
				#換下一輪
15387
				continue;
15388
 
15389
				}#if end
15390
 
15391
			#函式說明:
15392
			#將固定格式的字串分開,並回傳分開的結果.
15393
			#回傳結果:
15394
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15395
			#$result["error"],錯誤訊息陣列
15396
			#$result["function"],當前執行的函數名稱.
15397
			#$result["argu"],使用的參數.
15398
			#$result["oriStr"],要分割的原始字串內容
15399
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15400
			#$result["dataCounts"],爲總共分成幾段
15401
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15402
			#必填參數:
15403
			#$conf["stringIn"],字串,要處理的字串.
15404
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15405
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15406
			$conf["stringProcess::spiltString"]["spiltSymbol"]=" ";
15407
			#可省略參數:
15408
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15409
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15410
			#參考資料:
15411
			#無.
15412
			#備註:
15413
			#無.
15414
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15415
			unset($conf["stringProcess::spiltString"]);
15416
 
15417
			#如果執行失敗
15418
			if($spiltString["status"]==="false"){
15419
 
15420
				#設置執行錯誤
15421
				$result["status"]="false";
15422
 
15423
				#設置錯誤訊息
15424
				$result["error"]=$spiltString;
15425
 
15426
				#回傳結果
15427
				return $result;
15428
 
15429
				}#if end
15430
 
15431
			#如果沒有分割用的" "
15432
			if($spiltString["found"]==="false"){
15433
 
15434
				#設置執行錯誤
15435
				$result["status"]="false";
15436
 
15437
				#設置錯誤訊息
15438
				$result["error"]=$spiltString;
15439
 
15440
				#回傳結果
15441
				return $result;
15442
 
15443
				}#if end
15444
 
15445
			#如果分割好的數量小於8
15446
			if($spiltString["dataCounts"]<8){
15447
 
15448
				#設置執行錯誤
15449
				$result["status"]="false";
15450
 
15451
				#設置錯誤訊息
15452
				$result["error"]=$spiltString;
15453
 
15454
				#回傳結果
15455
				return $result;
15456
 
15457
				}#if end
15458
 
15459
			#初始化要儲存的檔案資訊陣列
15460
			$fileInfo=array();
15461
 
15462
			#取得 節點類型、權限
15463
			$fileInfo["nType&permission"]=$spiltString["dataArray"][0];
15464
 
15465
			#剔除結尾的 "."
15466
			$fileInfo["nType&permission"]=substr($fileInfo["nType&permission"],0,strlen($fileInfo["nType&permission"])-1);
15467
 
15468
			#取得節點類型
15469
			$fileInfo["nType"]=$fileInfo["nType&permission"][0];
15470
 
15471
			#取得節點權限
15472
			$fileInfo["permission"]=substr($fileInfo["nType&permission"],1);
15473
 
15474
			#取得擁有者賬號
15475
			$fileInfo["ownByUser"]=$spiltString["dataArray"][2];
15476
 
15477
			#取得群組擁有者群組
15478
			$fileInfo["ownByGroup"]=$spiltString["dataArray"][3];
15479
 
15480
			#取得size
15481
			$fileInfo["bytes"]=$spiltString["dataArray"][4];
15482
 
15483
			#取得最後異動日期 
15484
			$fileInfo["date"]=$spiltString["dataArray"][5];
15485
 
15486
			#取得最後異動時間
15487
			$fileInfo["time"]=explode(".",$spiltString["dataArray"][6])[0];
15488
 
15489
			#取得最後異動的詳細時間
15490
			$fileInfo["timeDetail"]=$spiltString["dataArray"][6];
15491
 
15492
			#取得timezone資訊
15493
			$fileInfo["timezone"]=$spiltString["dataArray"][7];
15494
 
15495
			#函式說明:
15496
			#將固定格式的字串分開,並回傳分開的結果.
15497
			#回傳結果:
15498
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15499
			#$result["error"],錯誤訊息陣列
15500
			#$result["function"],當前執行的函數名稱.
15501
			#$result["argu"],使用的參數.
15502
			#$result["oriStr"],要分割的原始字串內容
15503
			#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
15504
			#$result["dataCounts"],爲總共分成幾段
15505
			#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
15506
			#必填參數:
15507
			#$conf["stringIn"],字串,要處理的字串.
15508
			$conf["stringProcess::spiltString"]["stringIn"]=$line;
15509
			#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
15510
			$conf["stringProcess::spiltString"]["spiltSymbol"]=$fileInfo["date"]." ".$fileInfo["timeDetail"]." ".$fileInfo["timezone"];
15511
			#可省略參數:
15512
			#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
15513
			$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
15514
			#參考資料:
15515
			#無.
15516
			#備註:
15517
			#無.
15518
			$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
15519
			unset($conf["stringProcess::spiltString"]);
15520
 
15521
			#如果執行失敗
15522
			if($spiltString["status"]==="false"){
15523
 
15524
				#設置執行錯誤
15525
				$result["status"]="false";
15526
 
15527
				#設置錯誤訊息
15528
				$result["error"]=$spiltString;
15529
 
15530
				#回傳結果
15531
				return $result;
15532
 
15533
				}#if end
15534
 
15535
			#如果沒有分割用的" "
15536
			if($spiltString["found"]==="false"){
15537
 
15538
				#設置執行錯誤
15539
				$result["status"]="false";
15540
 
15541
				#設置錯誤訊息
15542
				$result["error"]=$spiltString;
15543
 
15544
				#回傳結果
15545
				return $result;
15546
 
15547
				}#if end
15548
 
15549
			#如果分割好的數量小於8
15550
			if($spiltString["dataCounts"]<2){
15551
 
15552
				#設置執行錯誤
15553
				$result["status"]="false";
15554
 
15555
				#設置錯誤訊息
15556
				$result["error"]=$spiltString;
15557
 
15558
				#回傳結果
15559
				return $result;
15560
 
15561
				}#if end
15562
 
15563
			#取得節點名稱,剔除開頭的空白.
15564
			$fileInfo["name"]=substr($spiltString["dataArray"][1],1);
15565
 
15566
			#排除 "." 跟 ".."
15567
			if($fileInfo["name"]==="." || $fileInfo["name"]===".."){
15568
 
15569
				#跳過
15570
				continue;
15571
 
15572
				}#if end
849 liveuser 15573
 
15574
			#如果是檔案
15575
			if($fileInfo["nType"]==="-"){
15576
 
15577
				#取得mime type
15578
				$fileInfo["mimeType"]=@mime_content_type($conf["path"].$fileInfo["name"]);
486 liveuser 15579
 
849 liveuser 15580
				#如果讀取失敗
15581
				if($fileInfo["mimeType"]===false){
15582
 
15583
					#通常為沒有權限
15584
 
15585
					#跳過該檔案
15586
					continue;
15587
 
15588
					}#if end
15589
 
15590
				#確認檔案名稱中間含是否有 "."
15591
				#函式說明:
15592
				#取得關鍵字在字串的哪個位置(字首,字尾,中間)
15593
				#回傳結果:
15594
				#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
15595
				#$result["error"],錯誤訊息陣列.
15596
				#$result["function"],當前執行的函數名稱.
15597
				#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".
15598
				#$result["argu"],傳入的參數.
15599
				#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.
15600
				#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.
15601
				#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.
15602
				#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.
15603
				#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.
15604
				#必填參數:
15605
				#$conf["inputStr"],字串,被搜尋的字串.
15606
				$conf["search::findKeyWordPosition"]["inputStr"]=$fileInfo["name"];
15607
				#$conf["keyWord"],字串,關鍵字.
15608
				$conf["search::findKeyWordPosition"]["keyWord"]=".";
15609
				#可省略參數:
15610
				#無.
15611
				#參考資料:
15612
				#http://php.net/manual/en/function.strpos.php
15613
				#備註:
15614
				#無.
15615
				$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);
15616
				unset($conf["search::findKeyWordPosition"]);
15617
 
15618
				#如果執行失敗
15619
				if($findKeyWordPosition["status"]==="false"){
15620
 
15621
					#設置執行錯誤
15622
					$result["status"]="false";
15623
 
15624
					#設置錯誤訊息
15625
					$result["error"]=$spiltString;
15626
 
15627
					#回傳結果
15628
					return $result;
15629
 
15630
					}#if end
15631
 
15632
				#如果含有 "." 存在
15633
				if($findKeyWordPosition["found"]==="true"){
15634
 
15635
					#如果 "." 是在中間,不是在尾巴.
15636
					if($findKeyWordPosition["center"]==="true" && $findKeyWordPosition["tail"]==="false"){
15637
 
15638
						#取得 "." 之後的內容
15639
						#函式說明:
15640
						#將字串特定關鍵字與其前面的內容剔除
15641
						#回傳結果:
15642
						#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15643
						#$result["error"],錯誤訊息陣列.
15644
						#$result["warning"],警告訊息鎮列.
15645
						#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
15646
						#$result["function"],當前執行的函數名稱.
15647
						#$result["argu"],使用的參數.
15648
						#$result["oriStr"],要處理的原始字串內容.
15649
						#$result["content"],處理好的的字串內容.
15650
						#$result["deleted"],被移除的內容.
15651
						#必填參數:
15652
						#$conf["stringIn"],字串,要處理的字串.
15653
						$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileInfo["name"];
15654
						#$conf["keyWord"],字串,特定字串.
15655
						$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=".";
15656
						#可省略參數:
15657
						#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
15658
						$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
15659
						#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
15660
						#$conf["lastResult"]=$delStrBeforeKeyWord;
15661
						#參考資料:
15662
						#無.
15663
						#備註:
15664
						#無.
15665
						$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
15666
						unset($conf["stringProcess::delStrBeforeKeyWord"]);
15667
 
15668
						#如果執行失敗
15669
						if($delStrBeforeKeyWord["status"]==="false"){
15670
 
15671
							#設置執行錯誤
15672
							$result["status"]="false";
15673
 
15674
							#設置錯誤訊息
15675
							$result["error"]=$spiltString;
15676
 
15677
							#回傳結果
15678
							return $result;
15679
 
15680
							}#if end
15681
 
15682
						#如果該存在的 "." 不存在
15683
						if($delStrBeforeKeyWord["founded"]==="false"){
15684
 
15685
							#設置執行錯誤
15686
							$result["status"]="false";
15687
 
15688
							#設置錯誤訊息
15689
							$result["error"]=$spiltString;
15690
 
15691
							#回傳結果
15692
							return $result;
15693
 
15694
							}#if end
15695
 
15696
						#取得附檔名
15697
						$fileInfo["secondName"]=$delStrBeforeKeyWord["content"];
15698
 
15699
						}#if end
15700
 
15701
					}#if end
15702
 
15703
				}#if end
15704
 
486 liveuser 15705
			#儲存檔案資訊
15706
			$result["content"][]=$fileInfo;
15707
 
15708
			}#foreach end
15709
 
705 liveuser 15710
		#設置清單的長度
15711
		$result["dataCount"]=count($result["content"]);
486 liveuser 15712
 
705 liveuser 15713
		#設置執行正常
15714
		$result["status"]="true";
15715
 
15716
		#回傳結果
15717
		return $result;
486 liveuser 15718
 
490 liveuser 15719
		}#function ls end
486 liveuser 15720
 
15721
	/*
15722
	#函式說明:
382 liveuser 15723
	#將 ~ 轉換為家目錄路徑
15724
	#回傳結果:
15725
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15726
	#$result["error"],錯誤訊息.
15727
	#$result["function"],當前執行的函數名稱.
15728
	#$result["content"],轉換好的內容.
15729
	#必填參數:
15730
	#$conf["fileArgu"],字串,變數__FILE__的內容.
15731
	$conf["fileArgu"]=__FILE__;
15732
	#可省略參數:
15733
	#無.
15734
	#參考資料:
15735
	#https://www.businessweekly.com.tw/careers/Blog/14307
486 liveuser 15736
	#備註:
15737
	#無.
382 liveuser 15738
	*/
15739
	public static function tildeToPath(&$conf){
15740
 
15741
		#初始化要回傳的結果
15742
		$result=array();
15743
 
15744
		#取得當前執行的函數名稱
15745
		$result["function"]=__FUNCTION__;
15746
 
15747
		#如果沒有參數
15748
		if(func_num_args()==0){
15749
 
15750
			#設置執行失敗
15751
			$result["status"]="false";
15752
 
15753
			#設置執行錯誤訊息
15754
			$result["error"]="函數".$result["function"]."需要參數";
15755
 
15756
			#回傳結果
15757
			return $result;
15758
 
15759
			}#if end		
15760
 
15761
		#取得參數
15762
		$result["argu"]=$conf;
15763
 
15764
		#如果 $conf 不為陣列
15765
		if(gettype($conf)!=="array"){
15766
 
15767
			#設置執行失敗
15768
			$result["status"]="false";
15769
 
15770
			#設置執行錯誤訊息
15771
			$result["error"][]="\$conf變數須為陣列形態";
15772
 
15773
			#如果傳入的參數為 null
15774
			if($conf===null){
15775
 
15776
				#設置執行錯誤訊息
15777
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
15778
 
15779
				}#if end
15780
 
15781
			#回傳結果
15782
			return $result;
15783
 
15784
			}#if end
15785
 
15786
		#函式說明:
15787
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
15788
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15789
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
15790
		#$result["function"],當前執行的函式名稱.
15791
		#$result["argu"],設置給予的參數.
15792
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
15793
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
15794
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
15795
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
15796
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
15797
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
15798
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
15799
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
15800
		#必填寫的參數:
15801
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
15802
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
15803
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
15804
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
15805
		#可以省略的參數:
15806
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
15807
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
15808
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
15809
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
15810
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
15811
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
15812
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
15813
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
15814
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
15815
		#$conf["canBeEmpty"]=array();
15816
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
15817
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");
15818
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
15819
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
15820
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
15821
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
15822
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
15823
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
15824
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
15825
		#$conf["disallowAllSkipableVarIsEmpty"]="";
15826
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
15827
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
15828
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
15829
		#$conf["arrayCountEqualCheck"][]=array();
15830
		#參考資料來源:
15831
		#array_keys=>http://php.net/manual/en/function.array-keys.php
15832
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
15833
		unset($conf["variableCheck::checkArguments"]);
15834
 
15835
		#如果檢查參數失敗
15836
		if($checkArguments["status"]==="false"){
15837
 
15838
			#設置執行失敗
15839
			$result["status"]="false";
15840
 
15841
			#設置執行失敗訊息
15842
			$result["error"]=$checkArguments;
15843
 
15844
			#回傳結果
15845
			return $result;
15846
 
15847
			}#if end
15848
 
15849
		#如果檢查參數不通過
15850
		if($checkArguments["passed"]==="false"){
15851
 
15852
			#設置執行失敗
15853
			$result["status"]="false";
15854
 
15855
			#設置執行失敗訊息
15856
			$result["error"]=$checkArguments;
15857
 
15858
			#回傳結果
15859
			return $result;
15860
 
15861
			}#if end
15862
 
15863
		#函式說明:
15864
		#呼叫shell執行系統命令,並取得回傳的內容.
15865
		#回傳結果:
15866
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15867
		#$result["error"],錯誤訊息陣列.
15868
		#$result["function"],當前執行的函數名稱.
15869
		#$result["argu"],使用的參數.
15870
		#$result["cmd"],執行的指令內容.
15871
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
15872
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
15873
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
15874
		#$result["running"],是否還在執行.
15875
		#$result["pid"],pid.
15876
		#$result["statusCode"],執行結束後的代碼.
15877
		#必填參數:
15878
		#$conf["command"],字串,要執行的指令與.
454 liveuser 15879
		$conf["external::callShell"]["command"]="echo";
382 liveuser 15880
		#$conf["fileArgu"],字串,變數__FILE__的內容.
15881
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
15882
		#可省略參數:
15883
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
454 liveuser 15884
		$conf["external::callShell"]["argu"]=array("~");
382 liveuser 15885
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
15886
		#$conf["arguIsAddr"]=array();
15887
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
15888
		#$conf["plainArgu"]=array();
15889
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
15890
		#$conf["useApostrophe"]=array();
15891
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
15892
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
15893
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
15894
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
15895
		#$conf["enablePrintDescription"]="true";
15896
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
15897
		#$conf["printDescription"]="";
15898
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
454 liveuser 15899
		$conf["external::callShell"]["escapeshellarg"]="true";
382 liveuser 15900
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
15901
		#$conf["thereIsShellVar"]=array();
15902
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
15903
		#$conf["username"]="";
15904
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
15905
		#$conf["password"]="";
15906
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
15907
		#$conf["useScript"]="";
15908
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
15909
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
15910
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
15911
		#$conf["inBackGround"]="";
15912
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
15913
		#$conf["getErr"]="false";
15914
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
15915
		#$conf["doNotRun"]="false";
15916
		#參考資料:
15917
		#exec=>http://php.net/manual/en/function.exec.php
15918
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
15919
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
15920
		#備註:
15921
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
15922
		$callShell=external::callShell($conf["external::callShell"]);
15923
		unset($conf["external::callShell"]);
15924
 
15925
		#如果執行失敗
15926
		if($callShell["status"]==="false"){
15927
 
15928
			#設置執行失敗
15929
			$result["status"]="false";
15930
 
15931
			#設置執行失敗訊息
15932
			$result["error"]=$callShell;
15933
 
15934
			#回傳結果
15935
			return $result;
15936
 
15937
			}#if end
15938
 
15939
		#如果沒有預期的輸出
15940
		if(!isset($callShell["output"][0])){
15941
 
15942
			#設置執行失敗
15943
			$result["status"]="false";
15944
 
15945
			#設置執行失敗訊息
15946
			$result["error"][]="沒有得到預期的輸出";
15947
 
15948
			#設置執行失敗訊息
15949
			$result["error"][]=$callShell;
15950
 
15951
			#回傳結果
15952
			return $result;
15953
 
15954
			}#if end
15955
 
15956
		#取得輸出
15957
		$result["content"]=$callShell["output"][0];
15958
 
15959
		#設置執行正常
15960
		$result["status"]="true";
15961
 
15962
		#回傳結果
15963
		return $result;
15964
 
15965
		}#function tildeToPath end
15966
 
402 liveuser 15967
	/*
15968
	#函式說明:
15969
	#建立軟連結.
15970
	#回傳結果:
15971
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
15972
	#$result["error"],錯誤訊息.
15973
	#$result["function"],當前執行的函數名稱.
15974
	#$result["content"],軟連結的資訊.
488 liveuser 15975
	#$result["cmd"],執行的指令陣列.
402 liveuser 15976
	#必填參數:
15977
	#$conf["fileArgu"],字串,變數__FILE__的內容.
15978
	$conf["fileArgu"]=__FILE__;
15979
	#$conf["linkTo"],字串,軟連結要指向哪邊.
15980
	$conf["linkTo"]="";
15981
	#可省略參數:
15982
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
15983
	#$conf["path"]="";
15984
	#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
15985
	#$conf["name"]="";
15986
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
15987
	#$conf["overWrite"]="true";
15988
	#參考資料:
15989
	#無.
15990
	#備註:
15991
	#無.
15992
	*/
488 liveuser 15993
	public static function createLink(&$conf){
402 liveuser 15994
 
15995
		#初始化要回傳的結果
15996
		$result=array();
15997
 
15998
		#取得當前執行的函數名稱
15999
		$result["function"]=__FUNCTION__;
16000
 
16001
		#如果沒有參數
16002
		if(func_num_args()==0){
16003
 
16004
			#設置執行失敗
16005
			$result["status"]="false";
16006
 
16007
			#設置執行錯誤訊息
16008
			$result["error"]="函數".$result["function"]."需要參數";
16009
 
16010
			#回傳結果
16011
			return $result;
16012
 
16013
			}#if end		
16014
 
16015
		#取得參數
16016
		$result["argu"]=$conf;
16017
 
16018
		#如果 $conf 不為陣列
16019
		if(gettype($conf)!=="array"){
16020
 
16021
			#設置執行失敗
16022
			$result["status"]="false";
16023
 
16024
			#設置執行錯誤訊息
16025
			$result["error"][]="\$conf變數須為陣列形態";
16026
 
16027
			#如果傳入的參數為 null
16028
			if($conf===null){
16029
 
16030
				#設置執行錯誤訊息
16031
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16032
 
16033
				}#if end
16034
 
16035
			#回傳結果
16036
			return $result;
16037
 
16038
			}#if end
16039
 
16040
		#函式說明:
16041
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16042
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16043
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16044
		#$result["function"],當前執行的函式名稱.
16045
		#$result["argu"],設置給予的參數.
16046
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16047
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16048
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16049
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16050
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16051
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16052
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16053
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16054
		#必填寫的參數:
16055
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16056
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16057
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16058
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16059
		#可以省略的參數:
16060
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16061
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkTo");
16062
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16063
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16064
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16065
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16066
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16067
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16068
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16069
		#$conf["canBeEmpty"]=array();
16070
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16071
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16072
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16073
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16074
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16075
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
16076
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16077
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false");
16078
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16079
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16080
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16081
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16082
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16083
		#$conf["arrayCountEqualCheck"][]=array();
16084
		#參考資料來源:
16085
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16086
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16087
		unset($conf["variableCheck::checkArguments"]);
16088
 
16089
		#如果檢查參數失敗
16090
		if($checkArguments["status"]==="false"){
16091
 
16092
			#設置執行失敗
16093
			$result["status"]="false";
16094
 
16095
			#設置執行失敗訊息
16096
			$result["error"]=$checkArguments;
16097
 
16098
			#回傳結果
16099
			return $result;
16100
 
16101
			}#if end
16102
 
16103
		#如果檢查參數不通過
16104
		if($checkArguments["passed"]==="false"){
16105
 
16106
			#設置執行失敗
16107
			$result["status"]="false";
16108
 
16109
			#設置執行失敗訊息
16110
			$result["error"]=$checkArguments;
16111
 
16112
			#回傳結果
16113
			return $result;
16114
 
16115
			}#if end
16116
 
409 liveuser 16117
		#如果是相對位置
414 liveuser 16118
		if(!(strpos($conf["linkTo"],"/")===0)){
409 liveuser 16119
 
16120
			#將 $conf["linkTo"] 轉換為針對產生位置的相對位置.
16121
			#函式說明:
16122
			#將多個路徑字串變成相對於當前路徑的相對路徑字串
16123
			#回傳結果:
16124
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16125
			#$result["error"],錯誤訊息陣列.
16126
			#$result["function"],函數名稱. 
16127
			#$result["argu"],使用的參數.
16128
			#$result["content"],字串陣列,多個轉換好的相對路徑字串.
16129
			#必填參數:
16130
			#$conf["path"],陣列字串,要轉換成相對路徑的字串.;
16131
			$conf["fileAccess::getRelativePath"]["path"]=array($conf["linkTo"]);
16132
			#$conf["fileArgu"],字串,當前路徑.
16133
			$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];
16134
			#可省略參數:
16135
			#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.
16136
			$conf["fileAccess::getRelativePath"]["baseFrom"]=$conf["path"];
16137
			#參考資料:
16138
			#無.
16139
			#備註:
16140
			#無.
16141
			$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);
16142
			unset($conf["fileAccess::getRelativePath"]);
16143
 
16144
			#如果執行失敗
16145
			if($getRelativePath["status"]==="false"){
16146
 
16147
				#設置執行失敗
16148
				$result["status"]="false";
16149
 
16150
				#設置執行失敗訊息
16151
				$result["error"]=$getRelativePath;
16152
 
16153
				#回傳結果
16154
				return $result;
16155
 
16156
				}#if end
16157
 
488 liveuser 16158
			/*
16159
			#break point
16160
			var_dump($conf);
16161
			var_dump($getRelativePath);
16162
			exit;
16163
			*/
16164
 
16165
			#取得執行的指令
16166
			$result["cmd"][]=$getRelativePath["cmd"];
16167
 
409 liveuser 16168
			#取得正確的相對位置
16169
			$conf["linkTo"]=$getRelativePath["content"][0];
16170
 
16171
			}#if end
16172
 
402 liveuser 16173
		#初始化給 ln 指令的參數
16174
		$paramsForLn=array("-s",$conf["linkTo"]);
16175
 
16176
		#函式說明:
16177
		#將字串特定關鍵字與其前面的內容剔除
16178
		#回傳結果:
16179
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16180
		#$result["error"],錯誤訊息陣列.
16181
		#$result["warning"],警告訊息鎮列.
16182
		#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
16183
		#$result["function"],當前執行的函數名稱.
16184
		#$result["oriStr"],要處理的原始字串內容.
16185
		#$result["content"],處理好的的字串內容.	
16186
		#必填參數:
16187
		#$conf["stringIn"],字串,要處理的字串.
16188
		$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$conf["linkTo"];
16189
		#$conf["keyWord"],字串,特定字串.
16190
		$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";
16191
		#可省略參數:
414 liveuser 16192
		#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
16193
		$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
402 liveuser 16194
		#參考資料:
16195
		#無.
16196
		#備註:
16197
		#無.
16198
		$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
16199
		unset($conf["stringProcess::delStrBeforeKeyWord"]);
16200
 
409 liveuser 16201
		#var_dump(__LINE__." ".print_r($delStrBeforeKeyWord,true));
16202
 
402 liveuser 16203
		#如果執行失敗
16204
		if($delStrBeforeKeyWord["status"]==="false"){
16205
 
16206
			#設置執行失敗
16207
			$result["status"]="false";
16208
 
16209
			#設置執行失敗訊息
16210
			$result["error"]=$delStrBeforeKeyWord;
16211
 
16212
			#回傳結果
16213
			return $result;
16214
 
16215
			}#if end
16216
 
16217
		#如果沒有找到 "/"
16218
		if($delStrBeforeKeyWord["founded"]==="false"){
16219
 
16220
			#設置 預設的 軟連名稱
16221
			$softLink=$conf["linkTo"];
16222
 
16223
			}#if end
16224
 
16225
		#反之有 "/"
16226
		else{
16227
 
16228
			#設置 預設的 軟連結名稱
16229
			$softLink=$delStrBeforeKeyWord["content"];
16230
 
16231
			}#else end
16232
 
488 liveuser 16233
		/*
16234
		#break point
16235
		var_dump(__LINE__." ".$softLink);
16236
		exit;
16237
		*/
409 liveuser 16238
 
402 liveuser 16239
		#預設欲建立的軟連結名稱
16240
		$createdSoftLink=$softLink;
16241
 
16242
		#如果有設置 path
16243
		if(isset($conf["path"])){
16244
 
16245
			#確認 path 存在
16246
			#函式說明:
16247
			#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.
16248
			#回傳結果:
16249
			#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16250
			#$result["error"],錯誤訊息陣列
16251
			#$result["warning"],警告訊息陣列
16252
			#必填參數:
16253
			#$conf["dirPositionAndName"]="";#新建的位置與名稱
16254
			$conf["fileAccess::createNewFolder"]["dirPositionAndName"]=$conf["path"];
16255
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16256
			$conf["fileAccess::createNewFolder"]["fileArgu"]=$conf["fileArgu"];
16257
			#可省略參數:
16258
			#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
16259
			#$conf["dirPermission"]="";
16260
			#參考資料:
16261
			#mkdir=>http://php.net/manual/en/function.mkdir.php
16262
			#chmod=>http://php.net/manual/en/function.chmod.php
16263
			#參考資料:
16264
			#無.
16265
			#備註:
16266
			#同 function createFolderAfterCheck.
16267
			$createNewFolder=fileAccess::createNewFolder($conf["fileAccess::createNewFolder"]);
16268
			unset($conf["fileAccess::createNewFolder"]);
16269
 
16270
			#如果執行失敗
16271
			if($createNewFolder["status"]==="false"){
16272
 
16273
				#設置執行失敗
16274
				$result["status"]="false";
16275
 
16276
				#設置執行失敗訊息
16277
				$result["error"]=$createNewFolder;
16278
 
16279
				#回傳結果
16280
				return $result;
16281
 
16282
				}#if end
16283
 
409 liveuser 16284
			#var_dump(__LINE__." ".print_r($conf,true));
16285
 
488 liveuser 16286
			#預設要加 slash
16287
			$slash="/";
16288
 
16289
			#如果 path 為 "/" 結尾
16290
			if($conf["path"][strlen($conf["path"])-1]==="/"){
16291
 
16292
				#不用 slash
16293
				$slash="";
16294
 
16295
				}#if end
16296
 
402 liveuser 16297
			#如果有設置 name
16298
			if(isset($conf["name"])){
488 liveuser 16299
 
402 liveuser 16300
				#指定軟連結要放在哪邊
488 liveuser 16301
				$paramsForLn[]=$conf["path"].$slash.$conf["name"];
402 liveuser 16302
 
16303
				#更新欲建立的軟連結名稱
488 liveuser 16304
				$createdSoftLink=$conf["path"].$slash.$conf["name"];
402 liveuser 16305
 
488 liveuser 16306
				/*
16307
				#break point
16308
				var_dump($conf["path"],$softLink,$createdSoftLink);
16309
				exit;
16310
				*/
16311
 
402 liveuser 16312
				}#if end
16313
 
16314
			#反之
16315
			else{
16316
 
16317
				#指定軟連結要放在哪邊
16318
				$paramsForLn[]=$conf["path"];
16319
 
16320
				#更新欲建立的軟連結名稱
488 liveuser 16321
				$createdSoftLink=$conf["path"].$slash.$softLink;
402 liveuser 16322
 
488 liveuser 16323
				/*
16324
				#break point
16325
				var_dump($conf["path"],$softLink,$createdSoftLink);
16326
				exit;
16327
				*/
414 liveuser 16328
 
402 liveuser 16329
				}#else end
409 liveuser 16330
 
16331
			#var_dump($createdSoftLink);
402 liveuser 16332
 
16333
			}#if end
16334
 
16335
		#反之如果有設置 name
16336
		else if(isset($conf["name"])){
16337
 
16338
			#指定軟連結的名稱
16339
			$paramsForLn[]=$conf["name"];
16340
 
16341
			#更新欲建立的軟連結名稱
16342
			$createdSoftLink=$conf["name"];
16343
 
414 liveuser 16344
			#var_dump(__LINE__." ".$createdSoftLink);
409 liveuser 16345
 
402 liveuser 16346
			}#if end
488 liveuser 16347
 
16348
		/*
16349
		# break point
16350
		var_dump($createdSoftLink);
16351
		exit;
16352
		*/
16353
 
402 liveuser 16354
		#如果要覆蓋既有的目標
16355
		if($conf["overWrite"]==="true"){
16356
 
16357
			#函式說明:
16358
			#移除檔案
16359
			#回傳結果:
16360
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
16361
			#$result["error"],錯誤訊息陣列
16362
			#$result["warning"],警告訊息陣列
16363
			#$result["function"],當前執行的函數名稱
16364
			#必填參數:
16365
			#$conf["fileAddress"],字串,要移除檔案的位置.
16366
			$conf["fileAccess::delFile"]["fileAddress"]=$createdSoftLink;
16367
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.
16368
			$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];
16369
			#可省略參數:
16370
			#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.
16371
			#$conf["commentsArray"]=array("");
409 liveuser 16372
			#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.
16373
			$conf["fileAccess::delFile"]["allowDelSymlink"]="true";
16374
			#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.
16375
			$conf["fileAccess::delFile"]["allowDelFolder"]="true";
402 liveuser 16376
			#參考資料:
16377
			#無.
16378
			#備註:
16379
			#無.
16380
			$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);
16381
			unset($conf["fileAccess::delFile"]);	
16382
 
488 liveuser 16383
			/*
16384
			#break point
16385
			var_dump($delFile);
16386
			exit;
16387
			*/
409 liveuser 16388
 
402 liveuser 16389
			#如果執行失敗
16390
			if($delFile["status"]==="false"){
16391
 
16392
				#設置執行失敗
16393
				$result["status"]="false";
16394
 
16395
				#設置執行失敗訊息
16396
				$result["error"]=$delFile;
16397
 
16398
				#回傳結果
16399
				return $result;
16400
 
16401
				}#if end
16402
 
16403
			}#if end
16404
 
16405
		#函式說明:
16406
		#呼叫shell執行系統命令,並取得回傳的內容.
16407
		#回傳結果:
16408
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16409
		#$result["error"],錯誤訊息陣列.
16410
		#$result["function"],當前執行的函數名稱.
16411
		#$result["argu"],使用的參數.
16412
		#$result["cmd"],執行的指令內容.
16413
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16414
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16415
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16416
		#$result["running"],是否還在執行.
16417
		#$result["pid"],pid.
16418
		#$result["statusCode"],執行結束後的代碼.
16419
		#必填參數:
16420
		#$conf["command"],字串,要執行的指令與.
16421
		$conf["external::callShell"]["command"]="ln";
16422
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16423
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16424
		#可省略參數:
16425
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16426
		$conf["external::callShell"]["argu"]=$paramsForLn;
16427
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16428
		#$conf["arguIsAddr"]=array();
16429
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16430
		#$conf["plainArgu"]=array();
16431
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16432
		#$conf["useApostrophe"]=array();
16433
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16434
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16435
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16436
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16437
		#$conf["enablePrintDescription"]="true";
16438
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16439
		#$conf["printDescription"]="";
16440
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16441
		$conf["external::callShell"]["escapeshellarg"]="true";
16442
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16443
		#$conf["thereIsShellVar"]=array();
16444
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16445
		#$conf["username"]="";
16446
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16447
		#$conf["password"]="";
16448
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16449
		#$conf["useScript"]="";
16450
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16451
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16452
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16453
		#$conf["inBackGround"]="";
16454
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16455
		$conf["external::callShell"]["getErr"]="true";
16456
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16457
		#$conf["doNotRun"]="false";
16458
		#參考資料:
16459
		#exec=>http://php.net/manual/en/function.exec.php
16460
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16461
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16462
		#備註:
16463
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16464
		$callShell=external::callShell($conf["external::callShell"]);
16465
		unset($conf["external::callShell"]);
16466
 
16467
		#如果執行失敗
16468
		if($callShell["status"]==="false"){
16469
 
16470
			#設置執行失敗
16471
			$result["status"]="false";
16472
 
16473
			#設置執行失敗訊息
16474
			$result["error"]=$callShell;
16475
 
16476
			#回傳結果
16477
			return $result;
16478
 
16479
			}#if end
16480
 
488 liveuser 16481
		#保存執行的指令
16482
		$result["cmd"][]=$callShell["cmd"];
16483
 
402 liveuser 16484
		#初始化給 ls 指令的參數
409 liveuser 16485
		$paramsForLs=array("-l",$paramsForLn[count($paramsForLn)-1]);
402 liveuser 16486
 
16487
		#取得軟連結的資訊
16488
		#函式說明:
16489
		#呼叫shell執行系統命令,並取得回傳的內容.
16490
		#回傳結果:
16491
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16492
		#$result["error"],錯誤訊息陣列.
16493
		#$result["function"],當前執行的函數名稱.
16494
		#$result["argu"],使用的參數.
16495
		#$result["cmd"],執行的指令內容.
16496
		#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
16497
		#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
16498
		#$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
16499
		#$result["running"],是否還在執行.
16500
		#$result["pid"],pid.
16501
		#$result["statusCode"],執行結束後的代碼.
16502
		#必填參數:
16503
		#$conf["command"],字串,要執行的指令與.
16504
		$conf["external::callShell"]["command"]="ls";
16505
		#$conf["fileArgu"],字串,變數__FILE__的內容.
16506
		$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];
16507
		#可省略參數:
16508
		#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
16509
		$conf["external::callShell"]["argu"]=$paramsForLs;
16510
		#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
16511
		#$conf["arguIsAddr"]=array();
16512
		#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.
16513
		#$conf["plainArgu"]=array();
16514
		#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".
16515
		#$conf["useApostrophe"]=array();
16516
		#$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
16517
		#$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
16518
		#$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
16519
		#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
16520
		#$conf["enablePrintDescription"]="true";
16521
		#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
16522
		#$conf["printDescription"]="";
16523
		#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
16524
		$conf["external::callShell"]["escapeshellarg"]="true";
16525
		#$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
16526
		#$conf["thereIsShellVar"]=array();
16527
		#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
16528
		#$conf["username"]="";
16529
		#$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
16530
		#$conf["password"]="";
16531
		#$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
16532
		#$conf["useScript"]="";
16533
		#$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
16534
		#$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
16535
		#$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
16536
		#$conf["inBackGround"]="";
16537
		#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
16538
		$conf["external::callShell"]["getErr"]="true";
16539
		#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
16540
		#$conf["doNotRun"]="false";
16541
		#參考資料:
16542
		#exec=>http://php.net/manual/en/function.exec.php
16543
		#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
16544
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
16545
		#備註:
16546
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
16547
		$callShell=external::callShell($conf["external::callShell"]);
16548
		unset($conf["external::callShell"]);
16549
 
16550
		#如果執行失敗
16551
		if($callShell["status"]==="false"){
16552
 
16553
			#設置執行失敗
16554
			$result["status"]="false";
16555
 
16556
			#設置執行失敗訊息
16557
			$result["error"]=$callShell;
16558
 
16559
			#回傳結果
16560
			return $result;
16561
 
16562
			}#if end
16563
 
488 liveuser 16564
		#保存執行的指令
16565
		$result["cmd"][]=$callShell["cmd"];
16566
 
402 liveuser 16567
		#取得軟連結的資訊
409 liveuser 16568
		$result["content"]=$callShell["output"];
402 liveuser 16569
 
16570
		#設置執行正常
16571
		$result["status"]="true";
16572
 
16573
		#回傳結果
16574
		return $result;
16575
 
16576
		}#function createLink end
16577
 
16578
	/*
16579
	#函式說明:
16580
	#針對特定目錄下的內容建立軟連結.
16581
	#回傳結果:
16582
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16583
	#$result["error"],錯誤訊息.
16584
	#$result["function"],當前執行的函數名稱.
16585
	#$result["content"],字串陣列,每個建立的軟連結資訊.
16586
	#必填參數:
16587
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16588
	$conf["fileArgu"]=__FILE__;
16589
	#$conf["linkToDir"],字串,軟連結要指向哪個目錄底下的內容.
16590
	$conf["linkToDir"]="";
16591
	#可省略參數:
16592
	#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16593
	#$conf["path"]="";
16594
	#$conf["name"],字串陣列,軟連結的名稱,預設為 "linkToDir" 目錄底下的檔案或目錄名稱.若要指定特定檔案目錄的軟連結名稱,則可以用 $conf["name"][]=array("原始名稱","新的名稱"); 來指定.
16595
	#$conf["name"]=array(array("oriName","newName"));
16596
	#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16597
	#$conf["overWrite"]="true";
16598
	#參考資料:
16599
	#無.
16600
	#備註:
16601
	#無.
16602
	*/
16603
	public static function createMultiLinkInDir(&$conf){
16604
 
16605
		#初始化要回傳的結果
16606
		$result=array();
16607
 
16608
		#取得當前執行的函數名稱
16609
		$result["function"]=__FUNCTION__;
16610
 
16611
		#如果沒有參數
16612
		if(func_num_args()==0){
16613
 
16614
			#設置執行失敗
16615
			$result["status"]="false";
16616
 
16617
			#設置執行錯誤訊息
16618
			$result["error"]="函數".$result["function"]."需要參數";
16619
 
16620
			#回傳結果
16621
			return $result;
16622
 
16623
			}#if end		
16624
 
16625
		#取得參數
16626
		$result["argu"]=$conf;
16627
 
16628
		#如果 $conf 不為陣列
16629
		if(gettype($conf)!=="array"){
16630
 
16631
			#設置執行失敗
16632
			$result["status"]="false";
16633
 
16634
			#設置執行錯誤訊息
16635
			$result["error"][]="\$conf變數須為陣列形態";
16636
 
16637
			#如果傳入的參數為 null
16638
			if($conf===null){
16639
 
16640
				#設置執行錯誤訊息
16641
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16642
 
16643
				}#if end
16644
 
16645
			#回傳結果
16646
			return $result;
16647
 
16648
			}#if end
16649
 
16650
		#檢查參數
16651
		#函式說明:
16652
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16653
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16654
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16655
		#$result["function"],當前執行的函式名稱.
16656
		#$result["argu"],設置給予的參數.
16657
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16658
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16659
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16660
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16661
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16662
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16663
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16664
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16665
		#必填寫的參數:
16666
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16667
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16668
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16669
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16670
		#可以省略的參數:
16671
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16672
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkToDir");
16673
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16674
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16675
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16676
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16677
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16678
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16679
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16680
		#$conf["canBeEmpty"]=array();
16681
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
16682
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");
16683
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
16684
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");
16685
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
16686
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");
16687
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
16688
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".",null,"false");
16689
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16690
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16691
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16692
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16693
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16694
		#$conf["arrayCountEqualCheck"][]=array();
16695
		#參考資料來源:
16696
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16697
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16698
		unset($conf["variableCheck::checkArguments"]);
16699
 
16700
		#如果檢查參數失敗
16701
		if($checkArguments["status"]==="false"){
16702
 
16703
			#設置執行失敗
16704
			$result["status"]="false";
16705
 
16706
			#設置執行失敗訊息
16707
			$result["error"]=$checkArguments;
16708
 
16709
			#回傳結果
16710
			return $result;
16711
 
16712
			}#if end
16713
 
16714
		#如果檢查參數不通過
16715
		if($checkArguments["passed"]==="false"){
16716
 
16717
			#設置執行失敗
16718
			$result["status"]="false";
16719
 
16720
			#設置執行失敗訊息
16721
			$result["error"]=$checkArguments;
16722
 
16723
			#回傳結果
16724
			return $result;
16725
 
16726
			}#if end
16727
 
16728
		#函式說明:
16729
		#取得目錄底下所有目錄與檔案清單.
16730
		#回傳結果:
16731
		#$result["status"],"true"爲建立成功,"false"爲建立失敗.
16732
		#$result["error"],錯誤訊息陣列.
16733
		#$result["function"],函數名稱.
16734
		#$result["content"],陣列,目錄底下的檔案與子目錄.
16735
		#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.
16736
		#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.
16737
		#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.
16738
		#$result["position"],目前的位置.
16739
		#必填參數:
16740
		#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.
16741
		$conf["fileAccess::getList"]["position"]=$conf["linkToDir"];
16742
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
16743
		$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];
16744
		#可省略參數:
16745
		#無
16746
		#參考資料:
16747
		#opendir=>http://php.net/manual/en/function.opendir.php
16748
		#is_dir=>http://php.net/manual/en/function.is-dir.php
16749
		#備註:
16750
		#無.
16751
		$getList=fileAccess::getList($conf["fileAccess::getList"]);
16752
		unset($conf["fileAccess::getList"]);
16753
 
16754
		#如果檢查參數失敗
16755
		if($getList["status"]==="false"){
16756
 
16757
			#設置執行失敗
16758
			$result["status"]="false";
16759
 
16760
			#設置執行失敗訊息
16761
			$result["error"]=$getList;
16762
 
16763
			#回傳結果
16764
			return $result;
16765
 
16766
			}#if end
16767
 
16768
		#針對目標目錄底下的所有檔案
16769
		foreach($getList["content"] as $oriName){
16770
 
16771
			#如果有設定 $conf["name"]
16772
			if(isset($conf["name"])){
16773
 
16774
				#預設不指定新的軟連結名稱
16775
				unset($newSoftLinkName);
16776
 
16777
				#針對每個原始目標的名稱
16778
				foreach($conf["name"] as $customName){
16779
 
16780
					#如果是指定的目標
409 liveuser 16781
					if($oriName["name"]===$customName[0]){
402 liveuser 16782
 
16783
						#設置新的軟連結名稱
16784
						$newSoftLinkName=$customName[1];
16785
 
16786
						}#if end
16787
 
16788
					}#foreach end
16789
 
16790
				}#if end
16791
 
16792
			#建立軟連結
16793
			#函式說明:
16794
			#建立軟連結.
16795
			#回傳結果:
16796
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16797
			#$result["error"],錯誤訊息.
16798
			#$result["function"],當前執行的函數名稱.
16799
			#$result["content"],軟連結的資訊.
16800
			#必填參數:
16801
			#$conf["fileArgu"],字串,變數__FILE__的內容.
16802
			$conf["fileAccess::createLink"]["fileArgu"]=$conf["fileArgu"];
16803
			#$conf["linkTo"],字串,軟連結要指向哪邊.
409 liveuser 16804
			$conf["fileAccess::createLink"]["linkTo"]=$conf["linkToDir"]."/".$oriName["name"];
402 liveuser 16805
			#可省略參數:
16806
			#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.
16807
			$conf["fileAccess::createLink"]["path"]=$conf["path"];
16808
 
16809
			#如果有新的軟連結名稱
16810
			if(isset($newSoftLinkName)){
16811
 
16812
				#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.
16813
				$conf["fileAccess::createLink"]["name"]=$newSoftLinkName;
16814
 
16815
				}#if end
16816
 
16817
			#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.
16818
			$conf["fileAccess::createLink"]["overWrite"]=$conf["overWrite"];
16819
 
16820
			#參考資料:
16821
			#無.
16822
			#備註:
16823
			#無.
16824
			$createLink=fileAccess::createLink($conf["fileAccess::createLink"]);
16825
			unset($conf["fileAccess::createLink"]);
16826
 
414 liveuser 16827
			#var_dump(__LINE__." ".print_r($createLink,true));
16828
 
402 liveuser 16829
			#如果檢查參數失敗
16830
			if($createLink["status"]==="false"){
16831
 
16832
				#設置執行失敗
16833
				$result["status"]="false";
16834
 
16835
				#設置執行失敗訊息
16836
				$result["error"]=$createLink;
16837
 
16838
				#回傳結果
16839
				return $result;
16840
 
16841
				}#if end
16842
 
16843
			#儲存建立好的軟連結資訊
16844
			$result["content"][]=$createLink["content"];
16845
 
16846
			}#foreach end
16847
 
16848
		#設置執行正常
16849
		$result["status"]="true";
16850
 
16851
		#回傳結果
16852
		return $result;
16853
 
16854
		}#function createMultiLink end
16855
 
16856
	/*
16857
	#函式說明:
550 liveuser 16858
	#更新檔案的內容.
402 liveuser 16859
	#回傳結果:
16860
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16861
	#$result["error"],錯誤訊息.
16862
	#$result["function"],當前執行的函數名稱.
16863
	#$result["content"],軟連結的資訊.
16864
	#必填參數:
16865
	#$conf["fileArgu"],字串,變數__FILE__的內容.
16866
	$conf["fileArgu"]=__FILE__;
16867
	#$conf["file"],字串,要更新的檔案位置與名稱.
16868
	$conf["file"]="";
16869
	#可省略參數:
16870
	#$conf["overWriteWith"],字串陣列,要置換成什麼樣的內容,每個元素代表一行內容.
16871
	#$conf["overWriteWith"]=array();
16872
	#$conf["replaceWith"],字串陣列,要將什麼內容置換成什麼內容.
16873
	#$conf["replaceWith"]=array(array("ori content","new content"),array("ori content","new content"),...);
676 liveuser 16874
	#$conf["replaceLike"],字串,預設為"false",代表要完全符合關鍵字才能進行整行替換;反之為"true".
16875
	#$conf["replaceLike"]="false";
402 liveuser 16876
	#$conf["addToTailWhenNoMatch"],字串,預設為"false"不做事;若為"true",則代表若使用 "replaceWith" 參數但沒有符合條件的內容出現,則新增到檔案的尾端.
16877
	#$conf["addToTailWhenNoMatch"]="false";
16878
	#$conf["addToTailBeforeThat"],字串,當 "replaceWith" 參數有使用,且 "addToTailWhenNoMatch" 為 "true" 時,若有使用該參數,則會從尾端尋找符合條件的行內容,然後將 沒有符合 "replaceWith" 條件的內容新增在此之前.
16879
	#$conf["addToTailBeforeThat"]="?\>";
16880
	#參考資料:
16881
	#無.
16882
	#備註:
16883
	#無.
16884
	*/
16885
	public static function updateFile(&$conf){
16886
 
16887
		#初始化要回傳的結果
16888
		$result=array();
16889
 
16890
		#取得當前執行的函數名稱
16891
		$result["function"]=__FUNCTION__;
16892
 
16893
		#如果沒有參數
16894
		if(func_num_args()==0){
16895
 
16896
			#設置執行失敗
16897
			$result["status"]="false";
16898
 
16899
			#設置執行錯誤訊息
16900
			$result["error"]="函數".$result["function"]."需要參數";
16901
 
16902
			#回傳結果
16903
			return $result;
16904
 
16905
			}#if end		
16906
 
16907
		#取得參數
16908
		$result["argu"]=$conf;
16909
 
16910
		#如果 $conf 不為陣列
16911
		if(gettype($conf)!=="array"){
16912
 
16913
			#設置執行失敗
16914
			$result["status"]="false";
16915
 
16916
			#設置執行錯誤訊息
16917
			$result["error"][]="\$conf變數須為陣列形態";
16918
 
16919
			#如果傳入的參數為 null
16920
			if($conf===null){
16921
 
16922
				#設置執行錯誤訊息
16923
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
16924
 
16925
				}#if end
16926
 
16927
			#回傳結果
16928
			return $result;
16929
 
16930
			}#if end
16931
 
16932
		#檢查參數
16933
		#函式說明:
16934
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
16935
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
16936
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
16937
		#$result["function"],當前執行的函式名稱.
16938
		#$result["argu"],設置給予的參數.
16939
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
16940
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
16941
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
16942
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
16943
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
16944
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
16945
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
16946
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
16947
		#必填寫的參數:
16948
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
16949
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;	
16950
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
16951
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
16952
		#可以省略的參數:
16953
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
16954
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","file");
16955
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
16956
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
16957
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
16958
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
16959
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
16960
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");
16961
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
16962
		#$conf["canBeEmpty"]=array();
16963
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
676 liveuser 16964
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
402 liveuser 16965
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
676 liveuser 16966
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");
402 liveuser 16967
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
676 liveuser 16968
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","string","string","string");
402 liveuser 16969
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
676 liveuser 16970
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"false");
402 liveuser 16971
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
16972
		#$conf["disallowAllSkipableVarIsEmpty"]="";
16973
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
16974
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
16975
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
16976
		#$conf["arrayCountEqualCheck"][]=array();
16977
		#參考資料來源:
16978
		#array_keys=>http://php.net/manual/en/function.array-keys.php
16979
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
16980
		unset($conf["variableCheck::checkArguments"]);
16981
 
16982
		#如果檢查參數失敗
16983
		if($checkArguments["status"]==="false"){
16984
 
16985
			#設置執行失敗
16986
			$result["status"]="false";
16987
 
16988
			#設置執行失敗訊息
16989
			$result["error"]=$checkArguments;
16990
 
16991
			#回傳結果
16992
			return $result;
16993
 
16994
			}#if end
16995
 
16996
		#如果檢查參數不通過
16997
		if($checkArguments["passed"]==="false"){
16998
 
16999
			#設置執行失敗
17000
			$result["status"]="false";
17001
 
17002
			#設置執行失敗訊息
17003
			$result["error"]=$checkArguments;
17004
 
17005
			#回傳結果
17006
			return $result;
17007
 
17008
			}#if end
17009
 
17010
		#檢查檔案是否存在
17011
		#函式說明:
17012
		#檢查多個檔案與資料夾是否存在.
17013
		#回傳的結果:
17014
		#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
17015
		#$result["error"],錯誤訊息陣列.
17016
		#$resutl["function"],當前執行的涵式名稱.
17017
		#$result["argu"],使用的參數.
17018
		#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
17019
		#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
17020
		#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
17021
		#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址
17022
		#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
17023
		#必填參數:
17024
		#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
17025
		$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);
17026
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17027
		$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];
17028
		#可省略參數:
17029
		#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
17030
		$conf["disableWebSearch"]="true";
17031
		#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
17032
		$conf["userDir"]="false";
17033
		#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
17034
		$conf["web"]="false";
17035
		#參考資料:
17036
		#http://php.net/manual/en/function.file-exists.php
17037
		#http://php.net/manual/en/control-structures.foreach.php
17038
		#備註:
17039
		#函數file_exists檢查的路徑為檔案系統的路徑
17040
		#$result["varName"][$i]結果未實作
17041
		$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
17042
		unset($conf["fileAccess::checkMultiFileExist"]);
17043
 
17044
		#如果檢查參數失敗
17045
		if($checkMultiFileExist["status"]==="false"){
17046
 
17047
			#設置執行失敗
17048
			$result["status"]="false";
17049
 
17050
			#設置執行失敗訊息
17051
			$result["error"]=$checkMultiFileExist;
17052
 
17053
			#回傳結果
17054
			return $result;
17055
 
17056
			}#if end
17057
 
17058
		#如果目標檔案不存在
17059
		if($checkMultiFileExist["allExist"]==="false"){
17060
 
17061
			#設置執行失敗
17062
			$result["status"]="false";
17063
 
17064
			#設置執行失敗訊息
934 liveuser 17065
			$result["error"]=$checkMultiFileExist;
402 liveuser 17066
 
17067
			#回傳結果
17068
			return $result;
17069
 
17070
			}#if end
17071
 
17072
		#如果有設置 overWriteWith
17073
		if(isset($conf["overWriteWith"])){
17074
 
17075
			#函式說明:
17076
			#將多行字串寫入到檔案
17077
			#回傳結果:
17078
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17079
			#$result["error"],錯誤訊息陣列.
17080
			#$result["function"],當前執行函數的名稱.
17081
			#必填參數:
17082
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17083
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17084
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17085
			$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["overWriteWith"];
17086
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17087
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17088
			#可省略參數:
17089
			#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17090
			#參考資料:
17091
			#無.
17092
			#備註:
17093
			#無.
17094
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17095
			unset($conf["fileAccess::writeMultiLine"]);
17096
 
17097
			#如果執行失敗
17098
			if($writeMultiLine["status"]==="false"){
17099
 
17100
				#設置執行失敗
17101
				$result["status"]="false";
17102
 
17103
				#設置執行失敗訊息
17104
				$result["error"]=$writeMultiLine;
17105
 
17106
				#回傳結果
17107
				return $result;
17108
 
17109
				}#if end
17110
 
17111
			}#if end
17112
 
17113
		#如果有設置 "replaceWith"
17114
		if(isset($conf["replaceWith"])){
17115
 
17116
			#取得檔案的內容
17117
			#函式說明:
17118
			#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
17119
			#回傳的變數說明:
17120
			#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
17121
			#$result["error"],錯誤訊息提示.
17122
			#$result["warning"],警告訊息.
17123
			#$result["function"],當前執行的函數名稱.
17124
			#$result["fileContent"],爲檔案的內容陣列.
17125
			#$result["lineCount"],爲檔案內容總共的行數.
17126
			#$result["fullContent"],為檔案的完整內容.
17127
			#$result["base64data"],為檔案的base64內容.
17128
			#$result["mimeType"],為檔案的mime type.
17129
			#必填參數:
17130
			#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
17131
			$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];
17132
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17133
			$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
17134
			#可省略參數:
17135
			#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
17136
			$conf["fileAccess::getFileContent"]["web"]="false";
17137
			#參考資料:
17138
			#file(),取得檔案內容的行數.
17139
			#file=>http:#php.net/manual/en/function.file.php
17140
			#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
17141
			#filesize=>http://php.net/manual/en/function.filesize.php
17142
			#參考資料:
17143
			#無.
17144
			#備註:
17145
			#無.
17146
			$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
17147
			unset($conf["fileAccess::getFileContent"]);
17148
 
17149
			#如果執行失敗
17150
			if($getFileContent["status"]==="false"){
17151
 
17152
				#設置執行失敗
17153
				$result["status"]="false";
17154
 
17155
				#設置執行失敗訊息
17156
				$result["error"]=$getFileContent;
17157
 
17158
				#回傳結果
17159
				return $result;
17160
 
17161
				}#if end
17162
 
17163
			#取得原始檔案的每行內容
17164
			$oriFileContentByLine=&$getFileContent["fileContent"];
17165
 
17166
			#針對每個 replaceWith 條件
17167
			foreach($conf["replaceWith"] as $replaceInfo){
17168
 
17169
				#預設尚未找到符合的關鍵字
17170
				$foundKeyWord=false;
17171
 
17172
				#取得要替換的目標字串
17173
				$oriStr=$replaceInfo[0];
17174
 
17175
				#取得要替換成的字串內容
17176
				$newStr=$replaceInfo[1];
17177
 
17178
				#針對每行原始內容
17179
				foreach($oriFileContentByLine as $index => $line){
17180
 
17181
					#函式說明:
17182
					#檢查字串裡面有無指定的關鍵字
17183
					#回傳結果:
17184
					#$result["status"],"true"代表執行成功,"false"代表執行失敗。
17185
					#$result["error"],錯誤訊息
17186
					#$result["function"],當前執行的函數名稱.
17187
					#$result["argu"],使用的參數.
17188
					#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
17189
					#$result["keyWordCount"],找到的關鍵字數量.
17190
					#必填參數:
17191
					#$conf["keyWord"],字串,想要搜尋的關鍵字.
674 liveuser 17192
					$conf["search::findKeyWord"]["keyWord"]=$oriStr;
402 liveuser 17193
					#$conf["string"],字串,要被搜尋的字串內容
674 liveuser 17194
					$conf["search::findKeyWord"]["string"]=$line;
402 liveuser 17195
					#可省略參數:
676 liveuser 17196
 
17197
					#如果要完全符合關鍵字
17198
					if($conf["replaceLike"]==="false"){
17199
 
17200
						#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
17201
						$conf["search::findKeyWord"]["completeEqual"]="true";
17202
 
17203
						}#if end
17204
 
402 liveuser 17205
					#參考資料:
17206
					#無.
17207
					#備註:
17208
					#無.
17209
					$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);
17210
					unset($conf["search::findKeyWord"]);
17211
 
17212
					#如果執行失敗
17213
					if($findKeyWord["status"]==="false"){
17214
 
17215
						#設置執行失敗
17216
						$result["status"]="false";
17217
 
17218
						#設置執行失敗訊息
17219
						$result["error"]=$findKeyWord;
17220
 
17221
						#回傳結果
17222
						return $result;
17223
 
17224
						}#if end
17225
 
17226
					#如果有找到關鍵字
17227
					if($findKeyWord["founded"]==="true"){
17228
 
17229
						#更新該行內容
674 liveuser 17230
						$oriFileContentByLine[$index]=$newStr;
402 liveuser 17231
 
17232
						#設置有找到符合的關鍵字
17233
						$foundKeyWord=true;
17234
 
17235
						}#if end
17236
 
17237
					}#foreach end
17238
 
17239
				#如果沒有找到關鍵字
17240
				if($foundKeyWord===false){
17241
 
17242
					#如果要新增內容
17243
					if($conf["addToTailWhenNoMatch"]==="true"){
17244
 
17245
						#如果有設置 addToTailBeforeThat
17246
						if(isset($conf["addToTailBeforeThat"])){
17247
 
17248
							#預設沒有找到符合的關鍵字
17249
							$foundKeyWord=false;
17250
 
17251
							#初始化要記錄要 append 回去的各行內容.
17252
							$linesToAppend=array();
17253
 
17254
							#倒敘,針對每行內容
17255
							for($i=count($oriFileContentByLine)-1;$i>=0;$i--){
17256
 
17257
								#儲存要 append 回去的行內容
17258
								$linesToAppend[]=$oriFileContentByLine[$i];
17259
 
17260
								#如果找到關鍵字了
17261
								if($oriFileContentByLine[$i]===$conf["addToTailBeforeThat"]){
17262
 
17263
									#設置有找到符合的關鍵字
17264
									$foundKeyWord=true;
17265
 
17266
									#更新該行內容
17267
									$oriFileContentByLine[$i]=$line;
17268
 
17269
									#倒敘陣列
17270
									$linesToAppend=array_reverse($linesToAppend);
17271
 
17272
									#針對每行要 append 回去的內容
17273
									foreach($linesToAppend as $lineToAppend){
17274
 
17275
										#append 行內容
17276
										$oriFileContentByLine[]=$lineToAppend;
17277
 
17278
										}#foreach end
17279
 
17280
									}#if end
17281
 
17282
								}#for end
17283
 
17284
							#如果沒有找到關鍵字
17285
							if($foundKeyWord===false){
17286
 
17287
								#設置執行失敗
17288
								$result["status"]="false";
17289
 
17290
								#設置錯誤訊息
17291
								$result["error"]="can't find \"".$conf["addToTailBeforeThat"]."\" to insert before it.";
17292
 
17293
								#回傳結果
17294
								return $result;
17295
 
17296
								}#if end
17297
 
17298
							}#if end
17299
 
17300
						}#if end
17301
 
17302
					}#if end
17303
 
17304
				}#foreach end
679 liveuser 17305
 
17306
			#函式說明:
17307
			#將多行字串寫入到檔案
17308
			#回傳結果:
17309
			#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
17310
			#$result["error"],錯誤訊息陣列.
17311
			#$result["function"],當前執行函數的名稱.
17312
			#必填參數:
17313
			#$conf["fileName"],字串,爲要編輯的檔案名稱
17314
			$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];
17315
			#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。
17316
			$conf["fileAccess::writeMultiLine"]["inputString"]=$oriFileContentByLine;
17317
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
17318
			$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];
17319
			#可省略參數:
17320
			#$conf["fileAccess::writeMultiLine"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
17321
			#參考資料:
17322
			#無.
17323
			#備註:
17324
			#無.
17325
			$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);
17326
			unset($conf["fileAccess::writeMultiLine"]);
402 liveuser 17327
 
679 liveuser 17328
			#如果執行失敗
17329
			if($writeMultiLine["status"]==="false"){
17330
 
17331
				#設置執行失敗
17332
				$result["status"]="false";
17333
 
17334
				#設置執行失敗訊息
17335
				$result["error"]=$writeMultiLine;
17336
 
17337
				#回傳結果
17338
				return $result;
17339
 
17340
				}#if end
17341
 
402 liveuser 17342
			}#if end
17343
 
17344
		#設置執行正常
17345
		$result["status"]="true";
17346
 
17347
		#回傳結果
17348
		return $result;
17349
 
17350
		}#function updateFile end
582 liveuser 17351
 
17352
	/*
17353
	#函式說明:
17354
	#輔助使用PHP內建的chmod函式.
17355
	#回傳結果:
17356
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17357
	#$result["error"],錯誤訊息.
17358
	#$result["function"],當前執行的函式名稱.
17359
	#$result["argu"],使用的參數.
17360
	#$result["cmd"],執行的指令.
17361
	#$result["content"],執行的結果陣列,如果參數 "recursive" 跟 "excludeSelf" 都有設定的話,就會回傳該結果.
17362
	#必填參數:
17363
	#$conf["mode"],字串,要變成什麼權限.
17364
	$conf["mode"]="";
17365
	#$conf["target"],字串,需要變更權限的目標.
17366
	$conf["target"]="";
17367
	#可省略參數:
17368
	#無.
17369
	#參考資料:
17370
	#無.
17371
	#備註:
17372
	#無.
17373
	*/
17374
	public static function chmod(&$conf){
17375
 
17376
		#初始化要回傳的結果
17377
		$result=array();
402 liveuser 17378
 
582 liveuser 17379
		#取得當前執行的函數名稱
17380
		$result["function"]=__FUNCTION__;
17381
 
17382
		#如果沒有參數
17383
		if(func_num_args()==0){
17384
 
17385
			#設置執行失敗
17386
			$result["status"]="false";
17387
 
17388
			#設置執行錯誤訊息
17389
			$result["error"]="函數".$result["function"]."需要參數";
17390
 
17391
			#回傳結果
17392
			return $result;
17393
 
17394
			}#if end
17395
 
17396
		#取得參數
17397
		$result["argu"]=$conf;
17398
 
17399
		#如果 $conf 不為陣列
17400
		if(gettype($conf)!=="array"){
17401
 
17402
			#設置執行失敗
17403
			$result["status"]="false";
17404
 
17405
			#設置執行錯誤訊息
17406
			$result["error"][]="\$conf變數須為陣列形態";
17407
 
17408
			#如果傳入的參數為 null
17409
			if(is_null($conf)){
17410
 
17411
				#設置執行錯誤訊息
17412
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
17413
 
17414
				}#if end
17415
 
17416
			#回傳結果
17417
			return $result;
17418
 
17419
			}#if end
17420
 
17421
		#函式說明:
17422
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
17423
		#回傳結果:
17424
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
17425
		#$result["error"],執行不正常結束的錯訊息陣列.
17426
		#$result["simpleError"],簡單表示的錯誤訊息.
17427
		#$result["function"],當前執行的函式名稱.
17428
		#$result["argu"],設置給予的參數.
17429
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
17430
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
17431
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
17432
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
17433
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
17434
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
17435
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
17436
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
17437
		#必填參數:
17438
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
596 liveuser 17439
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
582 liveuser 17440
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
596 liveuser 17441
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
582 liveuser 17442
		#可省略參數:
17443
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
596 liveuser 17444
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mode","target");
582 liveuser 17445
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
596 liveuser 17446
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
582 liveuser 17447
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
17448
		#$conf["canBeEmptyString"]="false";
17449
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
17450
		#$conf["canNotBeEmpty"]=array();
17451
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
17452
		#$conf["canBeEmpty"]=array();
17453
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
17454
		#$conf["skipableVariableCanNotBeEmpty"]=array();
17455
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
17456
		#$conf["skipableVariableName"]=array();
17457
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
17458
		#$conf["skipableVariableType"]=array();
17459
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
17460
		#$conf["skipableVarDefaultValue"]=array("");
17461
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
17462
		#$conf["disallowAllSkipableVarIsEmpty"]="";
17463
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
17464
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
17465
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
17466
		#$conf["arrayCountEqualCheck"][]=array();
17467
		#參考資料:
17468
		#array_keys=>http://php.net/manual/en/function.array-keys.php
17469
		#備註:
17470
		#無.
596 liveuser 17471
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
17472
		unset($conf["variableCheck::checkArguments"]);
582 liveuser 17473
 
17474
		#如果檢查參數失敗
17475
		if($checkArguments["status"]==="false"){
17476
 
17477
			#設置執行失敗
17478
			$result["status"]="false";
17479
 
17480
			#設置錯誤資訊
595 liveuser 17481
			$result["error"]=$checkArguments;
582 liveuser 17482
 
17483
			#回傳結果
17484
			return $result;
17485
 
17486
			}#if end
17487
 
17488
		#如果檢查參數不通過
17489
		if($checkArguments["passed"]==="false"){
17490
 
17491
			#設置執行失敗
17492
			$result["status"]="false";
17493
 
17494
			#設置錯誤資訊
595 liveuser 17495
			$result["error"]=$checkArguments;
582 liveuser 17496
 
17497
			#回傳結果
17498
			return $result;
17499
 
17500
			}#if end
589 liveuser 17501
 
582 liveuser 17502
		#將$conf["mode"]轉換為10進位的整數
17503
		$conf["mode"]=(int)base_convert($conf["mode"],8,10);
17504
 
17505
		#變更 target 的檔案權限為代碼
17506
		$chmod=chmod($conf["target"],$conf["mode"]); 
17507
 
17508
		#如果改變檔案權限失敗
17509
		if($chmod===false){
17510
 
17511
			#設置執行失敗
17512
			$result["status"]="false";
17513
 
17514
			#設置錯誤訊息
585 liveuser 17515
			$result["error"][]="改變 ".$conf["target"]." 檔案的權限資訊為 ".$conf["mode"]." 失敗,通常只有系統帳戶才能變更之.";
582 liveuser 17516
 
17517
			#回傳結果
17518
			return $result;	
17519
 
17520
			}#if end
592 liveuser 17521
 
17522
		#設置執行正常
17523
		$result["status"]="true";
582 liveuser 17524
 
592 liveuser 17525
		#回傳結果
17526
		return $result;
17527
 
582 liveuser 17528
		}#function chmod end
17529
 
1 liveuser 17530
	}#class fileAccess end
17531
 
409 liveuser 17532
?>