Subversion Repositories php-qbpwcf

Rev

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

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
/*
4
 
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
239 liveuser 6
    Copyright (C) 2014~2026 MIN ZHI, CHEN
3 liveuser 7
 
8
    This file is part of QBPWCF.
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    it under the terms of the GNU General Public License as published by
12
    the Free Software Foundation, either version 3 of the License, or
13
    (at your option) any later version.
14
 
15
    QBPWCF is distributed in the hope that it will be useful,
16
    but WITHOUT ANY WARRANTY; without even the implied warranty of
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
19
 
20
    You should have received a copy of the GNU General Public License
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
 
23
*/
24
namespace qbpwcf;
25
 
26
/*
27
類別說明:
28
用於改變php執行環境的類別.
29
備註:
30
無.
31
*/
32
class config{
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){
226 liveuser 48
 
3 liveuser 49
		#取得當前執行的函式
50
		$result["function"]=__FUNCTION__;
226 liveuser 51
 
3 liveuser 52
		#設置執行不正常
53
		$result["status"]="false";
226 liveuser 54
 
3 liveuser 55
		#設置執行錯誤
56
		$result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";
226 liveuser 57
 
3 liveuser 58
		#設置所丟入的參數
59
		$result["error"][]=$arguments;
226 liveuser 60
 
3 liveuser 61
		#回傳結果
62
		return $result;
226 liveuser 63
 
3 liveuser 64
		}#function __call end
226 liveuser 65
 
3 liveuser 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){
226 liveuser 80
 
3 liveuser 81
		#取得當前執行的函式
82
		$result["function"]=__FUNCTION__;
226 liveuser 83
 
3 liveuser 84
		#設置執行不正常
85
		$result["status"]="false";
226 liveuser 86
 
3 liveuser 87
		#設置執行錯誤
88
		$result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";
226 liveuser 89
 
3 liveuser 90
		#設置所丟入的參數
91
		$result["error"][]=$arguments;
226 liveuser 92
 
3 liveuser 93
		#回傳結果
94
		return $result;
226 liveuser 95
 
3 liveuser 96
		}#function __callStatic end
97
 
98
	/*
99
	#函式說明:
100
	#延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.
101
	#回傳結果:
102
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
103
	#$result["error"],錯誤訊息陣列.
104
	#$result["function"],當前執行的函數名稱.
105
	#必填參數:
106
	#$conf["sec"],整數,要延長多少執行時間,單位爲秒
107
	$conf["sec"]=30;
108
	#可省略參數:
109
	#無.
110
	#備註:
111
	#無.
112
	#參考資料:
113
	#http://php.net/manual/en/function.set-time-limit.php
114
	*/
115
	public static function delayRunTimeExectionMax(&$conf){
226 liveuser 116
 
3 liveuser 117
		#初始化要回傳的內容
118
		$result=array();
226 liveuser 119
 
3 liveuser 120
		#記錄當前執行的函數名稱
121
		$result["function"]=__FUNCTION__;
122
 
123
		#如果 $conf 不為陣列
124
		if(gettype($conf)!="array"){
226 liveuser 125
 
3 liveuser 126
			#設置執行失敗
127
			$result["status"]="false";
226 liveuser 128
 
3 liveuser 129
			#設置執行錯誤訊息
130
			$result["error"][]="\$conf變數須為陣列形態";
131
 
132
			#如果傳入的參數為 null
133
			if($conf==null){
226 liveuser 134
 
3 liveuser 135
				#設置執行錯誤訊息
136
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 137
 
3 liveuser 138
				}#if end
139
 
140
			#回傳結果
141
			return $result;
226 liveuser 142
 
3 liveuser 143
			}#if end
144
 
145
		#檢查參數
146
		#函式說明:
147
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
148
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
149
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
150
		#$result["function"],當前執行的函式名稱.
151
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
152
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
153
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
154
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
155
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
156
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
157
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
158
		#必填寫的參數:
159
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
160
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
161
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
162
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sec");
226 liveuser 163
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 164
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("integer");
165
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
166
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
167
		#可以省略的參數:
168
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
169
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
170
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
171
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("asc");
226 liveuser 172
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 173
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
174
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
175
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
176
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
177
		#$conf["arrayCountEqualCheck"][]=array();
178
		#參考資料來源:
179
		#array_keys=>http://php.net/manual/en/function.array-keys.php
180
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
181
		unset($conf["variableCheck::checkArguments"]);
182
 
183
		#如果檢查參數失敗
184
		if($checkArguments["status"]=="false"){
226 liveuser 185
 
3 liveuser 186
			#設置執行失敗
187
			$result["status"]="false";
226 liveuser 188
 
3 liveuser 189
			#設置執行錯誤訊息
190
			$result["error"]=$checkArguments;
191
 
192
			#回傳結果
193
			return $result;
226 liveuser 194
 
3 liveuser 195
			}#if end
226 liveuser 196
 
3 liveuser 197
		#如果檢查不通過
198
		if($checkArguments["passed"]=="false"){
226 liveuser 199
 
3 liveuser 200
			#設置執行失敗
201
			$result["status"]="false";
226 liveuser 202
 
3 liveuser 203
			#設置執行錯誤訊息
204
			$result["error"]=$checkArguments;
205
 
206
			#回傳結果
207
			return $result;
226 liveuser 208
 
3 liveuser 209
			}#if end
226 liveuser 210
 
3 liveuser 211
		#初始化執行時間爲0,然後再延長$conf["sec"] 秒
212
		$setupResult=set_time_limit($conf["sec"]);
226 liveuser 213
 
3 liveuser 214
		#如果爲 FALSE
215
		if($setupResult==FALSE){
226 liveuser 216
 
3 liveuser 217
			#設置執行不正常
218
			$result["status"]="false";
226 liveuser 219
 
3 liveuser 220
			#設置執行錯誤訊息
221
			$result["error"]="初始與重置執行時間上限失敗";
226 liveuser 222
 
3 liveuser 223
			#回傳結果
224
			return $result;
226 liveuser 225
 
3 liveuser 226
			}#if end
226 liveuser 227
 
3 liveuser 228
		#執行到這邊代表執行正常
229
		$result["status"]="true";
226 liveuser 230
 
3 liveuser 231
		#回傳結果
232
		return $result;
226 liveuser 233
 
3 liveuser 234
		}#function delayRunTimeExectionMax end
226 liveuser 235
 
3 liveuser 236
	/*
237
	#函式說明:
238
	#顯示目前的php設定值
239
	#回傳的結果:
240
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
241
	#$result["error"],錯誤訊息陣列.
242
	#$result["function"],當前執行的函數名稱.
243
	#$result["content"],常用的設定值的內容、也可指定想要看的設定值內容.
244
	#必填參數:
245
	#無.
246
	#可省略參數:
247
	#$conf["settingsName"],字串陣列,自己想要看的設定值內容,預設為array("display_errors","upload_max_filesize","post_max_size","output_buffering","session.auto_start","memory_limit").
248
	#$conf["settingsName"]=array();
249
	#$conf["showAll"],字串,是否要取得所有設定,"true"代表要,會覆寫$conf["settingsName"]的設定,"false"代表不要,預設為"fale".
250
	#$conf["showAll"]="";
251
	#參考資料:
252
	#http://www.php.net/manual/en/function.ini-get.php
253
	#http://www.php.net/manual/en/function.ini-get-all.php
254
	#備註:
255
	#無.
256
	*/
257
	public static function showSettings(&$conf){
226 liveuser 258
 
3 liveuser 259
		#初始化要回傳的內容
260
		$result=array();
226 liveuser 261
 
3 liveuser 262
		#記錄當前執行的函數名稱
263
		$result["function"]=__FUNCTION__;
264
 
265
		#如果 $conf 不為陣列
266
		if(gettype($conf)!="array"){
226 liveuser 267
 
3 liveuser 268
			#設置執行失敗
269
			$result["status"]="false";
226 liveuser 270
 
3 liveuser 271
			#設置執行錯誤訊息
272
			$result["error"][]="\$conf變數須為陣列形態";
273
 
274
			#如果傳入的參數為 null
275
			if($conf==null){
226 liveuser 276
 
3 liveuser 277
				#設置執行錯誤訊息
278
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 279
 
3 liveuser 280
				}#if end
281
 
282
			#回傳結果
283
			return $result;
226 liveuser 284
 
3 liveuser 285
			}#if end
286
 
287
		#檢查參數
288
		#函式說明:
289
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
290
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
291
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
292
		#$result["function"],當前執行的函式名稱.
293
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
294
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
295
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
296
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
297
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
298
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
299
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
300
		#必填寫的參數:
301
		#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
302
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
303
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
304
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("default");
226 liveuser 305
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 306
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
307
		#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
308
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
309
		#可以省略的參數:
310
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
311
		$conf["variableCheck::checkArguments"]["variableCheck::checkArguments"]["canBeEmptyString"]="false";
312
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
313
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("settingsName","showAll");
226 liveuser 314
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 315
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");
316
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
317
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array("display_errors","upload_max_filesize","post_max_size","output_buffering","session.auto_start","memory_limit"),"false");
318
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
319
		#$conf["arrayCountEqualCheck"][]=array();
320
		#參考資料來源:
321
		#array_keys=>http://php.net/manual/en/function.array-keys.php
322
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
323
		unset($conf["variableCheck::checkArguments"]);
324
 
325
		#如果檢查參數失敗
326
		if($checkArguments["status"]=="false"){
226 liveuser 327
 
3 liveuser 328
			#設置執行失敗
329
			$result["status"]="false";
226 liveuser 330
 
3 liveuser 331
			#設置執行錯誤訊息
332
			$result["error"]=$checkArguments;
333
 
334
			#回傳結果
335
			return $result;
226 liveuser 336
 
3 liveuser 337
			}#if end
226 liveuser 338
 
3 liveuser 339
		#如果檢查不通過
340
		if($checkArguments["passed"]=="false"){
226 liveuser 341
 
3 liveuser 342
			#設置執行失敗
343
			$result["status"]="false";
226 liveuser 344
 
3 liveuser 345
			#設置執行錯誤訊息
346
			$result["error"]=$checkArguments;
347
 
348
			#回傳結果
349
			return $result;
226 liveuser 350
 
3 liveuser 351
			}#if end
226 liveuser 352
 
3 liveuser 353
		#如果要顯示所有設定
354
		if($conf["showAll"]==="true"){
226 liveuser 355
 
3 liveuser 356
			#取得設定值
357
			$config=ini_get_all();
226 liveuser 358
 
3 liveuser 359
			#如果取得設定值失敗
360
			if($config==FALSE){
226 liveuser 361
 
3 liveuser 362
				#設置執行不正常
363
				$result["status"]="true";
226 liveuser 364
 
3 liveuser 365
				#設置錯誤訊息
226 liveuser 366
				$result["error"][]="取得所有設定值失敗";
367
 
3 liveuser 368
				#回傳結果
369
				return $result;
226 liveuser 370
 
3 liveuser 371
				}#if end
226 liveuser 372
 
3 liveuser 373
			#反之
374
			else{
226 liveuser 375
 
3 liveuser 376
				#取得設定值
377
				$result["content"]=&$config;
226 liveuser 378
 
379
				}#else end
380
 
3 liveuser 381
			}#if end
226 liveuser 382
 
3 liveuser 383
		#反之
384
		else{
226 liveuser 385
 
3 liveuser 386
			#針對每個要顯示的設定值
387
			foreach($conf["settingsName"] as $key=>$value){
226 liveuser 388
 
3 liveuser 389
				#檢查設定值
390
				$config=ini_get($value);
226 liveuser 391
 
3 liveuser 392
				#如果取得設定值失敗
393
				if($config==FALSE){
226 liveuser 394
 
3 liveuser 395
					#設置執行不正常
396
					$result["status"]="true";
226 liveuser 397
 
3 liveuser 398
					#設置錯誤訊息
226 liveuser 399
					$result["error"][]="參數「".$value."」不存在";
400
 
3 liveuser 401
					#回傳結果
402
					return $result;
226 liveuser 403
 
3 liveuser 404
					}#if end
226 liveuser 405
 
3 liveuser 406
				#反之
407
				else{
226 liveuser 408
 
3 liveuser 409
					#取得設定值
410
					$result["content"][$value]=$config;
226 liveuser 411
 
3 liveuser 412
					}#else end
226 liveuser 413
 
3 liveuser 414
				}#foreach end
226 liveuser 415
 
416
			}#else
417
 
3 liveuser 418
		#設置執行正常
419
		$result["status"]="true";
226 liveuser 420
 
3 liveuser 421
		#回傳結果
422
		return $result;
226 liveuser 423
 
3 liveuser 424
		}#function showSettings end
226 liveuser 425
 
426
	/*
3 liveuser 427
	#函式說明:
428
	#將php設定檔常用的設定進行調整使之變成適用於開發模式、釋出模式、或自訂要調整哪些設定值
429
	#回傳結果:
430
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
431
	#$result["error"],錯誤訊息陣列.
432
	#$result["function"],當前執行的函數名稱.
433
	#必填參數:
434
	#$conf["mode"],參數設定的模式,"release"代表是指共一般使用所需;"develop"代表是在開發狀態下所需;"custom"代表自訂參數設定內容
435
	$conf["mode"]="release";
436
	#可省略參數:
437
	#$conf["customSettings"],要自訂的參數與其數值,例如array("display_errors=On").
438
	#$conf["customSettings"]=array();
439
	#參考資料:
440
	#ini_set=>http://www.php.net/manual/en/function.ini-set.php
441
	#各個參數適用的修改方式=>http://www.php.net/manual/en/ini.list.php
442
	#各個參數適用的修改方式的解說=>http://hi.baidu.com/richardali/item/d28104083c70c638a2332a60
443
	#備註:
444
	#使用該函式後,網頁會無法顯示。
445
	*/
446
	public static function changeSettings(&$conf){
226 liveuser 447
 
3 liveuser 448
		#初始化要回傳的結果
449
		$result=array();
450
 
451
		#儲存當前執行的函數
452
		$result["function"]=__FUNCTION__;
453
 
454
		#如果 $conf 不為陣列
455
		if(gettype($conf)!="array"){
226 liveuser 456
 
3 liveuser 457
			#設置執行失敗
458
			$result["status"]="false";
226 liveuser 459
 
3 liveuser 460
			#設置執行錯誤訊息
461
			$result["error"][]="\$conf變數須為陣列形態";
462
 
463
			#如果傳入的參數為 null
464
			if($conf==null){
226 liveuser 465
 
3 liveuser 466
				#設置執行錯誤訊息
467
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 468
 
3 liveuser 469
				}#if end
470
 
471
			#回傳結果
472
			return $result;
226 liveuser 473
 
3 liveuser 474
			}#if end
226 liveuser 475
 
3 liveuser 476
		#檢查參數
477
		#函式說明:
478
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
479
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
480
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
481
		#$result["function"],當前執行的函式名稱.
482
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
483
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
484
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
485
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
486
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
487
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
488
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
489
		#必填寫的參數:
490
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
491
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
492
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
493
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mode");
226 liveuser 494
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 495
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
496
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
497
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
498
		#可以省略的參數:
499
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
500
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
501
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
502
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("customSettings");
226 liveuser 503
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 504
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
505
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
506
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);
507
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
508
		#$conf["arrayCountEqualCheck"][]=array();
509
		#參考資料來源:
510
		#array_keys=>http://php.net/manual/en/function.array-keys.php
511
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
512
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 513
 
3 liveuser 514
		#如果檢查失敗
515
		if($checkArguments["status"]=="false"){
226 liveuser 516
 
3 liveuser 517
			#設置錯誤識別
518
			$result["status"]="false";
226 liveuser 519
 
3 liveuser 520
			#設置錯誤訊息
521
			$result["error"]=$checkArguments;
226 liveuser 522
 
3 liveuser 523
			#回傳結果
524
			return $result;
226 liveuser 525
 
3 liveuser 526
			}#if end
226 liveuser 527
 
3 liveuser 528
		#如果檢查不通過
529
		if($checkArguments["passed"]=="false"){
226 liveuser 530
 
3 liveuser 531
			#設置錯誤識別
532
			$result["status"]="false";
226 liveuser 533
 
3 liveuser 534
			#設置錯誤訊息
535
			$result["error"]=$checkArguments;
226 liveuser 536
 
3 liveuser 537
			#回傳結果
538
			return $result;
226 liveuser 539
 
3 liveuser 540
			}#if end
226 liveuser 541
 
3 liveuser 542
		#依據模式來進行設定
