Subversion Repositories php-qbpwcf

Rev

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

Rev 97 Rev 223
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
測試 usr/bin/ 底下的所有程式
27
測試 usr/bin/ 底下的所有程式
Line 63... Line 63...
63
 
63
 
64
#說明函式
64
#說明函式
65
function help(){
65
function help(){
66
 
66
 
67
	#印出指令說明
67
	#印出指令說明
68
	echo "用於測試 usr/bin/ 底下程式的測試程式".PHP_EOL; 
68
	echo "用於測試 usr/bin/ 底下程式的測試程式".PHP_EOL;
69
	echo "Usage of ".basename(__FILE__).":".PHP_EOL; 
69
	echo "Usage of ".basename(__FILE__).":".PHP_EOL;
70
	echo "--list all/name of program under 'usr/bin/' 代表顯示所有可以執行的程式或顯示特定程式的用法.".PHP_EOL;
70
	echo "--list all/name of program under 'usr/bin/' 代表顯示所有可以執行的程式或顯示特定程式的用法.".PHP_EOL;
71
	echo "--cmd name of program under 'usr/bin/' 代表要執行的程式名稱.".PHP_EOL;
71
	echo "--cmd name of program under 'usr/bin/' 代表要執行的程式名稱.".PHP_EOL;
72
	echo "--paramName a param name of program under 'usr/bin/' 代表執行程式要用的參數名稱.".PHP_EOL;
72
	echo "--paramName a param name of program under 'usr/bin/' 代表執行程式要用的參數名稱.".PHP_EOL;
73
	echo "--paramValue a param value of program under 'usr/bin/' 代表執行程式要用的參數數值.".PHP_EOL;
73
	echo "--paramValue a param value of program under 'usr/bin/' 代表執行程式要用的參數數值.".PHP_EOL;
74
	echo PHP_EOL;
74
	echo PHP_EOL;
75
	echo "使用 backupDb.php 的範例:".PHP_EOL;
75
	echo "使用 backupDb.php 的範例:".PHP_EOL;
76
	echo "usr_bin_test.php --cmd backupDb.php --paramName --config --paramValue sample/assets\ of\ config/database.php --paramName --acctVarName --paramValue \"db['default']['username']\" --paramName --passVarName --paramValue \"db['default']['password']\" --paramName --dbVarName --paramValue \"db['default']['database']\" --paramName --dbAddrVarName --paramValue \"db['default']['hostname']\" --paramName --dbPortVarName --paramValue \"db['default']['port']\" --paramName --backupAddr --paramValue \"./\"".PHP_EOL;
76
	echo "usr_bin_test.php --cmd backupDb.php --paramName --config --paramValue sample/assets\ of\ config/database.php --paramName --acctVarName --paramValue \"db['default']['username']\" --paramName --passVarName --paramValue \"db['default']['password']\" --paramName --dbVarName --paramValue \"db['default']['database']\" --paramName --dbAddrVarName --paramValue \"db['default']['hostname']\" --paramName --dbPortVarName --paramValue \"db['default']['port']\" --paramName --backupAddr --paramValue \"./\"".PHP_EOL;
77
	echo PHP_EOL;
77
	echo PHP_EOL;
78
	echo "使用 registerService.php 的範例:".PHP_EOL;
78
	echo "使用 registerService.php 的範例:".PHP_EOL;
79
	echo "./usr_bin_test.php --cmd registerService.php --paramName '--name' --paramValue ps --paramName '--cmd' --paramValue '#!/bin/bash' --paramName '--cmd' --paramValue 'while  [ true ]' --paramName '--cmd' --paramValue 'do'  --paramName '--cmd' --paramValue 'clear' --paramName '--cmd' --paramValue 'ps axuwf | cat' --paramName '--cmd' --paramValue 'sleep 1' --paramName '--cmd' --paramValue 'done'".PHP_EOL;
79
	echo "./usr_bin_test.php --cmd registerService.php --paramName '--name' --paramValue ps --paramName '--cmd' --paramValue '#!/bin/bash' --paramName '--cmd' --paramValue 'while  [ true ]' --paramName '--cmd' --paramValue 'do'  --paramName '--cmd' --paramValue 'clear' --paramName '--cmd' --paramValue 'ps axuwf | cat' --paramName '--cmd' --paramValue 'sleep 1' --paramName '--cmd' --paramValue 'done'".PHP_EOL;
80
	
80
 
81
	#一般錯誤結束執行
81
	#一般錯誤結束執行
82
	exit(1);
82
	exit(1);
83
 
83
 
84
	}
84
	}
