Subversion Repositories php-qbpwcf

Rev

Rev 3 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3 Rev 226
Line 1... Line 1...
1
#!/usr/bin/php
1
#!/usr/bin/php
2
<?php
2
<?php
3
 
3
 
4
/*
4
/*
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
5
	QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2015~2024 Min-Jhin,Chen
6
    Copyright (C) 2014~2025 MIN ZHI, CHEN
7
 
7
 
8
    This file is part of QBPWCF.
8
    This file is part of QBPWCF.
9
 
9
 
10
    QBPWCF is free software: you can redistribute it and/or modify
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
11
    it under the terms of the GNU General Public License as published by
Line 17... Line 17...
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
    GNU General Public License for more details.
18
    GNU General Public License for more details.
19
 
19
 
20
    You should have received a copy of the GNU General Public License
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/>.
21
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.
22
    
22
 
23
*/
23
*/
24
 
24
 
25
/*
25
/*
26
說明:
26
說明:
27
每天特定時間備份Mariadb資料庫資料到指定的位置
27
每天特定時間備份Mariadb資料庫資料到指定的位置
Line 63... Line 63...
63
	#結束執行,回傳shell 1.
63
	#結束執行,回傳shell 1.
64
	exit(1);
64
	exit(1);
65
 
65
 
66
	}#if end
66
	}#if end
67
 
67
 
68
#設置 include path 
68
#設置 include path
69
set_include_path($output[0].PATH_SEPARATOR.get_include_path());
69
set_include_path($output[0].PATH_SEPARATOR.get_include_path());
70
 
70
 
71
#匯入外部套件
71
#匯入外部套件
72
include("allInOne.php");
72
include("allInOne.php");
73
 
73
 
74
#說明函式
74
#說明函式
75
function help(){
75
function help(){
76
 
76
 
77
	#印出指令說明
77
	#印出指令說明
78
	echo "Usage of ".basename(__FILE__).":".PHP_EOL; 
78
	echo "Usage of ".basename(__FILE__).":".PHP_EOL;
79
	echo "--backTime HourHour:MinMin 代表當下為為HourHour:MinMin時要進行備份,若不設定代表立即執行.".PHP_EOL;
79
	echo "--backTime HourHour:MinMin 代表當下為為HourHour:MinMin時要進行備份,若不設定代表立即執行.".PHP_EOL;
80
	echo "--config addr 代表設定檔的位置,裡面寫有要備份的資料庫資訊.".PHP_EOL;
80
	echo "--config addr 代表設定檔的位置,裡面寫有要備份的資料庫資訊.".PHP_EOL;
81
	echo "--acctVarName name 設定檔中資料庫名稱的變數名稱.".PHP_EOL;
81
	echo "--acctVarName name 設定檔中資料庫名稱的變數名稱.".PHP_EOL;
82
	echo "--passVarName name 設定檔中資料庫密碼的變數名稱.".PHP_EOL;
82
	echo "--passVarName name 設定檔中資料庫密碼的變數名稱.".PHP_EOL;
83
	echo "--dbVarName name 設定檔中資料庫名稱的變數名稱".PHP_EOL;
83
	echo "--dbVarName name 設定檔中資料庫名稱的變數名稱".PHP_EOL;
Line 90... Line 90...
90
	echo "\t".basename(__FILE__)." --backTime 09:01 --config  database.php --acctVarName \"db['default']['username']\" --passVarName \"db['default']['password']\" --dbVarName \"db['default']['database']\" --dbAddrVarName \"db['default']['hostname']\" --dbPortVarName \"db['default']['port']\" --backupAddr \"./\"".PHP_EOL;
90
	echo "\t".basename(__FILE__)." --backTime 09:01 --config  database.php --acctVarName \"db['default']['username']\" --passVarName \"db['default']['password']\" --dbVarName \"db['default']['database']\" --dbAddrVarName \"db['default']['hostname']\" --dbPortVarName \"db['default']['port']\" --backupAddr \"./\"".PHP_EOL;
91
	echo "時間到只執行一次的範例:".PHP_EOL;
91
	echo "時間到只執行一次的範例:".PHP_EOL;
92
	echo "\t".basename(__FILE__)." --backTime 09:01 --config  database.php --acctVarName \"db['default']['username']\" --passVarName \"db['default']['password']\" --dbVarName \"db['default']['database']\" --dbAddrVarName \"db['default']['hostname']\" --dbPortVarName \"db['default']['port']\" --backupAddr \"./\" --times 1".PHP_EOL;
92
	echo "\t".basename(__FILE__)." --backTime 09:01 --config  database.php --acctVarName \"db['default']['username']\" --passVarName \"db['default']['password']\" --dbVarName \"db['default']['database']\" --dbAddrVarName \"db['default']['hostname']\" --dbPortVarName \"db['default']['port']\" --backupAddr \"./\" --times 1".PHP_EOL;
93
	echo "立即執行的範例:".PHP_EOL;
93
	echo "立即執行的範例:".PHP_EOL;
94
	echo "\t".basename(__FILE__)." --config  database.php --acctVarName \"db['default']['username']\" --passVarName \"db['default']['password']\" --dbVarName \"db['default']['database']\" --dbAddrVarName \"db['default']['hostname']\" --dbPortVarName \"db['default']['port']\" --backupAddr \"./\"".PHP_EOL;
94
	echo "\t".basename(__FILE__)." --config  database.php --acctVarName \"db['default']['username']\" --passVarName \"db['default']['password']\" --dbVarName \"db['default']['database']\" --dbAddrVarName \"db['default']['hostname']\" --dbPortVarName \"db['default']['port']\" --backupAddr \"./\"".PHP_EOL;
95
		
95
 
96
	#結束執行
96
	#結束執行
97
	exit;
97
	exit;
98
 
98
 
99
	}#function help end
99
	}#function help end
100
 
100
 
Line 122... Line 122...
122
#如果解析參數失敗
122
#如果解析參數失敗
123
if($parseArgu["status"]==="false"){
123
if($parseArgu["status"]==="false"){
124
 
124
 
125
	#印出結果
125
	#印出結果
126
	var_dump($parseArgu);
126
	var_dump($parseArgu);
127
	
127
 
128
	#結束執行
128
	#結束執行
129
	exit;
129
	exit;
130
	
130
 
131
	}#if end
131
	}#if end
132
 
132
 
133
#檢查參數
133
#檢查參數
134
#函式說明:
134
#函式說明:
135
#檢查必填與可省略參數,可省略參數可指定預設要給與什麼數值內容。
135
#檢查必填與可省略參數,可省略參數可指定預設要給與什麼數值內容。
Line 182... Line 182...
182
#若執行失敗
182
#若執行失敗
183
if($checkArguments["status"]==="false"){
183
if($checkArguments["status"]==="false"){
184
 
184
 
185
	#印出結果
185
	#印出結果
186
	var_dump($checkArguments);
186
	var_dump($checkArguments);
187
	
187
 
188
	#結束執行
188
	#結束執行
189
	exit;
189
	exit;
190
 
190
 
191
	}#if end
191
	}#if end
192
 
192
 
193
#若檢查不通過
193
#若檢查不通過
194
if($checkArguments["passed"]==="false"){
194
if($checkArguments["passed"]==="false"){
195
 
195
 
196
	#印出結果
196
	#印出結果
197
	var_dump($checkArguments);
197
	var_dump($checkArguments);
198
	
198
 
199
	#提示用法
199
	#提示用法
200
	help();
200
	help();
201
	
201
 
202
	#結束執行
202
	#結束執行
203
	exit;
203
	exit;
204
 
204
 
205
	}#if end
205
	}#if end
206
 
206
 
Line 230... Line 230...
230
 
230
 
231
	#設置 $times
231
	#設置 $times
232
	$times=$parseArgu["content"]["times"][0];
232
	$times=$parseArgu["content"]["times"][0];
233
 
233
 
234
	}#if end
234
	}#if end
235
	
235
 
236
#反之若沒有指定 backTime
236
#反之若沒有指定 backTime
237
else if(!isset($backTime)){
237
else if(!isset($backTime)){
238
 
238
 
239
	#指定只跑一次
239
	#指定只跑一次
240
	$times=1;
240
	$times=1;
Line 268... Line 268...
268
	$spiltString=stringProcess::spiltString($conf);
268
	$spiltString=stringProcess::spiltString($conf);
269
	unset($conf);
269
	unset($conf);
270
 
270
 
271
	#如果取得小時跟分鐘失敗
271
	#如果取得小時跟分鐘失敗
272
	if($spiltString["status"]==="false"){
272
	if($spiltString["status"]==="false"){
273
	
273
 
274
		#印出結果
274
		#印出結果
275
		var_dump($spiltString);
275
		var_dump($spiltString);
276
		
276
 
277
		#結束執行
277
		#結束執行
278
		exit;
278
		exit;
279
	
279
 
280
		}#if end
280
		}#if end
281
 
281
 
282
	#如果取得小時跟分鐘失敗
282
	#如果取得小時跟分鐘失敗
283
	if($spiltString["found"]==="false"){
283
	if($spiltString["found"]==="false"){
284
	
284
 
285
		#印出結果
285
		#印出結果
286
		var_dump($spiltString);
286
		var_dump($spiltString);
287
		
287
 
288
		#結束執行
288
		#結束執行
289
		exit;
289
		exit;
290
 
290
 
291
		}#if end
291
		}#if end
292
 
292
 
Line 313... Line 313...
313
#無窮迴圈
313
#無窮迴圈
314
while($continue){
314
while($continue){
315
 
315
 
316
	#休息一秒
316
	#休息一秒
317
	sleep(1);
317
	sleep(1);
318
	
318
 
319
	#取得當前小時
319
	#取得當前小時
320
	$currentHour=gmdate("H");
320
	$currentHour=gmdate("H");
321
	
321
 
322
	#取得當前分鐘
322
	#取得當前分鐘
323
	$currentMin=gmdate("i");
323
	$currentMin=gmdate("i");
324
	
324
 
325
	#如果有指定執行的時間
325
	#如果有指定執行的時間
326
	if(isset($runHour) && isset($runMin)){
326
	if(isset($runHour) && isset($runMin)){
327
	
327
 
328
		#如果不是要執行的時間
328
		#如果不是要執行的時間
329
		if($currentHour!==$runHour || $currentMin!==$runMin){
329
		if($currentHour!==$runHour || $currentMin!==$runMin){
330
		
330
 
331
			#下一輪
331
			#下一輪
332
			continue;
332
			continue;
333
		
333
 
334
			}#if end
334
			}#if end
335
	
335
 
336
		}#if end
336
		}#if end
337
	
337
 
338
	#如果距離上次執行沒有過了1分鐘
338
	#如果距離上次執行沒有過了1分鐘
339
	if( time()-$lastRunTime<60 ){
339
	if( time()-$lastRunTime<60 ){
340
	
340
 
341
		#下一輪
341
		#下一輪
342
		continue;
342
		continue;
343
	
343
 
344
		}#if end
344
		}#if end
345
	
345
 
346
	#取得設定檔內容
346
	#取得設定檔內容
347
	#函式說明:
347
	#函式說明:
348
	#解析PHP檔案裡面的變數.
348
	#解析PHP檔案裡面的變數.
349
	#回傳結果:
349
	#回傳結果:
350
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
350
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
351
	#$result["error"],錯誤訊息.
351
	#$result["error"],錯誤訊息.
352
	#$result["function"],當前執行的函數名稱.
352
	#$result["function"],當前執行的函數名稱.
353
	#$result["argu"],所使用的參數.	
353
	#$result["argu"],所使用的參數.
354
	#$result["content"],找到的變數內容陣列.
354
	#$result["content"],找到的變數內容陣列.
355
	#$result["content"]["value"],依找到變數順序的數值.
355
	#$result["content"]["value"],依找到變數順序的數值.
356
	#$result["content"]["struc"],依找到變數順序的階層結構.
356
	#$result["content"]["struc"],依找到變數順序的階層結構.
357
	#$result["content"]["direct"],變數名稱對應的數值內容.
357
	#$result["content"]["direct"],變數名稱對應的數值內容.
358
	#必填參數:
358
	#必填參數:
Line 369... Line 369...
369
	#https://www.php.net/manual/en/function.parse-str.php
369
	#https://www.php.net/manual/en/function.parse-str.php
370
	#備註:
370
	#備註:
371
	#無.
371
	#無.
372
	$parseVaraiableInPHPfile=fileAccess::parseVaraiableInPHPfile($conf);
372
	$parseVaraiableInPHPfile=fileAccess::parseVaraiableInPHPfile($conf);
373
	unset($conf);
373
	unset($conf);
374
	
374
 
375
	#如果失敗
375
	#如果失敗
376
	if($parseVaraiableInPHPfile["status"]==="false"){
376
	if($parseVaraiableInPHPfile["status"]==="false"){
377
	
377
 
378
		#印出結果
378
		#印出結果
379
		var_dump($parseVaraiableInPHPfile);
379
		var_dump($parseVaraiableInPHPfile);
380
		
380
 
381
		#結束執行
381
		#結束執行
382
		exit;
382
		exit;
383
	
383
 
384
		}#if end
384
		}#if end
385
	
385
 
386
	#取得資料庫帳號
386
	#取得資料庫帳號
387
	$dbAcct=$parseVaraiableInPHPfile["content"][$acctVarName];
387
	$dbAcct=$parseVaraiableInPHPfile["content"][$acctVarName];
388
	
388
 
389
	#取得資料庫密碼
389
	#取得資料庫密碼
390
	$dbPass=$parseVaraiableInPHPfile["content"][$passVarName];
390
	$dbPass=$parseVaraiableInPHPfile["content"][$passVarName];
391
	
391
 
392
	#取得資料庫名稱
392
	#取得資料庫名稱
393
	$dbName=$parseVaraiableInPHPfile["content"][$dbVarName];
393
	$dbName=$parseVaraiableInPHPfile["content"][$dbVarName];
394
	
394
 
395
	#取得資料位置
395
	#取得資料位置
396
	$dbAddr=$parseVaraiableInPHPfile["content"][$dbAddrVarName];
396
	$dbAddr=$parseVaraiableInPHPfile["content"][$dbAddrVarName];
397
	
397
 
398
	#取得資料庫port
398
	#取得資料庫port
399
	$dbPort=$parseVaraiableInPHPfile["content"][$dbPortVarName];
399
	$dbPort=$parseVaraiableInPHPfile["content"][$dbPortVarName];
400
	
400
 
401
	#判斷目標目錄是否可以存取
401
	#判斷目標目錄是否可以存取
402
	#函式說明:
402
	#函式說明:
403
	#開啟特定目錄,取得底下的檔案路徑清單.
403
	#開啟特定目錄,取得底下的檔案路徑清單.
404
	#回傳結果:
404
	#回傳結果:
405
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
405
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
406
	#$result["error"],錯誤訊息.
406
	#$result["error"],錯誤訊息.
407
	#$result["function"],當前執行的函數名稱.
407
	#$result["function"],當前執行的函數名稱.
408
	#$result["argu"],所使用的參數.	
408
	#$result["argu"],所使用的參數.
409
	#$result["content"],讀取到的內容陣列.
409
	#$result["content"],讀取到的內容陣列.
410
	#必填參數:
410
	#必填參數:
411
	#$conf["path"],字串,要取得檔案資訊的所屬路徑.
411
	#$conf["path"],字串,要取得檔案資訊的所屬路徑.
412
	$conf["path"]=$backupAddr;
412
	$conf["path"]=$backupAddr;
413
	#可省略參數:
413
	#可省略參數:
Line 416... Line 416...
416
	#無.
416
	#無.
417
	#備註:
417
	#備註:
418
	#無.
418
	#無.
419
	$listInfo=fileAccess::listInfo($conf);
419
	$listInfo=fileAccess::listInfo($conf);
420
	unset($conf);
420
	unset($conf);
421
	
421
 
422
	#如果失敗
422
	#如果失敗
423
	if($listInfo["status"]==="false"){
423
	if($listInfo["status"]==="false"){
424
	
424
 
425
		#印出結果
425
		#印出結果
426
		var_dump($listInfo);
426
		var_dump($listInfo);
427
		
427
 
428
		#結束執行
428
		#結束執行
429
		exit;
429
		exit;
430
	
430
 
431
		}#if end
431
		}#if end
432
	
432
 
433
	#產生uuid
433
	#產生uuid
434
	#涵式說明:
434
	#涵式說明:
435
	#呼叫shell執行系統命令,並取得回傳的內容.
435
	#呼叫shell執行系統命令,並取得回傳的內容.
436
	#回傳的結果:
436
	#回傳的結果:
437
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
437
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 481... Line 481...
481
	#參考資料:
481
	#參考資料:
482
	#exec=>http://php.net/manual/en/function.exec.php
482
	#exec=>http://php.net/manual/en/function.exec.php
483
	#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
483
	#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
484
	#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
484
	#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
485
	$callShell=external::callShell($conf["external::callShell"]);
485
	$callShell=external::callShell($conf["external::callShell"]);
486
	unset($conf["external::callShell"]);		
486
	unset($conf["external::callShell"]);
487
	
487
 
488
	#如果執行失敗
488
	#如果執行失敗
489
	if($callShell["status"]==="false"){
489
	if($callShell["status"]==="false"){
490
	
490
 
491
		#設置執行不正常
491
		#設置執行不正常
492
		$result	["status"]="false";
492
		$result	["status"]="false";
493
 
493
 
494
		#設置執行錯誤
494
		#設置執行錯誤
495
		$result["error"]=$callShell;
495
		$result["error"]=$callShell;
496
 
496
 
497
		#回傳結果
497
		#回傳結果
498
		return $result;
498
		return $result;
499
	
499
 
500
		}#if end
500
		}#if end
501
 
501
 
502
	#取得uuid
502
	#取得uuid
503
	$uuid=$callShell["output"][0];
503
	$uuid=$callShell["output"][0];
504
	
504
 
505
	#函式說明:
505
	#函式說明:
506
	#將 ~ 轉換為家目錄路徑
506
	#將 ~ 轉換為家目錄路徑
507
	#回傳結果:
507
	#回傳結果:
508
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
508
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
509
	#$result["error"],錯誤訊息.
509
	#$result["error"],錯誤訊息.
Line 516... Line 516...
516
	#無.
516
	#無.
517
	#參考資料:
517
	#參考資料:
518
	#https://www.businessweekly.com.tw/careers/Blog/14307
518
	#https://www.businessweekly.com.tw/careers/Blog/14307
519
	$tildeToPath=fileAccess::tildeToPath($conf["fileAccess::tildeToPath"]);
519
	$tildeToPath=fileAccess::tildeToPath($conf["fileAccess::tildeToPath"]);
520
	unset($conf["fileAccess::tildeToPath"]);
520
	unset($conf["fileAccess::tildeToPath"]);
521
	
521
 
522
	#如果執行失敗
522
	#如果執行失敗
523
	if($tildeToPath["status"]==="false"){
523
	if($tildeToPath["status"]==="false"){
524
	
524
 
525
		#設置執行不正常
525
		#設置執行不正常
526
		$result	["status"]="false";
526
		$result	["status"]="false";
527
 
527
 
528
		#設置執行錯誤
528
		#設置執行錯誤
529
		$result["error"]=$tildeToPath;
529
		$result["error"]=$tildeToPath;
530
 
530
 
531
		#回傳結果
531
		#回傳結果
532
		return $result;
532
		return $result;
533
	
533
 
534
		}#if end
534
		}#if end
535
		
535
 
536
	#取得家目錄路徑
536
	#取得家目錄路徑
537
	$homePath=$tildeToPath["content"];
537
	$homePath=$tildeToPath["content"];
538
	
538
 
539
	#函式說明:
539
	#函式說明:
540
	#備份資料庫
540
	#備份資料庫
541
	#回傳結果::
541
	#回傳結果::
542
	#$result["status"],"true"代表執行正常,"false"代表執行有誤.
542
	#$result["status"],"true"代表執行正常,"false"代表執行有誤.
543
	#$result["error"],錯誤訊息陣列.
543
	#$result["error"],錯誤訊息陣列.
Line 558... Line 558...
558
	#$conf["storePlace"],字串,要將輸出檔案儲存到哪邊,預設爲當前目錄.
558
	#$conf["storePlace"],字串,要將輸出檔案儲存到哪邊,預設爲當前目錄.
559
	#$conf["storePlace"]=$backupAddr;
559
	#$conf["storePlace"]=$backupAddr;
560
	$conf["storePlace"]=$homePath."/";
560
	$conf["storePlace"]=$homePath."/";
561
	#$conf["exportFileName"],字串,要輸出的檔案名稱,預設爲其export
561
	#$conf["exportFileName"],字串,要輸出的檔案名稱,預設爲其export
562
	$sqlFileName=$conf["exportFileName"]=gmdate("Y-m-d_H:i:s")."_".$uuid;
562
	$sqlFileName=$conf["exportFileName"]=gmdate("Y-m-d_H:i:s")."_".$uuid;
563
	
563
 
564
	#如果資料庫不是位於 localhost
564
	#如果資料庫不是位於 localhost
565
	if($conf["dbAddress"]!=="localhost"){
565
	if($conf["dbAddress"]!=="localhost"){
566
		
566
 
567
		#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
567
		#$conf["dbPort"],字串,爲連線到mysql-Server時要使用的port,預設為3306.
568
		$conf["dbPort"]=$dbPort;
568
		$conf["dbPort"]=$dbPort;
569
		
569
 
570
		}#if end
570
		}#if end
571
		
571
 
572
	#備註:
572
	#備註:
573
	#無.
573
	#無.
574
	$backupDatabase=db::backupDatabase($conf);
574
	$backupDatabase=db::backupDatabase($conf);
575
	unset($conf);
575
	unset($conf);
576
	
576
 
577
	#如果執行失敗
577
	#如果執行失敗
578
	if($backupDatabase["status"]==="false"){
578
	if($backupDatabase["status"]==="false"){
579
	
579
 
580
		#印出結果
580
		#印出結果
581
		var_dump($backupDatabase);
581
		var_dump($backupDatabase);
582
		
582
 
583
		#結束執行
583
		#結束執行
584
		exit;
584
		exit;
585
	
585
 
586
		}#if end
586
		}#if end
587
		
587
 
588
	#函式說明:
588
	#函式說明:
589
	#將資料夾打包成.zst檔案
589
	#將資料夾打包成.zst檔案
590
	#回傳的結果:
590
	#回傳的結果:
591
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
591
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
592
	#$result["error"],錯誤訊息.
592
	#$result["error"],錯誤訊息.
Line 606... Line 606...
606
	$conf["path"]=$homePath;
606
	$conf["path"]=$homePath;
607
	#$conf["delAfterSuc"],字串,是否壓縮後將原始檔案移除,預設為"false"代表不要;反之為"true"代表要.
607
	#$conf["delAfterSuc"],字串,是否壓縮後將原始檔案移除,預設為"false"代表不要;反之為"true"代表要.
608
	$conf["delAfterSuc"]="true";
608
	$conf["delAfterSuc"]="true";
609
	$makeZstFile=cmd::makeZstFile($conf);
609
	$makeZstFile=cmd::makeZstFile($conf);
610
	unset($conf);
610
	unset($conf);
611
	
611
 
612
	#如果執行失敗
612
	#如果執行失敗
613
	if($makeZstFile["status"]==="false"){
613
	if($makeZstFile["status"]==="false"){
614
	
614
 
615
		#印出結果
615
		#印出結果
616
		var_dump($makeZstFile);
616
		var_dump($makeZstFile);
617
		
617
 
618
		#結束執行
618
		#結束執行
619
		exit;
619
		exit;
620
	
620
 
621
		}#if end
621
		}#if end
622
	
622
 
623
	#移動檔案到指定的位置
623
	#移動檔案到指定的位置
624
	#涵式說明:
624
	#涵式說明:
625
	#呼叫shell執行系統命令,並取得回傳的內容.
625
	#呼叫shell執行系統命令,並取得回傳的內容.
626
	#回傳的結果:
626
	#回傳的結果:
627
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
627
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
Line 672... Line 672...
672
	#參考資料:
672
	#參考資料:
673
	#exec=>http://php.net/manual/en/function.exec.php
673
	#exec=>http://php.net/manual/en/function.exec.php
674
	#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
674
	#escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
675
	#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
675
	#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
676
	$callShell=external::callShell($conf["external::callShell"]);
676
	$callShell=external::callShell($conf["external::callShell"]);
677
	unset($conf["external::callShell"]);		
677
	unset($conf["external::callShell"]);
678
	
678
 
679
	#如果執行失敗
679
	#如果執行失敗
680
	if($callShell["status"]==="false"){
680
	if($callShell["status"]==="false"){
681
	
681
 
682
		#印出結果
682
		#印出結果
683
		var_dump($callShell);
683
		var_dump($callShell);
684
		
684
 
685
		#結束執行
685
		#結束執行
686
		exit;
686
		exit;
687
	
687
 
688
		}#if end
688
		}#if end
689
	
689
 
690
	#更新最後執行的時間點
690
	#更新最後執行的時間點
691
	$lastRunTime=time();
691
	$lastRunTime=time();
692
	
692
 
693
	#增加已經執行的次數
693
	#增加已經執行的次數
694
	$runTimes++;
694
	$runTimes++;
695
 
695
 
696
	#如果有指定次數
696
	#如果有指定次數
697
	if(isset($times)){
697
	if(isset($times)){
698
	
698
 
699
		#如果已經達到次數的限制
699
		#如果已經達到次數的限制
700
		if($runTimes>=$times){
700
		if($runTimes>=$times){
701
		
701
 
702
			#設定停止執行
702
			#設定停止執行
703
			$continue=false;
703
			$continue=false;
704
		
704
 
705
			}#if end
705
			}#if end
706
	
706
 
707
		}#if end
707
		}#if end
708
	
708
 
709
	#函式說明:
709
	#函式說明:
710
	#取得目錄底下的詳細資訊.
710
	#取得目錄底下的詳細資訊.
711
	#回傳結果:
711
	#回傳結果:
712
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
712
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
713
	#$result["error"],錯誤訊息.
713
	#$result["error"],錯誤訊息.
Line 738... Line 738...
738
	$ls=fileAccess::ls($conf);
738
	$ls=fileAccess::ls($conf);
739
	unset($conf);
739
	unset($conf);
740
 
740
 
741
	#如果執行失敗
741
	#如果執行失敗
742
	if($ls["status"]==="false"){
742
	if($ls["status"]==="false"){
743
	
743
 
744
		#印出結果
744
		#印出結果
745
		var_dump($ls);
745
		var_dump($ls);
746
		
746
 
747
		#結束執行
747
		#結束執行
748
		exit;
748
		exit;
749
	
749
 
750
		}#if end
750
		}#if end
751
 
751
 
752
	#初始化儲存存在的備份檔案清單
752
	#初始化儲存存在的備份檔案清單
753
	$backupFiles=array();
753
	$backupFiles=array();
754
 
754
 
755
	#針對每個節點
755
	#針對每個節點
756
	foreach($ls["content"] as $fileInfo){
756
	foreach($ls["content"] as $fileInfo){
757
	
757
 
758
		#如果是檔案
758
		#如果是檔案
759
		if($fileInfo["nType"]==="-"){
759
		if($fileInfo["nType"]==="-"){
760
		
760
 
761
			#記錄起來
761
			#記錄起來
762
			$backupFiles[]=$backupAddr."/".$fileInfo["name"];
762
			$backupFiles[]=$backupAddr."/".$fileInfo["name"];
763
		
763
 
764
			}#if end
764
			}#if end
765
	
765
 
766
		}#foreach end
766
		}#foreach end
767
 
767
 
768
	#如果節點數量大於 $backupFilesToKeep
768
	#如果節點數量大於 $backupFilesToKeep
769
	if(count($backupFiles)>$backupFilesToKeep){
769
	if(count($backupFiles)>$backupFilesToKeep){
770
	
770
 
771
		#有多少超過數量的節點就執行幾次
771
		#有多少超過數量的節點就執行幾次
772
		for($i=$backupFilesToKeep;$i<count($backupFiles);$i++){
772
		for($i=$backupFilesToKeep;$i<count($backupFiles);$i++){
773
		
773
 
774
			#設置要移除的檔案
774
			#設置要移除的檔案
775
			$file2remove=$backupFiles[$i];
775
			$file2remove=$backupFiles[$i];
776
		
776
 
777
			#移除超過限制的舊資料
777
			#移除超過限制的舊資料
778
			#函式說明:
778
			#函式說明:
779
			#移除檔案
779
			#移除檔案
780
			#回傳結果:
780
			#回傳結果:
781
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
781
			#$result["status"],"true"代表移除成功,"false"代表移除失敗.
Line 799... Line 799...
799
			#無.
799
			#無.
800
			#備註:
800
			#備註:
801
			#無.
801
			#無.
802
			$delFile=fileAccess::delFile($conf);
802
			$delFile=fileAccess::delFile($conf);
803
			unset($conf);
803
			unset($conf);
804
		
804
 
805
			#如果執行失敗
805
			#如果執行失敗
806
			if($delFile["status"]==="false"){
806
			if($delFile["status"]==="false"){
807
			
807
 
808
				#印出結果
808
				#印出結果
809
				var_dump($ls);
809
				var_dump($ls);
810
				
810
 
811
				#結束執行
811
				#結束執行
812
				exit;
812
				exit;
813
			
813
 
814
				}#if end
814
				}#if end
815
					
815
 
816
			}#for end
816
			}#for end
817
	
817
 
818
		}#if end
818
		}#if end
819
 
819
 
820
	}#while end	
820
	}#while end
821
 
821
 
822
?>
-
 
823
822
?>
-
 
823