543
		switch($conf["mode"]){
226 liveuser 544
 
3 liveuser 545
			#如果是給大家正式使用的狀況
546
			case "release":
226 liveuser 547
 
3 liveuser 548
				#設置設定值
226 liveuser 549
 
3 liveuser 550
				#關閉顯示錯誤訊息
551
				$conf["customSettings"][]="display_errors=Off";
396 liveuser 552
 
3 liveuser 553
				#初始化計數為0
554
				$count=0;
226 liveuser 555
 
3 liveuser 556
				#針對每個 $conf["customSettings"]
557
				foreach($conf["customSettings"] as $configStr){
226 liveuser 558
 
3 liveuser 559
					#用 "=" 分割設定字串
560
					#函式說明:
561
					#將固定格式的字串分開,並回傳分開的結果。
562
					#回傳的參數:
563
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
564
					#$result["error"],錯誤訊息陣列
565
					#$result["function"],當前執行的函數名稱.
566
					#$result["oriStr"],要分割的原始字串內容
567
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
568
					#$result["dataCounts"],爲總共分成幾段
569
					#必填參數:
570
					$conf["stringProcess::spiltString"]["stringIn"]=$configStr;#要處理的字串。
571
					$conf["stringProcess::spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
572
					#備註:
573
					#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
574
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
575
					unset($conf["stringProcess::spiltString"]);
226 liveuser 576
 
3 liveuser 577
					#如果分割設定值字串失敗
578
					if($spiltString["status"]=="false"){
226 liveuser 579
 
3 liveuser 580
						#設置錯誤識別
581
						$result["status"]="false";
226 liveuser 582
 
3 liveuser 583
						#設置錯誤訊息
584
						$result["error"]=$spiltString;
226 liveuser 585
 
3 liveuser 586
						#回傳結果
587
						return $result;
226 liveuser 588
 
3 liveuser 589
						}#if end
226 liveuser 590
 
3 liveuser 591
					#如果只有一段內容
592
					if($spiltString["dataCounts"]=="1"){
226 liveuser 593
 
3 liveuser 594
						#設置錯誤識別
595
						$result["status"]="false";
226 liveuser 596
 
3 liveuser 597
						#設置錯誤訊息
598
						$result["error"][]="設定值字串「".$configStr."」必須要用「=」來間隔設定屬性與其數值";
226 liveuser 599
 
3 liveuser 600
						#回傳結果
601
						return $result;
226 liveuser 602
 
3 liveuser 603
						}#if end
226 liveuser 604
 
3 liveuser 605
					#設定暫時的設定值
606
					$oldConfigValue=ini_set($spiltString["dataArray"][0],$spiltString["dataArray"][1]);
226 liveuser 607
 
3 liveuser 608
					#如果設定失敗
609
					if($oldConfigValue===false){
226 liveuser 610
 
3 liveuser 611
						#設置錯誤識別
612
						$result["status"]="false";
226 liveuser 613
 
3 liveuser 614
						#設置錯誤訊息
615
						$result["error"][]="將屬性「".$spiltString["dataArray"][0]."」設定為「".$spiltString["dataArray"][1]."」失敗";
226 liveuser 616
 
3 liveuser 617
						#回傳結果
618
						return $result;
226 liveuser 619
 
3 liveuser 620
						}#if end
226 liveuser 621
 
3 liveuser 622
					#反之儲存舊的永久設地數值
623
					else{
226 liveuser 624
 
3 liveuser 625
						#取得舊的設定值
626
						$result["config"][$count]["oldValue"]=$spiltString["dataArray"][0]."=".$oldConfigValue;
627
						$result["config"][$spiltString["dataArray"][0]]["oldValue"]=$spiltString["dataArray"][0]."=".$oldConfigValue;
226 liveuser 628
 
3 liveuser 629
						#取得新的設定值
630
						$result["config"][$count]["newValue"]=$spiltString["dataArray"][0]."=".$spiltString["dataArray"][1];
631
						$result["config"][$spiltString["dataArray"][0]]["newValue"]=$spiltString["dataArray"][0]."=".$spiltString["dataArray"][1];
226 liveuser 632
 
3 liveuser 633
						#計數加1
634
						$count++;
226 liveuser 635
 
3 liveuser 636
						}#else end
226 liveuser 637
 
3 liveuser 638
					}#foreach end
226 liveuser 639
 
3 liveuser 640
				#跳出switch
641
				break;
226 liveuser 642
 
3 liveuser 643
			#如果是開發狀態下
644
			case "develop";
226 liveuser 645
 
3 liveuser 646
				#設置設定值
226 liveuser 647
 
406 liveuser 648
				#設置 Show all errors, warnings and notices including coding standards.
649
				$conf["customSettings"][]="error_reporting=E_ALL";
650
 
3 liveuser 651
				#開啟顯示錯誤訊息
652
				$conf["customSettings"][]="display_errors=On";
226 liveuser 653
 
3 liveuser 654
				#關閉使用記憶體的上限
655
				$conf["customSettings"][]="memory_limit=-1";
226 liveuser 656
 
3 liveuser 657
				#關閉php script執行的時間上限
658
				$conf["customSettings"][]="max_execution_time=0";
226 liveuser 659
 
3 liveuser 660
				#初始化計數為0
661
				$count=0;
226 liveuser 662
 
3 liveuser 663
				#針對每個 $conf["customSettings"]
664
				foreach($conf["customSettings"] as $configStr){
226 liveuser 665
 
3 liveuser 666
					#用 "=" 分割設定字串
667
					#函式說明:
668
					#將固定格式的字串分開,並回傳分開的結果。
669
					#回傳的參數:
670
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
671
					#$result["error"],錯誤訊息陣列
672
					#$result["function"],當前執行的函數名稱.
673
					#$result["oriStr"],要分割的原始字串內容
674
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
675
					#$result["dataCounts"],爲總共分成幾段
676
					#必填參數:
677
					$conf["stringProcess::spiltString"]["stringIn"]=$configStr;#要處理的字串。
678
					$conf["stringProcess::spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
679
					#備註:
680
					#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
681
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
682
					unset($conf["stringProcess::spiltString"]);
226 liveuser 683
 
3 liveuser 684
					#如果分割設定值字串失敗
685
					if($spiltString["status"]=="false"){
226 liveuser 686
 
3 liveuser 687
						#設置錯誤識別
688
						$result["status"]="false";
226 liveuser 689
 
3 liveuser 690
						#設置錯誤訊息
691
						$result["error"]=$spiltString;
226 liveuser 692
 
3 liveuser 693
						#回傳結果
694
						return $result;
226 liveuser 695
 
3 liveuser 696
						}#if end
226 liveuser 697
 
3 liveuser 698
					#如果只有一段內容
699
					if($spiltString["dataCounts"]=="1"){
226 liveuser 700
 
3 liveuser 701
						#設置錯誤識別
702
						$result["status"]="false";
226 liveuser 703
 
3 liveuser 704
						#設置錯誤訊息
705
						$result["error"][]="設定值字串「".$configStr."」必須要用「=」來間隔設定屬性與其數值";
226 liveuser 706
 
3 liveuser 707
						#回傳結果
708
						return $result;
226 liveuser 709
 
3 liveuser 710
						}#if end
226 liveuser 711
 
3 liveuser 712
					#設定暫時的設定值
713
					$oldConfigValue=ini_set($spiltString["dataArray"][0],$spiltString["dataArray"][1]);
226 liveuser 714
 
3 liveuser 715
					#如果設定失敗
716
					if($oldConfigValue===false){
226 liveuser 717
 
3 liveuser 718
						#設置錯誤識別
719
						$result["status"]="false";
226 liveuser 720
 
3 liveuser 721
						#設置錯誤訊息
722
						$result["error"][]="將屬性「".$spiltString["dataArray"][0]."」設定為「".$spiltString["dataArray"][1]."」失敗";
226 liveuser 723
 
3 liveuser 724
						#回傳結果
725
						return $result;
226 liveuser 726
 
3 liveuser 727
						}#if end
226 liveuser 728
 
3 liveuser 729
					#反之儲存舊的永久設地數值
730
					else{
226 liveuser 731
 
3 liveuser 732
						#取得舊的設定值
733
						$result["config"][$count]["oldValue"]=$spiltString["dataArray"][0]."=".$oldConfigValue;
734
						$result["config"][$spiltString["dataArray"][0]]["oldValue"]=$spiltString["dataArray"][0]."=".$oldConfigValue;
226 liveuser 735
 
3 liveuser 736
						#取得新的設定值
737
						$result["config"][$count]["newValue"]=$spiltString["dataArray"][0]."=".$spiltString["dataArray"][1];
738
						$result["config"][$spiltString["dataArray"][0]]["newValue"]=$spiltString["dataArray"][0]."=".$spiltString["dataArray"][1];
226 liveuser 739
 
3 liveuser 740
						#計數加1
741
						$count++;
226 liveuser 742
 
3 liveuser 743
						}#else end
226 liveuser 744
 
745
					}#foreach end
746
 
3 liveuser 747
				#跳出switch
748
				break;
226 liveuser 749
 
3 liveuser 750
			#如果是自訂設定值的狀態
751
			case "custom":
226 liveuser 752
 
3 liveuser 753
				#初始化計數為0
754
				$count=0;
226 liveuser 755
 
3 liveuser 756
				#針對每個 $conf["customSettings"]
757
				foreach($conf["customSettings"] as $configStr){
226 liveuser 758
 
3 liveuser 759
					#用 "=" 分割設定字串
760
					#函式說明:
761
					#將固定格式的字串分開,並回傳分開的結果。
762
					#回傳的參數:
763
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
764
					#$result["error"],錯誤訊息陣列
765
					#$result["function"],當前執行的函數名稱.
766
					#$result["oriStr"],要分割的原始字串內容
767
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
768
					#$result["dataCounts"],爲總共分成幾段
769
					#必填參數:
770
					$conf["stringProcess::spiltString"]["stringIn"]=$configStr;#要處理的字串。
771
					$conf["stringProcess::spiltString"]["spiltSymbol"]="=";#爲以哪個符號作爲分割
772
					#備註:
773
					#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
774
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
775
					unset($conf["stringProcess::spiltString"]);
226 liveuser 776
 
3 liveuser 777
					#如果分割設定值字串失敗
778
					if($spiltString["status"]=="false"){
226 liveuser 779
 
3 liveuser 780
						#設置錯誤識別
781
						$result["status"]="false";
226 liveuser 782
 
3 liveuser 783
						#設置錯誤訊息
784
						$result["error"]=$spiltString;
226 liveuser 785
 
3 liveuser 786
						#回傳結果
787
						return $result;
226 liveuser 788
 
3 liveuser 789
						}#if end
226 liveuser 790
 
3 liveuser 791
					#如果只有一段內容
792
					if($spiltString["dataCounts"]=="1"){
226 liveuser 793
 
3 liveuser 794
						#設置錯誤識別
795
						$result["status"]="false";
226 liveuser 796
 
3 liveuser 797
						#設置錯誤訊息
798
						$result["error"][]="設定值字串「".$configStr."」必須要用「=」來間隔設定屬性與其數值";
226 liveuser 799
 
3 liveuser 800
						#回傳結果
801
						return $result;
226 liveuser 802
 
3 liveuser 803
						}#if end
226 liveuser 804
 
3 liveuser 805
					#設定暫時的設定值
806
					$oldConfigValue=ini_set($spiltString["dataArray"][0],$spiltString["dataArray"][1]);
226 liveuser 807
 
3 liveuser 808
					#如果設定失敗
809
					if($oldConfigValue===false){
226 liveuser 810
 
3 liveuser 811
						#設置錯誤識別
812
						$result["status"]="false";
226 liveuser 813
 
3 liveuser 814
						#設置錯誤訊息
815
						$result["error"][]="將屬性「".$spiltString["dataArray"][0]."」設定為「".$spiltString["dataArray"][1]."」失敗";
226 liveuser 816
 
3 liveuser 817
						#回傳結果
818
						return $result;
226 liveuser 819
 
3 liveuser 820
						}#if end
226 liveuser 821
 
3 liveuser 822
					#反之儲存舊的永久設地數值
823
					else{
226 liveuser 824
 
3 liveuser 825
						#取得舊的設定值
826
						$result["config"][$count]["oldValue"]=$spiltString["dataArray"][0]."=".$oldConfigValue;
827
						$result["config"][$spiltString["dataArray"][0]]["oldValue"]=$spiltString["dataArray"][0]."=".$oldConfigValue;
226 liveuser 828
 
3 liveuser 829
						#取得新的設定值
830
						$result["config"][$count]["newValue"]=$spiltString["dataArray"][0]."=".$spiltString["dataArray"][1];
831
						$result["config"][$spiltString["dataArray"][0]]["newValue"]=$spiltString["dataArray"][0]."=".$spiltString["dataArray"][1];
226 liveuser 832
 
3 liveuser 833
						#計數加1
834
						$count++;
226 liveuser 835
 
3 liveuser 836
						}#else end
226 liveuser 837
 
3 liveuser 838
					}#foreach end
226 liveuser 839
 
3 liveuser 840
				#跳出switch
841
				break;
226 liveuser 842
 
843
			#如果不是以上狀況,那就是參數錯誤
3 liveuser 844
			default :
226 liveuser 845
 
3 liveuser 846
				#設置錯誤訊息
847
				$result["error"][]="\$conf[\"mode\"]模式設定錯誤";
226 liveuser 848
 
3 liveuser 849
				#設置執行失敗
850
				$result["status"]="false";
226 liveuser 851
 
3 liveuser 852
				#回傳結果
853
				return $result;
226 liveuser 854
 
3 liveuser 855
			}#switch end
226 liveuser 856
 
3 liveuser 857
		#設置執行正常
858
		$result["status"]="true";
226 liveuser 859
 
3 liveuser 860
		#回傳結果
861
		return $result;
226 liveuser 862
 
3 liveuser 863
		}#funciton changeSettings end
226 liveuser 864
 
3 liveuser 865
	/*
866
	#函式說明:
867
	#依照條件增加記憶體的上限.
868
	#回傳結果:
869
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
870
	#$result["error"],錯誤訊息陣列.
871
	#$result["function"],當前執行的函數名稱.
872
	#$result["argu"],使用的參數.
873
	#$result["content"],提示訊息.
874
	#$result["stdout"],若有serverCache參數,則會回傳該項目,代表執行程式過程中的標準輸出.
875
	#$result["stderr"],若有serverCache參數,則會回傳該項目,代表執行程式過程中的非標準輸出.
876
	#$result["cache"],若有serverCache參數,則會回傳該項目,代表執行本函式程式的回傳結果.
877
	#必填參數:
878
	#無.
879
	#可省略參數:
880
	#$conf["stepAmount"],一次要增加多少上限,預設為當前環境的上限,單位位M(Mega Bytes).
881
	#$conf["stepAmount"]="";
882
	#$conf["whenAviMemLessThan"],字串整數,什麼時候要增加記憶體,預設為可用的記憶體不超過10%時,亦即10;範圍為1~50,亦即範圍為1~50%.
883
	#$conf["whenAviMemLessThan"]="10"
884
	#$conf["client"],陣列,若本函式作為 sock::unixDomainSockServer 的 funcToRunWhenIdle 參數,則此為所有用戶的資訊.
885
	#$conf["client"]=;
886
	#$conf["serverCache"],陣列,若本函式作為 sock::unixDomainSockServer 的 funcToRunWhenIdle 參數,則此為
887
	#$conf["serverCache"]=;
888
	#參考資料:
889
	#https://www.php.net/manual/en/function.memory-get-usage.php
890
	#https://www.php.net/manual/en/ini.core.php#ini.memory-limit
891
	#https://www.php.net/manual/en/function.ini-set.php
892
	#備註:
893
	#無.
894
	*/
895
	public static function autoAddMemory(&$conf=array()){
226 liveuser 896
 
3 liveuser 897
		#初始化要回傳的結果
898
		$result=array();
899
 
900
		#取得當前執行的函數名稱
901
		$result["function"]=__FUNCTION__;
226 liveuser 902
 
3 liveuser 903
		#取得參數
904
		$result["argu"]=$conf;
905
 
906
		#如果 $conf 不為陣列
907
		if(gettype($conf)!="array"){
908
 
909
			#設置執行失敗
910
			$result["status"]="false";
911
 
912
			#設置執行錯誤訊息
913
			$result["error"][]="\$conf變數須為陣列形態";
914
 
915
			#如果傳入的參數為 null
916
			if(is_null($conf)){
917
 
918
				#設置執行錯誤訊息
919
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
920
 
921
				}#if end
922
 
923
			#回傳結果
924
			return $result;
925
 
926
			}#if end
226 liveuser 927
 
3 liveuser 928
		#函式說明:
929
		#顯示目前的php設定值
930
		#回傳的結果:
931
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
932
		#$result["error"],錯誤訊息陣列.
933
		#$result["function"],當前執行的函數名稱.
934
		#$result["content"],常用的設定值的內容、也可指定想要看的設定值內容.
935
		#必填參數:
936
		#無.
937
		#可省略參數:
938
		#$conf["settingsName"],字串陣列,自己想要看的設定值內容,預設為array("display_errors","upload_max_filesize","post_max_size","output_buffering","session.auto_start","memory_limit").
939
		$conf["config::showSettings"]["settingsName"]=array("memory_limit");
940
		#$conf["showAll"],字串,是否要取得所有設定,"true"代表要,會覆寫$conf["settingsName"]的設定,"false"代表不要,預設為"fale".
941
		#$conf["showAll"]="";
942
		#參考資料:
943
		#http://www.php.net/manual/en/function.ini-get.php
944
		#http://www.php.net/manual/en/function.ini-get-all.php
945
		#備註:
946
		#無.
947
		$showSettings=config::showSettings($conf["config::showSettings"]);
948
		unset($conf["config::showSettings"]);
226 liveuser 949
 
3 liveuser 950
		#如果執行失敗
951
		if($showSettings["status"]==="false"){
226 liveuser 952
 
3 liveuser 953
			#設置執行失敗
954
			$result["status"]="false";
226 liveuser 955
 
3 liveuser 956
			#設置錯誤資訊
957
			$result["error"]=$showSettings;
226 liveuser 958
 
3 liveuser 959
			#回傳結果
960
			return $result;
226 liveuser 961
 
3 liveuser 962
			}#if end
226 liveuser 963
 
3 liveuser 964
		#取得系統設定的php記憶體上限
965
		$phpMaxMemInConfig=$showSettings["content"]["memory_limit"];
226 liveuser 966
 
3 liveuser 967
		#如果單位是M
968
		#函式說明:
969
		#取得符合特定字首與字尾的字串
970
		#回傳結果:
971
		#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
972
		#$result["function"],當前執行的函數名稱.
973
		#$result["error"],錯誤訊息陣列.
974
		#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
975
		#$result["content"],符合條件的字串,去掉字首字尾後的結果.
976
		#$result["returnString"],爲符合字首字、尾條件的字串內容。
977
		#$result["argu"],使用的參數.
978
		#必填參數:
979
		#$conf["checkString"],字串,要檢查的字串.
980
		$conf["stringProcess::getMeetConditionsString"]["checkString"]=$phpMaxMemInConfig;
981
		#可省略參數:
982
		#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
983
		#$conf["stringProcess::getMeetConditionsString"]["frontWord"]="";
984
		#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
985
		$conf["stringProcess::getMeetConditionsString"]["tailWord"]="M";
986
		#參考資料:
987
		#str_spilt(),可以將字串依照字母分割成一個個陣列字串。
988
		#備註:
989
		#無.
990
		$getMeetConditionsString=search::getMeetConditionsString($conf["stringProcess::getMeetConditionsString"]);
991
		unset($conf["stringProcess::getMeetConditionsString"]);
226 liveuser 992
 
3 liveuser 993
		#如果執行失敗
994
		if($getMeetConditionsString["status"]==="false"){
226 liveuser 995
 
3 liveuser 996
			#設置執行失敗
997
			$result["status"]="false";
226 liveuser 998
 
3 liveuser 999
			#設置錯誤資訊
1000
			$result["error"]=$getMeetConditionsString;
226 liveuser 1001
 
3 liveuser 1002
			#回傳結果
1003
			return $result;
226 liveuser 1004
 
3 liveuser 1005
			}#if end
226 liveuser 1006
 
3 liveuser 1007
		#如果是M結尾
1008
		if($getMeetConditionsString["founded"]==="true"){
226 liveuser 1009
 
3 liveuser 1010
			#轉換為bytes
1011
			$phpMaxMemInConfig=$getMeetConditionsString["content"]*1024*1024;
226 liveuser 1012
 
3 liveuser 1013
			}#if end
226 liveuser 1014
 
3 liveuser 1015
		#函式說明:
1016
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
1017
		#回傳結果:
1018
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1019
		#$result["error"],執行不正常結束的錯訊息陣列.
1020
		#$result["simpleError"],簡單表示的錯誤訊息.
1021
		#$result["function"],當前執行的函式名稱.
1022
		#$result["argu"],設置給予的參數.
1023
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1024
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1025
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1026
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
1027
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
1028
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1029
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1030
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1031
		#必填參數:
1032
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1033
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1034
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1035
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1036
		#可省略參數:
1037
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1038
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("stepAmount");
1039
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
1040
		#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
1041
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1042
		#$conf["canBeEmptyString"]="false";
1043
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
1044
		#$conf["canNotBeEmpty"]=array();
1045
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
1046
		#$conf["canBeEmpty"]=array();
1047
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
1048
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("stepAmount","whenAviMemLessThan");
1049
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1050
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("stepAmount","whenAviMemLessThan","client","serverCache");
1051
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
1052
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","array","array");
1053
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1054
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($phpMaxMemInConfig,"10",null,null);
1055
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
1056
		#$conf["disallowAllSkipableVarIsEmpty"]="";
1057
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
1058
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
1059
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1060
		#$conf["arrayCountEqualCheck"][]=array();
1061
		#參考資料:
1062
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1063
		#備註:
1064
		#無.
1065
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1066
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1067
 
3 liveuser 1068
		#如果執行失敗
1069
		if($checkArguments["status"]==="false"){
226 liveuser 1070
 
3 liveuser 1071
			#設置執行失敗
1072
			$result["status"]="false";
1073
 
1074
			#設置執行錯誤訊息
1075
			$result["error"]=$checkArguments;
226 liveuser 1076
 
3 liveuser 1077
			#回傳結果
1078
			return $result;
226 liveuser 1079
 
3 liveuser 1080
			}#if end
226 liveuser 1081
 
3 liveuser 1082
		#如果檢查不通過
1083
		if($checkArguments["passed"]==="false"){
226 liveuser 1084
 
3 liveuser 1085
			#設置執行失敗
1086
			$result["status"]="false";
1087
 
1088
			#設置執行錯誤訊息
1089
			$result["error"]=$checkArguments;
226 liveuser 1090
 
3 liveuser 1091
			#回傳結果
1092
			return $result;
226 liveuser 1093
 
3 liveuser 1094
			}#if end
226 liveuser 1095
 
3 liveuser 1096
		#如果有 serverCache
1097
		if(isset($conf["serverCache"])){
226 liveuser 1098
 
3 liveuser 1099
			/* debug
226 liveuser 1100
 
3 liveuser 1101
			#函式說明:
1102
			#撰寫log
1103
			#回傳結果:
1104
			#$result["status"],狀態,"true"或"false".
1105
			#$result["error"],錯誤訊息陣列.
1106
			#$result["function"],當前函式的名稱.
1107
			#$result["argu"],使用的參數.
1108
			#$result["content"],要寫入log的內容字串.
1109
			#必填參數:
1110
			#$conf["path"],字串,log檔案的路徑與名稱.
1111
			$conf["logs::record"]["path"]="/tmp/config::autoAddMemory.log";
1112
			#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
1113
			$conf["logs::record"]["content"]=$conf["serverCache"];
1114
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1115
			$conf["logs::record"]["fileArgu"]=__FILE__;
1116
			#可省略參數:
1117
			#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
1118
			#$conf["rewrite"]="false";
1119
			#$conf["returnOnly"],預設為"false",會寫入到log檔案.若為"true"則不會寫入log.
1120
			#$conf["returnOnly"]="true";
1121
			#參考資料:
1122
			#無.
1123
			#備註:
1124
			#無.
1125
			$record=logs::record($conf["logs::record"]);
1126
			unset($conf["logs::record"]);
226 liveuser 1127
 
3 liveuser 1128
			#如果執行失敗
1129
			if($record["status"]==="false"){
226 liveuser 1130
 
3 liveuser 1131
				#設置執行錯誤識別
1132
				$result["status"]="false";
226 liveuser 1133
 
3 liveuser 1134
				#設置執行錯誤
1135
				$result["error"]=$record;
226 liveuser 1136
 
3 liveuser 1137
				#回傳結果
1138
				return $result;
226 liveuser 1139
 
3 liveuser 1140
				}#if end
226 liveuser 1141
 
3 liveuser 1142
			*/
226 liveuser 1143
 
3 liveuser 1144
			#記錄回傳的參考
1145
			#$result["cache"]=&$result;
226 liveuser 1146
 
3 liveuser 1147
			#如果有 clientSide
1148
			if(isset($conf["serverCache"]["clientSide"])){
226 liveuser 1149
 
3 liveuser 1150
				#如果有 addOnProcessFunc
1151
				if(isset($conf["serverCache"]["clientSide"]["addOnProcessFunc"])){
226 liveuser 1152
 
3 liveuser 1153
					#如果有 addOnProcessFuncForUnixDomainSockServerInRunWithAutoAddMemoryDaemon
1154
					if(isset($conf["serverCache"]["clientSide"]["addOnProcessFunc"]["\qbpwcf\sock::addOnProcessFuncForUnixDomainSockServerInRunWithAutoAddMemoryDaemon"])){
226 liveuser 1155
 
3 liveuser 1156
						/* debug
226 liveuser 1157
 
3 liveuser 1158
						#函式說明:
1159
						#撰寫log
1160
						#回傳結果:
1161
						#$result["status"],狀態,"true"或"false".
1162
						#$result["error"],錯誤訊息陣列.
1163
						#$result["function"],當前函式的名稱.
1164
						#$result["argu"],使用的參數.
1165
						#$result["content"],要寫入log的內容字串.
1166
						#必填參數:
1167
						#$conf["path"],字串,log檔案的路徑與名稱.
1168
						$conf["logs::record"]["path"]="/tmp/config::autoAddMemory.log";
1169
						#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
1170
						$conf["logs::record"]["content"]=$conf["serverCache"]["clientSide"]["addOnProcessFunc"]["\qbpwcf\sock::addOnProcessFuncForUnixDomainSockServerInRunWithAutoAddMemoryDaemon"];
1171
						#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1172
						$conf["logs::record"]["fileArgu"]=__FILE__;
1173
						#可省略參數:
1174
						#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
1175
						#$conf["rewrite"]="false";
1176
						#$conf["returnOnly"],預設為"false",會寫入到log檔案.若為"true"則不會寫入log.
1177
						#$conf["returnOnly"]="true";
1178
						#參考資料:
1179
						#無.
1180
						#備註:
1181
						#無.
1182
						$record=logs::record($conf["logs::record"]);
1183
						unset($conf["logs::record"]);
226 liveuser 1184
 
3 liveuser 1185
						#如果執行失敗
1186
						if($record["status"]==="false"){
226 liveuser 1187
 
3 liveuser 1188
							#設置執行錯誤識別
1189
							$result["status"]="false";
226 liveuser 1190
 
3 liveuser 1191
							#設置執行錯誤
1192
							$result["error"]=$record;
226 liveuser 1193
 
3 liveuser 1194
							#回傳結果
1195
							return $result;
226 liveuser 1196
 
3 liveuser 1197
							}#if end
226 liveuser 1198
 
3 liveuser 1199
						*/
226 liveuser 1200
 
3 liveuser 1201
						#如果有程式在背景執行
1202
						if(isset($conf["serverCache"]["clientSide"]["addOnProcessFunc"]["\qbpwcf\sock::addOnProcessFuncForUnixDomainSockServerInRunWithAutoAddMemoryDaemon"]["content"])){
226 liveuser 1203
 
3 liveuser 1204
							#如果該程序資訊存在
1205
							if(isset($conf["serverCache"]["clientSide"]["addOnProcessFunc"]["\qbpwcf\sock::addOnProcessFuncForUnixDomainSockServerInRunWithAutoAddMemoryDaemon"]["content"][0])){
226 liveuser 1206
 
3 liveuser 1207
								#另存程序變數參考
1208
								$process=&$conf["serverCache"]["clientSide"]["addOnProcessFunc"]["\qbpwcf\sock::addOnProcessFuncForUnixDomainSockServerInRunWithAutoAddMemoryDaemon"]["content"][0];
226 liveuser 1209
 
3 liveuser 1210
								/* debug
226 liveuser 1211
 
3 liveuser 1212
								#函式說明:
1213
								#撰寫log
1214
								#回傳結果:
1215
								#$result["status"],狀態,"true"或"false".
1216
								#$result["error"],錯誤訊息陣列.
1217
								#$result["function"],當前函式的名稱.
1218
								#$result["argu"],使用的參數.
1219
								#$result["content"],要寫入log的內容字串.
1220
								#必填參數:
1221
								#$conf["path"],字串,log檔案的路徑與名稱.
1222
								$conf["logs::record"]["path"]="/tmp/config::autoAddMemory.log";
1223
								#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
1224
								$conf["logs::record"]["content"]=$process;
1225
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1226
								$conf["logs::record"]["fileArgu"]=__FILE__;
1227
								#可省略參數:
1228
								#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
1229
								#$conf["rewrite"]="false";
1230
								#$conf["returnOnly"],預設為"false",會寫入到log檔案.若為"true"則不會寫入log.
1231
								#$conf["returnOnly"]="true";
1232
								#參考資料:
1233
								#無.
1234
								#備註:
1235
								#無.
1236
								$record=logs::record($conf["logs::record"]);
1237
								unset($conf["logs::record"]);
226 liveuser 1238
 
3 liveuser 1239
								#如果執行失敗
1240
								if($record["status"]==="false"){
226 liveuser 1241
 
3 liveuser 1242
									#設置執行錯誤識別
1243
									$result["status"]="false";
226 liveuser 1244
 
3 liveuser 1245
									#設置執行錯誤
1246
									$result["error"]=$record;
226 liveuser 1247
 
3 liveuser 1248
									#回傳結果
1249
									return $result;
226 liveuser 1250
 
3 liveuser 1251
									}#if end
226 liveuser 1252
 
3 liveuser 1253
								*/
226 liveuser 1254
 
3 liveuser 1255
								#取得標準輸出
1256
								$result["stdout"]=$process["content"];
226 liveuser 1257
 
3 liveuser 1258
								#取得非標準輸出
1259
								$result["error"]=$process["error"];
226 liveuser 1260
 
3 liveuser 1261
								#如果標準輸出是 reource
1262
								if(gettype($process["content"])==="resource"){
226 liveuser 1263
 
3 liveuser 1264
									#取得程式執行過程產生的標準輸出
1265
									$result["stdout"]=stream_get_contents($process["content"]);
226 liveuser 1266
 
3 liveuser 1267
									}#if end
226 liveuser 1268
 
3 liveuser 1269
								#如果非標準輸出是 reource
1270
								if(gettype($process["error"])==="resource"){
226 liveuser 1271
 
3 liveuser 1272
									#取得程式執行過程產生的標準輸出
1273
									$result["error"]=stream_get_contents($process["error"]);
226 liveuser 1274
 
3 liveuser 1275
									}#if end
226 liveuser 1276
 
3 liveuser 1277
								#如果記錄上顯示該程序尚在執行中
1278
								if($process["proc_get_status"]["running"]===true){
226 liveuser 1279
 
3 liveuser 1280
									#嘗試取得該程序的狀態
1281
									$proc_get_status=proc_get_status($process["process"]);
226 liveuser 1282
 
3 liveuser 1283
									#如果已經結束執行
1284
									if($proc_get_status["running"]===false){
226 liveuser 1285
 
3 liveuser 1286
										#設置要結束執行unix domain server
1287
										$result["exit"]="true";
226 liveuser 1288
 
3 liveuser 1289
										#設置執行正常
1290
										$result["status"]="true";
226 liveuser 1291
 
3 liveuser 1292
										}#if end
226 liveuser 1293
 
3 liveuser 1294
									}#if end
226 liveuser 1295
 
3 liveuser 1296
								#反之代表程序已經結束
1297
								else{
226 liveuser 1298
 
3 liveuser 1299
									#設置要結束執行unix domain server
1300
									$result["exit"]="true";
226 liveuser 1301
 
3 liveuser 1302
									#設置執行正常
1303
									$result["status"]="true";
226 liveuser 1304
 
3 liveuser 1305
									}#else end
226 liveuser 1306
 
3 liveuser 1307
								/* debug
226 liveuser 1308
 
3 liveuser 1309
								#函式說明:
1310
								#撰寫log
1311
								#回傳結果:
1312
								#$result["status"],狀態,"true"或"false".
1313
								#$result["error"],錯誤訊息陣列.
1314
								#$result["function"],當前函式的名稱.
1315
								#$result["argu"],使用的參數.
1316
								#$result["content"],要寫入log的內容字串.
1317
								#必填參數:
1318
								#$conf["path"],字串,log檔案的路徑與名稱.
1319
								$conf["logs::record"]["path"]="/tmp/config::autoAddMemory.log";
1320
								#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
1321
								$conf["logs::record"]["content"]=$result;
1322
								#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1323
								$conf["logs::record"]["fileArgu"]=__FILE__;
1324
								#可省略參數:
1325
								#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
1326
								#$conf["rewrite"]="false";
1327
								#$conf["returnOnly"],預設為"false",會寫入到log檔案.若為"true"則不會寫入log.
1328
								#$conf["returnOnly"]="true";
1329
								#參考資料:
1330
								#無.
1331
								#備註:
1332
								#無.
1333
								$record=logs::record($conf["logs::record"]);
1334
								unset($conf["logs::record"]);
226 liveuser 1335
 
3 liveuser 1336
								#如果執行失敗
1337
								if($record["status"]==="false"){
226 liveuser 1338
 
3 liveuser 1339
									#設置執行錯誤識別
1340
									$result["status"]="false";
226 liveuser 1341
 
3 liveuser 1342
									#設置執行錯誤
1343
									$result["error"]=$record;
226 liveuser 1344
 
3 liveuser 1345
									#回傳結果
1346
									return $result;
226 liveuser 1347
 
3 liveuser 1348
									}#if end
226 liveuser 1349
 
3 liveuser 1350
								*/
226 liveuser 1351
 
3 liveuser 1352
								}#if end
226 liveuser 1353
 
3 liveuser 1354
							}#if end
226 liveuser 1355
 
3 liveuser 1356
						}#if end
226 liveuser 1357
 
3 liveuser 1358
					}#if end
226 liveuser 1359
 
3 liveuser 1360
				}#if end
226 liveuser 1361
 
3 liveuser 1362
			}#if end
226 liveuser 1363
 
396 liveuser 1364
		#強制參數 whenAviMemLessThan 為整數
3 liveuser 1365
		$whenAviMemLessThan=(int)($conf["whenAviMemLessThan"]);
226 liveuser 1366
 
3 liveuser 1367
		#如果小於1
1368
		if($whenAviMemLessThan<1){
226 liveuser 1369
 
3 liveuser 1370
			#設置為1
1371
			$whenAviMemLessThan=1;
226 liveuser 1372
 
3 liveuser 1373
			}#if end
226 liveuser 1374
 
3 liveuser 1375
		#如果大於50
1376
		else if($whenAviMemLessThan>50){
226 liveuser 1377
 
3 liveuser 1378
			#設置為50
1379
			$whenAviMemLessThan=50;
226 liveuser 1380
 
3 liveuser 1381
			}#if end
226 liveuser 1382
 
3 liveuser 1383
		#計算需要增加記憶體的門檻
1384
		$condition=$phpMaxMemInConfig*$whenAviMemLessThan/100;
226 liveuser 1385
 
3 liveuser 1386
		#get memeory usage
1387
		$memUsedInBytes=\memory_get_usage();
226 liveuser 1388
 
3 liveuser 1389
		#如果使用的記憶體已經達到門檻
1390
		if($memUsedInBytes>=$condition){
226 liveuser 1391
 
3 liveuser 1392
			#計算新的記憶體上限
1393
			$newMemoryLimit=$phpMaxMemInConfig+$stepAmount;
226 liveuser 1394
 
3 liveuser 1395
			#依照 stepAmount 來增加可用記憶體的上限
1396
			$return=\ini_set("memory_limit",$stepAmount);
226 liveuser 1397
 
3 liveuser 1398
			#如果設置失敗
1399
			if($return===false){
226 liveuser 1400
 
3 liveuser 1401
				#設置執行失敗
1402
				$result["status"]="false";
1403
 
1404
				#設置執行錯誤訊息
1405
				$result["error"][]="加大記憶體上限失敗";
226 liveuser 1406
 
3 liveuser 1407
				#cache
1408
				$result["cache"]=&$result;
226 liveuser 1409
 
3 liveuser 1410
				#回傳結果
1411
				return $result;
226 liveuser 1412
 
3 liveuser 1413
				}#if end
226 liveuser 1414
 
3 liveuser 1415
			#設置正常訊息
1416
			$result["content"]="memeory_limit changed from ".$return." to ".$newMemoryLimit;
226 liveuser 1417
 
3 liveuser 1418
			}#if end
226 liveuser 1419
 
3 liveuser 1420
		#提示未改變
226 liveuser 1421
		$result["content"]="memeory_limit not changed";
1422
 
3 liveuser 1423
		#設置執行正常
1424
		$result["status"]="true";
226 liveuser 1425
 
3 liveuser 1426
		#cache
1427
		$result["cache"]=&$result;
226 liveuser 1428
 
3 liveuser 1429
		#回傳結果
1430
		return $result;
226 liveuser 1431
 
3 liveuser 1432
		}#function autoAddMemory end
226 liveuser 1433
 
3 liveuser 1434
	/*
1435
	#函式說明:
1436
	#建立供 apache 讀取的設定檔案.
1437
	#回傳結果:
1438
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1439
	#$result["error"],錯誤訊息陣列.
1440
	#$result["function"],當前執行的函數名稱.
1441
	#$result["content"],定義對應的內容.
1442
	#必填參數:
1443
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1444
	$conf["fileArgu"]=__FILE__;
1445
	#$conf["configFileAddr"],字串,定義檔位置與名稱
1446
	$conf["configFileAddr"]="";
1447
	#$conf["content"],陣列,要儲存的key -> value 陣列.
1448
	$conf["content"]=array("169.254.1.1"=>array("groupName"=>"local"));
1449
	#可省略參數:
1450
	#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為後者.
1451
	#$conf["web"]="false";
1452
	#參考資料:
1453
	#無.
1454
	#備註:
1455
	#檔案內容的格式為多行json編碼然後url編碼然後base64編碼後的內容,每行代表一組定義.每組定義的json格式為php多維陣列所組成.
1456
	*/
1457
	public static function create(&$conf=array()){
226 liveuser 1458
 
3 liveuser 1459
		#初始化要回傳的結果
1460
		$result=array();
1461
 
1462
		#儲存當前執行的函數
1463
		$result["function"]=__FUNCTION__;
1464
 
1465
		#如果 $conf 不為陣列
1466
		if(gettype($conf)!="array"){
226 liveuser 1467
 
3 liveuser 1468
			#設置執行失敗
1469
			$result["status"]="false";
226 liveuser 1470
 
3 liveuser 1471
			#設置執行錯誤訊息
1472
			$result["error"][]="\$conf變數須為陣列形態";
1473
 
1474
			#如果傳入的參數為 null
1475
			if($conf==null){
226 liveuser 1476
 
3 liveuser 1477
				#設置執行錯誤訊息
1478
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1479
 
3 liveuser 1480
				}#if end
1481
 
1482
			#回傳結果
1483
			return $result;
226 liveuser 1484
 
3 liveuser 1485
			}#if end
226 liveuser 1486
 
3 liveuser 1487
		#檢查參數
1488
		#函式說明:
1489
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1490
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1491
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1492
		#$result["function"],當前執行的函式名稱.
1493
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1494
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1495
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1496
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1497
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1498
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1499
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1500
		#必填寫的參數:
1501
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1502
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1503
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1504
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","configFileAddr","content");
226 liveuser 1505
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 1506
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","array");
1507
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1508
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1509
		#可以省略的參數:
1510
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
1511
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1512
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1513
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
226 liveuser 1514
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 1515
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1516
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1517
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
1518
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1519
		#$conf["arrayCountEqualCheck"][]=array();
1520
		#參考資料來源:
1521
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1522
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1523
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1524
 
3 liveuser 1525
		#如果檢查失敗
1526
		if($checkArguments["status"]=="false"){
226 liveuser 1527
 
3 liveuser 1528
			#設置錯誤識別
1529
			$result["status"]="false";
226 liveuser 1530
 
3 liveuser 1531
			#設置錯誤訊息
1532
			$result["error"]=$checkArguments;
226 liveuser 1533
 
3 liveuser 1534
			#回傳結果
1535
			return $result;
226 liveuser 1536
 
3 liveuser 1537
			}#if end
226 liveuser 1538
 
3 liveuser 1539
		#如果檢查不通過
1540
		if($checkArguments["passed"]=="false"){
226 liveuser 1541
 
3 liveuser 1542
			#設置錯誤識別
1543
			$result["status"]="false";
226 liveuser 1544
 
3 liveuser 1545
			#設置錯誤訊息
1546
			$result["error"]=$checkArguments;
226 liveuser 1547
 
3 liveuser 1548
			#回傳結果
1549
			return $result;
226 liveuser 1550
 
3 liveuser 1551
			}#if end
226 liveuser 1552
 
3 liveuser 1553
		#debug
226 liveuser 1554
		#var_dump($conf["content"]);exit;
1555
 
3 liveuser 1556
		#函式說明:
1557
		#將字串寫入到檔案
1558
		#回傳結果:
1559
		#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
1560
		#$result["error"],錯誤訊息陣列.
1561
		#$result["function"],當前執行的函數名稱.
1562
		#$result["fileInfo"],實際上寫入的檔案資訊陣列.
1563
		#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
1564
		#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
1565
		#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
1566
		#$result["argu"],使用的參數.
1567
		#必填參數:
1568
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1569
		$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
1570
		#可省略參數:
1571
		#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
1572
		$conf["fileAccess::writeTextIntoFile"]["fileName"]=$conf["configFileAddr"];
1573
		#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
1574
		$conf["fileAccess::writeTextIntoFile"]["inputString"]=base64_encode(urlencode(json_encode($conf["content"])));
1575
		#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
1576
		#$conf["writeMethod"]="a";
1577
		#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
1578
		#$conf["checkRepeat"]="";
1579
		#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
1580
		#$conf["filenameExtensionStartPoint"]="";
1581
		#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
1582
		#$conf["repeatNameRule"]="";
1583
		#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
1584
		$conf["fileAccess::writeTextIntoFile"]["web"]="false";
1585
		#參考資料:
1586
		#無.
1587
		#備註:
1588
		#無.
1589
		$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
1590
		unset($conf["fileAccess::writeTextIntoFile"]);
226 liveuser 1591
 
3 liveuser 1592
		#如果執行敗
1593
		if($writeTextIntoFile["status"]=="false"){
226 liveuser 1594
 
3 liveuser 1595
			#設置錯誤識別
1596
			$result["status"]="false";
226 liveuser 1597
 
3 liveuser 1598
			#設置錯誤訊息
1599
			$result["error"]=$writeTextIntoFile;
226 liveuser 1600
 
3 liveuser 1601
			#回傳結果
1602
			return $result;
226 liveuser 1603
 
3 liveuser 1604
			}#if end
226 liveuser 1605
 
3 liveuser 1606
		#設置定義正常
1607
		$result["status"]="true";
226 liveuser 1608
 
3 liveuser 1609
		#回傳結果
1610
		return $result;
226 liveuser 1611
 
3 liveuser 1612
		}#function create end
226 liveuser 1613
 
3 liveuser 1614
	/*
1615
	#函式說明:
1616
	#提供post的變數查尋定義檔,給予回應.
1617
	#回傳結果:
1618
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1619
	#$result["error"],錯誤訊息陣列.
1620
	#$result["function"],當前執行的函數名稱.
1621
	#$result["argu"],使用的參數陣列.
1622
	#$result["founded"],"true"代表有找到定義,"false"代表沒有找到定義.
1623
	#$result["content"],定義對應的內容.
1624
	#必填參數:
1625
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1626
	$conf["fileArgu"]=__FILE__;
1627
	#$conf["configFileAddr"],字串/陣列,若為字串則為定義檔位置與名稱;若為陣列則為實際的定義檔案內容(每個元素代表一個設定對應的內容).
1628
	$conf["configFileAddr"]="";
1629
	#可省略參數:
1630
	#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為後者.
1631
	#$conf["web"]="false";
1632
	#參考資料:
1633
	#無.
1634
	#備註:
1635
	#檔案內容的格式為多行json編碼然後url編碼然後base64編碼後的內容,每行代表一組定義.每組定義的json格式為php多維陣列所組成.
1636
	*/
1637
	public static function server(&$conf=array()){
226 liveuser 1638
 
3 liveuser 1639
		#初始化要回傳的結果
1640
		$result=array();
1641
 
1642
		#儲存當前執行的函數
1643
		$result["function"]=__FUNCTION__;
1644
 
1645
		#如果 $conf 不為陣列
1646
		if(gettype($conf)!="array"){
226 liveuser 1647
 
3 liveuser 1648
			#設置執行失敗
1649
			$result["status"]="false";
226 liveuser 1650
 
3 liveuser 1651
			#設置執行錯誤訊息
1652
			$result["error"][]="\$conf變數須為陣列形態";
1653
 
1654
			#如果傳入的參數為 null
1655
			if($conf==null){
226 liveuser 1656
 
3 liveuser 1657
				#設置執行錯誤訊息
1658
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 1659
 
3 liveuser 1660
				}#if end
1661
 
1662
			#回傳結果
1663
			return $result;
226 liveuser 1664
 
3 liveuser 1665
			}#if end
226 liveuser 1666
 
3 liveuser 1667
		#記錄所使用的參數
1668
		$result["argu"]=$conf;
226 liveuser 1669
 
3 liveuser 1670
		#檢查參數
1671
		#函式說明:
1672
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
1673
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
1674
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
1675
		#$result["function"],當前執行的函式名稱.
1676
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
1677
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
1678
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
1679
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
1680
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
1681
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
1682
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
1683
		#必填寫的參數:
1684
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
1685
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
1686
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
1687
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","configFileAddr");
226 liveuser 1688
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 1689
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string",null);
1690
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
1691
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
1692
		#可以省略的參數:
1693
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
1694
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
1695
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
1696
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");
226 liveuser 1697
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 1698
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
1699
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
1700
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");
1701
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
1702
		#$conf["arrayCountEqualCheck"][]=array();
1703
		#參考資料來源:
1704
		#array_keys=>http://php.net/manual/en/function.array-keys.php
1705
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
1706
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 1707
 
3 liveuser 1708
		#如果檢查失敗
1709
		if($checkArguments["status"]=="false"){
226 liveuser 1710
 
3 liveuser 1711
			#設置錯誤識別
1712
			$result["status"]="false";
226 liveuser 1713
 
3 liveuser 1714
			#設置錯誤訊息
1715
			$result["error"]=$checkArguments;
226 liveuser 1716
 
3 liveuser 1717
			#回傳結果
1718
			return $result;
226 liveuser 1719
 
3 liveuser 1720
			}#if end
226 liveuser 1721
 
3 liveuser 1722
		#如果檢查不通過
1723
		if($checkArguments["passed"]=="false"){
226 liveuser 1724
 
3 liveuser 1725
			#設置錯誤識別
1726
			$result["status"]="false";
226 liveuser 1727
 
3 liveuser 1728
			#設置錯誤訊息
1729
			$result["error"]=$checkArguments;
226 liveuser 1730
 
3 liveuser 1731
			#回傳結果
1732
			return $result;
226 liveuser 1733
 
3 liveuser 1734
			}#if end
226 liveuser 1735
 
3 liveuser 1736
		#debug
1737
		#var_dump($checkArguments);exit;
226 liveuser 1738
 
3 liveuser 1739
		#儲存key的結構
1740
		$keys=array();
226 liveuser 1741
 
3 liveuser 1742
		#如果沒有 post 變數存在
1743
		if(count($_POST)<1){
226 liveuser 1744
 
3 liveuser 1745
			#設置錯誤識別
1746
			$result["status"]="false";
226 liveuser 1747
 
3 liveuser 1748
			#設置錯誤訊息
1749
			$result["error"][]="沒有post變數";
226 liveuser 1750
 
3 liveuser 1751
			#回傳結果
1752
			return $result;
226 liveuser 1753
 
3 liveuser 1754
			}#if end
226 liveuser 1755
 
3 liveuser 1756
		#debug
1757
		#var_dump($_POST);exit;
226 liveuser 1758
 
3 liveuser 1759
		#取得第一層key
1760
		$layer=array_keys($_POST)[0];
226 liveuser 1761
 
3 liveuser 1762
		#取得數值內容
1763
		$values=$_POST[$layer];
226 liveuser 1764
 
3 liveuser 1765
		#如果該層級內容形態是陣列
1766
		while(gettype($values)==="array"){
226 liveuser 1767
 
3 liveuser 1768
			#抓取查尋的key結構
1769
			$keys[]=$layer;
226 liveuser 1770
 
3 liveuser 1771
			#取得新層級的key
1772
			$layer=array_keys($values)[0];
226 liveuser 1773
 
3 liveuser 1774
			#取得新的內容
1775
			$values=$values[$layer];
226 liveuser 1776
 
3 liveuser 1777
			}#while end
226 liveuser 1778
 
3 liveuser 1779
		#取得最後一層的key
1780
		$keys[]=$layer;
226 liveuser 1781
 
3 liveuser 1782
		#debug
1783
		#var_dump($keys);exit;
226 liveuser 1784
 
3 liveuser 1785
		#設置預設的定義內容
1786
		$result["content"]="undefined";
226 liveuser 1787
 
3 liveuser 1788
		#如果configFileAddr是字串
1789
		if(gettype($conf["configFileAddr"])==="string"){
226 liveuser 1790
 
3 liveuser 1791
			#代表為檔案位置
226 liveuser 1792
 
3 liveuser 1793
			#函式說明:
1794
			#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
1795
			#回傳的變數說明:
1796
			#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
1797
			#$result["error"],錯誤訊息提示.
1798
			#$result["warning"],警告訊息.
1799
			#$result["function"],當前執行的函數名稱.
1800
			#$result["fileContent"],爲檔案的內容陣列.
1801
			#$result["lineCount"],爲檔案內容總共的行數.
1802
			#$result["fullContent"],為檔案的完整內容.
1803
			#$result["base64data"],為檔案的base64內容.
1804
			#$result["mimeType"],為檔案的mime type.
1805
			#必填的參數:
1806
			#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
1807
			$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["configFileAddr"];
1808
			#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
1809
			$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];
1810
			#可省略參數:
1811
			#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".
1812
			$conf["fileAccess::getFileContent"]["web"]=$conf["web"];
1813
			#參考資料:
1814
			#file(),取得檔案內容的行數.
1815
			#file=>http:#php.net/manual/en/function.file.php
1816
			#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
1817
			#filesize=>http://php.net/manual/en/function.filesize.php
1818
			$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
1819
			unset($conf["fileAccess::getFileContent"]);
226 liveuser 1820
 
3 liveuser 1821
			#如果讀取檔案失敗
1822
			if($getFileContent["status"]==="false"){
226 liveuser 1823
 
3 liveuser 1824
				#設置錯誤識別
1825
				$result["status"]="false";
226 liveuser 1826
 
3 liveuser 1827
				#設置錯誤訊息
1828
				$result["error"]=$getFileContent;
226 liveuser 1829
 
3 liveuser 1830
				#回傳結果
1831
				return $result;
226 liveuser 1832
 
3 liveuser 1833
				}#if end
226 liveuser 1834
 
3 liveuser 1835
			#debug
1836
			#var_dump($getFileContent);
1837
			#var_dump(base64_decode($getFileContent));
1838
			#var_dump(urldecode(base64_decode($getFileContent)));
1839
			#var_dump(json_decode(urldecode(base64_decode($getFileContent))));
1840
			#exit;
226 liveuser 1841
 
3 liveuser 1842
			#針對每行
1843
			foreach($getFileContent["fileContent"] as $line){
226 liveuser 1844
 
3 liveuser 1845
				#解析內容
1846
				$def=(array)json_decode(urldecode(base64_decode($line)));
226 liveuser 1847
 
3 liveuser 1848
				#debug
1849
				#var_dump($def);exit;
1850
				#var_dump($keys[$i]);exit;
226 liveuser 1851
 
3 liveuser 1852
				#初始化要找到的層級
1853
				$i=0;
226 liveuser 1854
 
3 liveuser 1855
				#如果有所屬的層級
1856
				while(isset($def[$keys[$i]])){
226 liveuser 1857
 
3 liveuser 1858
					#取得層級所屬的內容
1859
					$def=(array)$def[$keys[$i]];
226 liveuser 1860
 
3 liveuser 1861
					#debug
1862
					#var_dump($def);exit;
226 liveuser 1863
 
3 liveuser 1864
					#如果還不是最後一個key層級
1865
					if(isset($keys[$i+1])){
226 liveuser 1866
 
3 liveuser 1867
						#層級加一
1868
						$i++;
226 liveuser 1869
 
3 liveuser 1870
						}#if end
226 liveuser 1871
 
3 liveuser 1872
					#反之是最後一個key的層級了
1873
					else{
226 liveuser 1874
 
3 liveuser 1875
						#設置定義的內容
1876
						$result["content"]=$def;
226 liveuser 1877
 
3 liveuser 1878
						#設置有找到定義
1879
						$result["founded"]="true";
226 liveuser 1880
 
3 liveuser 1881
						#設置定義正常
1882
						$result["status"]="true";
226 liveuser 1883
 
3 liveuser 1884
						#回傳結果
1885
						return $result;
226 liveuser 1886
 
3 liveuser 1887
						}#else end
226 liveuser 1888
 
3 liveuser 1889
					}#while end
226 liveuser 1890
 
3 liveuser 1891
				#到這邊代表沒有符合的元素
226 liveuser 1892
 
3 liveuser 1893
				}#foreach end
226 liveuser 1894
 
3 liveuser 1895
			}#if end
226 liveuser 1896
 
3 liveuser 1897
		#反之如果為array
1898
		else if(gettype($conf["configFileAddr"])==="array"){
226 liveuser 1899
 
3 liveuser 1900
			#針對每行
1901
			foreach($conf["configFileAddr"] as $configName=>$def){
226 liveuser 1902
 
3 liveuser 1903
				#debug
1904
				#var_dump($def);exit;
1905
				#var_dump($keys[$i]);exit;
226 liveuser 1906
 
3 liveuser 1907
				#初始化要找到的層級
1908
				$i=0;
226 liveuser 1909
 
3 liveuser 1910
				#如果有所屬的層級
1911
				while(isset($def[$keys[$i]])){
226 liveuser 1912
 
3 liveuser 1913
					#取得層級所屬的內容
1914
					$def=(array)$def[$keys[$i]];
226 liveuser 1915
 
3 liveuser 1916
					#debug
1917
					#var_dump($def);exit;
226 liveuser 1918
 
3 liveuser 1919
					#如果還不是最後一個key層級
1920
					if(isset($keys[$i+1])){
226 liveuser 1921
 
3 liveuser 1922
						#層級加一
1923
						$i++;
226 liveuser 1924
 
3 liveuser 1925
						}#if end
226 liveuser 1926
 
3 liveuser 1927
					#反之是最後一個key的層級了
1928
					else{
226 liveuser 1929
 
3 liveuser 1930
						#設置定義的內容
1931
						$result["content"]=$def;
226 liveuser 1932
 
3 liveuser 1933
						#設置有找到定義
1934
						$result["founded"]="true";
226 liveuser 1935
 
3 liveuser 1936
						#設置定義正常
1937
						$result["status"]="true";
226 liveuser 1938
 
3 liveuser 1939
						#回傳結果
1940
						return $result;
226 liveuser 1941
 
3 liveuser 1942
						}#else end
226 liveuser 1943
 
3 liveuser 1944
					}#while end
226 liveuser 1945
 
3 liveuser 1946
				#到這邊代表沒有符合的元素
226 liveuser 1947
 
3 liveuser 1948
				}#foreach end
226 liveuser 1949
 
3 liveuser 1950
			}#if end
226 liveuser 1951
 
3 liveuser 1952
		#反之如果為其他形態
1953
		else{
226 liveuser 1954
 
3 liveuser 1955
			#設置錯誤識別
1956
			$result["status"]="false";
226 liveuser 1957
 
3 liveuser 1958
			#設置錯誤訊息
1959
			$result["error"][]="configFileAddr的形態只能為string或array";
226 liveuser 1960
 
3 liveuser 1961
			#回傳結果
1962
			return $result;
226 liveuser 1963
 
3 liveuser 1964
			}#else end
226 liveuser 1965
 
3 liveuser 1966
		#設置定義正常
1967
		$result["status"]="true";
226 liveuser 1968
 
3 liveuser 1969
		#設置沒有找到定義
1970
		$result["founded"]="false";
226 liveuser 1971
 
3 liveuser 1972
		#回傳結果
1973
		return $result;
226 liveuser 1974
 
3 liveuser 1975
		}#function server end