85
 
85
 
Line 107... Line 107...
107
#如果解析參數失敗
107
#如果解析參數失敗
108
if($parseArgu["status"]==="false"){
108
if($parseArgu["status"]==="false"){
109
 
109
 
110
	#印出結果
110
	#印出結果
111
	var_dump($parseArgu);
111
	var_dump($parseArgu);
112
	
112
 
113
	#一般錯誤結束執行
113
	#一般錯誤結束執行
114
	exit(1);
114
	exit(1);
115
	
115
 
116
	}#if end
116
	}#if end
117
 
117
 
118
#如果得到的參數為0
118
#如果得到的參數為0
119
if(count($parseArgu["content"])===0){
119
if(count($parseArgu["content"])===0){
120
 
120
 
121
	#提示說明
121
	#提示說明
122
	help();
122
	help();
123
	
123
 
124
	#正常結束執行
124
	#正常結束執行
125
	exit(0);
125
	exit(0);
126
 
126
 
127
	}#if end
127
	}#if end
128
 
128
 
Line 178... Line 178...
178
#若執行失敗
178
#若執行失敗
179
if($checkArguments["status"]==="false"){
179
if($checkArguments["status"]==="false"){
180
 
180
 
181
	#印出結果
181
	#印出結果
182
	var_dump($checkArguments);
182
	var_dump($checkArguments);
183
	
183
 
184
	#一般錯誤結束執行
184
	#一般錯誤結束執行
185
	exit(1);
185
	exit(1);
186
 
186
 
187
	}#if end
187
	}#if end
188
 
188
 
189
#若檢查不通過
189
#若檢查不通過
190
if($checkArguments["passed"]==="false"){
190
if($checkArguments["passed"]==="false"){
191
 
191
 
192
	#印出結果
192
	#印出結果
193
	var_dump($checkArguments);
193
	var_dump($checkArguments);
194
	
194
 
195
	#一般錯誤結束執行
195
	#一般錯誤結束執行
196
	exit(1);
196
	exit(1);
197
 
197
 
198
	}#if end
198
	}#if end
199
 
199
 
