Subversion Repositories qbpwcf-lib(archive)

Rev

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

Rev 667 Rev 849
Line -... Line 1...
-
 
1
#!/bin/php
1
<?php
2
<?php
2
 
3
 
3
/*
4
/*
4
 
5
 
5
        QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
        QBPWCF, Quick Build PHP website Component base on Fedora Linux.
6
    Copyright (C) 2015~2024 Min-Jhin,Chen
7
    Copyright (C) 2014~2025 Min-Jhin,Chen
7
 
8
 
8
    This file is part of QBPWCF.
9
    This file is part of QBPWCF.
9
 
10
 
10
    QBPWCF is free software: you can redistribute it and/or modify
11
    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
    it under the terms of the GNU General Public License as published by
Line 29... Line 30...
29
require_once("qbpwcf/allInOne.php");
30
require_once("qbpwcf/allInOne.php");
30
 
31
 
31
#建議的log位置
32
#建議的log位置
32
$logFile=$_SERVER["DOCUMENT_ROOT"].$_SERVER["PHP_SELF"].".log";
33
$logFile=$_SERVER["DOCUMENT_ROOT"].$_SERVER["PHP_SELF"].".log";
33
 
34
 
-
 
35
#要使用的範例name
-
 
36
$nameOfSample="initial";
-
 
37
$nameOfSample="20250203";
-
 
38
 
34
#函式說明:
39
#函式說明:
35
#透過proc來多執行序運作.
40
#抓取命令列的參數.
36
#回傳結果:
41
#回傳結果:
37
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
42
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
38
#$reuslt["error"],執行不正常結束的錯訊息陣列.
43
#$reuslt["error"],執行不正常結束的錯訊息陣列.
39
#$result["function"],當前執行的函式名稱.
44
#$result["function"],當前執行的函式名稱.
-
 
45
#$result["argu"],使用的參數陣列.
40
#$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source.
46
#$result["content"],要回傳的參數陣列.
-
 
47
#$result["count"],參數的數量.
-
 
48
#$result["_GET"],收到的 HTTP GET 參數陣列.
-
 
49
#$result["_POST"],收到的 HTTP POST 參數陣列.
41
#必填參數:
50
#必填參數:
42
#$conf["cmds"],字串陣列,每個元素代表要執行的指令與參數.
-
 
43
$conf["cmds"]=array("sleep 60");
-
 
-
 
51
#無
44
#可省略參數:
52
#可省略參數:
45
#$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
53
#$conf["echo"],字串,"true"代表要將抓到的參數一個個印出來,"false"代表用回傳的方式,預設為"false".
46
$conf["wait"]="false";
54
#$conf["echo"]="false";
47
#$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
-
 
48
#$conf["workingDir"]=array("path");
-
 
49
#$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
55
#$conf["httpGetToArgu"],字串,"true"代表要將 http get 參數變成參數來取得,像是 $_GET["p1"] 會變成 $result["content"]["p1"] 回傳,預設為"false"代表不使用.
50
#$conf["envs"]=array(array("key"=>"value"));
56
$conf["httpGetToArgu"]="true";
51
#$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
57
#$conf["httpPostToArgu"],字串,"true"代表要將 http post 參數變成參數來取得,像是 $_POST["p1"] 會變成 $result["content"]["p1"] 回傳,預設為"false"代表不使用.
52
#$conf["executeBy"]=array("bash");
58
$conf["httpPostToArgu"]="true";
53
#參考資料:
59
#參考資料:
54
#https://www.php.net/manual/en/function.proc-open.php
-
 
-
 
60
#無.
55
#備註:
61
#備註:
56
#無.
62
#無.
57
$procNotWait=threads::proc($conf);
63
$getArgu=cmd::getArgu($conf);
58
unset($conf);
64
unset($conf);
59
 
65
 
60
#debug
66
#如果執行失敗
61
var_dump($procNotWait);
67
if($getArgu["status"]==="false"){
62
 
68
 
63
#函式說明:
69
	#函式說明:
64
#透過proc來多執行序運作.
70
	#撰寫log
65
#回傳結果:
71
	#回傳結果:
66
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
72
	#$result["status"],狀態,"true"或"false".
67
#$reuslt["error"],執行不正常結束的錯訊息陣列.
73
	#$result["error"],錯誤訊息陣列.
68
#$result["function"],當前執行的函式名稱.
74
	#$result["function"],當前函式的名稱.
69
#$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source.
75
	#$result["argu"],使用的參數.
70
#必填參數:
76
	#必填參數:
71
#$conf["cmds"],字串陣列,每個元素代表要執行的指令與參數.
77
	#$conf["path"],字串,log檔案的路徑與名稱.
72
$conf["cmds"]=array("sleep 5","sleep 1","uname -a","date");
78
	$conf["path"]=$logFile;
73
#可省略參數:
-
 
74
#$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
79
	#$conf["content"],any,要寫的內容,若內容不為字串則會用var_dump的格式寫入.
75
#$conf["wait"]="false";
80
	$conf["content"]=$getArgu;
76
#$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
81
	#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
77
#$conf["workingDir"]=array("path");
82
	$conf["fileArgu"]=__FILE__;
78
#$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
-
 
79
#$conf["envs"]=array(array("key"=>"value"));
83
	#可省略參數:
80
#$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
84
	#$conf["rewrite"],預設為"false",接續寫入;反之"true"代表重新寫入.
81
#$conf["executeBy"]=array("bash");
85
	#$conf["rewrite"]="false";
82
#參考資料:
86
	#參考資料:
83
#https://www.php.net/manual/en/function.proc-open.php
-
 
-
 
87
	#無.
84
#備註:
88
	#備註:
85
#無.
89
	#無.
86
$procShouldWait=threads::proc($conf);
90
	$record=logs::record($conf);
87
unset($conf);
91
	unset($conf);
-
 
92
	
-
 
93
	#如果寫log失敗
-
 
94
	if($record["status"]==="false"){
-
 
95
	
-
 
96
		#印出結果
-
 
97
		var_dump($record);
-
 
98
	
-
 
99
		}#if end
-
 
100
	
-
 
101
	#結束執行,回傳錯誤代碼1
-
 
102
	exit(1);
-
 
103
 
-
 
104
	}#if end
-
 
105
	
-
 
106
#如果有指定參數
-
 
107
if($getArgu["count"]>1){
-
 
108
 
-
 
109
	#預設第2個參數為 $nameOfSample 的指定數值
-
 
110
	$nameOfSample=$getArgu["content"][1];
-
 
111
 
-
 
112
	}#if end
-
 
113
 
-
 
114
#存放範例的資料夾
-
 
115
$sampleFolder="threads::proc";
-
 
116
 
-
 
117
#設置測試案例的檔案名稱與路徑
-
 
118
$fileNameOfSample=$sampleFolder."/".$nameOfSample.".php";
-
 
119
 
-
 
120
#初始化儲存範例代碼
-
 
121
$samples=array();
-
 
122
 
-
 
123
#增加 javaScript::qbpwcfJavaScript 的範例資訊
-
 
124
$samples[]=array("name"=>"initial","comnent"=>"initial test case");
-
 
125
$samples[]=array("name"=>"20250203","comment"=>"test run php code");
-
 
126
 
-
 
127
#針對每個範例資訊
-
 
128
foreach($samples as $sample){
-
 
129
 
-
 
130
	#如果找到對應的範例
-
 
131
	if($sample["name"]===$nameOfSample){
-
 
132
	
-
 
133
		#如果存放範例的資料夾不存在
-
 
134
		if(!file_exists($sampleFolder)){
-
 
135
		
-
 
136
			#提示訊息
-
 
137
			echo "存放範例的資料夾(".$sampleFolder.")不存在".PHP_EOL;
-
 
138
		
-
 
139
			#結束執行,並回傳1給shell
-
 
140
			exit(1);
-
 
141
		
-
 
142
			}#if end
-
 
143
			
-
 
144
		#如果對應的範例檔案不存在
-
 
145
		if(!file_exists($fileNameOfSample)){
-
 
146
		
-
 
147
			#提示訊息
-
 
148
			echo "範例檔案(".$fileNameOfSample.")不存在".PHP_EOL;
-
 
149
		
-
 
150
			#結束執行,並回傳1給shell
-
 
151
			exit(1);
-
 
152
		
-
 
153
			}#if end
-
 
154
			
-
 
155
		#匯入範例
-
 
156
		require_once($fileNameOfSample);
-
 
157
		
-
 
158
		#結束執行
-
 
159
		exit;
-
 
160
	
-
 
161
		}#if end
-
 
162
 
-
 
163
	}#foreach end
-
 
164
	
-
 
165
#執行到這邊代表沒有對應的範例
-
 
166
 
-
 
167
#提示範例不存在
-
 
168
echo "範例(".$nameOfSample.")不存在".PHP_EOL;
88
 
169
 
-
 
170
#結束執行,並回傳1給shell
89
#debug
171
exit(1);
90
var_dump($procShouldWait);
-
 
91
 
172
 
92
?>
173
?>
93
174