226 liveuser 1976
 
3 liveuser 1977
	/*
1978
	#函式說明:
1979
	#查尋有使用 server 函式提供組態設定檔的服務,取得key的value.
1980
	#回傳結果:
1981
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
1982
	#$result["argu"],使用的參數.
1983
	#$result["error"],錯誤訊息陣列.
1984
	#$result["function"],當前執行的函數名稱.
1985
	#$result["rawContent"],得到的原始訊息.
1986
	#$result["content"],用json_decode後的結果;若"inBg"為"true",則其每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
1987
	#必填參數:
1988
	#$conf["server"],字串,組態服務設定服務的網址
1989
	$conf["server"]="";
1990
	#$conf["postName"],字串,POST變數的名稱,亦即要查尋的定義名稱.
1991
	$conf["postName"]="";
1992
	#$conf["fileArgu"],字串,變數__FILE__的內容.
1993
	$conf["fileArgu"]=__FILE__;
1994
	#可省略參數:
1995
	#$conf["cache"],字串,預設為"true",代表會啟用cache服務;反之為"false".
1996
	#$conf["cache"]="false";
1997
	#$conf["clientCacheDaemonSock"],字串,提供cache服務的 unix domain socket 檔案位置,預設為套件根目錄底下的"var/config::client/clientCacheDaemon.sock";.
1998
	#$conf["clientCacheDaemonSock"]="";
1999
	#$conf["inBg"],字串,預設為"false",代表在前景執行;反之為"true"代表在背景中執行,會強制將"cache"參數設為"false".
2000
	#$conf["inBg"]="true";
2001
	#參考資料:
2002
	#無.
2003
	#備註:
2004
	#目前僅能跟server函式提供的服務對接.
2005
	*/