200
#如果有 list 參數
200
#如果有 list 參數
201
if(isset($parseArgu["content"]["list"])){
201
if(isset($parseArgu["content"]["list"])){
202
 
202
 
203
	#如果第一個 list 參數為 all
203
	#如果第一個 list 參數為 all
204
	if($parseArgu["content"]["list"][0]==="all"){
204
	if($parseArgu["content"]["list"][0]==="all"){
205
	
205
 
206
		#取得 usr/bin 底下的程式清單
206
		#取得 usr/bin 底下的程式清單
207
		#函式說明:
207
		#函式說明:
208
		#開啟特定目錄,取得底下的檔案路徑清單.
208
		#開啟特定目錄,取得底下的檔案路徑清單.
209
		#回傳結果:
209
		#回傳結果:
210
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
210
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
211
		#$result["error"],錯誤訊息.
211
		#$result["error"],錯誤訊息.
212
		#$result["function"],當前執行的函數名稱.
212
		#$result["function"],當前執行的函數名稱.
213
		#$result["argu"],所使用的參數.	
213
		#$result["argu"],所使用的參數.
214
		#$result["content"],讀取到的內容陣列.
214
		#$result["content"],讀取到的內容陣列.
215
		#$result["content"][$i],第$i+1個結果.
215
		#$result["content"][$i],第$i+1個結果.
216
		#$result["content"][$i]["name"],第$i+1個名稱.
216
		#$result["content"][$i]["name"],第$i+1個名稱.
217
		#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.		
217
		#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.
218
		#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.
218
		#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.
219
		#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).
219
		#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).
220
		#必填參數:
220
		#必填參數:
221
		#$conf["path"],字串,要取得檔案資訊的所屬路徑.
221
		#$conf["path"],字串,要取得檔案資訊的所屬路徑.
222
		#$conf["path"]="/usr/lib/qbpwcf/usr/bin/";
222
		#$conf["path"]="/usr/lib/qbpwcf/usr/bin/";
Line 227... Line 227...
227
		#無.
227
		#無.
228
		#備註:
228
		#備註:
229
		#無.
229
		#無.
230
		$listInfo=fileAccess::listInfo($conf);
230
		$listInfo=fileAccess::listInfo($conf);
231
		unset($conf);
231
		unset($conf);
232
		
232
 
233
		#如果執行失敗
233
		#如果執行失敗
234
		if($listInfo["status"]==="false"){
234
		if($listInfo["status"]==="false"){
235
		
235
 
236
			#印出結果
236
			#印出結果
237
			var_dump($listInfo);
237
			var_dump($listInfo);
238
			
238
 
239
			#一般錯誤結束執行
239
			#一般錯誤結束執行
240
			exit(1);
240
			exit(1);
241
		
241
 
242
			}#if end
242
			}#if end
243
			
243
 
244
		#針對每行輸出
244
		#針對每行輸出
245
		foreach($listInfo["content"] as $line){
245
		foreach($listInfo["content"] as $line){
246
		
246
 
247
			#如果是當前目錄或上層目錄
247
			#如果是當前目錄或上層目錄
248
			if($line["name"]==="." || $line["name"]===".."){
248
			if($line["name"]==="." || $line["name"]===".."){
249
			
249
 
250
				#換下一個
250
				#換下一個
251
				continue;
251
				continue;
252
			
252
 
253
				}#if end 
253
				}#if end
254
		
254
 
255
			#如果是資料夾
255
			#如果是資料夾
256
			if($line["dir"]==="true"){
256
			if($line["dir"]==="true"){
257
			
257
 
258
				#換下一個
258
				#換下一個
259
				continue;
259
				continue;
260
			
260
 
261
				}#if end
261
				}#if end
262
		
262
 
263
			#輸出結果
263
			#輸出結果
264
			echo $line["name"].PHP_EOL;
264
			echo $line["name"].PHP_EOL;
265
			
265
 
266
			}#foreach end
266
			}#foreach end
267
	
267
 
268
		#正常結束執行
268
		#正常結束執行
269
		exit(0);
269
		exit(0);
270
	
270
 
271
		}#if end
271
		}#if end
272
		
272
 
273
	#反之要 指定程式 的用法
273
	#反之要 指定程式 的用法
274
	else{
274
	else{
275
	
275
 
276
		#函式說明:
276
		#函式說明:
277
		#呼叫shell執行系統命令,並取得回傳的內容.
277
		#呼叫shell執行系統命令,並取得回傳的內容.
278
		#回傳結果:
278
		#回傳結果:
279
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
279
		#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
280
		#$result["error"],錯誤訊息陣列.
280
		#$result["error"],錯誤訊息陣列.
Line 332... Line 332...
332
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
332
		#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
333
		#備註:
333
		#備註:
334
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
334
		#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
335
		$callShell=external::callShell($conf);
335
		$callShell=external::callShell($conf);
336
		unset($conf);
336
		unset($conf);
337
		
337
 
338
		#如果執行失敗
338
		#如果執行失敗
339
		if($callShell["status"]==="false"){
339
		if($callShell["status"]==="false"){
340
		
340
 
341
			#印出結果
341
			#印出結果
342
			var_dump($callShell);
342
			var_dump($callShell);
343
			
343
 
344
			#一般錯誤結束執行
344
			#一般錯誤結束執行
345
			exit(1);
345
			exit(1);
346
		
346
 
347
			}#if end
347
			}#if end
348
			
348
 
349
		#針對每行輸出
349
		#針對每行輸出
350
		foreach($callShell["output"] as $line){
350
		foreach($callShell["output"] as $line){
351
		
351
 
352
			#輸出結果
352
			#輸出結果
353
			echo $line.PHP_EOL;
353
			echo $line.PHP_EOL;
354
		
354
 
355
			}#foreach end
355
			}#foreach end
356
	
356
 
357
		#正常結束執行
357
		#正常結束執行
358
		exit(0);
358
		exit(0);
359
	
359
 
360
		}#else end
360
		}#else end
361
 
361
 
362
	}#if end
362
	}#if end
