Subversion Repositories php-qbpwcf

Rev

Rev 368 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

/*

        QBPWCF, Quick Build PHP website Component base on Fedora Linux.
    Copyright (C) 2014~2026 MIN ZHI, CHEN

    This file is part of QBPWCF.

    QBPWCF is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    QBPWCF is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.

*/
namespace qbpwcf;

/*
類別說明:
提供資料與具備揮發性的物件、資源管理,讓不同程序與程式甚至不同語言都能夠共享資源.
備註:
無.
*/
class resource{

        /*
        #函式說明:
        #當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$method,物件,為物件實體或類別名稱,會自動置入該參數.
        #$arguments,陣列,為呼叫方法時所用的參數.
        #可省略參數:
        #無.
        #參考資料:
        #__call=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
        #備註:
        #無.
        */
        public function __call($method,$arguments){

                #取得當前執行的函式
                $result["function"]=__FUNCTION__;

                #設置執行不正常
                $result["status"]="false";

                #設置執行錯誤
                $result["error"][]=__NAMESPACE__ ."/".$method."() 不存在!";

                #設置所丟入的參數
                $result["error"][]=$arguments;

                #回傳結果
                return $result;

                }#function __call end

        /*
        #函式說明:
        #當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$method,物件,為物件實體或類別名稱,會自動置入該參數.
        #$arguments,陣列,為呼叫方法時所用的參數.
        #可省略參數:
        #無.
        #參考資料:
        #__callStatic=>http://php.net/manual/en/language.oop5.overloading.php#object.callstatic
        #備註:
        #無.
        */
        public static function __callStatic($method,$arguments){

                #取得當前執行的函式
                $result["function"]=__FUNCTION__;

                #設置執行不正常
                $result["status"]="false";

                #設置執行錯誤
                $result["error"][]="欲呼叫的". __NAMESPACE__ ."/".$method."() 不存在!";

                #設置所丟入的參數
                $result["error"][]=$arguments;

                #回傳結果
                return $result;

                }#function __callStatic end
                
        /*
        #函式說明:
        #建立快取服務.實質上為unix domain socket server.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #$result["argu"],所使用的參數.
        #必填參數:
        #無.
        #可省略參數:
        #$conf["sock"],字串,unix domain socket的路徑與名稱,預設為相對於當前套件的 var/qbpwcf/resource.sock
        #$conf["sock"]="";
        #$conf["debug"],字串,"true"代表要啟用debug模式;反之預設為"false"不啟用.
        #$conf["debug"]="";
        #$conf["addOnProcessFunc"],陣列,收到訊息後,要依順執行的函式,預設為array("\qbpwcf\resource::addOnProcessFunc"),會傳遞的參數為一陣列,每個元素的key與value依序為"id":"識別用戶的id";"last_request_time":"訊號來的時間";"request":"收到的訊息陣列";"socket":"跟用戶互動用socket";"clientCache":id對應用戶的cache;
        #$conf["addOnProcessFunc"]=array();
        #$conf["funcToRunWhenIdle"],陣列,閒置時要依序執行的函式,預設為array("/qbpwcf/resource::funcToRunWhenIdle");
        #$conf["funcToRunWhenIdle"]=array();
        #$conf["deafaultLifeTime"],字串,資源沒被使用時,預設的存留時間秒數,預設為"300".
        #$conf["deafaultLifeTime"]="300";
        #$conf["defaultUserGroup"],字串,unix domain socket的擁有者與群組為何,預設為"root.".webUser.
        #$ocnf["defaultUserGroup"]="root.".webUser;
        #$conf["defaultPermission"],字串,unix domain socket的權限設定,預設為"0660",代表擁有者與其群組有讀寫的權限.
        #$conf["defaultPermission"]="0660";
        #參考資料:
        #無.
        #備註:
        #僅能在命令列環境下運行.
        */
        public static function server(&$conf){
        
                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";

                        #回傳結果
                        return $result;

                        }#if end