2006
	public static function client(&$conf=array()){
226 liveuser 2007
 
3 liveuser 2008
		#初始化要回傳的結果
2009
		$result=array();
2010
 
2011
		#儲存當前執行的函數
2012
		$result["function"]=__FUNCTION__;
2013
 
2014
		#取得參數
2015
		$result["argu"]=$conf;
2016
 
2017
		#如果 $conf 不為陣列
2018
		if(gettype($conf)!="array"){
226 liveuser 2019
 
3 liveuser 2020
			#設置執行失敗
2021
			$result["status"]="false";
226 liveuser 2022
 
3 liveuser 2023
			#設置執行錯誤訊息
2024
			$result["error"][]="\$conf變數須為陣列形態";
2025
 
2026
			#如果傳入的參數為 null
2027
			if($conf==null){
226 liveuser 2028
 
3 liveuser 2029
				#設置執行錯誤訊息
2030
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
226 liveuser 2031
 
3 liveuser 2032
				}#if end
2033
 
2034
			#回傳結果
2035
			return $result;
226 liveuser 2036
 
3 liveuser 2037
			}#if end
226 liveuser 2038
 
3 liveuser 2039
		#檢查參數
2040
		#函式說明:
2041
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
2042
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2043
		#$reuslt["error"],執行不正常結束的錯訊息陣列.
2044
		#$result["function"],當前執行的函式名稱.
2045
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2046
		#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2047
		#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2048
		#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
2049
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2050
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2051
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2052
		#必填寫的參數:
2053
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2054
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2055
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2056
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("server","postName","fileArgu");
226 liveuser 2057
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");
3 liveuser 2058
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
2059
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2060
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2061
		#可以省略的參數:
2062
		#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
2063
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2064
		#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2065
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("cache","clientCacheDaemonSock","inBg");
226 liveuser 2066
		#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3 liveuser 2067
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
2068
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2069
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true",null,"false");
2070
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2071
		#$conf["arrayCountEqualCheck"][]=array();
2072
		#參考資料來源:
2073
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2074
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2075
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 2076
 
3 liveuser 2077
		#如果檢查失敗
2078
		if($checkArguments["status"]=="false"){
226 liveuser 2079
 
3 liveuser 2080
			#設置錯誤識別
2081
			$result["status"]="false";
226 liveuser 2082
 
3 liveuser 2083
			#設置錯誤訊息
2084
			$result["error"]=$checkArguments;
226 liveuser 2085
 
3 liveuser 2086
			#回傳結果
2087
			return $result;
226 liveuser 2088
 
3 liveuser 2089
			}#if end
226 liveuser 2090
 
3 liveuser 2091
		#如果檢查不通過
2092
		if($checkArguments["passed"]=="false"){
226 liveuser 2093
 
3 liveuser 2094
			#設置錯誤識別
2095
			$result["status"]="false";
226 liveuser 2096
 
3 liveuser 2097
			#設置錯誤訊息
2098
			$result["error"]=$checkArguments;
226 liveuser 2099
 
3 liveuser 2100
			#回傳結果
2101
			return $result;
226 liveuser 2102
 
3 liveuser 2103
			}#if end
226 liveuser 2104
 
3 liveuser 2105
		#如果要在背景執行
2106
		if($conf["inBg"]==="true"){
226 liveuser 2107
 
3 liveuser 2108
			#函式說明:
2109
			#運行curl cmd
2110
			#回傳結果:
2111
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2112
			#$result["error"],錯誤訊息陣列.
2113
			#$result["function"],當前執行的函式名稱.
2114
			#$result["founded"],識別網址找不找得到.
2115
			#$result["content"],取得的回應內容陣列;若$conf["bgInProc"]為"true",則每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
2116
			#$result["fullContent"],取得回應的完整字串內容.
2117
			#$result["cookie"],cookie檔案的位置與名稱.
2118
			#$result["cmd"],執行的command.
2119
			#$result["argu],使用的參數.
2120
			#必填參數:
2121
			#$conf["url"],字串,目標url.
2122
			$conf["cmd::curlCmd"]["url"]=$conf["server"];
2123
			#$conf["fileArgu"],字串,變數__FILE__的內容.
2124
			$conf["cmd::curlCmd"]["fileArgu"]=$conf["fileArgu"];
2125
			#可省略參數:
2126
			#$conf["header"],字串陣列,要傳送的header.
2127
			#$conf["header"]=array();
2128
			#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
2129
			#$conf["allowAnySSLcertificate"]="";
2130
			#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
2131
			$conf["cmd::curlCmd"]["postVar"]=array($conf["postName"]=>"");
2132
			#$conf["rawPost"]="字串",要傳送的raw post內容.
2133
			#$conf["rawPost"]="";
2134
			#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
2135
			#$conf["urlEncode"]="false";
2136
			#$conf["agent"],字串,user agent的名稱.
2137
			#$conf["agent"]="";
2138
			#$conf["cookie"],字串,cookie位置與檔案位置.
2139
			#$conf["cookie"]="";
2140
			#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
2141
			#$conf["forceNewCookie"]="";
2142
			#$conf["inBg"],字串,"true"代表要在背景中執行;反之則為"false".
2143
			#$conf["inBg"]="true";
2144
			#$conf["bgInPorc"],字串,若跟inBg一樣為"true",則會透過proc放在背景執行且回傳proc資訊,以便監控執行狀況.預設為"false",不使用proc.
2145
			$conf["catchWebContent::curlCmd"]["bgInProc"]="true";
2146
			#參考資料:
2147
			#無.
2148
			#備註:
2149
			#無.
2150
			$curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
2151
			unset($conf["catchWebContent::curlCmd"]);
226 liveuser 2152
 
3 liveuser 2153
			#如果執行失敗
2154
			if($curlCmd["status"]==="false"){
226 liveuser 2155
 
3 liveuser 2156
				#設置錯誤識別
2157
				$result["status"]="false";
226 liveuser 2158
 
3 liveuser 2159
				#設置錯誤訊息
2160
				$result["error"]=$curlCmd;
226 liveuser 2161
 
3 liveuser 2162
				#回傳結果
2163
				return $result;
226 liveuser 2164
 
3 liveuser 2165
				}#if end
226 liveuser 2166
 
3 liveuser 2167
			#設置proc資訊
2168
			$result["content"]=$curlCmd["content"];
226 liveuser 2169
 
3 liveuser 2170
			#設置執行正常
2171
			$result["status"]="true";
226 liveuser 2172
 
3 liveuser 2173
			#回傳結果
2174
			return $result;
226 liveuser 2175
 
3 liveuser 2176
			}#if end
226 liveuser 2177
 
3 liveuser 2178
		#如果沒有設置 cacheFile
2179
		if(!isset($conf["cacheFile"])){
226 liveuser 2180
 
3 liveuser 2181
			#取得以該檔案為准的實際位置 lib path
2182
			exec("cd ".pathinfo(__FILE__)["dirname"].";pwd;",$output,$status);
226 liveuser 2183
 
3 liveuser 2184
			#初始化之
2185
			$conf["clientCacheDaemonSock"]=$output[0]."/var/config::client/clientCacheDaemon.sock";
226 liveuser 2186
 
3 liveuser 2187
			}#if end
226 liveuser 2188
 
3 liveuser 2189
		#如果有要使用cache
2190
		if($conf["cache"]==="true"){
226 liveuser 2191
 
3 liveuser 2192
			#查詢 cahce 內容
2193
			#連線到 sock::unixDomainSocketServer 產生的  unix domain socket,傳送指定的訊息.
2194
			#回傳結果:
2195
			#$result["status"],"true"代表執行正常;"false"代表執行不正常.
2196
			#$result["error"],錯誤訊息陣列.
2197
			#$result["function"],當前執行的函式名稱.
2198
			#$result["argu"],使用的參數.
2199
			#$result["content"],得到的回應.
2200
			#必填參數:
2201
			#$conf["msg"],陣列,要傳送的訊息,其主$conf["msg"]["id"],是無法指定的.
2202
			$conf["sock::sendAnyMsgToQBPWCFunixSocket"]["msg"]=array("postName"=>$conf["postName"],"server"=>$conf["server"]);
2203
			#可省略參數:
2204
			#$conf["sock"],字串,要連線的 usr/bin/qbpwcf-sock.php 所產生的 unix domain socket 路徑與名稱,預設為 qbpwcf_usock_path.
2205
			$conf["sock::sendAnyMsgToQBPWCFunixSocket"]["sock"]=$conf["clientCacheDaemonSock"];
2206
			#參考資料:
2207
			#無.
2208
			#備註:
2209
			#無.
2210
			$sendAnyMsgToQBPWCFunixSocket=sock::sendAnyMsgToQBPWCFunixSocket($conf["sock::sendAnyMsgToQBPWCFunixSocket"]);
2211
			unset($conf["sock::sendAnyMsgToQBPWCFunixSocket"]);
226 liveuser 2212
 
3 liveuser 2213
			#如果執行失敗
2214
			if($sendAnyMsgToQBPWCFunixSocket["status"]=="false"){
226 liveuser 2215
 
3 liveuser 2216
				#設置錯誤識別
2217
				$result["status"]="false";
226 liveuser 2218
 
3 liveuser 2219
				#設置錯誤訊息
2220
				$result["error"]=$sendAnyMsgToQBPWCFunixSocket;
226 liveuser 2221
 
3 liveuser 2222
				#回傳結果
2223
				return $result;
226 liveuser 2224
 
3 liveuser 2225
				}#if end
226 liveuser 2226
 
3 liveuser 2227
			#如果執行失敗
2228
			if($sendAnyMsgToQBPWCFunixSocket["status"]==="false"){
226 liveuser 2229
 
3 liveuser 2230
				#設置錯誤識別
2231
				$result["status"]="false";
226 liveuser 2232
 
3 liveuser 2233
				#設置錯誤訊息
2234
				$result["error"]=$sendAnyMsgToQBPWCFunixSocket;
226 liveuser 2235
 
3 liveuser 2236
				#回傳結果
2237
				return $result;
226 liveuser 2238
 
3 liveuser 2239
				}#if end
226 liveuser 2240
 
3 liveuser 2241
			#debug
2242
			#var_dump(__LINE__,$sendAnyMsgToQBPWCFunixSocket);
226 liveuser 2243
 
3 liveuser 2244
			#設置回應的內容
2245
			$result["rawContent"]=$sendAnyMsgToQBPWCFunixSocket["content"];
226 liveuser 2246
 
3 liveuser 2247
			#設置解析好的json回應內容
2248
			$result["content"]=json_decode($sendAnyMsgToQBPWCFunixSocket["content"]);
226 liveuser 2249
 
3 liveuser 2250
			#設置執行正常
2251
			$result["status"]="true";
226 liveuser 2252
 
3 liveuser 2253
			#回傳結果
2254
			return $result;
226 liveuser 2255
 
3 liveuser 2256
			}#if end
226 liveuser 2257
 
3 liveuser 2258
		#函式說明:
2259
		#運行curl cmd
2260
		#回傳結果:
2261
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2262
		#$result["error"],錯誤訊息陣列.
2263
		#$result["function"],當前執行的函式名稱.
2264
		#$result["content"],取得的回應內容陣列.
2265
		#$result["fullContent"],取得回應的完整字串內容.
2266
		#$result["cookie"],cookie檔案的位置與名稱.
2267
		#$result["cmd"],執行的command.
2268
		#$result["argu],使用的參數.
2269
		#必填參數:
2270
		#$conf["url"],字串,目標url.
2271
		$conf["cmd::curlCmd"]["url"]=$conf["server"];
2272
		#$conf["fileArgu"],字串,變數__FILE__的內容.
2273
		$conf["cmd::curlCmd"]["fileArgu"]=$conf["fileArgu"];
2274
		#可省略參數:
2275
		#$conf["header"],字串陣列,要傳送的header.
2276
		#$conf["header"]=array();
2277
		#$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
2278
		#$conf["allowAnySSLcertificate"]="";
2279
		#$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
2280
		$conf["cmd::curlCmd"]["postVar"]=array($conf["postName"]=>"");
2281
		#$conf["rawPost"]="字串",要傳送的raw post內容.
2282
		#$conf["rawPost"]="";
2283
		#$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
2284
		#$conf["urlEncode"]="false";
2285
		#$conf["agent"],字串,user agent的名稱.
2286
		#$conf["agent"]="";
2287
		#$conf["cookie"],字串,cookie位置與檔案位置.
2288
		#$conf["cookie"]="";
2289
		#$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
2290
		#$conf["forceNewCookie"]="";
2291
		#$conf["inBg"],字串,"true"代表要在背景中執行;反之則為"false".
2292
		#$conf["inBg"]="true";
2293
		#備註:
2294
		#無.
2295
		$curlCmd=catchWebContent::curlCmd($conf["cmd::curlCmd"]);
2296
		unset($conf["cmd::curlCmd"]);
226 liveuser 2297
 
3 liveuser 2298
		#如果執行失敗
2299
		if($curlCmd["status"]==="false"){
226 liveuser 2300
 
3 liveuser 2301
			#設置錯誤識別
2302
			$result["status"]="false";
226 liveuser 2303
 
3 liveuser 2304
			#設置錯誤訊息
2305
			$result["error"]=$curlCmd;
226 liveuser 2306
 
3 liveuser 2307
			#回傳結果
2308
			return $result;
226 liveuser 2309
 
3 liveuser 2310
			}#if end
226 liveuser 2311
 
3 liveuser 2312
		#設置執行正常
2313
		$result["status"]="true";
226 liveuser 2314
 
3 liveuser 2315
		#設置回應的內容
2316
		$result["rawContent"]=$curlCmd["fullContent"];
226 liveuser 2317
 
3 liveuser 2318
		#設置解析好的json回應內容
2319
		$result["content"]=json_decode($curlCmd["fullContent"]);
226 liveuser 2320
 
3 liveuser 2321
		#回傳結果
2322
		return $result;
226 liveuser 2323
 
3 liveuser 2324
		}#function client end
