Subversion Repositories php-qbpwcf

Rev

Rev 255 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 255 Rev 294
Line 361... Line 361...
361
 
361
 
362
		}#function execByteCode end
362
		}#function execByteCode end
363
 
363
 
364
	/*
364
	/*
365
	#函式說明:
365
	#函式說明:
366
	#解析指令與參數,回傳指令與參數給 callShell 函式使用.
366
	#解析含有指令與參數的陣列,回傳指令與參數給 callShell 函式使用.
367
	#回傳結果:
367
	#回傳結果:
368
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
368
	#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
369
	#$result["error"],錯誤訊息陣列.
369
	#$result["error"],錯誤訊息陣列.
370
	#$result["function"],當前執行的函數名稱.
370
	#$result["function"],當前執行的函數名稱.
371
	#$result["argu"],使用的參數.
371
	#$result["argu"],使用的參數.
Line 543... Line 543...
543
	#$conf["inBackGround"]="";
543
	#$conf["inBackGround"]="";
544
	#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
544
	#$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
545
	#$conf["getErr"]="false";
545
	#$conf["getErr"]="false";
546
	#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
546
	#$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
547
	#$conf["doNotRun"]="false";
547
	#$conf["doNotRun"]="false";
-
 
548
	#$conf["cmdContainArgu"],字串,cmd參數是否已經含有參數,預設為"false"代表沒有;反之為"true".
-
 
549
	#$conf["cmdContainArgu"]="false";
548
	#$conf["remoteIp"],字串,遠端ip或domainName,預設不使用,若存在則會透過ssh指令進行連線,然後執行指令.
550
	#$conf["remoteIp"],字串,遠端ip或domainName,預設不使用,若存在則會透過ssh指令進行連線,然後執行指令.
549
	#$conf["remoteIp"]="";
551
	#$conf["remoteIp"]="";
550
	#$conf["remoteUser"],字串,遠端的使用者賬戶,預設不指定,亦即跟為運行該php程式的使用者.
552
	#$conf["remoteUser"],字串,遠端的使用者賬戶,預設不指定,亦即跟為運行該php程式的使用者.
551
	#$conf["remoteUser"]="";
553
	#$conf["remoteUser"]="";
552
	#參考資料:
554
	#參考資料:
Line 611... Line 613...
611
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
613
		$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
612
		#可以省略的參數:
614
		#可以省略的參數:
613
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
615
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。
614
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
616
		#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
615
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
617
		#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
616
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pre","enablePrintDescription","printDescription","argu","escapeshellarg","username","password","useScript","logFilePath","inBackGround","arguIsAddr","getErr","doNotRun","thereIsShellVar","remoteIp","remoteUser");
618
		$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("pre","enablePrintDescription","printDescription","argu","escapeshellarg","username","password","useScript","logFilePath","inBackGround","arguIsAddr","getErr","doNotRun","thereIsShellVar","remoteIp","remoteUser","cmdContainArgu");
617
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
619
		#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
618
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","array","string","string","string","string","string","string","array","string","string","array","string","string");
620
		$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string","array","string","string","string","string","string","string","array","string","string","array","string","string","string");
619
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
621
		#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
620
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false",null,null,"false",null,null,"false",".qbpwcf_tmp/external/callShell/","false",null,"false","false",null,null,null);
622
		$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false",null,null,"false",null,null,"false",".qbpwcf_tmp/external/callShell/","false",null,"false","false",null,null,null,"false");
621
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
623
		#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
622
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("argu","arguIsAddr");
624
		$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("argu","arguIsAddr");
623
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
625
		$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
624
		unset($conf["variableCheck::checkArguments"]);
626
		unset($conf["variableCheck::checkArguments"]);
625
 
627
 
Line 763... Line 765...
763
 
765
 
764
			#遞迴呼叫
766
			#遞迴呼叫
765
			return self::callShell($conf);
767
			return self::callShell($conf);
766
 
768
 
767
			}#if end
769
			}#if end
-
 
770
			
-
 
771
		#如果 cmd 參數含有 arug
-
 
772
		if($conf["cmdContainArgu"]==="true"){
-
 
773
		
-
 
774
			#如果 cmd 中間含有 " | " 跟 "ssh"
-
 
775
			#函式說明:
-
 
776
			#尋找字串中是否含有符合格式的內容,且回傳解析好的變數數值.
-
 
777
			#回傳結果:
-
 
778
			#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
779
			#$reuslt["error"],執行不正常結束的錯訊息陣列.
-
 
780
			#$result["function"],當前執行的函式名稱.
-
 
781
			#$result["argu"],所使用的參數.
-
 
782
			#$result["found"],是否有找到符合格式的字串內容,"true"代表有找到,"false"代表沒有找到.
-
 
783
			#$result["content"],陣列,若為n個${*},則當found為"true"時,就會回傳n個元素.
-
 
784
			#$result["parsedVar"][varName],陣列,解析好的變數陣列,varName為${}中的內容,變數的key從0開始.
-
 
785
			#必填參數:
-
 
786
			#$conf["input"],字串,要檢查的字串.
-
 
787
			$conf["search::findSpecifyStrFormat"]["input"]=$conf["command"];
-
 
788
			#$conf["format"],格式字串,要尋找的格式字串.格式為固定的字串("fixedStr format")與變數("${keyWordVarName}")組成.
-
 
789
			$conf["search::findSpecifyStrFormat"]["format"]="${cmdAndArgu} | ssh ${remoteIp}";
-
 
790
			#可省略參數:
-
 
791
			#$conf["varEqual"],陣列,變數對應的數值,null代表不指定,其他內容代表該變數解析出來必須要為該內容.
-
 
792
			$conf["search::findSpecifyStrFormat"]["varEqual"]=array(null,null);
-
 
793
			#$conf["varCon"],陣列,每個varEqual為null者,其是否有其他條件,預設為null代表無其他條件,條件的表示是用陣列的key與value來表達,例如:array("no_tail"=>" not"),就代表變數的結尾不能為" not",可以用的key有"head",代表開頭要有什麼;"no_head",代表不能為什麼開頭;"tail",代表要什麼結尾;"no_tail",代表不能什麼結尾.
-
 
794
			#$conf["varCon"]=array("no_tail"=>" not");
-
 
795
			#參考資料:
-
 
796
			#無.
-
 
797
			#備註:
-
 
798
			#無.
-
 
799
			$findSpecifyStrFormat=search::findSpecifyStrFormat($conf["search::findSpecifyStrFormat"]);
-
 
800
			unset($conf["search::findSpecifyStrFormat"]);
-
 
801
		
-
 
802
			#若執行異常
-
 
803
			if($findSpecifyStrFormat["status"]==="false"){
-
 
804
			
-
 
805
				#設置執行錯誤
-
 
806
				$result["error"]=$findSpecifyStrFormat;
-
 
807
				
-
 
808
				#設置執行異常識別
-
 
809
				$result["status"]="false";
-
 
810
				
-
 
811
				return $result;
-
 
812
			
-
 
813
				}#if end
-
 
814
				
-
 
815
			#如果有找到符合的格式
-
 
816
			if($findSpecifyStrFormat["found"]==="true"){
-
 
817
			
-
 
818
				#取得尚未解析的指令與參數
-
 
819
				$cmdAndArgu=$findSpecifyStrFormat["parsedVar"]["cmdAndArgu"][0];
-
 
820
				
-
 
821
				#函式說明:
-
 
822
				#將指令字串解析成陣列,方便給予 external::callShell 使用
-
 
823
				#回傳結果:
-
 
824
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
825
				#$reuslt["error"],執行不正常結束的錯訊息陣列.
-
 
826
				#$result["function"],當前執行的函式名稱.
-
 
827
				#$result["content"],解析好的指令陣列.
-
 
828
				#$result["cmd"],解析好的指令名稱.
-
 
829
				#$result["argus"],解析好的參數陣列.
-
 
830
				#$result["argu"],所使用的參數.
-
 
831
				#必填參數
-
 
832
				#$conf["cmdStr"],字串,要解析的指令字串
-
 
833
				$conf["cmd::parseCmdString"]["cmdStr"]=$cmdAndArgu;
-
 
834
				#可省略參數:
-
 
835
				#無.
-
 
836
				#參考資料:
-
 
837
				#無.
-
 
838
				#備註:
-
 
839
				#無.
-
 
840
				$parseCmdString=cmd::parseCmdString($conf["cmd::parseCmdString"]);
-
 
841
				unset($conf["cmd::parseCmdString"]);
-
 
842
				
-
 
843
				#若執行異常
-
 
844
				if($parseCmdString["status"]==="false"){
-
 
845
				
-
 
846
					#設置執行錯誤
-
 
847
					$result["error"]=$parseCmdString;
-
 
848
					
-
 
849
					#設置執行異常識別
-
 
850
					$result["status"]="false";
-
 
851
					
-
 
852
					return $result;
-
 
853
				
-
 
854
					}#if end
-
 
855
					
-
 
856
				#取得新的 cmd
-
 
857
				$conf["command"]=$parseCmdString["cmd"];
-
 
858
			
-
 
859
				#取得新的優先參數
-
 
860
				$highPriorityArgu=$parseCmdString["argus"];
-
 
861
			
-
 
862
				#合併參數
-
 
863
				#函式說明:
-
 
864
				#將多個一維陣列串聯起來,key從0開始排序.
-
 
865
				#回傳的結果:
-
 
866
				#$result["status"],"true"表執行正常,"false"代表執行不正常.
-
 
867
				#$result["error"],錯誤訊息陣列.
-
 
868
				#$result["function"],當前執行的函數.
-
 
869
				#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
-
 
870
				#$result["content"],合併好的一維陣列.
-
 
871
				#必填參數
-
 
872
				#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
-
 
873
				$conf["arrays::mergeArray"]["inputArray"]=array($highPriorityArgu,$conf["argu"]);
-
 
874
				#可省略參數:
-
 
875
				#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
-
 
876
				#$conf["allowRepeat"]="true";
-
 
877
				#$conf["looseDiff"],字串,預設為"false",代表要嚴謹判斷為有相異,例如陣列中元素的key順序不同(整數)就代表有相異;反之為"true",例如陣列中元素的key順序不同(非整數),但value有相同,則視為無相異.
-
 
878
				#$conf["looseDiff"]="false";
-
 
879
				#參考資料:
-
 
880
				#無.
-
 
881
				#備註:
-
 
882
				#無.
-
 
883
				$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
-
 
884
				unset($conf["arrays::mergeArray"]);
-
 
885
			
-
 
886
				#若執行異常
-
 
887
				if($mergeArray["status"]==="false"){
-
 
888
				
-
 
889
					#設置執行錯誤
-
 
890
					$result["error"]=$mergeArray;
-
 
891
					
-
 
892
					#設置執行異常識別
-
 
893
					$result["status"]="false";
-
 
894
					
-
 
895
					return $result;
-
 
896
				
-
 
897
					}#if end
-
 
898
					
-
 
899
				#設置新的參數
-
 
900
				$conf["argu"]=$mergeArray["content"];
-
 
901
			
-
 
902
				#取得遠端的ip
-
 
903
				$conf["remoteIp"]=$findSpecifyStrFormat["parsedVar"]["remoteIp"][0];
-
 
904
				
-
 
905
				#設置cmd參數已經不含argu了
-
 
906
				$conf["cmdContainArgu"]="false";
-
 
907
			
-
 
908
				#遞迴呼叫
-
 
909
				return self::callShell($conf);
-
 
910
			
-
 
911
				}#if end
-
 
912
			
-
 
913
			#反之
-
 
914
			else{
-
 
915
			
-
 
916
				#函式說明:
-
 
917
				#將指令字串解析成陣列,方便給予 external::callShell 使用
-
 
918
				#回傳結果:
-
 
919
				#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
-
 
920
				#$reuslt["error"],執行不正常結束的錯訊息陣列.
-
 
921
				#$result["function"],當前執行的函式名稱.
-
 
922
				#$result["content"],解析好的指令陣列.
-
 
923
				#$result["cmd"],解析好的指令名稱.
-
 
924
				#$result["argus"],解析好的參數陣列.
-
 
925
				#$result["argu"],所使用的參數.
-
 
926
				#必填參數
-
 
927
				#$conf["cmdStr"],字串,要解析的指令字串
-
 
928
				$conf["cmd::parseCmdString"]["cmdStr"]=$conf["command"];
-
 
929
				#可省略參數:
-
 
930
				#無.
-
 
931
				#參考資料:
-
 
932
				#無.
-
 
933
				#備註:
-
 
934
				#無.
-
 
935
				$parseCmdString=cmd::parseCmdString($conf["cmd::parseCmdString"]);
-
 
936
				unset($conf["cmd::parseCmdString"]);
-
 
937
				
-
 
938
				#若執行異常
-
 
939
				if($parseCmdString["status"]==="false"){
-
 
940
				
-
 
941
					#設置執行錯誤
-
 
942
					$result["error"]=$parseCmdString;
-
 
943
					
-
 
944
					#設置執行異常識別
-
 
945
					$result["status"]="false";
-
 
946
					
-
 
947
					return $result;
-
 
948
				
-
 
949
					}#if end
-
 
950
					
-
 
951
				#取得新的 cmd
-
 
952
				$conf["command"]=$parseCmdString["cmd"];
-
 
953
			
-
 
954
				#取得新的優先參數
-
 
955
				$highPriorityArgu=$parseCmdString["argus"];
-
 
956
			
-
 
957
				#合併參數
-
 
958
				#函式說明:
-
 
959
				#將多個一維陣列串聯起來,key從0開始排序.
-
 
960
				#回傳的結果:
-
 
961
				#$result["status"],"true"表執行正常,"false"代表執行不正常.
-
 
962
				#$result["error"],錯誤訊息陣列.
-
 
963
				#$result["function"],當前執行的函數.
-
 
964
				#$result["argu"],字串陣列,目前輸入的參數名稱陣列.
-
 
965
				#$result["content"],合併好的一維陣列.
-
 
966
				#必填參數
-
 
967
				#$conf["inputArray"],陣列,要合併的一維陣列變數,例如:=array($array1,$array2);
-
 
968
				$conf["arrays::mergeArray"]["inputArray"]=array($highPriorityArgu,$conf["argu"]);
-
 
969
				#可省略參數:
-
 
970
				#$conf["allowRepeat"],字串,預設為"true",允許重複的結果;若為"false"則不會出現重複的元素內容.
-
 
971
				#$conf["allowRepeat"]="true";
-
 
972
				#$conf["looseDiff"],字串,預設為"false",代表要嚴謹判斷為有相異,例如陣列中元素的key順序不同(整數)就代表有相異;反之為"true",例如陣列中元素的key順序不同(非整數),但value有相同,則視為無相異.
-
 
973
				#$conf["looseDiff"]="false";
-
 
974
				#參考資料:
-
 
975
				#無.
-
 
976
				#備註:
-
 
977
				#無.
-
 
978
				$mergeArray=arrays::mergeArray($conf["arrays::mergeArray"]);
-
 
979
				unset($conf["arrays::mergeArray"]);
-
 
980
			
-
 
981
				#若執行異常
-
 
982
				if($mergeArray["status"]==="false"){
-
 
983
				
-
 
984
					#設置執行錯誤
-
 
985
					$result["error"]=$mergeArray;
-
 
986
					
-
 
987
					#設置執行異常識別
-
 
988
					$result["status"]="false";
-
 
989
					
-
 
990
					return $result;
-
 
991
				
-
 
992
					}#if end
-
 
993
					
-
 
994
				#設置新的參數
-
 
995
				$conf["argu"]=$mergeArray["content"];
-
 
996
			
-
 
997
				#設置cmd參數已經不含argu了
-
 
998
				$conf["cmdContainArgu"]="false";
-
 
999
			
-
 
1000
				#遞迴呼叫
-
 
1001
				return self::callShell($conf);
-
 
1002
			
-
 
1003
				}#else end
-
 
1004
		
-
 
1005
			}#if end
768
 
1006
 
769
		#如果沒有設置要印出來的描述內容
1007
		#如果沒有設置要印出來的描述內容
770
		if(!isset($conf["printDescription"])){
1008
		if(!isset($conf["printDescription"])){
771
 
1009
 
772
			#預設為要執行的指令
1010
			#預設為要執行的指令