                #涵式說明:
                #判斷當前環境為web還是cmd
                #回傳結果:
                #$result,"web"或"cmd"
                if(csInformation::getEnv()==="web"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";

                        #回傳結果
                        return $result;

                        }#if end
                
                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if(is_null($conf)){

                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end
        
                #預設的 unix domain socket addr
                $sock=pathinfo(__FILE__)["dirname"]."/../../var/qbpwcf/resource.sock";
        
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                #$conf["mustBeFilledVariableName"]=array();
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                #$conf["mustBeFilledVariableType"]=array();
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                $conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock","deafaultLifeTime","defaultUserGroup","defaultPermission");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("sock","deafaultLifeTime","defaultUserGroup","defaultPermission");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                $conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($sock,"300","root.".webUser,"0660");
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
        
                #初始化要儲存快取資料的變數
                $resource=array();
                
                /*
                $resource 結構
                $resource[$uuid]["value"],資源的內容.
                $resource[$uuid]["type"],資源的類型,有php_variable跟proc.
                $resource[$uuid]["life"],資源的壽命,單位為秒數.
                */
        
                #函式說明:
                #建立 unix domain socket server, 僅提供具備檔案存取權限的用戶使用,預設提供可以下達任何指令的功能.
                #回傳結果:
                #$result["status"],"true"代表執行正常;"false"代表執行不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["serverCache"],函式結束前,儲存在serverCache的內容,若有元素"exit"存在則代表是正常結束.
                #$result["serverCache"]["serverSide"],server side 的 cache.
                #$result["serverCache"]["serverSide"]["procs"], server side 的 procs cache,儲存執行的子程序資訊.
                #$result["serverCache"]["clientSide"],client site 的 cache.
                #必填參數:
                #$conf["sock"],字串,socket檔案要放在哪邊,名稱為何.
                $conf["sock::unixDomainSockServer"]["sock"]=$conf["sock"];
                #$conf["fileArgu"],字串,變數__FILE__的內容.
                $conf["sock::unixDomainSockServer"]["fileArgu"]=__FILE__;
                #可省略參數:
                #$conf["changeOwner"],字串,要將socket檔案的擁有着權限進行修改."user.group"代表擁有者帳號為user,群組為group.
                $conf["sock::unixDomainSockServer"]["changeOwner"]=$conf["defaultUserGroup"];
                #$conf["changePermission"],字串,要將socket檔案的權限設為多少.ex: "0666"(所有帳戶都有存取的權限) 或 "0660"(僅有擁有者與群組帳戶有存取的權限) 或 "0600"(只有擁有者有權限執行).
                $conf["sock::unixDomainSockServer"]["changePermission"]=$conf["defaultPermission"];
                #$conf["sessionTimeout"],字串,當連線結束後於下一次連線間隔多久就算session timeout,server端會將記錄移除,client端需要重新拿取id,預設為300秒.
                #$conf["sessionTimeout"]="300";
                #$conf["addOnProcessFunc"],字串陣列,增加用於處理 json request 的函式名稱,給予的參數為array("request"=>收到的json訊息,"sock"=>用戶的socket,"clientCache"=>給予所有用戶的cache),若收到的不是json而是"quit"則代表用戶要結束連線;若收到的是$shutdownStr則代表要結束本函式.回傳的內容必須為陣列,例如 $res["continue"]="true"代表要繼續執行下一個addOnProcessFunc;"false"代表代表到此為止. $res["content"]="replaced content";代表要將收到的訊息取代成"replaced content". 最少要有回傳 $res["status"]數值"true"代表執行正常;"false"代表執行不正常.
                $conf["sock::unixDomainSockServer"]["addOnProcessFunc"]=array("\qbpwcf\\resource::addOnProcessFunc");
                #$conf["funcToRunWhenIdle"],字串陣列,當沒有事件產生時,要執行的函式名稱,給予參數為array("client"=>所有用戶,"clientCache"=>$result["serverCache"]["clientSide"]["addOnProcessFunc"][$funcToRunWhenIdle],"serverCache"=>$result["serverCache"]["serverSide"]["funcToRunWhenIdle"][$funcToRunWhenIdle]).
                $conf["sock::unixDomainSockServer"]["funcToRunWhenIdle"]=array("\qbpwcf\\resource::funcToRunWhenIdle");
                #$conf["paramsForFuncToRunWhenIdle"],2維陣列,每個元素代表指定給予funcToRunWhenIdle參數中的指定元素的參數.
                #$conf["paramsForFuncToRunWhenIdle"]=array();
                #$conf["infoToFunction"],陣列,需要增加給addOnProcessFunc跟funcToRunWhenIdle函式的資訊,在函式中其參數的info鍵值.
                $conf["sock::unixDomainSockServer"]["infoToFunction"]=array("resource"=>$resource,"defaultLifeTime"=>$conf["deafaultLifeTime"]);
                #$conf["shutdownStrAddr"],字串,儲存收到用戶傳什麼樣的字串會結束本函式的檔案位置與名稱,預設為 $conf["sock"].".shutdown".
                #$conf["shutdownStrAddr"]="";
                #$conf["shutdownCallback"],字串,當收到 shutdownStrAddr 參數的字串後,會先執行該函式,傳遞的參數為一陣列,key值有clientCache、serverCache、info,再結束執行,預設不使用.
                $conf["sock::unixDomainSockServer"]["shutdownCallback"]="\qbpwcf\\resource::closeAllResurce";
                #參考資料:
                #http://php.net/manual/en/function.stream-socket-server.php
                #備註:
                #無.
                $unixDomainSockServer=sock::unixDomainSockServer($conf["sock::unixDomainSockServer"]);
                unset($conf["sock::unixDomainSockServer"]);
                
                #如果異常
                if($unixDomainSockServer["status"]==="false"){
                
                        #設置執行異常
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"]=$unixDomainSockServer;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #設置執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
        
                }#function server end

        /*
        #函式說明:
        #用於 server 的 addOnProcessFunc,亦即收到用戶訊息要做什麼事情.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$conf["info"],陣列,資料庫資訊.
        $conf["info"]=array();
        #$conf["request"],字串,收到的json訊息,其元素key值有"id":用於識別unix domain client用戶該次訊息的id;"data":array("action","condition","value","type"),"action"的數值有read(讀取資源)跟write(寫入資源);"condition"的數值為一陣列,若為空陣列則代表沒有條件,通常是為新增資源,元素的key為"id"者代表目標資源的id,沒有時不會傳遞該參數;元素的key為"value"者代表目標資源是否相等於"value",且"type"為"php_variable";元素的key為"pid"者代表運行的資源程序pid,且"type"為"proc";"value"為資源,為任意php變數;"type"有php_variable(任何php變數)跟proc(透過指令啟動,透過unix domain socket互動).
        $conf["request"]="";
        #$conf["socket"],object,用戶的socket.
        $conf["socket"]=$object;
        #$conf["clientCache"],陣列,給予所有用戶的cache.
        $conf["clientCache"]=array();
        #$conf["last_req_time"],字串,收到client要求的時間.
        $conf["last_req_time"]="";
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function addOnProcessFunc(&$conf){
        
                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";

                        #回傳結果
                        return $result;

                        }#if end

                #涵式說明:
                #判斷當前環境為web還是cmd
                #回傳結果:
                #$result,"web"或"cmd"
                if(csInformation::getEnv()==="web"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";

                        #回傳結果
                        return $result;

                        }#if end
                
                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if(is_null($conf)){

                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end
                        
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("request","socket","clientCache","last_req_time");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","resource","array","integer");
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                $conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("info");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("info");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($sock);
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                
                #轉換成陣列
                $conf["request"]=(array)($conf["request"]);
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf["request"];
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("data","id");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("object","string");
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                #$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("action");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("condition","value","type");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                #$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array",null,"string");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array(),null,null);
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                
                #另存參考
                $crd=&$conf["request"]["data"];
                
                #變更為陣列
                $crd=(array)$crd;
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=$crd;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("action");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                #$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("action");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("condition","value","type");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array",null,"string");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                $conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array(),null,null);
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                
                #取得 request data 的參考
                $rdata=&$conf["request"]["data"];
                
                #判斷 action
                switch($rdata["action"]){
                
                        #如果是要寫入
                        case "write":
                        
                                #如果是空的,亦即沒有條件
                                if(empty($rdata["condition"])){
                                
                                        #代表要新增資料
                                
                                        #判斷類型
                                        switch($rdata["type"]){
                                        
                                                #如果是 php 變數
                                                case "php_variable":
                                                
                                                        #產生id
                                                        #函式說明:
                                                        #使用 linux 的 uuid 指令來產生 uuid 字串
                                                        #回傳結果:
                                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                        #$result["error"],錯誤訊息.
                                                        #$result["function"],當前執行的函式名稱.
                                                        #$result["content"],uuid.
                                                        #必填參數:
                                                        #無.
                                                        #可省略參數:
                                                        #無.
                                                        #參考資料:
                                                        #無.
                                                        #備註:
                                                        #無.
                                                        $uuid=cmd::uuid();
                                                        
                                                        #如果執行異常
                                                        if($uuid["status"]==="false"){
                                                        
                                                                #設置執行異常識別
                                                                $result["status"]="false";
                                                                
                                                                #設置執行錯誤
                                                                $result["error"]=$uuid;
                                                                
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                }#if end
                                                        
                                                        #取得uuid
                                                        $uuid=$uuid["content"];
                                                
                                                        #初始化要設置的列
                                                        $row=array();
                                                
                                                        #設置存放的數值
                                                        $row["value"]=$rdata["value"];
                                                
                                                        #設置形態
                                                        $row["type"]=$rdata["type"];
                                                
                                                        #若無設定 life
                                                        if(!isset($rdata["life"])){
                                                        
                                                                #設置預設的life
                                                                $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                        
                                                                }#if end
                                                
                                                        #新增資料並指定 id
                                                        $conf["info"]["resource"][$uuid]=$row;
                                                        
                                                        #設置新增的資料
                                                        $result["content"]=array("id"=>$uuid,"info"=>$row);
                                                        
                                                        #設置執行正常
                                                        $result["status"]="true";
                                                        
                                                        #回傳結果
                                                        return $result;
                                                
                                                        #跳出 switch
                                                        break 2;
                                                
                                                #若是 proc
                                                case "proc":
                                                
                                                        #取得要運行的程式與參數
                                                        $cmdAndArgu=$rdata["value"];
                                                
                                                        #函式說明:
                                                        #透過proc來多執行序運作.
                                                        #回傳結果:
                                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                        #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                        #$result["function"],當前執行的函式名稱.
                                                        #$result["argu"],使用的參數.
                                                        #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,若為整數0,則代表順利執行結束,可透過proc_update函式進行資訊的更新與取得;key為"content"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                        #必填參數:
                                                        #$conf["cmds"],字串陣列,每個元素代表單一程序要執行的指令與參數.
                                                        $conf["threads::proc"]["cmds"]=array($cmdAndArgu);
                                                        #可省略參數:
                                                        #$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
                                                        $conf["threads::proc"]["wait"]="false";
                                                        #$conf["timeout"],字串陣列,每個元素代表單一程序執行的最大等待秒數,超過後將會強迫停止執行,僅當wait參數為"true"時生效.
                                                        #$conf["timeout"]=array("10");
                                                        #$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
                                                        #$conf["workingDir"]=array("path");
                                                        #$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
                                                        #$conf["envs"]=array(array("key"=>"value"));
                                                        #$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
                                                        #$conf["executeBy"]=array("bash");
                                                        #參考資料:
                                                        #https://www.php.net/manual/en/function.proc-open.php
                                                        #https://www.php.net/manual/en/function.proc-get-status.php
                                                        #https://www.php.net/manual/en/function.proc-terminate.php
                                                        #備註:
                                                        #當wait參數為"true"時,會自動解析stdout與stderr,因此不用再透過 self::proc_update 來更新.
                                                        #當wait參數不為"true"時,若需要取得當下的執行狀況,請使用 self::proc_update 來更新.
                                                        $proc=threads::proc($conf["threads::proc"]);
                                                        unset($conf["threads::proc"]);
                                                
                                                        #如果執行異常
                                                        if($proc["status"]==="false"){
                                                        
                                                                #設置跳過,不適用
                                                                $result["status"]="continue";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                }#if end
                                                        
                                                        #函式說明:
                                                        #更新透過proc執行的多程序資訊.
                                                        #回傳結果:
                                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                        #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                        #$result["function"],當前執行的函式名稱.
                                                        #$result["argu"],使用的參數.
                                                        #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,可透過proc_update函式進行資訊的更新與取得;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                        #必填參數:
                                                        #$conf["procs"],陣列,運行self::proc後回傳的content.
                                                        $conf["threads::proc_update"]["procs"]=$procs["content"];
                                                        #可省略參數:
                                                        #無.
                                                        #參考資料:
                                                        #無.
                                                        #備註:
                                                        #無.
                                                        $proc_update=threads::proc_update($conf["threads::proc_update"]);
                                                        unset($conf["threads::proc_update"]);
                                                        
                                                        #如果執行異常
                                                        if($proc_update["status"]==="false"){
                                                        
                                                                #設置跳過,不適用
                                                                $result["status"]="continue";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                }#if end
                                                        
                                                        #如果proc裡面的程式執行異常
                                                        if($proc_update["content"]["status"]==="false"){
                                                        
                                                                #設置跳過,不適用
                                                                $result["status"]="continue";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                }#if end
                                                                
                                                        #取得要儲存的php變數
                                                        $value=$proc_update["content"][0];
                                                
                                                        #產生id
                                                        #函式說明:
                                                        #使用 linux 的 uuid 指令來產生 uuid 字串
                                                        #回傳結果:
                                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                        #$result["error"],錯誤訊息.
                                                        #$result["function"],當前執行的函式名稱.
                                                        #$result["content"],uuid.
                                                        #必填參數:
                                                        #無.
                                                        #可省略參數:
                                                        #無.
                                                        #參考資料:
                                                        #無.
                                                        #備註:
                                                        #無.
                                                        $uuid=cmd::uuid();
                                                        
                                                        #如果執行異常
                                                        if($uuid["status"]==="false"){
                                                        
                                                                #設置執行異常識別
                                                                $result["status"]="false";
                                                                
                                                                #設置執行錯誤
                                                                $result["error"]=$uuid;
                                                                
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                }#if end
                                                        
                                                        #取得uuid
                                                        $uuid=$uuid["content"];
                                                
                                                        #初始化要設置的列
                                                        $row=array();
                                                
                                                        #設置存放的數值
                                                        $row["value"]=$value;
                                                
                                                        #設置形態
                                                        $row["type"]=$rdata["type"];
                                                
                                                        #新增資料並指定 id
                                                        $conf["info"]["resource"][$uuid]=$row;
                                                        
                                                        #若無設定 life
                                                        if(!isset($rdata["life"])){
                                                        
                                                                #設置預設的life
                                                                $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                        
                                                                }#if end
                                                        
                                                        #設置新增的資料
                                                        $result["content"]=array("id"=>$uuid,"info"=>$row);
                                                        
                                                        #設置執行正常
                                                        $result["status"]="true";
                                                        
                                                        #回傳結果
                                                        return $result;
                                                
                                                        #跳出 switch
                                                        break 2;
                                                
                                                #其他類型
                                                default: 
                                                
                                                        #設置錯誤訊息
                                                        $result["error"][]="unsupported type:".$rdata["type"];
                                                        
                                                        #設置執行異常
                                                        $result["status"]="false";
                                                        
                                                        #回傳結果
                                                        return $result;
                                        
                                                }#switch end
                                                
                                        }#if end
                                        
                                #反之有條件
                                else{
                                
                                        #針對每個條件
                                        foreach($rdata["condition"] as $key => $val){
                                        
                                                #判斷 $key
                                                switch($key){
                                                
                                                        #如果條件欄位是 id
                                                        case "id":
                                                        
                                                                #針對每筆記錄
                                                                foreach($conf["info"]["resource"] as $idInM => $valInM){
                                                                
                                                                        #如果找到符合id的資料
                                                                        if($idInM===$val){
                                                                        
                                                                                #取得現有資源類型
                                                                                $currentType=$conf["info"]["resource"][$idInM]["type"];
                                                                                
                                                                                #如果沒有指定新 type
                                                                                if(!isset($rdata["type"])){
                                                                                
                                                                                        #視為跟現有資源類型一樣
                                                                                        $rdata["type"]=$currentType;
                                                                                
                                                                                        }#if end
                                                                                
                                                                                #判斷新資源類型
                                                                                switch($rdata["type"]){
                                                                                
                                                                                        #如果為 "php_variable"
                                                                                        case "php_variable":
                                                                                        
                                                                                                #如果既有資源的類型為 "proc"
                                                                                                if($currentType==="proc"){
                                                                                                
                                                                                                        #pid
                                                                                                        #$valInM["proc_get_status"]["pid"];
                                                                                                        
                                                                                                        #關閉程序
                                                                                                        proc_close($valInM["process"]);
                                                                                                
                                                                                                        }#if end
                                                                                        
                                                                                                #初始化要設置的列
                                                                                                $row=array();
                                                                                        
                                                                                                #設置存放的數值
                                                                                                $row["value"]=$rdata["value"];
                                                                                        
                                                                                                #設置形態
                                                                                                $row["type"]=$rdata["type"];
                                                                                        
                                                                                                #若無設定 life
                                                                                                if(!isset($rdata["life"])){
                                                                                                
                                                                                                        #設置預設的life
                                                                                                        $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #寫入資源
                                                                                                $conf["info"]["resource"][$idInM]=$row;
                                                                                        
                                                                                                #跳出 switch
                                                                                                break;
                                                                                
                                                                                        #如果為 "proc"
                                                                                        case "proc":
                                                                                        
                                                                                                #如果既有資源的類型為 "proc"
                                                                                                if($currentType==="proc"){
                                                                                                
                                                                                                        #pid
                                                                                                        #$valInM["proc_get_status"]["pid"];
                                                                                                        
                                                                                                        #關閉程序
                                                                                                        proc_close($valInM["process"]);
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #取得要運行的程式與參數
                                                                                                $cmdAndArgu=$rdata["value"];
                                                
                                                                                                #函式說明:
                                                                                                #透過proc來多執行序運作.
                                                                                                #回傳結果:
                                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                                #$result["function"],當前執行的函式名稱.
                                                                                                #$result["argu"],使用的參數.
                                                                                                #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,若為整數0,則代表順利執行結束,可透過proc_update函式進行資訊的更新與取得;key為"content"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                                                                #必填參數:
                                                                                                #$conf["cmds"],字串陣列,每個元素代表單一程序要執行的指令與參數.
                                                                                                $conf["threads::proc"]["cmds"]=array($cmdAndArgu);
                                                                                                #可省略參數:
                                                                                                #$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
                                                                                                $conf["threads::proc"]["wait"]="false";
                                                                                                #$conf["timeout"],字串陣列,每個元素代表單一程序執行的最大等待秒數,超過後將會強迫停止執行,僅當wait參數為"true"時生效.
                                                                                                #$conf["timeout"]=array("10");
                                                                                                #$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
                                                                                                #$conf["workingDir"]=array("path");
                                                                                                #$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
                                                                                                #$conf["envs"]=array(array("key"=>"value"));
                                                                                                #$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
                                                                                                #$conf["executeBy"]=array("bash");
                                                                                                #參考資料:
                                                                                                #https://www.php.net/manual/en/function.proc-open.php
                                                                                                #https://www.php.net/manual/en/function.proc-get-status.php
                                                                                                #https://www.php.net/manual/en/function.proc-terminate.php
                                                                                                #備註:
                                                                                                #當wait參數為"true"時,會自動解析stdout與stderr,因此不用再透過 self::proc_update 來更新.
                                                                                                #當wait參數不為"true"時,若需要取得當下的執行狀況,請使用 self::proc_update 來更新.
                                                                                                $proc=threads::proc($conf["threads::proc"]);
                                                                                                unset($conf["threads::proc"]);
                                                                                        
                                                                                                #如果執行異常
                                                                                                if($proc["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                
                                                                                                #函式說明:
                                                                                                #更新透過proc執行的多程序資訊.
                                                                                                #回傳結果:
                                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                                #$result["function"],當前執行的函式名稱.
                                                                                                #$result["argu"],使用的參數.
                                                                                                #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,可透過proc_update函式進行資訊的更新與取得;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                                                                #必填參數:
                                                                                                #$conf["procs"],陣列,運行self::proc後回傳的content.
                                                                                                $conf["threads::proc_update"]["procs"]=$procs["content"];
                                                                                                #可省略參數:
                                                                                                #無.
                                                                                                #參考資料:
                                                                                                #無.
                                                                                                #備註:
                                                                                                #無.
                                                                                                $proc_update=threads::proc_update($conf["threads::proc_update"]);
                                                                                                unset($conf["threads::proc_update"]);
                                                                                                
                                                                                                #如果執行異常
                                                                                                if($proc_update["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                
                                                                                                #如果proc裡面的程式執行異常
                                                                                                if($proc_update["content"]["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #取得要儲存的php變數
                                                                                                $value=$proc_update["content"][0];
                                                                                                        
                                                                                                #初始化要設置的列
                                                                                                $row=array();
                                                                                        
                                                                                                #設置存放的數值
                                                                                                $row["value"]=$value;
                                                                                        
                                                                                                #設置形態
                                                                                                $row["type"]=$rdata["type"];
                                                                                        
                                                                                                #若無設定 life
                                                                                                if(!isset($rdata["life"])){
                                                                                                
                                                                                                        #設置預設的life
                                                                                                        $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                                                                
                                                                                                        }#if end
                                                                                        
                                                                                                #寫入資源
                                                                                                $conf["info"]["resource"][$idInM]=$row;
                                                                                        
                                                                                                #跳出 switch
                                                                                                break;
                                                                                        
                                                                                        #其他 type
                                                                                        default:
                                                                                        
                                                                                                #設置錯誤訊息
                                                                                                $result["error"][]="unsupported type:".$rdata["type"];
                                                                                                
                                                                                                #設置執行異常
                                                                                                $result["status"]="false";
                                                                                                
                                                                                                #回傳結果
                                                                                                return $result;
                                                                                
                                                                                        }#switch end
                                                                        
                                                                                #設置結果
                                                                                $result["content"]=array("id"=>$idInM,"value"=>$conf["info"]["resource"][$valInM]);
                                                                                
                                                                                #設置執行正常
                                                                                $result["status"]="true";
                                                                        
                                                                                #回傳結果
                                                                                return $result;
                                                                        
                                                                                }#if end
                                                                
                                                                        }#foreach end
                                                                        
                                                                #執行到這邊代表沒有符合條件的記錄
                                                                
                                                                #設置結果為null
                                                                $result["content"]=null;
                                                        
                                                                #設置執行正常
                                                                $result["status"]="true";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                #跳出 switch
                                                                break;
                                                                
                                                        #如果條件欄位是 value
                                                        case "value":
                                                        
                                                                #針對每筆記錄
                                                                foreach($conf["info"]["resource"] as $idInM => $valInM){
                                                                
                                                                        #如果不是 php_variable
                                                                        if($valInM["type"]!=="php_variable"){
                                                                        
                                                                                #跳過之
                                                                                continue;
                                                                        
                                                                                }#if end
                                                                
                                                                        #如果找到符合value的資料
                                                                        if($valInM===$val){
                                                                        
                                                                                #如果沒有指定新 type
                                                                                if(!isset($rdata["type"])){
                                                                                
                                                                                        #視為跟現有資源類型一樣
                                                                                        $rdata["type"]=$currentType;
                                                                                
                                                                                        }#if end
                                                                                
                                                                                #判斷新資源類型
                                                                                switch($rdata["type"]){
                                                                                
                                                                                        #如果為 "php_variable"
                                                                                        case "php_variable":
                                                                                        
                                                                                                #如果既有資源的類型為 "proc"
                                                                                                if($currentType==="proc"){
                                                                                                
                                                                                                        #pid
                                                                                                        #$valInM["proc_get_status"]["pid"];
                                                                                                        
                                                                                                        #關閉程序
                                                                                                        proc_close($valInM["process"]);
                                                                                                
                                                                                                        }#if end
                                                                                        
                                                                                                #初始化要設置的列
                                                                                                $row=array();
                                                                                        
                                                                                                #設置存放的數值
                                                                                                $row["value"]=$rdata["value"];
                                                                                        
                                                                                                #設置形態
                                                                                                $row["type"]=$rdata["type"];
                                                                                        
                                                                                                #若無設定 life
                                                                                                if(!isset($rdata["life"])){
                                                                                                
                                                                                                        #設置預設的life
                                                                                                        $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #寫入資源
                                                                                                $conf["info"]["resource"][$idInM]=$row;
                                                                                        
                                                                                                #跳出 switch
                                                                                                break;
                                                                                                
                                                                                        #如果為 "proc"
                                                                                        case "proc":
                                                                                        
                                                                                                #如果既有資源的類型為 "proc"
                                                                                                if($currentType==="proc"){
                                                                                                
                                                                                                        #pid
                                                                                                        #$valInM["proc_get_status"]["pid"];
                                                                                                        
                                                                                                        #關閉程序
                                                                                                        proc_close($valInM["process"]);
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #取得要運行的程式與參數
                                                                                                $cmdAndArgu=$rdata["value"];
                                                
                                                                                                #函式說明:
                                                                                                #透過proc來多執行序運作.
                                                                                                #回傳結果:
                                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                                #$result["function"],當前執行的函式名稱.
                                                                                                #$result["argu"],使用的參數.
                                                                                                #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,若為整數0,則代表順利執行結束,可透過proc_update函式進行資訊的更新與取得;key為"content"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                                                                #必填參數:
                                                                                                #$conf["cmds"],字串陣列,每個元素代表單一程序要執行的指令與參數.
                                                                                                $conf["threads::proc"]["cmds"]=array($cmdAndArgu);
                                                                                                #可省略參數:
                                                                                                #$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
                                                                                                $conf["threads::proc"]["wait"]="false";
                                                                                                #$conf["timeout"],字串陣列,每個元素代表單一程序執行的最大等待秒數,超過後將會強迫停止執行,僅當wait參數為"true"時生效.
                                                                                                #$conf["timeout"]=array("10");
                                                                                                #$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
                                                                                                #$conf["workingDir"]=array("path");
                                                                                                #$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
                                                                                                #$conf["envs"]=array(array("key"=>"value"));
                                                                                                #$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
                                                                                                #$conf["executeBy"]=array("bash");
                                                                                                #參考資料:
                                                                                                #https://www.php.net/manual/en/function.proc-open.php
                                                                                                #https://www.php.net/manual/en/function.proc-get-status.php
                                                                                                #https://www.php.net/manual/en/function.proc-terminate.php
                                                                                                #備註:
                                                                                                #當wait參數為"true"時,會自動解析stdout與stderr,因此不用再透過 self::proc_update 來更新.
                                                                                                #當wait參數不為"true"時,若需要取得當下的執行狀況,請使用 self::proc_update 來更新.
                                                                                                $proc=threads::proc($conf["threads::proc"]);
                                                                                                unset($conf["threads::proc"]);
                                                                                        
                                                                                                #如果執行異常
                                                                                                if($proc["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                
                                                                                                #函式說明:
                                                                                                #更新透過proc執行的多程序資訊.
                                                                                                #回傳結果:
                                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                                #$result["function"],當前執行的函式名稱.
                                                                                                #$result["argu"],使用的參數.
                                                                                                #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,可透過proc_update函式進行資訊的更新與取得;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                                                                #必填參數:
                                                                                                #$conf["procs"],陣列,運行self::proc後回傳的content.
                                                                                                $conf["threads::proc_update"]["procs"]=$procs["content"];
                                                                                                #可省略參數:
                                                                                                #無.
                                                                                                #參考資料:
                                                                                                #無.
                                                                                                #備註:
                                                                                                #無.
                                                                                                $proc_update=threads::proc_update($conf["threads::proc_update"]);
                                                                                                unset($conf["threads::proc_update"]);
                                                                                                
                                                                                                #如果執行異常
                                                                                                if($proc_update["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                
                                                                                                #如果proc裡面的程式執行異常
                                                                                                if($proc_update["content"]["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #取得要儲存的php變數
                                                                                                $value=$proc_update["content"][0];
                                                                                                        
                                                                                                #初始化要設置的列
                                                                                                $row=array();
                                                                                        
                                                                                                #設置存放的數值
                                                                                                $row["value"]=$value;
                                                                                        
                                                                                                #設置形態
                                                                                                $row["type"]=$rdata["type"];
                                                                                        
                                                                                                #若無設定 life
                                                                                                if(!isset($rdata["life"])){
                                                                                                
                                                                                                        #設置預設的life
                                                                                                        $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                                                                
                                                                                                        }#if end
                                                                                        
                                                                                                #寫入資源
                                                                                                $conf["info"]["resource"][$idInM]=$row;
                                                                                        
                                                                                                #跳出 switch
                                                                                                break;
                                                                                        
                                                                                        #其他 type
                                                                                        default:
                                                                                        
                                                                                                #設置錯誤訊息
                                                                                                $result["error"][]="unsupported type:".$rdata["type"];
                                                                                                
                                                                                                #設置執行異常
                                                                                                $result["status"]="false";
                                                                                                
                                                                                                #回傳結果
                                                                                                return $result;
                                                                                        
                                                                                        }#switch end
                                                                        
                                                                                }#if end
                                                                
                                                                        }#foreach end
                                                                        
                                                                #執行到這邊代表沒有符合條件的記錄
                                                                
                                                                #設置結果為null
                                                                $result["content"]=null;
                                                        
                                                                #設置執行正常
                                                                $result["status"]="true";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                #跳出 switch
                                                                break;
                                                                
                                                        #如果條件欄位是 pid
                                                        case "pid":
                                                        
                                                                #針對每筆記錄
                                                                foreach($rdata["resource"] as $idInM => $valInM){
                                                                
                                                                        #如果不是 proc
                                                                        if($valInM["type"]!=="proc"){
                                                                        
                                                                                #跳過之
                                                                                continue;
                                                                        
                                                                                }#if end
                                                                
                                                                        #取得 proc 的 pid
                                                                        $pidInM=$valInM["proc_get_status"]["pid"];
                                                                
                                                                        #如果找到符合value的資料
                                                                        if($pidInM===$val){
                                                                        
                                                                                #如果沒有指定新 type
                                                                                if(!isset($rdata["type"])){
                                                                                
                                                                                        #視為跟現有資源類型一樣
                                                                                        $rdata["type"]=$currentType;
                                                                                
                                                                                        }#if end
                                                                                
                                                                                #判斷新資源類型
                                                                                switch($rdata["type"]){
                                                                                
                                                                                        #如果為 "php_variable"
                                                                                        case "php_variable":
                                                                                        
                                                                                                #如果既有資源的類型為 "proc"
                                                                                                if($currentType==="proc"){
                                                                                                
                                                                                                        #pid
                                                                                                        #$valInM["proc_get_status"]["pid"];
                                                                                                        
                                                                                                        #關閉程序
                                                                                                        proc_close($valInM["process"]);
                                                                                                
                                                                                                        }#if end
                                                                                        
                                                                                                #初始化要設置的列
                                                                                                $row=array();
                                                                                        
                                                                                                #設置存放的數值
                                                                                                $row["value"]=$rdata["value"];
                                                                                        
                                                                                                #設置形態
                                                                                                $row["type"]=rdata["request"]["type"];
                                                                                        
                                                                                                #若無設定 life
                                                                                                if(!isset($rdata["life"])){
                                                                                                
                                                                                                        #設置預設的life
                                                                                                        $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #寫入資源
                                                                                                $conf["info"]["resource"][$idInM]=$row;
                                                                                        
                                                                                                #跳出 switch
                                                                                                break;
                                                                                                
                                                                                        #如果為 "proc"
                                                                                        case "proc":
                                                                                        
                                                                                                #如果既有資源的類型為 "proc"
                                                                                                if($currentType==="proc"){
                                                                                                
                                                                                                        #pid
                                                                                                        #$valInM["proc_get_status"]["pid"];
                                                                                                        
                                                                                                        #關閉程序
                                                                                                        proc_close($valInM["process"]);
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #取得要運行的程式與參數
                                                                                                $cmdAndArgu=$rdata["value"];
                                                
                                                                                                #函式說明:
                                                                                                #透過proc來多執行序運作.
                                                                                                #回傳結果:
                                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                                #$result["function"],當前執行的函式名稱.
                                                                                                #$result["argu"],使用的參數.
                                                                                                #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,若為整數0,則代表順利執行結束,可透過proc_update函式進行資訊的更新與取得;key為"content"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                                                                #必填參數:
                                                                                                #$conf["cmds"],字串陣列,每個元素代表單一程序要執行的指令與參數.
                                                                                                $conf["threads::proc"]["cmds"]=array($cmdAndArgu);
                                                                                                #可省略參數:
                                                                                                #$conf["wait"],字串,是否需要等待所有程序結束,預設為"true"要等待;反之為"false"不要等待.
                                                                                                $conf["threads::proc"]["wait"]="false";
                                                                                                #$conf["timeout"],字串陣列,每個元素代表單一程序執行的最大等待秒數,超過後將會強迫停止執行,僅當wait參數為"true"時生效.
                                                                                                #$conf["timeout"]=array("10");
                                                                                                #$conf["workingDir"],字串陣列,個別程式執行時的家目錄,預設不指定.
                                                                                                #$conf["workingDir"]=array("path");
                                                                                                #$conf["envs"],2維字串陣列,每個元素代表個別程式執行時的指定環境變數,key變數名稱;value為變數內容.預設為array("QBPWCF" => "Quick Build PHP Website Componment base on Fedora Linux");
                                                                                                #$conf["envs"]=array(array("key"=>"value"));
                                                                                                #$conf["executeBy"],字串陣列,每個元素代表個別指令要用什麼程式執行,預設為"bash".
                                                                                                #$conf["executeBy"]=array("bash");
                                                                                                #參考資料:
                                                                                                #https://www.php.net/manual/en/function.proc-open.php
                                                                                                #https://www.php.net/manual/en/function.proc-get-status.php
                                                                                                #https://www.php.net/manual/en/function.proc-terminate.php
                                                                                                #備註:
                                                                                                #當wait參數為"true"時,會自動解析stdout與stderr,因此不用再透過 self::proc_update 來更新.
                                                                                                #當wait參數不為"true"時,若需要取得當下的執行狀況,請使用 self::proc_update 來更新.
                                                                                                $proc=threads::proc($conf["threads::proc"]);
                                                                                                unset($conf["threads::proc"]);
                                                                                        
                                                                                                #如果執行異常
                                                                                                if($proc["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                
                                                                                                #函式說明:
                                                                                                #更新透過proc執行的多程序資訊.
                                                                                                #回傳結果:
                                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                                #$result["function"],當前執行的函式名稱.
                                                                                                #$result["argu"],使用的參數.
                                                                                                #$result["content"],陣列,每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值,若為"?"則代表程序尚未結束,可透過proc_update函式進行資訊的更新與取得;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                                                                                                #必填參數:
                                                                                                #$conf["procs"],陣列,運行self::proc後回傳的content.
                                                                                                $conf["threads::proc_update"]["procs"]=$procs["content"];
                                                                                                #可省略參數:
                                                                                                #無.
                                                                                                #參考資料:
                                                                                                #無.
                                                                                                #備註:
                                                                                                #無.
                                                                                                $proc_update=threads::proc_update($conf["threads::proc_update"]);
                                                                                                unset($conf["threads::proc_update"]);
                                                                                                
                                                                                                #如果執行異常
                                                                                                if($proc_update["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                
                                                                                                #如果proc裡面的程式執行異常
                                                                                                if($proc_update["content"][0]["status"]==="false"){
                                                                                                
                                                                                                        #設置跳過,不適用
                                                                                                        $result["status"]="continue";
                                                                                                
                                                                                                        #回傳結果
                                                                                                        return $result;
                                                                                                
                                                                                                        }#if end
                                                                                                        
                                                                                                #取得要儲存的php變數
                                                                                                $value=$proc_update["content"][0];
                                                                                                        
                                                                                                #初始化要設置的列
                                                                                                $row=array();
                                                                                        
                                                                                                #設置存放的數值
                                                                                                $row["value"]=$value;
                                                                                        
                                                                                                #設置形態
                                                                                                $row["type"]=$rdata["type"];
                                                                                        
                                                                                                #若無設定 life
                                                                                                if(!isset($rdata["life"])){
                                                                                                
                                                                                                        #設置預設的life
                                                                                                        $row["life"]=time()+$conf["info"]["defaultLifeTime"];
                                                                                                
                                                                                                        }#if end
                                                                                        
                                                                                                #寫入資源
                                                                                                $conf["info"]["resource"][$idInM]=$row;
                                                                                        
                                                                                                #跳出 switch
                                                                                                break;
                                                                                        
                                                                                        #其他 type
                                                                                        default:
                                                                                        
                                                                                                #設置錯誤訊息
                                                                                                $result["error"][]="unsupported type:".$rdata["type"];
                                                                                                
                                                                                                #設置執行異常
                                                                                                $result["status"]="false";
                                                                                                
                                                                                                #回傳結果
                                                                                                return $result;
                                                                                        
                                                                                        }#switch end
                                                                                
                                                                                }#if end
                                                                
                                                                        }#foreach end
                                                                        
                                                                #執行到這邊代表沒有符合條件的記錄
                                                                
                                                                #設置結果為null
                                                                $result["content"]=null;
                                                        
                                                                #設置執行正常
                                                                $result["status"]="true";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                #跳出 switch
                                                                break;
                                                                
                                                        #其他欄位
                                                        default:
                                                        
                                                                #設置錯誤訊息
                                                                $result["error"][]="unsupported column:".$key;
                                                                
                                                                #設置執行異常
                                                                $result["status"]="false";
                                                                
                                                                #回傳結果
                                                                return $result;
                                                
                                                        }#switch end
                                                
                                                }#foreach end
                                
                                        }#else end
                                        
                                #結束switch
                                break;
                                
                        #如果是 read
                        case "read":
                        
                                #如果是空的,亦即沒有條件,代表要取得全部.
                                if(empty($rdata["condition"])){
                                
                                        #針對每筆記錄
                                        foreach($conf["info"]["resource"] as $idInM => $valInM){
                                        
                                                #設置要取得的內容
                                                $result["content"][]=array("id"=>$idInM,"value"=>$valInM);
                                        
                                                }#foreach end
                                                
                                        #設置執行正常
                                        $result["status"]="true";
                                
                                        #回傳結果
                                        return $result;
                                
                                        }#if end
                                        
                                #反之有條件
                                else{
                                
                                        #針對每個條件
                                        foreach($rdata["condition"] as $key => $val){
                                        
                                                #判斷 $key
                                                switch($key){
                                                
                                                        #如果條件欄位是 id
                                                        case "id":
                                                        
                                                                #針對每筆記錄
                                                                foreach($conf["info"]["resource"] as $idInM => $valInM){
                                                                
                                                                        #如果找到符合id的資料
                                                                        if($idInM===$val){
                                                                        
                                                                                #設置結果
                                                                                $result["content"][]=array("id"=>$idInM,"value"=>$valInM);
                                                                                
                                                                                #設置執行正常
                                                                                $result["status"]="true";
                                                                        
                                                                                #回傳結果
                                                                                return $result;
                                                                        
                                                                                }#if end
                                                                
                                                                        }#foreach end
                                                                        
                                                                #執行到這邊代表沒有符合條件的記錄
                                                                
                                                                #設置結果為null
                                                                $result["content"]=null;
                                                        
                                                                #設置執行正常
                                                                $result["status"]="true";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                #跳出 switch
                                                                break;
                                                                
                                                        #如果條件欄位是 value
                                                        case "value":
                                                        
                                                                #針對每筆記錄
                                                                foreach($conf["info"]["resource"] as $idInM => $valInM){
                                                                
                                                                        #如果不是 php_variable
                                                                        if($valInM["type"]!=="php_variable"){
                                                                        
                                                                                #跳過之
                                                                                continue;
                                                                        
                                                                                }#if end
                                                                
                                                                        #如果找到符合value的資料
                                                                        if($valInM===$val){
                                                                        
                                                                                #設置結果
                                                                                $result["content"]=array("id"=>$idInM,"value"=>$valInM);
                                                                                
                                                                                #設置執行結果
                                                                                $result["status"]="true";
                                                                                
                                                                                #回傳結果
                                                                                return $result;
                                                                                
                                                                                }#if end
                                                                
                                                                        }#foreach end
                                                                        
                                                                #執行到這邊代表沒有符合條件的記錄
                                                                
                                                                #設置結果為null
                                                                $result["content"]=null;
                                                        
                                                                #設置執行正常
                                                                $result["status"]="true";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                #跳出 switch
                                                                break;
                                                                
                                                        #如果條件欄位是 pid
                                                        case "pid":
                                                        
                                                                #針對每筆記錄
                                                                foreach($conf["info"]["resource"] as $idInM => $valInM){
                                                                
                                                                        #如果不是 proc
                                                                        if($valInM["type"]!=="proc"){
                                                                        
                                                                                #跳過之
                                                                                continue;
                                                                        
                                                                                }#if end
                                                                
                                                                        #取得 proc 的 pid
                                                                        $pidInM=$valInM["proc_get_status"]["pid"];
                                                                
                                                                        #如果找到符合value的資料
                                                                        if($pidInM===$val){
                                                                        
                                                                                #設置結果
                                                                                $result["content"]=array("id"=>$idInM,"value"=>$valInM);
                                                                                
                                                                                #設置執行結果
                                                                                $result["status"]="true";
                                                                                
                                                                                #回傳結果
                                                                                return $result;
                                                                                
                                                                                }#if end
                                                                
                                                                        }#foreach end
                                                                        
                                                                #執行到這邊代表沒有符合條件的記錄
                                                                
                                                                #設置結果為null
                                                                $result["content"]=null;
                                                        
                                                                #設置執行正常
                                                                $result["status"]="true";
                                                        
                                                                #回傳結果
                                                                return $result;
                                                        
                                                                #跳出 switch
                                                                break;
                                                                
                                                        #其他欄位
                                                        default:
                                                        
                                                                #設置錯誤訊息
                                                                $result["error"][]="unsupported column:".$key;
                                                                
                                                                #設置執行異常
                                                                $result["status"]="false";
                                                                
                                                                #回傳結果
                                                                return $result;
                                                
                                                        }#switch end
                                        
                                                }#foreach end
                                
                                        }#else end
                        
                                #結束switch
                                break;
                                
                        #其他 action
                        default:
                        
                                #設置錯誤訊息
                                $result["error"][]="unsupported action:".$conf["request"]["action"];
                                
                                #設置執行異常
                                $result["status"]="false";
                                
                                #回傳結果
                                return $result;
                
                        }#switch end
                
                #執行到這邊代表不適用
                
                #設置不適用,可跳過
                $result["status"]="continue";
        
                #回傳結果
                return $result;
        
                }#function addOnProcessFunc end

        /*
        #函式說明:
        #用於 server 的 funcToRunWhenIdle,亦即沒有收到訊息閒置時要做什麼事情.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$conf["info"],陣列,資料庫資訊.
        $conf["info"]=array();
        #$conf["client"],陣列,每個用戶的socket.
        $conf["client"]="";
        #$conf["serverCache"],陣列,只有server可以看到的cache.
        $conf["serverCache"]=array();
        #$conf["clientCache"],陣列,給予所有用戶的cache.
        $conf["clientCache"]=array();
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function funcToRunWhenIdle(&$conf){
        
                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";

                        #回傳結果
                        return $result;

                        }#if end

                #涵式說明:
                #判斷當前環境為web還是cmd
                #回傳結果:
                #$result,"web"或"cmd"
                if(csInformation::getEnv()==="web"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";

                        #回傳結果
                        return $result;

                        }#if end
                
                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if(is_null($conf)){

                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end
                        
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                #$conf["mustBeFilledVariableName"]=array();
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                #$conf["mustBeFilledVariableType"]=array();
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                $conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("info","serverCache","clientCache");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("info","client","serverCache","clientCache");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("info","client","serverCache","clientCache");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($sock);
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                
                #取得resouce的參考
                $resource=&$conf["info"]["resource"];
                
                #針對每個資源
                foreach($resource as $rid => $info){
                
                        #檢查參數
                        #函式說明:
                        #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],執行不正常結束的錯訊息陣列.
                        #$result["simpleError"],簡單表示的錯誤訊息.
                        #$result["function"],當前執行的函式名稱.
                        #$result["argu"],設置給予的參數.
                        #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                        #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                        #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                        #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                        #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                        #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                        #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                        #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                        #必填參數:
                        #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                        $conf["variableCheck::checkArguments"]["varInput"]=$info;
                        #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                        $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                        #可省略參數:
                        #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                        $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("value","type","life");
                        #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                        $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array(null,"string","integer");
                        #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                        #$conf["canBeEmptyString"]="false";
                        #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                        #$conf["canNotBeEmpty"]=array();
                        #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                        #$conf["canBeEmpty"]=array();
                        #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                        #$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("action");
                        #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                        #$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("condition","value","type");
                        #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                        #$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array",null,"string");
                        #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                        #$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array(),null,null);
                        #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                        #$conf["disallowAllSkipableVarIsEmpty"]="";
                        #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                        #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                        #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                        #$conf["disallowAllSkipableVarNotExist"]="";
                        #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                        #$conf["arrayCountEqualCheck"][]=array();
                        #參考資料:
                        #array_keys=>http://php.net/manual/en/function.array-keys.php
                        #備註:
                        #無.
                        $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                        unset($conf["variableCheck::checkArguments"]);
                        
                        #如果執行異常
                        if($checkArguments["status"]==="false"){
                        
                                #設置執行異常識別
                                $result["status"]="false";
                                
                                #設置執行錯誤
                                $result["error"]=$checkArguments;
                                
                                #回傳結果
                                return $result;
                        
                                }#if end
                                
                        #如果檢查不通過
                        if($checkArguments["passed"]==="false"){
                        
                                #設置執行異常識別
                                $result["status"]="false";
                                
                                #設置執行錯誤
                                $result["error"]=$checkArguments;
                                
                                #回傳結果
                                return $result;
                        
                                }#if end
                                
                        #如果 life 過期
                        if(time()>$info["life"]){
                        
                                #如果是 php_variable 的資源
                                if($info["type"]==="php_variable"){
                                
                                        #移除之
                                        unset($resource[$rid]);
                                
                                        }#if end
                                        
                                #反之如果是 proc 的自選
                                else if($info["type"]==="proc"){
                                
                                        #關閉之
                                        proc_close($info["value"]);
                                
                                        #移除之
                                        unset($resource[$rid]);
                                
                                        }#if end
                                        
                                #反之為不應該有的類型
                                else{
                                
                                        #設置執行異常識別
                                        $result["status"]="false";
                                        
                                        #設置執行錯誤
                                        $result["error"][]="invalid resource type:".$info["type"];
                                        
                                        #設置執行錯誤
                                        $result["error"][]=$info;
                                        
                                        #回傳結果
                                        return $result;
                                
                                        }#else end
                        
                                }#if end
                
                        }#foreach end
                
                #設置執行正常
                $result["status"]="true";
        
                #回傳結果
                return $result;
        
                }#function funcToRunWhenIdle end
        
        /*
        #函式說明:
        #給 server 結束前呼叫的 callback 函式.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #必填參數:
        #$conf["info"],陣列,資料庫資訊.
        $conf["info"]=array();
        #$conf["serverCache"],陣列,只有server可以看到的cache.
        $conf["serverCache"]=array();
        #$conf["clientCache"],陣列,給予所有用戶的cache.
        $conf["clientCache"]=array();
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function closeAllResurce(&$conf){
        
                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";

                        #回傳結果
                        return $result;

                        }#if end

                #涵式說明:
                #判斷當前環境為web還是cmd
                #回傳結果:
                #$result,"web"或"cmd"
                if(csInformation::getEnv()==="web"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";

                        #回傳結果
                        return $result;

                        }#if end
                
                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if(is_null($conf)){

                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end
                        
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                #$conf["mustBeFilledVariableName"]=array();
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                #$conf["mustBeFilledVariableType"]=array();
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                $conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("serverCache","clientCache");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("info","serverCache","clientCache");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","array");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array($sock);
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
        
                #針對每個資源
                foreach($conf["info"]["resouce"] as $id => $resource){
                        
                        #如果是 proc 類型
                        if($resource["type"]==="proc"){
                        
                                #proc_close資源,避免系統出錯
                                proc_close($resource["value"]);
                        
                                }#if end
                
                        }#foreach end
        
                }#function closeAllResurce end
                
        /*
        #函式說明:
        #存取快取服務.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$reuslt["error"],執行不正常結束的錯訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #$result["argu"],所使用的參數.
        #$result["content"],得到的回應字串.
        #必填參數:
        #$conf["action"],字串,"read":代表要讀取資料;"write":代表要寫入資料.
        #$conf["action"]="";
        #$conf["type"],字串,"php_variable":php的變數;"proc",透過proc運行的程序,可透過標準輸入進行操作.
        #$conf["type"]="";
        #可省略參數:
        #$conf["value"],null,"action"參數為write時,資源的內容,形態不固定.
        #$conf["value"]=null;
        #$conf["sock"],字串,unix domain socket的路徑與名稱,預設為相對於當前套件的 var/qbpwcf/resource.sock
        #$conf["sock"]="";
        #$conf["condition"],陣列,條件,預設為空陣列,代表沒有條件,通常是為新增資源,元素的key為"id"者代表目標資源的id;元素的key為"value"者代表目標資源是否相等於"value",且"type"為"php_variable";元素的key為"pid"者代表運行的資源程序pid,且"type"為"proc"
        #$conf["condition"]=array();
        #參考資料:
        #無.
        #備註:
        #僅能在命令列環境下運行.
        #若於proc中運行,則不會因為無法存取socket而報錯並結束執行.
        */
        public static function client(&$conf){
        
                #初始化要回傳的結果
                $result=array();

                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;

                #如果沒有參數
                if(func_num_args()==0){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"]="函數".$result["function"]."需要參數";

                        #回傳結果
                        return $result;

                        }#if end

                #涵式說明:
                #判斷當前環境為web還是cmd
                #回傳結果:
                #$result,"web"或"cmd"
                if(csInformation::getEnv()==="web"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="函數 ".$result["function"]." 僅能在命令列環境下運行!";

                        #回傳結果
                        return $result;

                        }#if end
                
                #取得參數
                $result["argu"]=$conf;

                #如果 $conf 不為陣列
                if(gettype($conf)!=="array"){

                        #設置執行失敗
                        $result["status"]="false";

                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

                        #如果傳入的參數為 null
                        if(is_null($conf)){

                                #設置執行錯誤訊息
                                $result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end
                
                #預設的 unix domain socket addr
                $sock=pathinfo(__FILE__)["dirname"]."/../../var/qbpwcf/resource.sock";
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],執行不正常結束的錯訊息陣列.
                #$result["simpleError"],簡單表示的錯誤訊息.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],設置給予的參數.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息
                #$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.
                #$result["argu"],字串陣列,目前輸入的參數名稱陣列.
                #$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.
                #$result["notNeedVar"],字串陣列,多餘的參數名稱.
                #必填參數:
                #$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可省略參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("action","type");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                $conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("sock");
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("value","sock","condition");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array(null,"string","array");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                $conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,$sock,array());
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".
                #$conf["disallowAllSkipableVarNotExist"]="";
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                #備註:
                #無.
                $checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);
                
                #如果執行異常
                if($checkArguments["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #如果檢查不通過
                if($checkArguments["passed"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$checkArguments;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                        
                #初始化要傳遞的內容
                $request=array();
                
                #設置要傳送的 data
                $request["data"]["action"]=$conf["action"];
                
                #設置要傳送的 type
                $request["data"]["type"]=$conf["type"];
                
                #設置condition
                $request["data"]["condition"]=$conf["condition"];
                
                #如果有 value
                if(isset($conf["value"])){
                
                        #設置 value
                        $request["data"]["value"]=$conf["value"];
                
                        }#if end
                
                #連線到 unix domain socket,傳遞訊息,取得回應.
                #連線到 sock::unixDomainSocketServer 產生的  unix domain socket,傳送指定的訊息.
                #回傳結果:
                #$result["status"],"true"代表執行正常;"false"代表執行不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["argu"],使用的參數.
                #$result["content"],得到的回應.
                #必填參數:
                #$conf["msg"],陣列,要傳送的訊息,其主$conf["msg"]["id"],是無法指定的.
                $conf["sock::sendAnyMsgToQBPWCFunixSocket"]["msg"]=$request;
                #可省略參數:
                #$conf["sock"],字串,要連線的 usr/bin/qbpwcf-sock.php 所產生的 unix domain socket 路徑與名稱,預設為 qbpwcf_usock_path.
                $conf["sock::sendAnyMsgToQBPWCFunixSocket"]["sock"]=$conf["sock"];
                #參考資料:
                #無.
                #備註:
                #無.
                $sendAnyMsgToQBPWCFunixSocket=sock::sendAnyMsgToQBPWCFunixSocket($conf["sock::sendAnyMsgToQBPWCFunixSocket"]);
                unset($conf["sock::sendAnyMsgToQBPWCFunixSocket"]);
                
                #如果執行異常
                if($sendAnyMsgToQBPWCFunixSocket["status"]==="false"){
                
                        #設置執行異常識別
                        $result["status"]="false";
                        
                        #設置執行錯誤
                        $result["error"]=$sendAnyMsgToQBPWCFunixSocket;
                        
                        #回傳結果
                        return $result;
                
                        }#if end
                
                #設置得到的回應
                $result["content"]=$sendAnyMsgToQBPWCFunixSocket["content"];
                
                #設置執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
        
                }#function client end

        }#classs refedosource end