226 liveuser 2325
 
3 liveuser 2326
	/*
2327
	#函式說明:
2328
	#給clientCacheDaemon用的addOnProcessFunc,處理來自config::client有使用cache的要求.
2329
	#回傳結果:
2330
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2331
	#$result["error"],錯誤訊息陣列.
2332
	#$result["function"],當前執行的函數名稱.
2333
	#$result["warning"],警告訊息陣列.
2334
	#必填參數:
2335
	#$conf["request"],陣列,收到的訊息.
2336
	#$conf["request"]=array();
2337
	#$conf["request"]["postName"],字串,要查詢的索引.
2338
	#$conf["request"]["postName"]="";
2339
	#$conf["request"]["server"],字串,要去哪個config server查詢.
2340
	#$conf["request"]["server"]="";
2341
	#$conf["request"]["id"],字串,用來識別用戶的uuid.
2342
	#$conf["request"]["id"]="";
2343
	#$conf["socket"],client的socket
2344
	#$conf["socket"]=;
2345
	#$conf["info"],陣列,sock跟cache file path資訊.
2346
	#$conf["info"]=array();
2347
	#$conf["info"]["sock"],字串,unix domain socket addr.
2348
	#$conf["info"]["sock"]=;
2349
	#$conf["info"]["cacheFilePath"],字串,cache file path.
2350
	#$conf["info"]["cacheFilePath"]=;
2351
	#$conf["info"]["checkVersionInterval"],字串,距離最後一次取得資料的時間多久就要檢查是否有新資料,預設為60秒.
2352
	#$conf["info"]["checkVersionInterval"]="60";
2353
	#$conf["clientCache"],陣列.存放跟取得快取的陣列.
2354
	#$conf["clientCache"]=array();
2355
	#$conf["last_req_time"],字串,存放上次執行的unixtime.
2356
	#$conf["last_req_time"]="";
2357
	#可省略參數:
2358
	#無.
2359
	#參考資料:
2360
	#無.
2361
	#備註:
2362
	#無,
2363
	*/
2364
	public static function addOnProcessFuncForClientCacheDaemon(&$conf){
226 liveuser 2365
 
3 liveuser 2366
		#debug
2367
		#var_dump(__LINE__,"into function ".__FUNCTION__);
226 liveuser 2368
 
3 liveuser 2369
		#初始化結果
2370
		$result=array();
2371
 
2372
		#取得當前執行的函數名稱
2373
		$result["function"]=__FUNCTION__;
2374
 
2375
		#取得參數
2376
		$result["argu"]=$conf;
2377
 
2378
		#如果 $conf 不為陣列
2379
		if(gettype($conf)!=="array"){
2380
 
2381
			#設置執行失敗
2382
			$result["status"]="false";
2383
 
2384
			#設置執行錯誤訊息
2385
			$result["error"][]="\$conf變數須為陣列形態";
2386
 
2387
			#如果傳入的參數為 null
2388
			if(is_null($conf)){
2389
 
2390
				#設置執行錯誤訊息
2391
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
2392
 
2393
				}#if end
2394
 
2395
			#回傳給用戶 - start
226 liveuser 2396
 
3 liveuser 2397
			#寫入回應的內容
2398
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2399
 
3 liveuser 2400
			#結束回應
2401
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2402
 
3 liveuser 2403
			#關閉socket連線,將回應輸出.
2404
			fclose($conf["socket"]);
226 liveuser 2405
 
3 liveuser 2406
			#回傳給用戶 - end
2407
 
2408
			#回傳結果
2409
			return $result;
2410
 
2411
			}#if end
226 liveuser 2412
 
3 liveuser 2413
		#debug
2414
		#var_dump(__LINE__,"檢查 參數");
226 liveuser 2415
 
3 liveuser 2416
		#函式說明:
2417
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
2418
		#回傳結果:
2419
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2420
		#$result["error"],執行不正常結束的錯訊息陣列.
2421
		#$result["simpleError"],簡單表示的錯誤訊息.
2422
		#$result["function"],當前執行的函式名稱.
2423
		#$result["argu"],設置給予的參數.
2424
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2425
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2426
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2427
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
2428
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
2429
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2430
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2431
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2432
		#必填參數:
2433
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2434
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
2435
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2436
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2437
		#可省略參數:
2438
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2439
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("socket","request","info","clientCache","last_req_time");
2440
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
2441
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("resource","array","array","array","integer");
2442
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
2443
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2444
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
2445
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("socket","info");
2446
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
2447
		#$conf["canBeEmpty"]=array();
2448
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
2449
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock");
2450
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2451
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","request");
2452
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2453
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("resource","array");
2454
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2455
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"60");
2456
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
2457
		#$conf["disallowAllSkipableVarIsEmpty"]="";
2458
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
2459
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
2460
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
2461
		#$conf["disallowAllSkipableVarNotExist"]="";
2462
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2463
		#$conf["arrayCountEqualCheck"][]=array();
2464
		#參考資料:
2465
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2466
		#備註:
2467
		#無.
2468
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2469
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 2470
 
3 liveuser 2471
		#如果執行失敗
2472
		if($checkArguments["status"]==="false"){
226 liveuser 2473
 
3 liveuser 2474
			#設置錯誤識別
2475
			$result["status"]="false";
226 liveuser 2476
 
3 liveuser 2477
			#設置錯誤訊息
2478
			$result["error"]=$checkArguments;
226 liveuser 2479
 
3 liveuser 2480
			#回傳給用戶 - start
226 liveuser 2481
 
3 liveuser 2482
			#寫入回應的內容
2483
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2484
 
3 liveuser 2485
			#結束回應
2486
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2487
 
3 liveuser 2488
			#關閉socket連線,將回應輸出.
2489
			fclose($conf["socket"]);
226 liveuser 2490
 
3 liveuser 2491
			#回傳給用戶 - end
226 liveuser 2492
 
3 liveuser 2493
			#回傳結果
2494
			return $result;
226 liveuser 2495
 
3 liveuser 2496
			}#if end
226 liveuser 2497
 
3 liveuser 2498
		#如果檢查不通過
2499
		if($checkArguments["passed"]==="false"){
226 liveuser 2500
 
3 liveuser 2501
			#設置錯誤識別
2502
			$result["status"]="false";
226 liveuser 2503
 
3 liveuser 2504
			#設置錯誤訊息
2505
			$result["error"]=$checkArguments;
226 liveuser 2506
 
3 liveuser 2507
			#回傳給用戶 - start
226 liveuser 2508
 
3 liveuser 2509
			#寫入回應的內容
2510
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2511
 
3 liveuser 2512
			#結束回應
2513
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2514
 
3 liveuser 2515
			#關閉socket連線,將回應輸出.
2516
			fclose($conf["socket"]);
226 liveuser 2517
 
3 liveuser 2518
			#回傳給用戶 - end
226 liveuser 2519
 
3 liveuser 2520
			#回傳結果
2521
			return $result;
226 liveuser 2522
 
3 liveuser 2523
			}#if end
226 liveuser 2524
 
3 liveuser 2525
		#debug
2526
		#var_dump(__LINE__,"檢查  request 參數");
226 liveuser 2527
 
3 liveuser 2528
		#函式說明:
2529
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
2530
		#回傳結果:
2531
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2532
		#$result["error"],執行不正常結束的錯訊息陣列.
2533
		#$result["simpleError"],簡單表示的錯誤訊息.
2534
		#$result["function"],當前執行的函式名稱.
2535
		#$result["argu"],設置給予的參數.
2536
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2537
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2538
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2539
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
2540
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
2541
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2542
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2543
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2544
		#必填參數:
2545
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2546
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf["request"];
2547
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2548
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2549
		#可省略參數:
2550
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2551
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("id","postName","server");
2552
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
2553
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
2554
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
2555
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2556
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
2557
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("sock");
2558
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
2559
		#$conf["canBeEmpty"]=array();
2560
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
2561
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock");
2562
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2563
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","request");
2564
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2565
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("resource","array");
2566
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2567
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"60");
2568
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
2569
		#$conf["disallowAllSkipableVarIsEmpty"]="";
2570
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
2571
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
2572
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
2573
		#$conf["disallowAllSkipableVarNotExist"]="";
2574
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2575
		#$conf["arrayCountEqualCheck"][]=array();
2576
		#參考資料:
2577
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2578
		#備註:
2579
		#無.
2580
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2581
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 2582
 
3 liveuser 2583
		#如果執行失敗
2584
		if($checkArguments["status"]==="false"){
226 liveuser 2585
 
3 liveuser 2586
			#設置錯誤識別
2587
			$result["status"]="false";
226 liveuser 2588
 
3 liveuser 2589
			#設置錯誤訊息
2590
			$result["error"]=$checkArguments;
226 liveuser 2591
 
3 liveuser 2592
			#回傳給用戶 - start
226 liveuser 2593
 
3 liveuser 2594
			#寫入回應的內容
2595
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2596
 
3 liveuser 2597
			#結束回應
2598
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2599
 
3 liveuser 2600
			#關閉socket連線,將回應輸出.
2601
			fclose($conf["socket"]);
226 liveuser 2602
 
3 liveuser 2603
			#回傳給用戶 - end
226 liveuser 2604
 
3 liveuser 2605
			#回傳結果
2606
			return $result;
226 liveuser 2607
 
3 liveuser 2608
			}#if end
226 liveuser 2609
 
3 liveuser 2610
		#如果檢查不通過
2611
		if($checkArguments["passed"]==="false"){
226 liveuser 2612
 
3 liveuser 2613
			#設置錯誤識別
2614
			$result["status"]="false";
226 liveuser 2615
 
3 liveuser 2616
			#設置錯誤訊息
2617
			$result["error"]=$checkArguments;
226 liveuser 2618
 
3 liveuser 2619
			#回傳給用戶 - start
226 liveuser 2620
 
3 liveuser 2621
			#寫入回應的內容
2622
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2623
 
3 liveuser 2624
			#結束回應
2625
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2626
 
3 liveuser 2627
			#關閉socket連線,將回應輸出.
2628
			fclose($conf["socket"]);
226 liveuser 2629
 
3 liveuser 2630
			#回傳給用戶 - end
226 liveuser 2631
 
3 liveuser 2632
			#回傳結果
2633
			return $result;
226 liveuser 2634
 
3 liveuser 2635
			}#if end
226 liveuser 2636
 
3 liveuser 2637
		#函式說明:
2638
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
2639
		#回傳結果:
2640
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
2641
		#$result["error"],執行不正常結束的錯訊息陣列.
2642
		#$result["simpleError"],簡單表示的錯誤訊息.
2643
		#$result["function"],當前執行的函式名稱.
2644
		#$result["argu"],設置給予的參數.
2645
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
2646
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
2647
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
2648
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
2649
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
2650
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
2651
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
2652
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
2653
		#必填參數:
2654
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
2655
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf["info"];
2656
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
2657
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
2658
		#可省略參數:
2659
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
2660
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sock","cacheFilePath","checkVersionInterval");
2661
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
2662
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
2663
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
2664
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
2665
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
2666
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("sock");
2667
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
2668
		#$conf["canBeEmpty"]=array();
2669
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
2670
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock");
2671
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
2672
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","request");
2673
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
2674
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("resource","array");
2675
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
2676
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"60");
2677
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
2678
		#$conf["disallowAllSkipableVarIsEmpty"]="";
2679
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
2680
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
2681
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
2682
		#$conf["disallowAllSkipableVarNotExist"]="";
2683
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
2684
		#$conf["arrayCountEqualCheck"][]=array();
2685
		#參考資料:
2686
		#array_keys=>http://php.net/manual/en/function.array-keys.php
2687
		#備註:
2688
		#無.
2689
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
2690
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 2691
 
3 liveuser 2692
		#如果執行失敗
2693
		if($checkArguments["status"]==="false"){
226 liveuser 2694
 
3 liveuser 2695
			#設置錯誤識別
2696
			$result["status"]="false";
226 liveuser 2697
 
3 liveuser 2698
			#設置錯誤訊息
2699
			$result["error"]=$checkArguments;
226 liveuser 2700
 
3 liveuser 2701
			#回傳給用戶 - start
226 liveuser 2702
 
3 liveuser 2703
			#寫入回應的內容
2704
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2705
 
3 liveuser 2706
			#結束回應
2707
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2708
 
3 liveuser 2709
			#關閉socket連線,將回應輸出.
2710
			fclose($conf["socket"]);
226 liveuser 2711
 
3 liveuser 2712
			#回傳給用戶 - end
226 liveuser 2713
 
3 liveuser 2714
			#回傳結果
2715
			return $result;
226 liveuser 2716
 
3 liveuser 2717
			}#if end
226 liveuser 2718
 
3 liveuser 2719
		#如果檢查不通過
2720
		if($checkArguments["passed"]==="false"){
226 liveuser 2721
 
3 liveuser 2722
			#設置錯誤識別
2723
			$result["status"]="false";
226 liveuser 2724
 
3 liveuser 2725
			#設置錯誤訊息
2726
			$result["error"]=$checkArguments;
226 liveuser 2727
 
3 liveuser 2728
			#回傳給用戶 - start
226 liveuser 2729
 
3 liveuser 2730
			#寫入回應的內容
2731
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2732
 
3 liveuser 2733
			#結束回應
2734
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2735
 
3 liveuser 2736
			#關閉socket連線,將回應輸出.
2737
			fclose($conf["socket"]);
226 liveuser 2738
 
3 liveuser 2739
			#回傳給用戶 - end
226 liveuser 2740
 
3 liveuser 2741
			#回傳結果
2742
			return $result;
226 liveuser 2743
 
3 liveuser 2744
			}#if end
226 liveuser 2745
 
3 liveuser 2746
		#判斷 client cahce 有無指定來源的資料
226 liveuser 2747
 
3 liveuser 2748
		#debug
2749
		#var_dump(__LINE__,"判斷 client cahce 有無指定來源的資料");
226 liveuser 2750
 
3 liveuser 2751
		#來源
2752
		#$conf["request"]["server"];
226 liveuser 2753
 
3 liveuser 2754
		#debug
2755
		#var_dump(__LINE__,$conf["request"]["server"]);
226 liveuser 2756
 
3 liveuser 2757
		#索引
2758
		#$conf["request"]["postName"];
226 liveuser 2759
 
3 liveuser 2760
		#debug
2761
		#var_dump(__LINE__,$conf["request"]["postName"]);
226 liveuser 2762
 
3 liveuser 2763
		#如果存在
2764
		if(isset($conf["clientCache"]["share"]["configs"])){
226 liveuser 2765
 
3 liveuser 2766
			#debug
2767
			#var_dump(__LINE__,$conf["clientCache"]["share"]["configs"]);
226 liveuser 2768
 
3 liveuser 2769
			#如果有對應來源的資料
2770
			if(isset($conf["clientCache"]["share"]["configs"][$conf["request"]["server"]])){
226 liveuser 2771
 
3 liveuser 2772
				#如果有該索引的資料
2773
				if(isset($conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]])){
226 liveuser 2774
 
3 liveuser 2775
					#如果存在 content 跟 time
2776
					if( isset($conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]]["content"]) && isset($conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]]["time"]) ){
226 liveuser 2777
 
3 liveuser 2778
						#取得 content
2779
						$result["content"]=json_decode($conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]]["content"]);
226 liveuser 2780
 
3 liveuser 2781
						#記錄多少秒未更新
2782
						$secsNoUpdate=time()-$conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]]["time"];
226 liveuser 2783
 
3 liveuser 2784
						#記錄資料過期多少秒
2785
						$secsExpired=$secsNoUpdate-$conf["info"]["checkVersionInterval"];
226 liveuser 2786
 
3 liveuser 2787
						#提示資料超過期限未更新
2788
						if($secsNoUpdate>$conf["info"]["checkVersionInterval"]){
226 liveuser 2789
 
3 liveuser 2790
							#設置警告訊息
2791
							$result["warning"][]="data expired for ".$secsExpired." secs";
226 liveuser 2792
 
2793
							}#if end
2794
 
3 liveuser 2795
						#設置執行正常
2796
						$result["status"]="true";
226 liveuser 2797
 
3 liveuser 2798
						#debug
2799
						#var_dump(__LINE__,$result,json_encode($result));
226 liveuser 2800
 
3 liveuser 2801
						#回傳給用戶 - start
226 liveuser 2802
 
3 liveuser 2803
						#初始化要回傳的訊息
2804
						$msg=array();
226 liveuser 2805
 
3 liveuser 2806
						#設置回傳的內容
2807
						$msg["content"]=$result["content"];
226 liveuser 2808
 
3 liveuser 2809
						#設置回傳的狀態
2810
						$msg["status"]=$result["status"];
226 liveuser 2811
 
3 liveuser 2812
						#寫入回應的內容
2813
						fwrite($conf["socket"],json_encode($msg).PHP_EOL);
226 liveuser 2814
 
3 liveuser 2815
						#結束回應
2816
						fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2817
 
3 liveuser 2818
						#關閉socket連線,將回應輸出.
2819
						fclose($conf["socket"]);
226 liveuser 2820
 
3 liveuser 2821
						#回傳給用戶 - end
226 liveuser 2822
 
3 liveuser 2823
						#回傳結果
2824
						return $result;
226 liveuser 2825
 
3 liveuser 2826
						}#if end
226 liveuser 2827
 
3 liveuser 2828
					}#if end