363
 
363
 
364
#如果有 cmd 參數
364
#如果有 cmd 參數
365
if(isset($parseArgu["content"]["cmd"])){
365
if(isset($parseArgu["content"]["cmd"])){
366
 
366
 
367
	#取得第一個 cmd 參數
367
	#取得第一個 cmd 參數
368
	$cmd=$parseArgu["content"]["cmd"][0];
368
	$cmd=$parseArgu["content"]["cmd"][0];
369
	
369
 
370
	#初始化參數
370
	#初始化參數
371
	$params=array();
371
	$params=array();
372
	
372
 
373
	#如果有 paramName 參數
373
	#如果有 paramName 參數
374
	if(isset($parseArgu["content"]["paramName"])){
374
	if(isset($parseArgu["content"]["paramName"])){
375
	
375
 
376
		#針對每個參數名稱
376
		#針對每個參數名稱
377
		for($i=0;$i<count($parseArgu["content"]["paramName"]);$i++){
377
		for($i=0;$i<count($parseArgu["content"]["paramName"]);$i++){
378
		
378
 
379
			#取得第 params 名稱
379
			#取得第 params 名稱
380
			$params[]=$parseArgu["content"]["paramName"][$i];
380
			$params[]=$parseArgu["content"]["paramName"][$i];
381
			
381
 
382
			#取得第 params 數值
382
			#取得第 params 數值
383
			$params[]=$parseArgu["content"]["paramValue"][$i];
383
			$params[]=$parseArgu["content"]["paramValue"][$i];
384
		
384
 
385
			}#if end
385
			}#if end
386
	
386
 
387
		}#if end
387
		}#if end
388
	
388
 
389
	#函式說明:
389
	#函式說明:
390
	#呼叫shell執行系統命令,並取得回傳的內容.
390
	#呼叫shell執行系統命令,並取得回傳的內容.
391
	#回傳結果:
391
	#回傳結果:
392
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
392
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
393
	#$result["error"],錯誤訊息陣列.
393
	#$result["error"],錯誤訊息陣列.
Line 445... Line 445...
445
	#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
445
	#escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
446
	#備註:
446
	#備註:
447
	#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
447
	#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
448
	$callShell=external::callShell($conf);
448
	$callShell=external::callShell($conf);
449
	unset($conf);
449
	unset($conf);
450
	
450
 
451
	#如果執行失敗
451
	#如果執行失敗
452
	if($callShell["status"]==="false"){
452
	if($callShell["status"]==="false"){
453
	
453
 
454
		#印出結果
454
		#印出結果
455
		var_dump($callShell);
455
		var_dump($callShell);
456
		
456
 
457
		#一般錯誤結束執行
457
		#一般錯誤結束執行
458
		exit(1);
458
		exit(1);
459
	
459
 
460
		}#if end
460
		}#if end
461
		
461
 
462
	#針對每行輸出
462
	#針對每行輸出
463
	foreach($callShell["output"] as $line){
463
	foreach($callShell["output"] as $line){
464
	
464
 
465
		#輸出結果
465
		#輸出結果
466
		echo $line.PHP_EOL;
466
		echo $line.PHP_EOL;
467
	
467
 
468
		}#foreach end
468
		}#foreach end
469
 
469
 
470
	#正常結束執行
470
	#正常結束執行
471
	exit(0);
471
	exit(0);
472
	
472
 
473
	}#if end
473
	}#if end
474
 
474
 
475
?>
-
 
476
475
?>
-
 
476