226 liveuser 2829
 
3 liveuser 2830
				}#if end
226 liveuser 2831
 
3 liveuser 2832
			}#if end
226 liveuser 2833
 
3 liveuser 2834
		#執行到這邊代表沒有資料
226 liveuser 2835
 
3 liveuser 2836
		#函式說明:
2837
		#查尋有使用 server 函式提供組態設定檔的服務,取得key的value.
2838
		#回傳結果:
2839
		#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2840
		#$result["error"],錯誤訊息陣列.
2841
		#$result["function"],當前執行的函數名稱.
2842
		#$result["rawContent"],得到的原始訊息.
2843
		#$result["content"],用json_decode後的結果.
2844
		#必填參數:
2845
		#$conf["server"],字串,組態服務設定服務的網址
2846
		$conf["config::client"]["server"]=$conf["request"]["server"];
2847
		#$conf["postName"],字串,POST變數的名稱,亦即要查尋的定義名稱.
2848
		$conf["config::client"]["postName"]=$conf["request"]["postName"];
2849
		#$conf["fileArgu"],字串,變數__FILE__的內容.
2850
		$conf["config::client"]["fileArgu"]=__FILE__;
2851
		#可省略參數:
2852
		#$conf["cache"],字串,預設為"true",代表會啟用cache服務;反之為"false".
2853
		$conf["config::client"]["cache"]="false";
2854
		#$conf["clientCacheDaemonSock"],字串,提供cache服務的 unix domain socket 檔案位置,預設為套件根目錄底下的"var/config::client/clientCacheDaemon.sock";.
2855
		#$conf["clientCacheDaemonSock"]="";
2856
		#參考資料:
2857
		#無.
2858
		#備註:
2859
		#目前僅能跟server函式提供的服務對接.
2860
		$client=config::client($conf["config::client"]);
2861
		unset($conf["config::client"]);
226 liveuser 2862
 
3 liveuser 2863
		#debug
2864
		#var_dump(__LINE__,$client);
226 liveuser 2865
 
3 liveuser 2866
		/*
226 liveuser 2867
 
3 liveuser 2868
		#debug
2869
		#函式說明:
2870
		#撰寫log
2871
		#回傳結果:
2872
		#$result["status"],狀態,"true"或"false".
2873
		#$result["error"],錯誤訊息陣列.
2874
		#$result["function"],當前函式的名稱.
2875
		#$result["argu"],使用的參數.
2876
		#$result["content"],要寫入log的內容字串.
2877
		#必填參數:
2878
		#$conf["path"],字串,log檔案的路徑與名稱.
2879
		$conf["config::record"]["path"]="/tmp/test.log";
2880
		#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
2881
		$conf["config::record"]["content"]=$client;
2882
		#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
2883
		$conf["config::record"]["fileArgu"]=__FILE__;
2884
		#可省略參數:
2885
		#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
2886
		#$conf["rewrite"]="false";
2887
		#$conf["returnOnly"],預設為"false",會寫入到log檔案.若為"true"則不會寫入log.
2888
		#$conf["returnOnly"]="true";
2889
		#參考資料:
2890
		#無.
2891
		#備註:
2892
		#無.
2893
		config::record($conf["config::record"]);
2894
		unset($conf["config::record"]);
226 liveuser 2895
 
3 liveuser 2896
		*/
226 liveuser 2897
 
3 liveuser 2898
		#如果執行失敗
2899
		if($client["status"]==="false"){
226 liveuser 2900
 
3 liveuser 2901
			#設置錯誤識別
2902
			$result["status"]="false";
226 liveuser 2903
 
3 liveuser 2904
			#設置錯誤訊息
2905
			$result["error"]=$client;
226 liveuser 2906
 
3 liveuser 2907
			#回傳給用戶 - start
226 liveuser 2908
 
3 liveuser 2909
			#寫入回應的內容
2910
			fwrite($conf["socket"],json_encode($result).PHP_EOL);
226 liveuser 2911
 
3 liveuser 2912
			#結束回應
2913
			fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2914
 
3 liveuser 2915
			#關閉socket連線,將回應輸出.
2916
			fclose($conf["socket"]);
226 liveuser 2917
 
3 liveuser 2918
			#回傳給用戶 - end
226 liveuser 2919
 
3 liveuser 2920
			#回傳結果
2921
			return $result;
226 liveuser 2922
 
3 liveuser 2923
			}#if end
2924
 
2925
		#新增 client cache 內容
2926
		$conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]]["content"]=$client["rawContent"];
2927
 
2928
		#更新 client cache 的最後更新時間
2929
		$conf["clientCache"]["share"]["configs"][$conf["request"]["server"]][$conf["request"]["postName"]]["time"]=time();
2930
 
2931
		#debug
2932
		#var_dump(__LINE__,$conf["clientCache"]["share"]["configs"]);
2933
 
2934
		#初始化要傳遞的訊息
2935
		$msg=array();
2936
 
2937
		#設置 msg content
2938
		$msg["content"]=$client["rawContent"];
226 liveuser 2939
 
3 liveuser 2940
		#設置 msg status
2941
		$msg["status"]="true";
226 liveuser 2942
 
3 liveuser 2943
		#設置執行正常
2944
		$result["status"]="true";
2945
 
2946
		#回傳給用戶 - start
226 liveuser 2947
 
3 liveuser 2948
		#寫入回應的內容
2949
		fwrite($conf["socket"],json_encode($msg).PHP_EOL);
226 liveuser 2950
 
3 liveuser 2951
		#結束回應
2952
		fwrite($conf["socket"],PHP_EOL.PHP_EOL);
226 liveuser 2953
 
3 liveuser 2954
		#關閉socket連線,將回應輸出.
2955
		fclose($conf["socket"]);
226 liveuser 2956
 
3 liveuser 2957
		#回傳給用戶 - end
2958
 
2959
		#回傳結果
2960
		return $result;
226 liveuser 2961
 
3 liveuser 2962
		}#function addOnProcessFuncForClientCacheDaemon end
226 liveuser 2963
 
3 liveuser 2964
	/*
2965
	#函式說明:
2966
	#給clientCacheDaemon用的funcToRunWhenIdle,處理來自config::client產生的cache內容,若過期就更新,若跟cache檔案不同就更新檔案,若有cache檔案但尚未cache住就cache之.
2967
	#回傳結果:
2968
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
2969
	#$result["error"],錯誤訊息陣列.
2970
	#$result["function"],當前執行的函數名稱.
2971
	#$result["warning"],警告訊息陣列.
2972
	#必填參數:
2973
	#$conf["client"],陣列,用戶的socket.
2974
	#$conf["client"]=array();
2975
	#$conf["info"],陣列,sock跟cache file path資訊.
2976
	#$conf["info"]=array();
2977
	#$conf["info"]["sock"],字串,unix domain socket addr.
2978
	#$conf["info"]["sock"]=;
2979
	#$conf["info"]["cacheFilePath"],字串,cache file path.
2980
	#$conf["info"]["cacheFilePath"]=;
2981
	#$conf["info"]["checkVersionInterval"],字串,距離最後一次取得資料的時間多久就要檢查是否有新資料,預設為60秒.
2982
	#$conf["info"]["checkVersionInterval"]="60";
2983
	#$conf["serverCache"],陣列.存放跟取得快取的陣列.
2984
	#$conf["serverCache"]=array();
2985
	#可省略參數:
2986
	#無.
2987
	#參考資料:
2988
	#無.
2989
	#備註:
2990
	#無,
2991
	*/
2992
	public static function funcToRunWhenIdleForClientCacheDaemon(&$conf){
226 liveuser 2993
 
3 liveuser 2994
		$result=array();
2995
 
2996
		#取得當前執行的函數名稱
2997
		$result["function"]=__FUNCTION__;
2998
 
2999
		#取得參數
3000
		$result["argu"]=$conf;
3001
 
3002
		#如果 $conf 不為陣列
3003
		if(gettype($conf)!="array"){
3004
 
3005
			#設置執行失敗
3006
			$result["status"]="false";
3007
 
3008
			#設置執行錯誤訊息
3009
			$result["error"][]="\$conf變數須為陣列形態";
3010
 
3011
			#如果傳入的參數為 null
3012
			if(is_null($conf)){
3013
 
3014
				#設置執行錯誤訊息
3015
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
3016
 
3017
				}#if end
3018
 
3019
			#回傳結果
3020
			return $result;
3021
 
3022
			}#if end
226 liveuser 3023
 
3 liveuser 3024
		#函式說明:
3025
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
3026
		#回傳結果:
3027
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3028
		#$result["error"],執行不正常結束的錯訊息陣列.
3029
		#$result["simpleError"],簡單表示的錯誤訊息.
3030
		#$result["function"],當前執行的函式名稱.
3031
		#$result["argu"],設置給予的參數.
3032
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3033
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3034
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3035
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
3036
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
3037
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3038
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3039
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3040
		#必填參數:
3041
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3042
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
3043
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3044
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3045
		#可省略參數:
3046
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3047
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("client","info","serverCache");
3048
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
3049
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","array","array");
3050
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
3051
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3052
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
3053
		$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("info");
3054
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
3055
		#$conf["canBeEmpty"]=array();
3056
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3057
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock");
3058
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3059
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","request");
3060
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3061
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("resource","array");
3062
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3063
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"60");
3064
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3065
		#$conf["disallowAllSkipableVarIsEmpty"]="";
3066
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
3067
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
3068
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
3069
		#$conf["disallowAllSkipableVarNotExist"]="";
3070
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3071
		#$conf["arrayCountEqualCheck"][]=array();
3072
		#參考資料:
3073
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3074
		#備註:
3075
		#無.
3076
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3077
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 3078
 
3 liveuser 3079
		#如果執行失敗
3080
		if($checkArguments["status"]==="false"){
226 liveuser 3081
 
3 liveuser 3082
			#設置錯誤識別
3083
			$result["status"]="false";
226 liveuser 3084
 
3 liveuser 3085
			#設置錯誤訊息
3086
			$result["error"]=$checkArguments;
226 liveuser 3087
 
3 liveuser 3088
			#回傳結果
3089
			return $result;
226 liveuser 3090
 
3 liveuser 3091
			}#if end
226 liveuser 3092
 
3 liveuser 3093
		#如果檢查不通過
3094
		if($checkArguments["passed"]==="false"){
226 liveuser 3095
 
3 liveuser 3096
			#設置錯誤識別
3097
			$result["status"]="false";
226 liveuser 3098
 
3 liveuser 3099
			#設置錯誤訊息
3100
			$result["error"]=$checkArguments;
226 liveuser 3101
 
3 liveuser 3102
			#回傳結果
3103
			return $result;
226 liveuser 3104
 
3 liveuser 3105
			}#if end
226 liveuser 3106
 
3 liveuser 3107
		#debug
3108
		#var_dump(__LINE__,$conf);
226 liveuser 3109
 
3 liveuser 3110
		#函式說明:
3111
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
3112
		#回傳結果:
3113
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3114
		#$result["error"],執行不正常結束的錯訊息陣列.
3115
		#$result["simpleError"],簡單表示的錯誤訊息.
3116
		#$result["function"],當前執行的函式名稱.
3117
		#$result["argu"],設置給予的參數.
3118
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
3119
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
3120
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
3121
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
3122
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
3123
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
3124
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
3125
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
3126
		#必填參數:
3127
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
3128
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf["info"];
3129
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
3130
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
3131
		#可省略參數:
3132
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
3133
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("sock","cacheFilePath","checkVersionInterval");
3134
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
3135
		$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");
3136
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
3137
		$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
3138
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
3139
		#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("sock");
3140
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
3141
		#$conf["canBeEmpty"]=array();
3142
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
3143
		#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock");
3144
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
3145
		#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","request");
3146
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
3147
		#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("resource","array");
3148
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
3149
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"60");
3150
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
3151
		#$conf["disallowAllSkipableVarIsEmpty"]="";
3152
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
3153
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
3154
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
3155
		#$conf["disallowAllSkipableVarNotExist"]="";
3156
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
3157
		#$conf["arrayCountEqualCheck"][]=array();
3158
		#參考資料:
3159
		#array_keys=>http://php.net/manual/en/function.array-keys.php
3160
		#備註:
3161
		#無.
3162
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
3163
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 3164
 
3 liveuser 3165
		#如果執行失敗
3166
		if($checkArguments["status"]==="false"){
226 liveuser 3167
 
3 liveuser 3168
			#設置錯誤識別
3169
			$result["status"]="false";
226 liveuser 3170
 
3 liveuser 3171
			#設置錯誤訊息
3172
			$result["error"]=$checkArguments;
226 liveuser 3173
 
3 liveuser 3174
			#回傳結果
3175
			return $result;
226 liveuser 3176
 
3 liveuser 3177
			}#if end
226 liveuser 3178
 
3 liveuser 3179
		#如果檢查不通過
3180
		if($checkArguments["passed"]==="false"){
226 liveuser 3181
 
3 liveuser 3182
			#設置錯誤識別
3183
			$result["status"]="false";
226 liveuser 3184
 
3 liveuser 3185
			#設置錯誤訊息
3186
			$result["error"]=$checkArguments;
226 liveuser 3187
 
3 liveuser 3188
			#回傳結果
3189
			return $result;
226 liveuser 3190
 
3 liveuser 3191
			}#if end
226 liveuser 3192
 
3 liveuser 3193
		#另存 cacheFilePath
3194
		$cacheFilePath=$conf["info"]["cacheFilePath"];
226 liveuser 3195
 
3 liveuser 3196
		#另存 checkVersionInterval
3197
		$checkVersionInterval=$conf["info"]["checkVersionInterval"];
226 liveuser 3198
 
3 liveuser 3199
		#檢查之前執行的 config:client - start
226 liveuser 3200
 
3 liveuser 3201
		#如果有儲存之前執行的 config:client
3202
		if(isset($conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["procs"])){
226 liveuser 3203
 
3204
			#針對每個 proc
3 liveuser 3205
			foreach($conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["procs"] as $index => $porc){
226 liveuser 3206
 
3 liveuser 3207
				#如果程序已經結束
3208
				if($porc["proc_get_status"]["running"]===false){
226 liveuser 3209
 
3 liveuser 3210
					#如果程序正常結束
3211
					if($porc["proc_get_status"]["exitcode"]===0){
226 liveuser 3212
 
3 liveuser 3213
						#取得輸出
3214
						$clientConfigRes=stream_get_contents($porc["content"]);
226 liveuser 3215
 
3 liveuser 3216
						#set json string content
3217
						$conf["serverCache"]["clientSide"]["share"]["configs"][$porc["server"]][$proc["postName"]]["content"]=$clientConfigRes;
226 liveuser 3218
 
3 liveuser 3219
						}#if end
226 liveuser 3220
 
3 liveuser 3221
					#移除之
3222
					unset($conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["procs"][$index]);
226 liveuser 3223
 
3 liveuser 3224
					}#if end
226 liveuser 3225
 
3 liveuser 3226
				#反之
3227
				else {
226 liveuser 3228
 
3 liveuser 3229
					#更新 proc_get_status
3230
					$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["procs"][$index]["proc_get_status"]=proc_get_status($porc["process"]);
226 liveuser 3231
 
3 liveuser 3232
					}#else end
226 liveuser 3233
 
3 liveuser 3234
				}#foreach end
226 liveuser 3235
 
3 liveuser 3236
			#儲存 procs 的元素數量
3237
			$procsCount=count($conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["procs"]);
226 liveuser 3238
 
3 liveuser 3239
			#如果有proc尚未結束
3240
			if($procsCount>0){
226 liveuser 3241
 
3 liveuser 3242
				#提示之
3243
				echo "尚有 ".$procsCount." 個取得 config 的程序執行中".PHP_EOL;
226 liveuser 3244
 
3 liveuser 3245
				#設置執行正常
3246
				$result["status"]="true";
226 liveuser 3247
 
3 liveuser 3248
				#回傳結果
3249
				return $result;
226 liveuser 3250
 
3 liveuser 3251
				}#if end
226 liveuser 3252
 
3 liveuser 3253
			}#if end
226 liveuser 3254
 
3 liveuser 3255
		#檢查之前執行的 config:client - end
226 liveuser 3256
 
3 liveuser 3257
		#檢查有每個 cache 檔案,若沒有對應的 clientCache,則 cache 之. - start
226 liveuser 3258
 
3 liveuser 3259
		#函式說明:
3260
		#取得目錄底下的詳細資訊.
3261
		#回傳結果:
3262
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3263
		#$result["error"],錯誤訊息.
3264
		#$result["function"],當前執行的函數名稱.
3265
		#$result["size"],該清單的大小,單位為bytes.
3266
		#$result["dataCount"],該清單的長度.
3267
		#$result["content"],指定目錄底下的所有檔案資訊.
3268
		#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.
3269
		#$result["content"][$i]["nType"],第$i個節點類型.
3270
		#$result["content"][$i]["permission"],第$i個節點權限.
3271
		#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.
3272
		#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.
3273
		#$result["content"][$i]["bytes"],第$i個節點大小.
3274
		#$result["content"][$i]["date"],第$i個節點最後變更日期.
3275
		#$result["content"][$i]["time"],第$i個節點最後異動時間.
3276
		#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.
3277
		#$result["content"][$i]["timezone"],第$i個節點的時區.
3278
		#$result["content"][$i]["name"],第$i個節點的名稱.
3279
		#必填參數:
3280
		#$conf["path"],字串,要檢視的路徑.
3281
		$conf["fileAccess::ls"]["path"]=$cacheFilePath;
3282
		#可省略參數:
3283
		#無.
3284
		#參考資料:
3285
		#https://www.businessweekly.com.tw/careers/Blog/14307
3286
		#備註:
3287
		#清單要不包含 "."開頭 跟 "~" 開頭
3288
		$ls=fileAccess::ls($conf["fileAccess::ls"]);
3289
		unset($conf["fileAccess::ls"]);
226 liveuser 3290
 
3 liveuser 3291
		#如果執行失敗
3292
		if($ls["status"]==="false"){
226 liveuser 3293
 
3 liveuser 3294
			#設置錯誤識別
3295
			$result["status"]="false";
226 liveuser 3296
 
3 liveuser 3297
			#設置錯誤訊息
3298
			$result["error"]=$ls;
226 liveuser 3299
 
3 liveuser 3300
			#debug
3301
			var_dump(__LINE__,$result);
226 liveuser 3302
 
3 liveuser 3303
			#回傳結果
3304
			return $result;
226 liveuser 3305
 
3 liveuser 3306
			}#if end
226 liveuser 3307
 
3 liveuser 3308
		#針對每個節點
3309
		foreach($ls["content"] as $nodeInfo){
226 liveuser 3310
 
3 liveuser 3311
			#檔案名稱
3312
			#$nodeInfo["name"]
226 liveuser 3313
 
3 liveuser 3314
			#已經chche後的檔案陣列
3315
			#$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["cachedFile"]
226 liveuser 3316
 
3 liveuser 3317
			#如果沒有已經cache的項目
3318
			if(!isset($conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"])){
226 liveuser 3319
 
3 liveuser 3320
				#初始化之
3321
				$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["cachedFile"]=array();
226 liveuser 3322
 
3 liveuser 3323
				}#if end
226 liveuser 3324
 
3 liveuser 3325
			#函式說明:
3326
			#檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
3327
			#回傳結果:
3328
			#$result["status"],"true"表示執行正確,"false"表示執行錯誤.
3329
			#$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
3330
			#$result["error"],錯誤訊息
3331
			#$result["function"],當前執行的函數名稱
3332
			#$result["argv"],使用的參數
3333
			#$result["equalVarName"],相等的變數名稱或key.
3334
			#$result["equalVarValue"],相等的變數數值內容.
3335
			#必填參數:
3336
			#$conf["conditionElement"],字串,條件元素,要等於的元素內容.
3337
			$conf["search::getEqualVar"]["conditionElement"]=$nodeInfo["name"];
3338
			#$conf["compareElements"],字串陣列,要比對的陣列變數內容.
3339
			$conf["search::getEqualVar"]["compareElements"]=$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["cachedFile"];
3340
			#可省略參數:
3341
			#無.
3342
			#參考資料:
3343
			#無.
3344
			#備註:
3345
			#無.
3346
			$getEqualVar=search::getEqualVar($conf["search::getEqualVar"]);
3347
			unset($conf["search::getEqualVar"]);
226 liveuser 3348
 
3 liveuser 3349
			#debug
3350
			#var_dump(__LINE__,$getEqualVar);
226 liveuser 3351
 
3 liveuser 3352
			#如果執行失敗
3353
			if($getEqualVar["status"]==="false"){
226 liveuser 3354
 
3 liveuser 3355
				#設置錯誤識別
3356
				$result["status"]="false";
226 liveuser 3357
 
3 liveuser 3358
				#設置錯誤訊息
3359
				$result["error"]=$getEqualVar;
226 liveuser 3360
 
3 liveuser 3361
				#debug
3362
				var_dump(__LINE__,$result);
226 liveuser 3363
 
3 liveuser 3364
				#回傳結果
3365
				return $result;
226 liveuser 3366
 
3 liveuser 3367
				}#if end
226 liveuser 3368
 
3 liveuser 3369
			#如果已經cache過
3370
			if($getEqualVar["founded"]==="true"){
226 liveuser 3371
 
3 liveuser 3372
				#換下個檔案
3373
				continue;
226 liveuser 3374
 
3 liveuser 3375
				}#if end
226 liveuser 3376
 
3 liveuser 3377
			#debug
3378
			#var_dump(__LINE__,$getEqualVar);
226 liveuser 3379
 
3 liveuser 3380
			#如果是檔案
3381
			if($nodeInfo["nType"]==="-"){
226 liveuser 3382
 
3 liveuser 3383
				#debug
3384
				#var_dump(__LINE__,"檢測尚未cache的檔案",$nodeInfo);
226 liveuser 3385
 
3 liveuser 3386
				#判斷是否為cache檔案,範例:"client::config-cache-".urlencode($conf["request"]["postName"])." from ".urlencode($conf["request"]["server"]).".json";
3387
				#函式說明:
3388
				#檢查字串是否符合指定格式
3389
				#回傳結果:
3390
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3391
				#$result["passed"],檢查是否通過,"true"代表通過,"false"代表不通過.
3392
				#$result["content"],詳細結果訊息陣列,若passed為"false"則會有該內容.
3393
				#$result["newInputArgu"],剩下尚未檢驗格式的input.
3394
				#$result["function"],當前執行的函數.
3395
				#$result["error"],涵式錯誤訊息陣列.
3396
				#必填參數:
3397
				#$conf["input"],字串,要檢查格式的字串.
3398
				$conf["variableCheck::checkStringFormat"]["input"]=$nodeInfo["name"];
3399
				#可省略參數:
3400
				#$conf["equalWith"],字串,輸入字串是否等於該參數內容.
3401
				#$conf["variableCheck::checkStringFormat"]["equalWith"]=".json";
3402
				#$conf["startWith"],字串,開頭要是什麼字串內容.
3403
				$conf["variableCheck::checkStringFormat"]["startWith"]="client::config-cache-";
3404
				#$conf["endWith"],字串,結尾要是什麼字串內容.
3405
				$conf["variableCheck::checkStringFormat"]["endWith"]=".json";
3406
				#$conf["centerWith"],字串,非開頭(預設無,若有指定startWith參數,則為該參數內容)跟結尾(預設無,若有指定endWith參數,則為該參數內容)的內容中要有什麼字串.
3407
				$conf["variableCheck::checkStringFormat"]["centerWith"]=" from https";
3408
				#$conf["length"],字串整數,字串的長度要多少(bytes).
3409
				#$conf["length"]="";
3410
				#$conf["lengthGrapheme"],字串整數,字串的長度要多少字位(grapheme).
3411
				#$conf["lengthGrapheme"]="";
3412
				#$conf["section"],字串陣列,元素數量代表,輸入字串的格式可以區分成多少段.每個元素為本函式的參數陣列剔除input跟section參數.
3413
				#$conf["section"]=array();
3414
				#參考資料:
3415
				#grapheme_strlen=>https://www.php.net/manual/en/function.grapheme-strlen.php
3416
				#grapheme/字位/可以書寫的最小單位=>https://zh.wikipedia.org/zh-tw/%E5%AD%97%E4%BD%8D
3417
				#grapheme_substr=>https://www.php.net/manual/en/function.grapheme-substr.php
3418
				#備註:
3419
				#無.
3420
				$checkStringFormat=variableCheck::checkStringFormat($conf["variableCheck::checkStringFormat"]);
3421
				unset($conf["variableCheck::checkStringFormat"]);
226 liveuser 3422
 
3 liveuser 3423
				#debug
3424
				#var_dump(__LINE__,$checkStringFormat);
226 liveuser 3425
 
3 liveuser 3426
				#如果執行失敗
3427
				if($checkStringFormat["status"]==="false"){
226 liveuser 3428
 
3 liveuser 3429
					#設置錯誤識別
3430
					$result["status"]="false";
226 liveuser 3431
 
3 liveuser 3432
					#設置錯誤訊息
3433
					$result["error"]=$checkStringFormat;
226 liveuser 3434
 
3 liveuser 3435
					#debug
3436
					var_dump(__LINE__,$result);
226 liveuser 3437
 
3 liveuser 3438
					#回傳結果
3439
					return $result;
226 liveuser 3440
 
3 liveuser 3441
					}#if end
226 liveuser 3442
 
3 liveuser 3443
				#如果是符合的暫存檔案
3444
				if($checkStringFormat["passed"]==="true"){
226 liveuser 3445
 
3 liveuser 3446
					#解析對應的 postName 與 server - start
226 liveuser 3447
 
3 liveuser 3448
					#函式說明:
3449
					#將字串特定關鍵字與其前面的內容剔除
3450
					#回傳結果:
3451
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3452
					#$result["error"],錯誤訊息陣列.
3453
					#$result["warning"],警告訊息鎮列.
3454
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
3455
					#$result["function"],當前執行的函數名稱.
3456
					#$result["argu"],使用的參數.
3457
					#$result["oriStr"],要處理的原始字串內容.
226 liveuser 3458
					#$result["content"],處理好的的字串內容.
3 liveuser 3459
					#必填參數:
3460
					#$conf["stringIn"],字串,要處理的字串.
3461
					$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$nodeInfo["name"];
3462
					#$conf["keyWord"],字串,特定字串.
3463
					$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="client::config-cache-";
3464
					#可省略參數:
3465
					#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
3466
					#$conf["recursive"]="true";
3467
					#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則回改回傳該內容.
3468
					#$conf["lastResult"]=$delStrBeforeKeyWord;
3469
					#參考資料:
3470
					#無.
3471
					#備註:
3472
					#無.
3473
					$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
3474
					unset($conf["stringProcess::delStrBeforeKeyWord"]);
226 liveuser 3475
 
3 liveuser 3476
					#如果執行失敗
3477
					if($delStrBeforeKeyWord["status"]==="false"){
226 liveuser 3478
 
3 liveuser 3479
						#設置錯誤識別
3480
						$result["status"]="false";
226 liveuser 3481
 
3 liveuser 3482
						#設置錯誤訊息
3483
						$result["error"]=$delStrBeforeKeyWord;
226 liveuser 3484
 
3 liveuser 3485
						#debug
3486
						var_dump(__LINE__,$result);
226 liveuser 3487
 
3 liveuser 3488
						#回傳結果
3489
						return $result;
226 liveuser 3490
 
3 liveuser 3491
						}#if end
226 liveuser 3492
 
3 liveuser 3493
					#如果沒有關鍵字
3494
					if($delStrBeforeKeyWord["founded"]==="false"){
226 liveuser 3495
 
3 liveuser 3496
						#設置錯誤識別
3497
						$result["status"]="false";
226 liveuser 3498
 
3 liveuser 3499
						#設置錯誤訊息
3500
						$result["error"]=$delStrBeforeKeyWord;
226 liveuser 3501
 
3 liveuser 3502
						#debug
3503
						var_dump(__LINE__,$result);
226 liveuser 3504
 
3 liveuser 3505
						#回傳結果
3506
						return $result;
226 liveuser 3507
 
3 liveuser 3508
						}#if end
226 liveuser 3509
 
3 liveuser 3510
					#函式說明:
3511
					#將字串特定關鍵字與其後面的內容剔除
3512
					#回傳結果:
3513
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3514
					#$result["error"],錯誤訊息陣列.
3515
					#$result["warning"],警告訊息鎮列.
3516
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
3517
					#$result["function"],當前執行的函數名稱.
3518
					#$result["oriStr"],要處理的原始字串內容.
3519
					#$result["content"],處理好的的字串內容.
3520
					#$result["argu"],使用的參數.
3521
					#必填參數:
3522
					#$conf["stringIn"],字串,要處理的字串.
3523
					$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];
3524
					#$conf["keyWord"],字串,特定字串.
3525
					$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=".json";
3526
					#可省略參數:
3527
					#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
3528
					$conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="true";
3529
					#參考資料:
3530
					#無.
3531
					#備註:
3532
					#無.
3533
					$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
3534
					unset($conf["stringProcess::delStrAfterKeyWord"]);
226 liveuser 3535
 
3 liveuser 3536
					#如果執行失敗
3537
					if($delStrAfterKeyWord["status"]==="false"){
226 liveuser 3538
 
3 liveuser 3539
						#設置錯誤識別
3540
						$result["status"]="false";
226 liveuser 3541
 
3 liveuser 3542
						#設置錯誤訊息
3543
						$result["error"]=$delStrAfterKeyWord;
226 liveuser 3544
 
3 liveuser 3545
						#debug
3546
						var_dump(__LINE__,$result);
226 liveuser 3547
 
3 liveuser 3548
						#回傳結果
3549
						return $result;
226 liveuser 3550
 
3 liveuser 3551
						}#if end
226 liveuser 3552
 
3 liveuser 3553
					#如果沒有關鍵字
3554
					if($delStrAfterKeyWord["founded"]==="false"){
226 liveuser 3555
 
3 liveuser 3556
						#設置錯誤識別
3557
						$result["status"]="false";
226 liveuser 3558
 
3 liveuser 3559
						#設置錯誤訊息
3560
						$result["error"]=$delStrAfterKeyWord;
226 liveuser 3561
 
3 liveuser 3562
						#debug
3563
						var_dump(__LINE__,$result);
226 liveuser 3564
 
3 liveuser 3565
						#回傳結果
3566
						return $result;
226 liveuser 3567
 
3 liveuser 3568
						}#if end
226 liveuser 3569
 
3 liveuser 3570
					#另存postName與server的字串
3571
					$postNameAndServerStr=$delStrAfterKeyWord["content"];
226 liveuser 3572
 
3 liveuser 3573
					#用 " from " 來切割
3574
					#函式說明:
3575
					#將固定格式的字串分開,並回傳分開的結果.
3576
					#回傳結果:
3577
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3578
					#$result["error"],錯誤訊息陣列
3579
					#$result["function"],當前執行的函數名稱.
3580
					#$result["argu"],使用的參數.
3581
					#$result["oriStr"],要分割的原始字串內容
3582
					#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
3583
					#$result["dataCounts"],爲總共分成幾段
3584
					#$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
3585
					#必填參數:
3586
					#$conf["stringIn"],字串,要處理的字串.
3587
					$conf["stringProcess::spiltString"]["stringIn"]=$postNameAndServerStr;
3588
					#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
3589
					$conf["stringProcess::spiltString"]["spiltSymbol"]=" from ";
3590
					#可省略參數:
3591
					#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
3592
					$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
3593
					#參考資料:
3594
					#無.
3595
					#備註:
3596
					#無.
3597
					$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
3598
					unset($conf["stringProcess::spiltString"]);
226 liveuser 3599
 
3 liveuser 3600
					#如果執行失敗
3601
					if($spiltString["status"]==="false"){
226 liveuser 3602
 
3 liveuser 3603
						#設置錯誤識別
3604
						$result["status"]="false";
226 liveuser 3605
 
3 liveuser 3606
						#設置錯誤訊息
3607
						$result["error"]=$spiltString;
226 liveuser 3608
 
3 liveuser 3609
						#debug
3610
						var_dump(__LINE__,$resutl);
226 liveuser 3611
 
3 liveuser 3612
						#回傳結果
3613
						return $result;
226 liveuser 3614
 
3 liveuser 3615
						}#if end
226 liveuser 3616
 
3 liveuser 3617
					#如果沒有應該要存在的關鍵字
3618
					if($spiltString["found"]==="false"){
226 liveuser 3619
 
3 liveuser 3620
						#設置錯誤識別
3621
						$result["status"]="false";
226 liveuser 3622
 
3 liveuser 3623
						#設置錯誤訊息
3624
						$result["error"]=$spiltString;
226 liveuser 3625
 
3 liveuser 3626
						#debug
3627
						var_dump(__LINE__,$result);
226 liveuser 3628
 
3 liveuser 3629
						#回傳結果
3630
						return $result;
226 liveuser 3631
 
3 liveuser 3632
						}#if end
226 liveuser 3633
 
3 liveuser 3634
					#如果沒有切割出2兩段以上
3635
					if($spiltString["dataCounts"]<2){
226 liveuser 3636
 
3 liveuser 3637
						#設置錯誤識別
3638
						$result["status"]="false";
226 liveuser 3639
 
3 liveuser 3640
						#設置錯誤訊息
3641
						$result["error"]=$spiltString;
226 liveuser 3642
 
3 liveuser 3643
						#debug
3644
						var_dump(__LINE__,$result);
226 liveuser 3645
 
3 liveuser 3646
						#回傳結果
3647
						return $result;
226 liveuser 3648
 
3 liveuser 3649
						}#if end
226 liveuser 3650
 
3 liveuser 3651
					#取得解析好的來源(urlencoded)
3652
					$server=$spiltString["dataArray"][$spiltString["dataCounts"]-1];
226 liveuser 3653
 
3 liveuser 3654
					#函式說明:
3655
					#將字串特定關鍵字與其後面的內容剔除
3656
					#回傳結果:
3657
					#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
3658
					#$result["error"],錯誤訊息陣列.
3659
					#$result["warning"],警告訊息鎮列.
3660
					#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
3661
					#$result["function"],當前執行的函數名稱.
3662
					#$result["oriStr"],要處理的原始字串內容.
3663
					#$result["content"],處理好的的字串內容.
3664
					#$result["argu"],使用的參數.
3665
					#必填參數:
3666
					#$conf["stringIn"],字串,要處理的字串.
3667
					$conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$postNameAndServerStr;
3668
					#$conf["keyWord"],字串,特定字串.
3669
					$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=" from ".$server;
3670
					#可省略參數:
3671
					#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
3672
					$conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="true";
3673
					#參考資料:
3674
					#無.
3675
					#備註:
3676
					#無.
3677
					$delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
3678
					unset($conf["stringProcess::delStrAfterKeyWord"]);
226 liveuser 3679
 
3 liveuser 3680
					#如果執行失敗
3681
					if($delStrAfterKeyWord["status"]==="false"){
226 liveuser 3682
 
3 liveuser 3683
						#設置錯誤識別
3684
						$result["status"]="false";
226 liveuser 3685
 
3 liveuser 3686
						#設置錯誤訊息
3687
						$result["error"]=$delStrAfterKeyWord;
226 liveuser 3688
 
3 liveuser 3689
						#debug
3690
						var_dump(__LINE__,$result);
226 liveuser 3691
 
3 liveuser 3692
						#回傳結果
3693
						return $result;
226 liveuser 3694
 
3 liveuser 3695
						}#if end
226 liveuser 3696
 
3 liveuser 3697
					#如果沒有關鍵字
3698
					if($delStrAfterKeyWord["founded"]==="false"){
226 liveuser 3699
 
3 liveuser 3700
						#設置錯誤識別
3701
						$result["status"]="false";
226 liveuser 3702
 
3 liveuser 3703
						#設置錯誤訊息
3704
						$result["error"]=$delStrAfterKeyWord;
226 liveuser 3705
 
3 liveuser 3706
						#debug
3707
						var_dump(__LINE__,$resutl);
226 liveuser 3708
 
3 liveuser 3709
						#回傳結果
3710
						return $result;
226 liveuser 3711
 
3 liveuser 3712
						}#if end
226 liveuser 3713
 
3 liveuser 3714
					#另存postName與server的字串
3715
					$postName=$delStrAfterKeyWord["content"];
226 liveuser 3716
 
3 liveuser 3717
					#解析對應的 postName 與 server - end
226 liveuser 3718
 
3 liveuser 3719
					#如果對應該cache檔案的cache不存在
3720
					if(!isset($conf["serverCache"]["clientSide"]["share"]["configs"][urldecode($server)][$postName])){
226 liveuser 3721
 
3 liveuser 3722
						#讀取其json
3723
						#函式說明:
3724
						#依據行號分隔抓取檔案的內容,結果會回傳一個陣列
3725
						#回傳的變數說明:
3726
						#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.
3727
						#$result["error"],錯誤訊息提示.
3728
						#$result["warning"],警告訊息.
3729
						#$result["function"],當前執行的函數名稱.
3730
						#$result["fileContent"],爲檔案的內容陣列.
3731
						#$result["lineCount"],爲檔案內容總共的行數.
3732
						#$result["fullContent"],為檔案的完整內容.
3733
						#$result["base64data"],為檔案的base64內容.
3734
						#$result["mimeType"],為檔案的mime type.
3735
						#必填參數:
3736
						#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.
3737
						$conf["fileAccess::getFileContent"]["filePositionAndName"]=$cacheFilePath.$nodeInfo["name"];
3738
						#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3739
						$conf["fileAccess::getFileContent"]["fileArgu"]=__FILE__;
3740
						#可省略參數:
3741
						#$conf["web"],是要取得網路上的檔案則為"true";反之預設為"false".
3742
						$conf["fileAccess::getFileContent"]["web"]="false";
3743
						#$conf["createIfnotExist"],字串,預設為"false"代表檔案不存在也不需要建立;反之為"true".
3744
						$conf["fileAccess::getFileContent"]["createIfnotExist"]="false";
3745
						#參考資料:
3746
						#file(),取得檔案內容的行數.
3747
						#file=>http:#php.net/manual/en/function.file.php
3748
						#rtrim(),剔除透過file()取得每行內容結尾的換行符號.
3749
						#filesize=>http://php.net/manual/en/function.filesize.php
3750
						#參考資料:
3751
						#無.
3752
						#備註:
3753
						#無.
3754
						$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);
3755
						unset($conf["fileAccess::getFileContent"]);
226 liveuser 3756
 
3 liveuser 3757
						#如果執行失敗
3758
						if($getFileContent["status"]==="false"){
226 liveuser 3759
 
3 liveuser 3760
							#設置錯誤識別
3761
							$result["status"]="false";
226 liveuser 3762
 
3 liveuser 3763
							#設置錯誤訊息
3764
							$result["error"]=$getFileContent;
226 liveuser 3765
 
3 liveuser 3766
							#debug
3767
							var_dump(__LINE__,$result);
226 liveuser 3768
 
3 liveuser 3769
							#回傳結果
3770
							return $result;
226 liveuser 3771
 
3 liveuser 3772
							}#if end
3773
 
3774
						#debug
3775
						#var_dump(__LINE__,$getFileContent);
3776
 
3777
						#set json string content
3778
						$conf["serverCache"]["clientSide"]["share"]["configs"][urldecode($server)][$postName]["content"]=$getFileContent["fullContent"];
226 liveuser 3779
 
3 liveuser 3780
						#設置已經有 cache 成檔案
3781
						$conf["serverCache"]["clientSide"]["share"]["configs"][urldecode($server)][$postName]["cachedFile"]="true";
226 liveuser 3782
 
3 liveuser 3783
						#set cached file
3784
						$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["cachedFile"][]=$nodeInfo["name"];
226 liveuser 3785
 
3 liveuser 3786
						#debug
3787
						#var_dump(__LINE__,$conf["serverCache"]);
226 liveuser 3788
 
3 liveuser 3789
						}#if end
226 liveuser 3790
 
3 liveuser 3791
					}#if end
226 liveuser 3792
 
3 liveuser 3793
				}#if end
226 liveuser 3794
 
3 liveuser 3795
			}#foreach end
226 liveuser 3796
 
3 liveuser 3797
		#檢查有每個 cache 檔案,若沒有對應的 clientCache,則cache 之. - end
226 liveuser 3798
 
3 liveuser 3799
		#檢查每個 clientCache 若過期則更新之. - start
226 liveuser 3800
 
3 liveuser 3801
		#如果沒有 $conf["serverCache"]["clientSide"]["share"]
3802
		if(!isset($conf["serverCache"]["clientSide"]["share"])){
226 liveuser 3803
 
3 liveuser 3804
			#初始化之
3805
			$conf["serverCache"]["clientSide"]["share"]["configs"]=array();
226 liveuser 3806
 
3 liveuser 3807
			}#if end
226 liveuser 3808
 
3 liveuser 3809
		#針對每個 client site 的 share configs 變數
3810
		foreach($conf["serverCache"]["clientSide"]["share"]["configs"] as $serverUrl => $postNames){
226 liveuser 3811
 
3 liveuser 3812
			#針對該site每個config資訊
3813
			foreach($postNames as $configName => $configVal){
226 liveuser 3814
 
3 liveuser 3815
				#如果沒有最後更新時間
3816
				if(!isset($postNames["time"])){
226 liveuser 3817
 
3 liveuser 3818
					#設置最後更新時間
3819
					$conf["serverCache"]["clientSide"]["share"]["configs"][$serverUrl][$configName]["time"]=time();
226 liveuser 3820
 
3 liveuser 3821
					#換下一個 postName
3822
					continue;
226 liveuser 3823
 
3 liveuser 3824
					}#if end
226 liveuser 3825
 
3 liveuser 3826
				#如果過期了
3827
				if( time()-$postNames["time"]>$checkVersionInterval ){
226 liveuser 3828
 
3 liveuser 3829
					#嘗試從網路取得config
3830
					#函式說明:
3831
					#查尋有使用 server 函式提供組態設定檔的服務,取得key的value.
3832
					#回傳結果:
3833
					#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
3834
					#$result["error"],錯誤訊息陣列.
3835
					#$result["function"],當前執行的函數名稱.
3836
					#$result["rawContent"],得到的原始訊息.
3837
					#$result["content"],用json_decode後的結果;若"inBg"為"true",則其每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
3838
					#必填參數:
3839
					#$conf["server"],字串,組態服務設定服務的網址
3840
					$conf["config::client"]["server"]=$serverUrl;
3841
					#$conf["postName"],字串,POST變數的名稱,亦即要查尋的定義名稱.
3842
					$conf["config::client"]["postName"]=$configName;
3843
					#$conf["fileArgu"],字串,變數__FILE__的內容.
3844
					$conf["config::client"]["fileArgu"]=__FILE__;
3845
					#可省略參數:
3846
					#$conf["cache"],字串,預設為"true",代表會啟用cache服務;反之為"false".
3847
					$conf["config::client"]["cache"]="false";
3848
					#$conf["clientCacheDaemonSock"],字串,提供cache服務的 unix domain socket 檔案位置,預設為套件根目錄底下的"var/config::client/clientCacheDaemon.sock";.
3849
					#$conf["clientCacheDaemonSock"]="";
3850
					#$conf["inBg"],字串,預設為"false",代表在前景執行;反之為"true"代表在背景中執行,會強制將"cache"參數設為"false".
3851
					$conf["config::client"]["inBg"]="true";
3852
					#參考資料:
3853
					#無.
3854
					#備註:
3855
					#目前僅能跟server函式提供的服務對接.
3856
					$client=config::client($conf["config::client"]);
3857
					unset($conf["config::client"]);
226 liveuser 3858
 
3 liveuser 3859
					#若從網路取得成功
3860
					if($client["status"]==="true"){
226 liveuser 3861
 
3 liveuser 3862
						#另存來源
3863
						$client["content"]["server"]=$serverUrl;
226 liveuser 3864
 
3 liveuser 3865
						#另存 configName
3866
						$client["content"]["postName"]=$configName;
226 liveuser 3867
 
3 liveuser 3868
						#儲存起來下次再看跑完沒
3869
						$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["procs"][]=$client["content"];
226 liveuser 3870
 
3 liveuser 3871
						#換處理下個 configName
3872
						continue;
226 liveuser 3873
 
3874
						}#if end
3875
 
3 liveuser 3876
					#執行到這邊代表從網路取得失敗
226 liveuser 3877
 
3 liveuser 3878
					#將事件記錄起來
3879
					var_dump(__FILE__,__LINE__,$client);
226 liveuser 3880
 
3 liveuser 3881
					}#if end
226 liveuser 3882
 
3 liveuser 3883
				}#foreach end
226 liveuser 3884
 
3 liveuser 3885
			}#foreach end
226 liveuser 3886
 
3 liveuser 3887
		#檢查每個 clientCache 若過期則更新之. - end
226 liveuser 3888
 
3 liveuser 3889
		#檢查每個 clientCache 若無對應 cache file 則產生之. - start
226 liveuser 3890
 
3 liveuser 3891
		#針對每個 client site 的 share configs 變數
3892
		foreach($conf["serverCache"]["clientSide"]["share"]["configs"] as $serverUrl => $postNames){
226 liveuser 3893
 
3 liveuser 3894
			#針對該site每個postName資訊
3895
			foreach($postNames as $configName => $configVal){
226 liveuser 3896
 
3 liveuser 3897
				#expected cache file name
3898
				#$cacheFilePath."client::config-cache-".$configName." from ".$serverUrl.".json";
226 liveuser 3899
 
3 liveuser 3900
				#realistic cache file name
3901
				#$cacheFilePath."client::config-cache-".urlencode($configName)." from ".urlencode($serverUrl).".json";
226 liveuser 3902
 
3 liveuser 3903
				#函式說明:
3904
				#檢查多個檔案與資料夾是否存在.
3905
				#回傳的結果:
3906
				#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.
3907
				#$result["error"],錯誤訊息陣列.
3908
				#$resutl["function"],當前執行的涵式名稱.
3909
				#$result["argu"],使用的參數.
3910
				#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.
3911
				#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。
3912
				#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.
3913
				#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.
3914
				#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。
3915
				#必填參數:
3916
				#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。
3917
				$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($cacheFilePath."client::config-cache-".urlencode($configName)." from ".urlencode($serverUrl).".json");
3918
				#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3919
				$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=__FILE__;
3920
				#可省略參數:
3921
				#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".
3922
				$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="true";
3923
				#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".
3924
				$conf["fileAccess::checkMultiFileExist"]["userDir"]="false";
3925
				#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".
3926
				$conf["fileAccess::checkMultiFileExist"]["web"]="false";
3927
				#參考資料:
3928
				#http://php.net/manual/en/function.file-exists.php
3929
				#http://php.net/manual/en/control-structures.foreach.php
3930
				#備註:
3931
				#函數file_exists檢查的路徑為檔案系統的路徑
3932
				#$result["varName"][$i]結果未實作
3933
				$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);
3934
				unset($conf["fileAccess::checkMultiFileExist"]);
226 liveuser 3935
 
3 liveuser 3936
				#如果執行失敗
3937
				if($checkMultiFileExist["status"]==="false"){
226 liveuser 3938
 
3 liveuser 3939
					#設置錯誤識別
3940
					$result["status"]="false";
226 liveuser 3941
 
3 liveuser 3942
					#設置錯誤訊息
3943
					$result["error"]=$checkMultiFileExist;
226 liveuser 3944
 
3 liveuser 3945
					#debug
3946
					var_dump(__LINE__,$result);
226 liveuser 3947
 
3 liveuser 3948
					#回傳結果
3949
					return $result;
226 liveuser 3950
 
3 liveuser 3951
					}#if end
226 liveuser 3952
 
3 liveuser 3953
				#如果 cache file 不存在
3954
				if($checkMultiFileExist["allExist"]==="false"){
226 liveuser 3955
 
3 liveuser 3956
					#函式說明:
3957
					#將字串寫入到檔案
3958
					#回傳結果:
3959
					#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.
3960
					#$result["error"],錯誤訊息陣列.
3961
					#$result["function"],當前執行的函數名稱.
3962
					#$result["fileInfo"],實際上寫入的檔案資訊陣列.
3963
					#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.
3964
					#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.
3965
					#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.
3966
					#$result["argu"],使用的參數.
3967
					#必填參數:
3968
					#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
3969
					$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=__FILE__;
3970
					#可省略參數:
3971
					#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.
3972
					$conf["fileAccess::writeTextIntoFile"]["fileName"]=$cacheFilePath."client::config-cache-".urlencode($configName)." from ".urlencode($serverUrl).".json";
3973
					#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".
3974
					$conf["fileAccess::writeTextIntoFile"]["inputString"]=$conf["serverCache"]["clientSide"]["share"]["configs"][$serverUrl][$configName]["content"];
3975
					#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.
3976
					#$conf["writeMethod"]="a";
3977
					#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.
3978
					#$conf["checkRepeat"]="";
3979
					#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.
3980
					#$conf["filenameExtensionStartPoint"]="";
3981
					#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.
3982
					#$conf["repeatNameRule"]="";
3983
					#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".
3984
					$conf["fileAccess::writeTextIntoFile"]["web"]="false";
3985
					#參考資料:
3986
					#無.
3987
					#備註:
3988
					#無.
3989
					$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);
3990
					unset($conf["fileAccess::writeTextIntoFile"]);
226 liveuser 3991
 
3 liveuser 3992
					#如果執行失敗
3993
					if($writeTextIntoFile["status"]==="false"){
226 liveuser 3994
 
3 liveuser 3995
						#設置錯誤識別
3996
						$result["status"]="false";
226 liveuser 3997
 
3 liveuser 3998
						#設置錯誤訊息
3999
						$result["error"]=$writeTextIntoFile;
226 liveuser 4000
 
3 liveuser 4001
						#debug
4002
						var_dump(__LINE__,$result);
226 liveuser 4003
 
3 liveuser 4004
						#回傳結果
4005
						return $result;
226 liveuser 4006
 
3 liveuser 4007
						}#if end
226 liveuser 4008
 
3 liveuser 4009
					#設置已經有 cache 成檔案
4010
					$conf["serverCache"]["clientSide"]["share"]["configs"][$serverUrl][$configName]["cachedFile"]="true";
226 liveuser 4011
 
3 liveuser 4012
					#set cached file
4013
					$conf["serverCache"]["serverSide"]["config::funcToRunWhenIdleForClientCacheDaemon"]["cachedFile"][]="client::config-cache-".urlencode($configName)." from ".urlencode($serverUrl).".json";
226 liveuser 4014
 
3 liveuser 4015
					}#if end
226 liveuser 4016
 
3 liveuser 4017
				}#foreach end
226 liveuser 4018
 
3 liveuser 4019
			}#foreach end
226 liveuser 4020
 
3 liveuser 4021
		#檢查每個 clientCache 若無對應 cache file 則產生之. - end
226 liveuser 4022
 
3 liveuser 4023
		#設置執行正常
4024
		$result["status"]="true";
226 liveuser 4025
 
3 liveuser 4026
		#回傳結果
4027
		return $result;
226 liveuser 4028
 
3 liveuser 4029
		}#function funcToRunWhenIdleForClientCacheDaemon end
226 liveuser 4030
 
3 liveuser 4031
	/*
4032
	#函式說明:
4033
	#處理來自config::client有使用cache的要求,其為常駐的unix domain socket
4034
	#回傳結果:
4035
	#$result["status"],執行是否正常,"true"為正常,"false"為不正常.
4036
	#$result["error"],錯誤訊息陣列.
4037
	#$result["function"],當前執行的函數名稱.
4038
	#必填參數:
4039
	#無.
4040
	#可省略參數:
4041
	#$conf["sock"],字串,unix doamin socket的位置,預設為套件根目錄底下的"var/config::client/clientCacheDaemon.sock".
4042
	#$conf["sock"]="";
4043
	#$conf["cacheFilePath"],字串,cache的檔案位置,預設為套件根目錄底下的"var/config::client/",
4044
	#$conf["cacheFilePath"]="";
4045
	#$conf["checkVersionInterval"],字串,距離最後一次取得資料的時間多久就要檢查是否有新資料,預設為60秒.
4046
	#$conf["checkVersionInterval"]="60";
4047
	#參考資料:
4048
	#無.
4049
	#備註:
4050
	#無,
4051
	*/
4052
	public static function clientCacheDaemon(&$conf){
226 liveuser 4053
 
3 liveuser 4054
		#初始化要回傳的結果
4055
		$result=array();
4056
 
4057
		#取得當前執行的函數名稱
4058
		$result["function"]=__FUNCTION__;
4059
 
4060
		#取得參數
4061
		$result["argu"]=$conf;
4062
 
4063
		#如果 $conf 不為陣列
4064
		if(gettype($conf)!="array"){
4065
 
4066
			#設置執行失敗
4067
			$result["status"]="false";
4068
 
4069
			#設置執行錯誤訊息
4070
			$result["error"][]="\$conf變數須為陣列形態";
4071
 
4072
			#如果傳入的參數為 null
4073
			if(is_null($conf)){
4074
 
4075
				#設置執行錯誤訊息
4076
				$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";
4077
 
4078
				}#if end
4079
 
4080
			#回傳結果
4081
			return $result;
4082
 
4083
			}#if end
226 liveuser 4084
 
3 liveuser 4085
		#函式說明:
4086
		#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
4087
		#回傳結果:
4088
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
4089
		#$result["error"],執行不正常結束的錯訊息陣列.
4090
		#$result["simpleError"],簡單表示的錯誤訊息.
4091
		#$result["function"],當前執行的函式名稱.
4092
		#$result["argu"],設置給予的參數.
4093
		#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
4094
		#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
4095
		#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
4096
		#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
4097
		#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
4098
		#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
4099
		#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
4100
		#$result["notNeedVar"],字串陣列,多餘的參數名稱.
4101
		#必填參數:
4102
		#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
4103
		$conf["variableCheck::checkArguments"]["varInput"]=&$conf;
4104
		#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
4105
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
4106
		#可省略參數:
4107
		#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
4108
		#$conf["mustBeFilledVariableName"]=array();
4109
		#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
4110
		#$conf["mustBeFilledVariableType"]=array();
4111
		#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
4112
		#$conf["canBeEmptyString"]="false";
4113
		#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
4114
		#$conf["canNotBeEmpty"]=array();
4115
		#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
4116
		#$conf["canBeEmpty"]=array();
4117
		#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
4118
		$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock","cacheFilePath","checkVersionInterval");
4119
		#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
4120
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","cacheFilePath","checkVersionInterval");
4121
		#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
4122
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");
4123
		#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
4124
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"60");
4125
		#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
4126
		#$conf["disallowAllSkipableVarIsEmpty"]="";
4127
		#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
4128
		#$conf["disallowAllSkipableVarIsEmptyArray"]="";
4129
		#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
4130
		#$conf["disallowAllSkipableVarNotExist"]="";
4131
		#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
4132
		#$conf["arrayCountEqualCheck"][]=array();
4133
		#參考資料:
4134
		#array_keys=>http://php.net/manual/en/function.array-keys.php
4135
		#備註:
4136
		#無.
4137
		$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
4138
		unset($conf["variableCheck::checkArguments"]);
226 liveuser 4139
 
3 liveuser 4140
		#如果執行失敗
4141
		if($checkArguments["status"]==="false"){
226 liveuser 4142
 
3 liveuser 4143
			#設置錯誤識別
4144
			$result["status"]="false";
226 liveuser 4145
 
3 liveuser 4146
			#設置錯誤訊息
4147
			$result["error"]=$checkArguments;
226 liveuser 4148
 
3 liveuser 4149
			#回傳結果
4150
			return $result;
226 liveuser 4151
 
3 liveuser 4152
			}#if end
226 liveuser 4153
 
3 liveuser 4154
		#如果檢查不通過
4155
		if($checkArguments["passed"]==="false"){
226 liveuser 4156
 
3 liveuser 4157
			#設置錯誤識別
4158
			$result["status"]="false";
226 liveuser 4159
 
3 liveuser 4160
			#設置錯誤訊息
4161
			$result["error"]=$checkArguments;
226 liveuser 4162
 
3 liveuser 4163
			#回傳結果
4164
			return $result;
226 liveuser 4165
 
3 liveuser 4166
			}#if end
226 liveuser 4167
 
3 liveuser 4168
		#函式說明:
4169
		#取得目前瀏覽的頁面的路徑或執行的php程式路徑.
4170
		#回傳結果:
4171
		#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
4172
		#$result["error"],錯誤訊息.
4173
		#$result["function"],檔前執行的函數名稱.
4174
		#$result["content"],目前瀏覽的頁面的路徑或執行的php程式路徑.
4175
		#$result["serverIp"],取得伺服器ip.
4176
		#$result["scheme"],取得與伺服器連線所使用的通訊協定.
4177
		#必填參數:
4178
		$conf["csInformation::getPathOfThisPhpFile"]["type"]="pathOnly";#想要取得的路徑類型,"full"代表完整路徑,"pathOnly"代表只要路徑,"lastLayer"代表上一層目錄的名稱
4179
		#必填參數:
4180
		#無.
4181
		#可省略參數:
4182
		#無.
4183
		#參考資料:
4184
		#http://blog.longwin.com.tw/2009/01/php-get-directory-file-path-dirname-2008/
4185
		#備註:
4186
		#無.
4187
		$getPathOfThisPhpFile=csInformation::getPathOfThisPhpFile($conf["csInformation::getPathOfThisPhpFile"]);
4188
		unset($conf["csInformation::getPathOfThisPhpFile"]);
226 liveuser 4189
 
3 liveuser 4190
		#如果執行失敗
4191
		if($getPathOfThisPhpFile["status"]=="false"){
226 liveuser 4192
 
3 liveuser 4193
			#設置錯誤識別
4194
			$result["status"]="false";
226 liveuser 4195
 
3 liveuser 4196
			#設置錯誤訊息
4197
			$result["error"]=$getPathOfThisPhpFile;
226 liveuser 4198
 
3 liveuser 4199
			#回傳結果
4200
			return $result;
226 liveuser 4201
 
3 liveuser 4202
			}#if end
226 liveuser 4203
 
3 liveuser 4204
		#如果沒有設定 sock
4205
		if(!isset($conf["sock"])){
226 liveuser 4206
 
3 liveuser 4207
			#設置預設的cache檔案名稱
4208
			$conf["sock"]=$getPathOfThisPhpFile["content"]."var/config::client/clientCacheDaemon.sock";
226 liveuser 4209
 
3 liveuser 4210
			}#if end
226 liveuser 4211
 
3 liveuser 4212
		#如果 無設置 cacheFilePath
4213
		if(!isset($conf["cacheFilePath"])){
226 liveuser 4214
 
4215
			#設置預設的 cacheFilePath
3 liveuser 4216
			$conf["cacheFilePath"]=$getPathOfThisPhpFile["content"]."var/config::client/";
226 liveuser 4217
 
3 liveuser 4218
			}#if end
226 liveuser 4219
 
3 liveuser 4220
		#函式說明:
4221
		#建立 unix domain socket server, 僅提供具備檔案存取權限的用戶使用,預設提供可以下達任何指令的功能.
4222
		#回傳結果:
4223
		#$result["status"],"true"代表執行正常;"false"代表執行不正常.
4224
		#$result["error"],錯誤訊息陣列.
4225
		#$result["function"],當前執行的函式名稱.
4226
		#$result["serverCache"],函式結束前,儲存在serverCache的內容,若有元素"exit"存在則代表是正常結束.
4227
		#必填參數:
4228
		#$conf["sock"],字串,socket檔案要放在哪邊,名稱為何.
4229
		$conf["sock::unixDomainSockServer"]["sock"]=$conf["sock"];
4230
		#$conf["fileArgu"],字串,變數__FILE__的內容.
4231
		$conf["sock::unixDomainSockServer"]["fileArgu"]=__FILE__;
4232
		#可省略參數:
4233
		#$conf["changeOwner"],字串,要將socket檔案的擁有着權限進行修改."user.group"代表擁有者帳號為user,群組為group.
4234
		#$conf["sock::unixDomainSockServer"]["changeOwner"]="root.root";
4235
		#$conf["changePermission"],字串,要將socket檔案的權限設為多少.ex: "0666"(所有帳戶都有存取的權限) 或 "0660"(僅有擁有者與群組帳戶有存取的權限) 或 "0600"(只有擁有者有權限執行).
4236
		#$conf["sock::unixDomainSockServer"]["changePermission"]="0666";
4237
		#$conf["sessionTimeout"],字串,當連線結束後於下一次連線間隔多久就算session timeout,server端會將記錄移除,client端需要重新拿取id,預設為300秒.
4238
		#$conf["sessionTimeout"]="300";
4239
		#$conf["addOnProcessFunc"],字串陣列,增加用於處理 json request 的函式名稱,給予的參數為array("request"=>收到的json訊息,"sock"=>用戶的socket),若收到的不是json而是"quit"則代表用戶要結束連線;若收到的是$shutdownStr則代表要結束本函式.回傳的內容必須為陣列,例如 $res["continue"]="true"代表要繼續執行下一個addOnProcessFunc;"false"代表代表到此為止. $res["content"]="replaced content";代表要將收到的訊息取代成"replaced content". 最少要有回傳 $res["status"]數值"true"代表執行正常;"false"代表執行不正常.
4240
		$conf["sock::unixDomainSockServer"]["addOnProcessFunc"]=array("\qbpwcf\\config::addOnProcessFuncForClientCacheDaemon");
4241
		#$conf["funcToRunWhenIdle"],字串陣列,當沒有事件產生時,要執行的函式名稱,給予參數為array("client"=>所有用戶,"clientCache"=>$result["serverCache"]["clientSide"]["addOnProcessFunc"][$funcToRunWhenIdle],"serverCache"=>$result["serverCache"]["serverSide"]["funcToRunWhenIdle"][$funcToRunWhenIdle]).
4242
		$conf["sock::unixDomainSockServer"]["funcToRunWhenIdle"]=array("\qbpwcf\\config::funcToRunWhenIdleForClientCacheDaemon");
4243
		#$conf["paramsForFuncToRunWhenIdle"],2維陣列,每個元素代表指定給予funcToRunWhenIdle參數中的指定元素的參數.
4244
		#$conf["paramsForFuncToRunWhenIdle"]=array();
4245
		#$conf["infoToFunction"],陣列,需要增加給addOnProcessFunc跟funcToRunWhenIdle函式的資訊,在函式中其參數的info鍵值.
4246
		$conf["sock::unixDomainSockServer"]["infoToFunction"]=array("sock"=>$conf["sock"],"cacheFilePath"=>$conf["cacheFilePath"],"checkVersionInterval"=>$conf["checkVersionInterval"]);
4247
		#$conf["shutdownStrAddr"],字串,儲存收到用戶傳什麼樣的字串會結束本函式的檔案位置與名稱,預設為 $conf["sock"].".shutdown".
4248
		#$conf["shutdownStrAddr"]="";
4249
		#參考資料:
4250
		#http://php.net/manual/en/function.stream-socket-server.php
4251
		#備註:
4252
		#無.
4253
		$unixDomainSockServer=sock::unixDomainSockServer($conf["sock::unixDomainSockServer"]);
4254
		unset($conf["sock::unixDomainSockServer"]);
226 liveuser 4255
 
3 liveuser 4256
		#如果執行失敗
4257
		if($unixDomainSockServer["status"]==="false"){
226 liveuser 4258
 
3 liveuser 4259
			#設置錯誤識別
4260
			$result["status"]="false";
226 liveuser 4261
 
3 liveuser 4262
			#設置錯誤訊息
4263
			$result["error"]=$unixDomainSockServer;
226 liveuser 4264
 
3 liveuser 4265
			#回傳結果
4266
			return $result;
226 liveuser 4267
 
3 liveuser 4268
			}#if end
226 liveuser 4269
 
3 liveuser 4270
		}#function clientCacheDaemon end
226 liveuser 4271
 
3 liveuser 4272
	}#class config end
4273
 
226 liveuser 4274
?>