Subversion Repositories php-qbpwcf

Rev

Rev 226 | 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 csInformation{

        /*
        #函式說明:
        #當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.
        #回傳結果:
        #$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,陣列,為呼叫方法時所用的參數.
        #參考資料:
        #__call=>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

        /*
        #函式說明:
        #取得執行該php的帳戶名稱.
        #回傳結果:
        #$result,字串,運行該php的使用者帳戶.若為空字串則代表非使用者直接觸發.
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function runner(){

                #函式說明:
                #取得用戶端的資訊,並依據需要寫入到資料表裡面
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
                #$result["error"],錯誤訊息.
                #$result["function"],檔前執行的函數名稱.
                #$result["mode"],當前的模式是"cmd"還是"web".
                #$result["userBrowserType"],爲使用者的瀏覽器資訊
                #$result["userIp"],爲使用者的IP
                #$result["serverIp"],為伺服器的IP
                #$result["server_name"],伺服器的 domain name
                #$result["scheme"],通訊協定
                #$result["serverPort"],伺服器給對外下載網頁的port
                #$result["requestUri"],爲使用者要求的網址/php檔案.
                #$result["requestUriFull"],為使用者要求的完整網址/php檔案路徑.
                #$result["clientRequestIP"],用戶端要求的ip與port
                #$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
                #$result["phpUser"],運行該php的使用者帳戶.若為空字串則代表非使用者直接觸發.
                #$result["phpUserType"],運行該php的使用者帳戶類型,可能有"regular(no wheel member)","wheel(can use sudo)","intrinsic(root)","system(qemu,apache,...)".
                #$result["header"],接收到的 header 陣列.
                #$result["body"],接收到的 body 字串.
                #必填參數:
                #$conf["getAccount"],字串,是否要取得帳號,"true"代表要;"false"代表不要.
                $conf["csInformation::getConnectionInfo"]["getAccount"]="true";
                #可省略參數:
                #$conf["accountVar"],字串,帳號儲存在哪個變數裏面,預設爲$_SESSION["username"].
                #$conf["accountVar"]=$_SESSION["username"];
                #$conf["saveToDb"],字串,是否要除儲存到資料庫,"true"為要儲存",預設為"false"不儲存.
                #$conf["saveToDb"]="true";
                #$conf["dbAddress"],字串,爲mysql/mariadb server的位置,若saveToDb設為"true",則該參數為必填.
                #$conf["dbAddress"]=$dbAddress;
                #$conf["dbAccount"],字串,爲用於連入mysql/mariadb server時要使用的帳號,若saveToDb設為"true",則該參數為必填.
                #$conf["dbAccount"]=$dbAccount;
                #$conf["dbName"],字串,要選取的資料庫名稱,若saveToDb設為"true",則該參數為必填.
                #$conf["dbName"]=$dbName;
                #$conf["tableName"],字串,爲要插入資料的資料表名稱,若saveToDb設為"true",則該參數為必填.
                #$conf["tableName"]="visitorInfo";
                #$conf["columnName"],字串陣列,爲資料表的項目名稱,例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間.若saveToDb設為"true",則該參數為必填.
                #$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");
                #$conf["dbPassword"],字串,爲連線到mysql/mariadb server時要使用的密碼,可省略,若省略則代表不使用密碼.
                #$conf["dbPassword"]=$dbPassword;
                #參考資料:
                #$_SERVER=>http://php.net/manual/zh/reserved.variables.server.php
                #取得伺服器名稱與IP=>http://php.net/manual/en/function.gethostname.php
                #備註:
                #無.
                $getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
                unset($conf["csInformation::getConnectionInfo"]);

                #如果檢查失敗
                if($getConnectionInfo["status"]=="false"){

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

                        #設置執行失敗的訊息
                        $result["error"]=$getConnectionInfo;

                        #回傳結果
                        return $result;

                        }#if end

                #回傳運行該php程式的帳戶名稱
                return $getConnectionInfo["phpUser"];

                }#function runner end

        /*
        #函式說明:
        #判斷當前環境為web還是cmd
        #回傳結果:
        #$result,"web"或"cmd".
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        ##考慮改用php-sapi-name()來判斷.
        */
        public static function getEnv(){

                #如果是在命令列環境
                if(!(isset($_SERVER['HTTP_USER_AGENT']))){

                        #回傳是在 "cmd" 環境
                        return "cmd";

                        }#if end

                #反之回傳是在 "web" 環境
                else{

                        return "web";

                        }#else end

                }#function get Env end

        /*
        #函式說明:
        #取得用戶端的瀏覽器版本資訊,並回傳。
        #回傳結果:
        #$result,瀏覽器的資訊.
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function getUserBrowserType(){

                #如果為命令列
                if(!isset($_SERVER['HTTP_USER_AGENT'])){

                        #取得運行php的作業系統環境
                        #參考資料:
                        #http://php.net/manual/en/function.php-uname.php
                        $userBrowser=php_uname();

                        }#if end

                #反之為網頁
                else{

                        #取得客戶端的瀏覽器資訊
                        $userBrowser=$_SERVER['HTTP_USER_AGENT'];

                        }#else end

                #回傳使用者的瀏覽器資訊
                return $userBrowser;

                }#function getUserBrowserType end

        /*
        #函式說明:
        #回傳用戶端的IP位置
        #回傳的結果:
        #$result,用戶端的ip,若在命令列下執行則回傳getServerIP()的結果.
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function getClientIP(){

                #如果找不到 $_SERVER['REMOTE_ADDR']
                if(!isset($_SERVER['REMOTE_ADDR'])){

                        #則代表是在cmd環境下執行
                        #函式說明:
                        #取得伺服器的IP,並回傳。
                        #回傳的結果:
                        #$result,伺服端的IP
                        #備註:
                        #伺服端必須被 localhost 以外的網址連結才會出現正確的IP
                        return csInformation::getServerIP();

                        }#if end

                #取得客戶端IP
                $clientIP = $_SERVER['REMOTE_ADDR'];

                #回傳使用者的IP
                return $clientIP;

                }#function getClientIP end

        /*
        #函式說明:
        #取得伺服器的IP,並回傳。
        #回傳的結果:
        #$result,伺服端的IP
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #伺服端必須被 localhost 以外的網址連結才會出現正確的IP
        */
        public static function getServerIP(){

                #如果是命令列
                if(!isset($_SERVER['SERVER_ADDR'])){

                        $serverIP = gethostbyname(gethostname());

                        }#if end

                #反之是網頁
                else{

                        #取得伺服端的IP
                        $serverIP = $_SERVER['SERVER_ADDR'];

                        }#else end

                #回傳伺服端IP
                return $serverIP;

                }#function getServerIP end

        /*
        #函式說明:
        #依據提供查詢IP服務的網站取得伺服器對外的IP.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$result["function"],當前執行的函數名稱.
        #$result["error"],錯誤訊息陣列.
        #$result["content"],伺服端對外的IP.
        #必填參數:
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #需要有網站支援此服務.
        */
        public static function getServerRealIP(&$conf){

                #初始化要回傳的結果
                $result=array();

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

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

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

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

                        #回傳結果
                        return $result;

                        }#if end

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

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

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

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

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

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end

                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$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["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                #$conf["canBeEmptyString"]="false";
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.
                #$conf["skipableVariableCanNotBeEmpty"]=array();
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["skipableVariableName"]=array();
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                #$conf["skipableVariableType"]=array();
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["skipableVarDefaultValue"]=array("");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["arrayCountEqualCheck"][]=array();
                #參考資料來源:
                #array_keys=>http://php.net/manual/en/function.array-keys.php
                $checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);
                unset($conf["variableCheck::checkArguments"]);

                #如果檢查失敗
                if($checkResult["status"]=="false"){

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

                        #設置執行失敗的訊息
                        $result["error"]=$checkResult;

                        #回傳結果
                        return $result;

                        }#if end

                #如果檢查不通過
                if($checkResult["passed"]=="false"){

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

                        #設置執行失敗的訊息
                        $result["error"]=$checkResult;

                        #回傳結果
                        return $result;

                        }#if end

                #嘗試取得自己IP的設定檔
                #函式說明:
                #解析PHP檔案裡面的變數.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息.
                #$result["function"],當前執行的函數名稱.
                #$result["argu"],所使用的參數.
                #$result["content"],找到的變數內容陣列.
                #$result["content"]["value"],依找到變數順序的數值.
                #$result["content"]["struc"],依找到變數順序的階層結構.
                #$result["content"]["direct"],變數名稱對應的數值內容.
                #必填參數:
                #$conf["file"],字串,檔案的路徑與名稱.
                $conf["fileAccess::parseVaraiableInPHPfile"]["file"]=pathinfo(__FILE__)["dirname"]."/../../../etc/qbpwcf/config.php";
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess::parseVaraiableInPHPfile"]["fileArgu"]=$conf["fileArgu"];
                #$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".
                $conf["fileAccess::parseVaraiableInPHPfile"]["varName"]=array("myIp","getIpUrl");
                #可省略參數:
                #$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".
                $conf["fileAccess::parseVaraiableInPHPfile"]["web"]="false";
                #參考資料:
                #https://www.php.net/manual/en/function.parse-str.php
                #備註:
                #無.
                $parseVaraiableInPHPfile=fileAccess::parseVaraiableInPHPfile($conf["fileAccess::parseVaraiableInPHPfile"]);
                unset($conf["fileAccess::parseVaraiableInPHPfile"]);

                #如果執行失敗
                if($parseVaraiableInPHPfile["status"]=="false"){

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

                        #設置執行失敗的訊息
                        $result["error"]=$parseVaraiableInPHPfile;

                        #回傳結果
                        return $result;

                        }#if end

                #如果myIp變數有設定
                if(isset($parseVaraiableInPHPfile["content"]["myIp"])){

                        #如果內容不為空字串
                        if($parseVaraiableInPHPfile["content"]["myIp"][0]!==""){

                                #取得伺服器對外的IP
                                $result["content"]=array($parseVaraiableInPHPfile["content"]["myIp"][0]);

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

                                #回傳結果
                                return $result;

                                }#if end

                        }#if end

                #預設用於取得自己對外ip的服務網址
                $getIpUrl="https://ip.qbpwcf.org";

                #如果變數getIpUrl有設定
                if(isset($parseVaraiableInPHPfile["content"]["getIpUrl"])){

                        #如果內容不為空字串
                        if($parseVaraiableInPHPfile["content"]["getIpUrl"][0]!==""){

                                #更新 getIpUrl
                                $getIpUrl=$parseVaraiableInPHPfile["content"]["getIpUrl"][0];

                                }#if end

                        }#if end

                #函式說明:
                #運行curl cmd
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["founded"],識別網址找不找得到.
                #$result["content"],取得的回應內容陣列;若$conf["bgInProc"]為"true",則每個元素為其指令執行的結果訊息陣列,key為"status"代表執行是否正常的識別;key為"statusCode"代表程式結束後回傳給對應executeBy程式的數值;key為"output"代表標準輸出,若為resource,則代表為pipe;key為"error"代表非標準輸出,若為resource,則代表為pipe;key為"input"代表成功輸入的指令;key為"process"代表該程序經proc_open後的process source;key為"proc_get_status"代表程序的資訊.
                #$result["fullContent"],取得回應的完整字串內容.
                #$result["cookie"],cookie檔案的位置與名稱.
                #$result["cmd"],執行的command.
                #$result["argu],使用的參數.
                #必填參數:
                #$conf["url"],字串,目標url.
                $conf["catchWebContent::curlCmd"]["url"]=$getIpUrl;
                #$conf["fileArgu"],字串,變數__FILE__的內容.
                $conf["catchWebContent::curlCmd"]["fileArgu"]=__FILE__;
                #可省略參數:
                #$conf["header"],字串陣列,要傳送的header.
                #$conf["header"]=array();
                #$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
                #$conf["allowAnySSLcertificate"]="";
                #$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
                #$conf["postVar"]=array();
                #$conf["rawPost"]="字串",要傳送的raw post內容.
                #$conf["rawPost"]="";
                #$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
                #$conf["urlEncode"]="false";
                #$conf["agent"],字串,user agent的名稱.
                #$conf["agent"]="";
                #$conf["cookie"],字串,cookie位置與檔案位置.
                #$conf["cookie"]="";
                #$conf["forceNewCookie"],字串,是否要重置cookie,"true"代表要,"false"代表不要,預設為"false".
                #$conf["forceNewCookie"]="";
                $curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
                unset($conf["catchWebContent::curlCmd"]);

                #如果檢查不通過
                if($curlCmd["status"]=="false"){

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

                        #設置執行失敗的訊息
                        $result["error"]=$curlCmd;

                        #回傳結果
                        return $result;

                        }#if end

                #取得伺服器對外的IP
                $result["content"]=$curlCmd["fullContent"];

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

                #回傳結果
                return $result;

                }#function getServerIP end

        /*
        #函式說明:
        #取得主機可能的ip位址
        #回傳的結果:
        #$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
        #$result["error"],錯誤訊息.
        #$result["function"],檔前執行的函數名稱.
        #$result["content"],目前瀏覽的頁面的路徑.
        #必填參數:
        #$conf["fileArgu"],字串,__FILE__的內容.
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #無.
        #參考資料:
        #無.
        #備註:
        #僅能在命令列執行.
        */
        public static function getServerIPs(&$conf=array()){

                #初始化要回傳的結果
                $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($conf===null){

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

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end

                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$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["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                $conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                #$conf["skipableVariableCanNotBeEmpty"]=array();
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["skipableVariableName"]=array("cmd");
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                $conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("ip addr");
                #$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.
                #$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("netType","netCard");
                #參考資料來源:
                #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

                #初始化 ip 指令不存在
                $ipCmdExist=false;

                #初始化 ifconfig 指令不存在
                $ifconigCmdExist=false;

                #檢查使用的指令是否存在
                #函式說明:
                #檢查指令是否存在
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息.
                #$result["function"],當前執行的函數名稱.
                #$result["argu"],使用的參數.
                #$result["founded"],指令是否存在,"true"代表存在,"false"代表存在.
                #必填參數:
                #$conf["cmd"],"字串",要查詢的指令.
                $conf["cmd::checkCmdExist"]["cmd"]="ip";
                #可省略參數:
                #$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
                $conf["cmd::checkCmdExist"]["binPath"]="/usr/sbin";
                #$conf["fileArgu"],字串,變數__FILE__的內容.
                $conf["cmd::checkCmdExist"]["fileArgu"]=$conf["fileArgu"];
                $checkCmdExist=cmd::checkCmdExist($conf["cmd::checkCmdExist"]);
                unset($conf["cmd::checkCmdExist"]);

                #如果檢查指令是否存在失敗
                if($checkCmdExist["status"]==="false"){

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

                        #設置執行錯誤訊息
                        $result["error"]=$checkCmdExist;

                        #回傳結果
                        return $result;

                        }#if end

                #如果指令存在
                if($checkCmdExist["founded"]==="true"){

                        #設置 ip 指令存在
                        $ipCmdExist=true;

                        }#if end

                #如果 ip 指令不存在
                if(!($ipCmdExist)){

                        #檢查 ifconfig 指令是否存在
                        #函式說明:
                        #檢查指令是否存在
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息.
                        #$result["function"],當前執行的函數名稱.
                        #$result["argu"],使用的參數.
                        #$result["founded"],指令是否存在,"true"代表存在,"false"代表存在.
                        #必填參數:
                        #$conf["cmd"],"字串",要查詢的指令.
                        $conf["cmd::checkCmdExist"]["cmd"]="ifconfig";
                        #可省略參數:
                        #$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
                        $conf["cmd::checkCmdExist"]["binPath"]="/usr/sbin";
                        #$conf["fileArgu"],字串,變數__FILE__的內容.
                        $conf["cmd::checkCmdExist"]["fileArgu"]=$conf["fileArgu"];
                        $checkCmdExist=cmd::checkCmdExist($conf["cmd::checkCmdExist"]);
                        unset($conf["cmd::checkCmdExist"]);

                        #如果檢查指令是否存在失敗
                        if($checkCmdExist["status"]==="false"){

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

                                #設置執行錯誤訊息
                                $result["error"]=$checkCmdExist;

                                #回傳結果
                                return $result;

                                }#if end

                        #如果指令存在
                        if($checkCmdExist["founded"]==="true"){

                                #設置 ip 指令存在
                                $ifconfigCmdExist=true;

                                }#if end

                        }#if end

                #如果存在 ip 指令
                if($ipCmdExist){

                        #查看 "ip addr" 指令有無 "inet" 的輸出
                        #函數說明:
                        #檢查指令的輸出是否含有關鍵字
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息.
                        #$result["function"],當前執行的函數名稱.
                        #$result["argu"],使用的參數.
                        #$result["founded"],是否找到關鍵字,"true"代表有,"false"代表沒有.
                        #$result["content"],關鍵字所在列的輸出.
                        #必填參數:
                        #$conf["cmd"],字串,要執行的指令.
                        $conf["cmd::searchOutPut"]["cmd"]="ip addr";
                        #$conf["keyWord"],字串,要檢查是否有關鍵字.
                        $conf["cmd::searchOutPut"]["keyWord"]="inet";
                        #可省略參數:
                        #$conf["fileArgu"],字串,變數__FILE__的內容.
                        $conf["cmd::searchOutPut"]["fileArgu"]=$conf["fileArgu"];
                        #$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
                        $conf["cmd::searchOutPut"]["binPath"]="/usr/sbin";
                        $searchOutPut=cmd::searchOutPut($conf["cmd::searchOutPut"]);
                        unset($conf["cmd::searchOutPut"]);

                        #如果取得指令輸出的關鍵字失敗
                        if($searchOutPut["status"]==="false"){

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

                                #設置執行錯誤訊息
                                $result["error"]=$searchOutPut;

                                #回傳結果
                                return $result;

                                }#if end

                        #如果指令輸出含有關鍵字
                        if($searchOutPut["founded"]==="true"){

                                #解析輸出 $searchOutPut["content"]

                                #檢查每列輸出有無 "inet " 前置字串
                                #函式說明:
                                #取得多個符合特定字首與字尾的字串.
                                #回傳的結果:
                                #$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
                                #$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
                                #$result["function"],當前執行的函數名稱.
                                #$result["returnString"],爲符合字首條件的字串陣列內容。
                                #必填的參數:
                                #$conf["checkString"],陣列字串,要檢查的字串們.
                                $conf["search::getMeetConditionsStringMulti"]["checkString"]=$searchOutPut["content"];#要檢查的字串陣列
                                #可省略參數:
                                #$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
                                $conf["search::getMeetConditionsStringMulti"]["frontWord"]="    inet ";
                                #$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
                                #$conf["search::getMeetConditionsStringMulti"]["tailWord"]="";
                                #參考資料:
                                #str_spilt(),可以將字串依照字母分割成一個個陣列字串。
                                $getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
                                unset($conf["search::getMeetConditionsStringMulti"]);

                                #如果搜尋失敗
                                if($getMeetConditionsStringMulti["status"]==="false"){

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

                                        #設置執行錯誤訊息
                                        $result["error"]=$getMeetConditionsStringMulti;

                                        #回傳結果
                                        return $result;

                                        }#if end

                                #如果有符合的輸出
                                if($getMeetConditionsStringMulti["founded"]==="true"){

                                        #用 " " 分段
                                        #函式說明:
                                        #將多個固定格式的字串分開,並回傳分開的結果
                                        #回傳的參數:
                                        #$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
                                        #$result["error"],錯誤訊息陣列.
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
                                        #$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
                                        #$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
                                        #$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
                                        #必填的參數:
                                        #$conf["stringIn"],字串陣列,要處理的字串陣列.
                                        $conf["stringProcess::spiltMutiString"]["stringIn"]=$getMeetConditionsStringMulti["returnString"];
                                        #$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
                                        $conf["stringProcess::spiltMutiString"]["spiltSymbol"]=" ";
                                        $spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
                                        unset($conf["stringProcess::spiltMutiString"]);

                                        #如果分割字串失敗
                                        if($spiltMutiString["status"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$spiltMutiString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #針對分好的每段
                                        foreach($spiltMutiString["spiltString"] as $index => $spiltedStr){

                                                #分割第一段
                                                #函式說明:
                                                #將固定格式的字串分開,並回傳分開的結果。
                                                #回傳結果:
                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                #$result["error"],錯誤訊息陣列
                                                #$result["function"],當前執行的函數名稱.
                                                #$result["oriStr"],要分割的原始字串內容
                                                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                                #$result["dataCounts"],爲總共分成幾段
                                                #$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
                                                #必填的參數:
                                                $conf["stringProcess::spiltString"]["stringIn"]=$spiltedStr["dataArray"][1];#要處理的字串。
                                                $conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
                                                #可省略參數:
                                                #$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
                                                $conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
                                                $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                                                unset($conf["stringProcess::spiltString"]);

                                                #如果分割字串失敗
                                                if($spiltString["status"]==="false"){

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

                                                        #設置執行錯誤訊息
                                                        $result["error"]=$spiltString;

                                                        #回傳結果
                                                        return $result;

                                                        }#if end

                                                #如果有找到分割的關鍵字
                                                if($spiltString["found"]==="true"){

                                                        #取得ip
                                                        $result["content"][]=$spiltString["dataArray"][0];

                                                        }#if end

                                                }#foreach end

                                        }#if end

                                }#if end

                        }#if end

                #反之如果存在 ifconfig 指令
                else if($ifconfigCmdExist){

                        #查看 "ifconfig" 指令有無 "inet" 的輸出
                        #函數說明:
                        #檢查指令的輸出是否含有關鍵字
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息.
                        #$result["function"],當前執行的函數名稱.
                        #$result["argu"],使用的參數.
                        #$result["founded"],是否找到關鍵字,"true"代表有,"false"代表沒有.
                        #$result["content"],關鍵字所在列的輸出.
                        #必填參數:
                        #$conf["cmd"],字串,要執行的指令.
                        $conf["cmd::searchOutPut"]["cmd"]="ifconfig";
                        #$conf["keyWord"],字串,要檢查是否有關鍵字.
                        $conf["cmd::searchOutPut"]["keyWord"]="inet";
                        #可省略參數:
                        #$conf["fileArgu"],字串,變數__FILE__的內容.
                        $conf["cmd::searchOutPut"]["fileArgu"]=$conf["fileArgu"];
                        #$conf["binPath"],字串,要搜尋的路徑,預設為"/usr/bin".
                        $conf["cmd::searchOutPut"]["binPath"]="/usr/sbin";
                        $searchOutPut=cmd::searchOutPut($conf["cmd::searchOutPut"]);
                        unset($conf["cmd::searchOutPut"]);

                        #如果取得指令輸出的關鍵字失敗
                        if($searchOutPut["status"]==="false"){

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

                                #設置執行錯誤訊息
                                $result["error"]=$searchOutPut;

                                #回傳結果
                                return $result;

                                }#if end

                        #如果指令輸出含有關鍵字
                        if($searchOutPut["founded"]==="true"){

                                #解析輸出 $searchOutPut["content"]

                                #檢查每列輸出有無 "inet " 前置字串
                                #函式說明:
                                #取得多個符合特定字首與字尾的字串.
                                #回傳的結果:
                                #$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。
                                #$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。
                                #$result["function"],當前執行的函數名稱.
                                #$result["returnString"],爲符合字首條件的字串陣列內容。
                                #必填的參數:
                                #$conf["checkString"],陣列字串,要檢查的字串們.
                                $conf["search::getMeetConditionsStringMulti"]["checkString"]=$searchOutPut["content"];#要檢查的字串陣列
                                #可省略參數:
                                #$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.
                                $conf["search::getMeetConditionsStringMulti"]["frontWord"]="        inet ";
                                #$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.
                                #$conf["search::getMeetConditionsStringMulti"]["tailWord"]="";
                                #參考資料:
                                #str_spilt(),可以將字串依照字母分割成一個個陣列字串。
                                $getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);
                                unset($conf["search::getMeetConditionsStringMulti"]);

                                #如果搜尋失敗
                                if($getMeetConditionsStringMulti["status"]==="false"){

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

                                        #設置執行錯誤訊息
                                        $result["error"]=$getMeetConditionsStringMulti;

                                        #回傳結果
                                        return $result;

                                        }#if end

                                #如果有符合的輸出
                                if($getMeetConditionsStringMulti["founded"]==="true"){

                                        #用 " " 分段
                                        #函式說明:
                                        #將多個固定格式的字串分開,並回傳分開的結果
                                        #回傳的參數:
                                        #$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。
                                        #$result["error"],錯誤訊息陣列.
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["spiltString"][$i]["oriStr"],爲第i個字串的原始內容
                                        #$result["spiltString"][$i]["dataArray"],爲第($i+1)個字串分割後的字串陣列
                                        #$result["spiltString"][$i]["dataArray"][$j],爲第($i+1)的分割好的字串的第($j+1)段內容
                                        #$result["spiltString"][$i]["dataCounts"],爲第($i+1)個字串分割後總共分成幾段
                                        #必填的參數:
                                        #$conf["stringIn"],字串陣列,要處理的字串陣列.
                                        $conf["stringProcess::spiltMutiString"]["stringIn"]=$getMeetConditionsStringMulti["returnString"];
                                        #$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.
                                        $conf["stringProcess::spiltMutiString"]["spiltSymbol"]=" ";
                                        $spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);
                                        unset($conf["stringProcess::spiltMutiString"]);

                                        #如果分割字串失敗
                                        if($spiltMutiString["status"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$spiltMutiString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #針對分好的每段
                                        foreach($spiltMutiString["spiltString"] as $spiltedStr){

                                                #取得ip
                                                $result["content"][]=$spiltedStr["dataArray"][1];

                                                }#foreach end

                                        }#if end

                                }#if end

                        }#if end

                #查詢對外ip
                #函式說明:
                #依據提供查詢IP服務的網站取得伺服器對外的IP.
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["function"],當前執行的函數名稱.
                #$result["error"],錯誤訊息陣列.
                #$result["content"],伺服端對外的IP.
                #必填參數:
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["self::getServerRealIP"]["fileArgu"]=$conf["fileArgu"];
                $getServerRealIP=self::getServerRealIP($conf["self::getServerRealIP"]);
                unset($conf["self::getServerRealIP"]);

                #如果查詢對外 ip 失敗
                if($getServerRealIP["status"]==="false"){

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

                        #設置執行錯誤訊息
                        $result["error"]=$getServerRealIP;

                        #回傳結果
                        return $result;

                        }#if end

                #取得對外ip
                $result["content"][]=$getServerRealIP["content"];

                #剔除重複的ip
                $result["content"]=array_unique($result["content"]);

                #如果是 ip addr | grep inet 則會輸出類似的內容
                /*
                inet 127.0.0.1/8 scope host lo
                inet6 ::1/128 scope host
                inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s5
                inet6 fec0::d17d:1504:b561:1535/64 scope site noprefixroute dynamic
                inet6 fe80::c85c:f113:e76c:4e2/64 scope link
                inet 169.254.196.9/16 brd 169.254.255.255 scope link enp0s6
                inet6 fe80::8e5f:c35f:952b:3fd1/64 scope link
                inet 192.168.200.111/24 brd 192.168.200.255 scope global dynamic enp0s7
                inet6 fe80::ad8d:d224:e78c:f89d/64 scope link
                inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
                */

                #如果是 ifconfig | grep inet 則會輸出類似的內容
                /*
                inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
                inet6 fe80::c85c:f113:e76c:4e2  prefixlen 64  scopeid 0x20<link>
                inet6 fec0::d17d:1504:b561:1535  prefixlen 64  scopeid 0x40<site>
                inet 169.254.196.9  netmask 255.255.0.0  broadcast 169.254.255.255
                inet6 fe80::8e5f:c35f:952b:3fd1  prefixlen 64  scopeid 0x20<link>
                inet 192.168.200.111  netmask 255.255.255.0  broadcast 192.168.200.255
                inet6 fe80::ad8d:d224:e78c:f89d  prefixlen 64  scopeid 0x20<link>
                inet 127.0.0.1  netmask 255.0.0.0
                inet6 ::1  prefixlen 128  scopeid 0x10<host>
                inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
                */

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

                #回傳節果
                return $result;

                }#function getServerIps end

        /*
        #函式說明:
        #取得目前瀏覽的頁面的路徑或執行的php程式路徑.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
        #$result["error"],錯誤訊息.
        #$result["function"],檔前執行的函數名稱.
        #$result["content"],目前瀏覽的頁面的路徑或執行的php程式路徑.
        #$result["serverIp"],取得伺服器ip.
        #$result["scheme"],取得與伺服器連線所使用的通訊協定,若不適用則為null.
        #必填參數:
        $conf["type"]="";#想要取得的路徑類型,"full"代表完整路徑,"pathOnly"代表只要路徑,"lastLayer"代表上一層目錄的名稱
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #http://blog.longwin.com.tw/2009/01/php-get-directory-file-path-dirname-2008/
        #備註:
        #無.
        */
        public static function getPathOfThisPhpFile($conf){

                #初始化要回傳的結果
                $result=array();

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

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

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

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

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

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

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end

                #函式說明:
                #取得用戶端的資訊,並依據需要寫入到資料表裡面
                #回傳的結果:
                #$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
                #$result["error"],錯誤訊息.
                #$result["function"],檔前執行的函數名稱.
                #$result["mode"],當前的模式是"cmd"還是"web".
                #$result["userBrowserType"],爲使用者的瀏覽器資訊
                #$result["userIp"],爲使用者的IP
                #$result["serverIp"],為伺服器的IP
                #$result["server_name"],伺服器的 domain name
                #$result["scheme"],通訊協定
                #$result["serverPort"],伺服器給對外下載網頁的port
                #$result["requestUri"],爲使用者要求的網址/php檔案.
                #$result["requestUriFull"],為使用者要求的完整網址/php檔案路徑.
                #$result["clientRequestIP"],用戶端要求的ip與port
                #$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
                #$result["phpUser"],運行該php的使用者帳戶.
                #$result["header"],接收到的 header 陣列.
                #$result["body"],接收到的 body 字串.
                #必填的參數:
                $conf["csInformation::getConnectionInfo"]["getAccount"]="true";#是否要取得帳號
                #可省略的參數:
                #$conf["accountVar"]=$_SESSION["username"];#帳號儲存在哪個變數裏面,預設爲$_SESSION["username"]
                #$conf["saveToDb"]="true";#是否要除儲存到資料庫,"true"為要儲存",預設為不儲存
                #$conf["dbAddress"]=$dbAddress;;#爲mysql-Server的位置,若#$conf["saveToDb"]設為"true",則該參數為必填。
                #$conf["dbAccount"]=$dbAccount;#爲用於連入mysql-Server時要使用的帳號,若#$conf["saveToDb"]設為"true",則該參數為必填。
                #$conf["dbName"]=$dbName;#要選取的資料庫名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
                #$conf["tableName"]="visitorInfo";#爲要插入資料的資料表名稱,若#$conf["saveToDb"]設為"true",則該參數為必填。
                #$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");#爲資料表的項目名稱,
                        #例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
                        #寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間
                        #$conf["saveToDb"]設為"true",則該參數為必填。
                #$conf["dbPassword"]=$dbPassword;#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼
                $getConnectionInfo=csInformation::getConnectionInfo($conf["csInformation::getConnectionInfo"]);
                unset($conf["csInformation::getConnectionInfo"]);

                #debug
                #var_dump(__LINE__,$getConnectionInfo);

                #取得連線資訊失敗
                if($getConnectionInfo["status"]==="false"){

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

                        #設置執行錯誤訊息
                        $result["error"]=$getConnectionInfo;

                        #回傳結果
                        return $result;

                        }#if end

                #取得伺服器ip
                $result["serverIp"]=$getConnectionInfo["serverIp"];

                #取得與伺服器連線所使用的通訊協定
                $result["scheme"]=$getConnectionInfo["scheme"];

                #判斷 $conf["type"]
                switch($conf["type"]){

                        #如果是 "full"
                        case "full":

                                #取得目前檔案的完整路徑
                                $result["content"]=$getConnectionInfo["requestUri"];

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

                                #回傳結果
                                return $result;

                                #打斷switch
                                break;

                        #如果是 "pathOnly"
                        case "pathOnly":

                                #如果是網頁環境
                                if($getConnectionInfo["mode"]==="web"){

                                        #用 當前檔案的名稱 來分割目前檔案的完整路徑
                                        #函式說明:
                                        #將固定格式的字串分開,並回傳分開的結果。
                                        #回傳的參數:
                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                        #$result["error"],錯誤訊息陣列
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["oriStr"],要分割的原始字串內容
                                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                        #$result["dataCounts"],爲總共分成幾段
                                        #必填的參數:
                                        $conf["stringProcess::spiltString"]["stringIn"]=$getConnectionInfo["requestUri"];#要處理的字串。
                                        $conf["stringProcess::spiltString"]["spiltSymbol"]=basename(($getConnectionInfo["requestUri"]));#爲以哪個符號作爲分割
                                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                                        unset($conf["stringProcess::spiltString"]);

                                        #如果分割失敗
                                        if($spiltString["status"]=="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$spiltString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果分割出來少於一段
                                        if($spiltString["dataCounts"]<1){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$spiltString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #取得不包含檔案名稱的路徑
                                        $result["content"]=$spiltString["dataArray"][0];

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

                                        #回傳結果
                                        return $result;

                                        }#if end

                                #反之如果是 cmd 環境
                                else if($getConnectionInfo["mode"]==="cmd"){

                                        #函式說明:
                                        #將字串特定關鍵字與其後面的內容剔除
                                        #回傳結果:
                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                        #$result["error"],錯誤訊息陣列.
                                        #$result["warning"],警告訊息鎮列.
                                        #$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["oriStr"],要處理的原始字串內容.
                                        #$result["content"],處理好的的字串內容.
                                        #$result["argu"],使用的參數.
                                        #必填參數:
                                        #$conf["stringIn"],字串,要處理的字串.
                                        $conf["stringProcess::delStrAfterKeyWord"]["stringIn"]=$getConnectionInfo["requestUriFull"];
                                        #$conf["keyWord"],字串,特定字串.
                                        $conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$getConnectionInfo["requestUri"];
                                        #可省略參數:
                                        #$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].
                                        $conf["stringProcess::delStrAfterKeyWord"]["deleteLastRepeatedOne"]="true";
                                        #參考資料:
                                        #無.
                                        #備註:
                                        #無.
                                        $delStrAfterKeyWord=stringProcess::delStrAfterKeyWord($conf["stringProcess::delStrAfterKeyWord"]);
                                        unset($conf["stringProcess::delStrAfterKeyWord"]);

                                        #如果執行失敗
                                        if($delStrAfterKeyWord["status"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$delStrAfterKeyWord;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果沒有應該要有的檔案名稱
                                        if($delStrAfterKeyWord["founded"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$delStrAfterKeyWord;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #取得不包含檔案名稱的路徑
                                        $result["content"]=$delStrAfterKeyWord["content"];

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

                                        #回傳結果
                                        return $result;

                                        }#if end

                                #打斷switch
                                break;

                        #如果是 "lastLayer"
                        case "lastLayer":

                                #如果是網頁環境
                                if($result["mode"]==="web"){

                                        #取得上層目錄的名稱
                                        $result["content"]=basename((dirname($getConnectionInfo["requestUri"])));

                                        }#if end

                                #反之如果是 cmd 環境
                                else if($result["mode"]==="cmd"){

                                        #取得callback用的參數
                                        $conf["csInformation::getPathOfThisPhpFile"]=$confForCallback;

                                        #改取得路徑就好
                                        $conf["csInformation::getPathOfThisPhpFile"]["type"]="pathOnly";

                                        /*
                                        #函式說明:
                                        #取得目前瀏覽的頁面的路徑或執行的php程式路徑.
                                        #回傳結果:
                                        #$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
                                        #$result["error"],錯誤訊息.
                                        #$result["function"],檔前執行的函數名稱.
                                        #$result["content"],目前瀏覽的頁面的路徑或執行的php程式路徑.
                                        #$result["serverIp"],取得伺服器ip.
                                        #$result["scheme"],取得與伺服器連線所使用的通訊協定.
                                        #必填參數:
                                        $conf["type"]="";#想要取得的路徑類型,"full"代表完整路徑,"pathOnly"代表只要路徑,"lastLayer"代表上一層目錄的名稱
                                        #必填參數:
                                        #無.
                                        #可省略參數:
                                        #無.
                                        #參考資料:
                                        #http://blog.longwin.com.tw/2009/01/php-get-directory-file-path-dirname-2008/
                                        #備註:
                                        #無.
                                        */
                                        $getPathOfThisPhpFile=csInformation::getPathOfThisPhpFile($conf["csInformation::getPathOfThisPhpFile"]);
                                        unset($conf["csInformation::getPathOfThisPhpFile"]);

                                        #如果執行失敗
                                        if($getPathOfThisPhpFile["status"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$getPathOfThisPhpFile;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #取得路徑
                                        #$getPathOfThisPhpFile["content"];

                                        #函式說明:
                                        #將固定格式的字串分開,並回傳分開的結果.
                                        #回傳結果:
                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                        #$result["error"],錯誤訊息陣列
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["argu"],使用的參數.
                                        #$result["oriStr"],要分割的原始字串內容
                                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                                        #$result["dataCounts"],爲總共分成幾段
                                        #$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
                                        #必填參數:
                                        #$conf["stringIn"],字串,要處理的字串.
                                        $conf["stringProcess::spiltString"]["stringIn"]=$getPathOfThisPhpFile["content"];
                                        #$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.
                                        $conf["stringProcess::spiltString"]["spiltSymbol"]="/";
                                        #可省略參數:
                                        #$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
                                        $conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
                                        #參考資料:
                                        #無.
                                        #備註:
                                        #無.
                                        $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                                        unset($conf["stringProcess::spiltString"]);

                                        #如果執行失敗
                                        if($spiltString["status"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$spiltString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果沒有"/"存在
                                        if($spiltString["found"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$spiltString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果沒有分出結果
                                        if($spiltString["dataCounts"]===0){

                                                #設置上層目錄的名稱為"/"
                                                $result["content"]="/";

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

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #反之
                                        else{

                                                #取得上層目錄的索引
                                                $lastLayerIndex=$spiltString["dataCounts"]-1;

                                                #取得上層目錄
                                                $result["content"]=$spiltString["dataArray"][$lastLayerIndex];

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

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        }#if end

                                #反之為異常結果
                                else{

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

                                        #設置錯誤訊息
                                        $result["error"][]="無法判別環境為web還是cmd";

                                        #設置錯誤訊息
                                        $result["error"][]=$getConnectionInfo;

                                        #回傳結果
                                        return $result;

                                        }#else end

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

                                #回傳結果
                                return $result;

                                #打斷switch
                                break;

                        #如果不是以上兩個內容
                        default :

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

                                #設置執行錯誤訊息
                                $result["error"][]="\$conf[\"type\"]變數須為「full」或「pathOnly」或「lastLayer」";

                                #回傳結果
                                return $result;

                        }#switch end

                #不應該執行到這邊

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

                #設置執行錯誤訊息
                $result["error"][]="不應該出現的例外狀況";

                #回傳結果
                return $result;

                }#getFullPathOfThisPhpFile end

        /*
        #函式說明:
        #取得用戶端的資訊,並依據需要寫入到資料表裡面
        #回傳的結果:
        #$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.
        #$result["error"],錯誤訊息.
        #$result["function"],檔前執行的函數名稱.
        #$result["mode"],當前的模式是"cmd"還是"web".
        #$result["userBrowserType"],爲使用者的瀏覽器資訊
        #$result["userIp"],爲使用者的IP
        #$result["serverIp"],為伺服器的IP
        #$result["server_name"],伺服器的 domain name
        #$result["scheme"],通訊協定
        #$result["serverPort"],伺服器給對外下載網頁的port
        #$result["requestUri"],爲使用者要求的網址/php檔案.
        #$result["requestUriFull"],為使用者要求的完整網址/php檔案路徑.
        #$result["clientRequestIP"],用戶端要求的ip與port
        #$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功
        #$result["phpUser"],運行該php的使用者帳戶.若為空字串則代表非使用者直接觸發.
        #$result["phpUserType"],運行該php的使用者帳戶類型,可能有"regular(no wheel member)","wheel(can use sudo)","intrinsic(root)","system(qemu,apache,...)".
        #$result["header"],接收到的 header 陣列.
        #$result["body"],接收到的 body 字串.
        #必填參數:
        #$conf["getAccount"],字串,是否要取得帳號,"true"代表要;"false"代表不要.
        $conf["getAccount"]="true";
        #可省略參數:
        #$conf["accountVar"],字串,帳號儲存在哪個變數裏面,預設爲$_SESSION["username"].
        #$conf["accountVar"]=$_SESSION["username"];
        #$conf["saveToDb"],字串,是否要除儲存到資料庫,"true"為要儲存",預設為"false"不儲存.
        #$conf["saveToDb"]="true";
        #$conf["dbAddress"],字串,爲mysql/mariadb server的位置,若saveToDb設為"true",則該參數為必填.
        #$conf["dbAddress"]=$dbAddress;
        #$conf["dbAccount"],字串,爲用於連入mysql/mariadb server時要使用的帳號,若saveToDb設為"true",則該參數為必填.
        #$conf["dbAccount"]=$dbAccount;
        #$conf["dbName"],字串,要選取的資料庫名稱,若saveToDb設為"true",則該參數為必填.
        #$conf["dbName"]=$dbName;
        #$conf["tableName"],字串,爲要插入資料的資料表名稱,若saveToDb設為"true",則該參數為必填.
        #$conf["tableName"]="visitorInfo";
        #$conf["columnName"],字串陣列,爲資料表的項目名稱,例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);寫入的資料依序為,使用者帳戶、瀏覽器資訊、使用者IP、觀看的網址、當時的時間.若saveToDb設為"true",則該參數為必填.
        #$conf["columnName"]=array("username","userWebBrowser","userIp","requestUri","systemDateAndTime");
        #$conf["dbPassword"],字串,爲連線到mysql/mariadb server時要使用的密碼,可省略,若省略則代表不使用密碼.
        #$conf["dbPassword"]=$dbPassword;
        #參考資料:
        #$_SERVER=>http://php.net/manual/zh/reserved.variables.server.php
        #取得伺服器名稱與IP=>http://php.net/manual/en/function.gethostname.php
        #備註:
        #無.
        */
        public static function getConnectionInfo(&$conf){

                #初始化要回傳的結果
                $result=array();

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

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

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

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

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

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

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end

                #如果 $conf["getAccount"] 沒有設定
                if(!isset($conf["getAccount"])){

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

                        #設置執行錯誤訊息
                        $result["error"][]="\$conf[\"getAccount\"]參數尚未設定!";

                        #回傳結果
                        return $result;

                        }#if end

                #如果 $conf["accountVar"] 沒有設定
                if(!isset($conf["accountVar"])){

                        #則依照預設

                        #如果預設的變數不存在
                        if(!isset($_SESSION["username"])){

                                #給與空字串
                                $result["username"]="";

                                }#if end

                        #反之存在
                        else{

                                #取得預設值
                                $result["username"]=$_SESSION["username"];

                                }#else end

                        }#if end

                #反之有設定
                else{

                        #取得帳戶
                        $result["username"]=$conf["accountVar"];

                        }#else end

                #預設使用該php程式的使用者帳號
                $result["phpUser"]="apache";

                #嘗試從系統變數取得使用者名稱
                #函式說明:
                #呼叫shell執行系統命令,並取得回傳的內容.
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函數名稱.
                #$result["argu"],使用的參數.
                #$result["cmd"],執行的指令內容.
                #$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
                #$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
                #$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
                #$result["running"],是否還在執行.
                #$result["pid"],pid.
                #$result["statusCode"],執行結束後的代碼.
                #$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
                #必填參數:
                #$conf["command"],字串,要執行的指令.
                $conf["external::callShell"]["command"]="env";
                #$conf["fileArgu"],字串,變數__FILE__的內容.
                $conf["external::callShell"]["fileArgu"]=__FILE__;
                #可省略參數:
                #$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
                #$conf["external::callShell"]["argu"]=array();
                #$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
                #$conf["arguIsAddr"]=array();
                #$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
                #$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
                #$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
                #$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
                #$conf["enablePrintDescription"]="true";
                #$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
                #$conf["printDescription"]="";
                #$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
                $conf["external::callShell"]["escapeshellarg"]="true";
                #$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
                #$conf["thereIsShellVar"]=array();
                #$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
                #$conf["username"]="";
                #$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
                #$conf["password"]="";
                #$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
                #$conf["useScript"]="";
                #$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
                #$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
                #$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
                #$conf["inBackGround"]="";
                #$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
                #$conf["getErr"]="false";
                #$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
                #$conf["doNotRun"]="false";
                #參考資料:
                #exec=>http://php.net/manual/en/function.exec.php
                #escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
                #escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
                #備註:
                #不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
                #若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
                $callShell=external::callShell($conf["external::callShell"]);
                unset($conf["external::callShell"]);

                #如果執行失敗
                if($callShell["status"]==="false"){

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

                        #設置執行錯誤訊息
                        $result["error"]=$callShell;

                        #回傳結果
                        return $result;

                        }#if end

                #函式說明:
                #檢查多個字串中的每個字串是否有多個關鍵字
                #回傳結果:
                #$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
                #$result["function"],當前執行的函數名稱.
                #$result["error"],錯誤訊息.
                #$result["argu"],使用的參數.
                #$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
                #$result["foundedKeyWords"],找到的關鍵字陣列.
                #$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
                #$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
                #$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
                #$result["keyWordsIncludeStr"],陣列,儲存有找到關鍵字的來源的索引(sourceIndex)與其內容(sourceVal)跟找到的關鍵字項目陣列(KeyWords).
                #必填參數:
                #$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
                $conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("LOGNAME=","USERNAME=","USER=","HOME=");
                #$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
                $conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
                #可省略參數:
                #$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
                #$conf["completeEqual"]="true";
                #參考資料:
                #無.
                #備註:
                #無.
                $findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
                unset($conf["search::findManyKeyWordsFromManyString"]);

                #debug
                #var_dump(__LINE__,$findManyKeyWordsFromManyString);

                #如果執行不正常
                if($findManyKeyWordsFromManyString["status"]==="false"){

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

                        #設置執行錯誤訊息
                        $result["error"]=$findManyKeyWordsFromManyString;

                        #回傳結果
                        return $result;

                        }#if end

                #針對每個有找到關鍵字的來源字串
                foreach($findManyKeyWordsFromManyString["keyWordsIncludeStr"] as $keyWordsIncludeStr){

                        #如果有多個關鍵字
                        if(count($keyWordsIncludeStr["keyWords"])>1){

                                #跳過
                                continue;

                                }#if end

                        #解析使用者名稱
                        #函式說明:
                        #將字串特定關鍵字與其前面的內容剔除
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列.
                        #$result["warning"],警告訊息鎮列.
                        #$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
                        #$result["function"],當前執行的函數名稱.
                        #$result["argu"],使用的參數.
                        #$result["oriStr"],要處理的原始字串內容.
                        #$result["content"],處理好的的字串內容.
                        #必填參數:
                        #$conf["stringIn"],字串,要處理的字串.
                        $conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$keyWordsIncludeStr["sourceVal"];
                        #$conf["keyWord"],字串,特定字串.
                        $conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$keyWordsIncludeStr["keyWords"][0];
                        #可省略參數:
                        #$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
                        $conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
                        #$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
                        #$conf["lastResult"]=$delStrBeforeKeyWord;
                        #參考資料:
                        #無.
                        #備註:
                        #無.
                        $delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
                        unset($conf["stringProcess::delStrBeforeKeyWord"]);

                        #debug
                        #var_dump(__LINE__,$delStrBeforeKeyWord);

                        #如果執行不正常
                        if($delStrBeforeKeyWord["status"]==="false"){

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

                                #設置執行錯誤訊息
                                $result["error"]=$delStrBeforeKeyWord;

                                #回傳結果
                                return $result;

                                }#if end

                        #如果沒有關鍵字
                        if($delStrBeforeKeyWord["founded"]==="false"){

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

                                #設置執行錯誤訊息
                                $result["error"]=$delStrBeforeKeyWord;

                                #回傳結果
                                return $result;

                                }#if end

                        #如果不是空字串
                        if(!empty($delStrBeforeKeyWord["content"])){

                                #取得使用者名稱
                                $result["phpUser"]=basename($delStrBeforeKeyWord["content"]);

                                #結束 foreach
                                break;

                                }#if end

                        }#foreach end

                #如果 $_SERVER['HTTP_USER_AGENT'] 存在
                if(isset($_SERVER['HTTP_USER_AGENT'])){

                        #var_dump($_SERVER["DOCUMENT_ROOT"]);

                        #設置為web模式
                        $result["mode"]="web";

                        #函式說明:
                        #取得用戶端的瀏覽器版本資訊,並回傳。
                        #回傳結果:
                        #$result,瀏覽器的資訊
                        $result["userBrowserType"]=csInformation::getUserBrowserType();

                        #函式說明:
                        #回傳用戶端的IP位置
                        #回傳的結果:
                        #$result,用戶端的ip
                        $result["userIp"]=csInformation::getClientIP();

                        #函式說明:
                        #取得伺服器的IP,並回傳。
                        #回傳的結果:
                        #$result,伺服端的IP
                        #備註:
                        #伺服端必須被 localhost 以外的網址連結才會出現正確的IP
                        $result["serverIp"]=csInformation::getServerIP();

                        #取得通訊協定
                        $result["scheme"]=$_SERVER["REQUEST_SCHEME"];

                        #取得伺服器給對外下載網頁的port
                        $result["serverPort"]=$_SERVER["SERVER_PORT"];

                        #取得目前要求執行的網址爲
                        $result["requestUri"]=$_SERVER["REQUEST_URI"];

                        #如果沒有 $_SERVER["HTTP_HOST"] 存在
                        if(!isset($_SERVER["HTTP_HOST"])){

                                #用server端的資訊來組用戶端要求的IP與port
                                $result["clientRequestIP"]=$result["serverIp"].":".$result["serverPort"];

                                }#if end

                        #反之
                        else{

                                #用戶端要求的IP與port
                                $result["clientRequestIP"]=$_SERVER["HTTP_HOST"];

                                }#else end

                        #$_SERVER['CONTEXT_PREFIX'], 例如 "/~qbpwcf"
                        #$result["CONTEXT_PREFIX"]=$_SERVER['CONTEXT_PREFIX'];

                        #取得目前的系統時間
                        #函式說明:
                        #取得系統時間目前的西元年、月、日、時、分、秒
                        #回傳的結果:
                        #$result["thisWestYear"],當前西元年
                        #$result["thisMonth"],當前月份
                        #$result["thisDay"],當前日
                        #$result["thisHour"],當前小時
                        #$result["thisMin"],當前分鐘
                        #$result["thisSec"],當前秒數
                        #必填的參數
                        $conf["time"]["getSystemDateAndTime"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php
                        $systemDateAndTime=time::getSystemDateAndTime($conf["time"]["getSystemDateAndTime"]);
                        unset($conf["time"]["getSystemDateAndTime"]);

                        #設置 systemDateAndTime
                        $result["systemDateAndTime"]=$systemDateAndTime["thisWestYear"].":".$systemDateAndTime["thisMonth"].":".$systemDateAndTime["thisDay"]." ".$systemDateAndTime["thisHour"].":".$systemDateAndTime["thisMin"].":".$systemDateAndTime["thisSec"];

                        #如果有設置 $conf["saveToDb"]
                        if(isset($conf["saveToDb"])){

                                #如果 $conf["saveToDb"] 為 "true"
                                if($conf["saveToDb"]=="true"){

                                        #將連線的資訊記錄到資料庫
                                        #函式說明:
                                        #插入資料到指定的資料表裡面,插入資料完畢可以選擇是否要進行轉址。
                                        #回傳的數值:
                                        #$result["status"],爲查詢是否成功,若爲"true"則成功,若爲"false"則表示失敗了.
                                        #$result["error"],錯誤訊息.
                                        #$result["sql"],執行的sql語法.
                                        #$result["function"],當前執行的涵式
                                        #必填的參數:
                                        $conf["db"]["insertDataToDbBest"]["dbAddress"]=$conf["dbAddress"];#爲mysql-Server的位置
                                        $conf["db"]["insertDataToDbBest"]["dbAccount"]=$conf["dbAccount"];#爲用於連入mysql-Server時要使用的帳號
                                        $conf["db"]["insertDataToDbBest"]["selectedDataBaseName"]=$conf["dbName"];#要選取的資料庫名稱
                                        $conf["db"]["insertDataToDbBest"]["tableName"]=$conf["tableName"];#爲要插入資料的資料表名稱
                                        $conf["db"]["insertDataToDbBest"]["columnName"]=$conf["columnName"];#爲資料表的項目名稱,
                                                #例如:$conf["columnName"]=array("columnName1","columnName2","columnName3",...);
                                        $conf["db"]["insertDataToDbBest"]["insertValue"]=array($result["username"],$result["userBrowserType"],$result["userIp"],$result["requestUri"],$result["systemDateAndTime"]);#爲要插入度數值,
                                                #例如:$conf["insertValue"]=array("insertValue1","insertValue2","insertValue3",...);
                                        #可以省略的變數:

                                        #如果有設置資料庫連線密碼
                                        if(isset($conf["dbPassword"])){

                                                #則套用設定
                                                $conf["db"]["insertDataToDbBest"]["dbPassword"]=$conf["dbPassword"];#爲連線到mysql-Server時要使用的密碼,可省略,若省略則代表不使用密碼

                                                #var_dump($conf["db"]["insertDataToDbBest"]["dbPassword"]);

                                                }#if end

                                        $insertData=db::insertData($conf["db"]["insertDataToDbBest"]);
                                        unset($conf["db"]["insertDataToDbBest"]);

                                        #如果寫入到資料表失敗
                                        if($insertData["status"]=="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$insertData;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        }#if end

                                }#if end

                        #設置伺服器的 domain name
                        $result["server_name"]=$_SERVER["SERVER_NAME"];

                        #設置用戶端要求的完整網址
                        $result["requestUriFull"]=$result["scheme"]."://".$result["server_name"].$result["requestUri"];

                        }#if end

                #反之代表是在command模式下
                else{

                        #預設為空字串,代表非使用者直接觸發
                        $result["phpUser"]="";

                        #如果有 LOGNAME 存在
                        if(isset($_SERVER["LOGNAME"])){

                                #取得使用該php程式的使用者帳號
                                $result["phpUser"]=$_SERVER["LOGNAME"];

                                }#if end

                        #反之
                        else{

                                /*
                                LOGNAME=liveuser
                                USERNAME=liveuser
                                USER=liveuser
                                */

                                #嘗試從系統變數取得使用者名稱
                                #函式說明:
                                #呼叫shell執行系統命令,並取得回傳的內容.
                                #回傳結果:
                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                #$result["error"],錯誤訊息陣列.
                                #$result["function"],當前執行的函數名稱.
                                #$result["argu"],使用的參數.
                                #$result["cmd"],執行的指令內容.
                                #$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
                                #$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
                                #$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
                                #$result["running"],是否還在執行.
                                #$result["pid"],pid.
                                #$result["statusCode"],執行結束後的代碼.
                                #$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
                                #必填參數:
                                #$conf["command"],字串,要執行的指令.
                                $conf["external::callShell"]["command"]="env";
                                #$conf["fileArgu"],字串,變數__FILE__的內容.
                                $conf["external::callShell"]["fileArgu"]=__FILE__;
                                #可省略參數:
                                #$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
                                #$conf["external::callShell"]["argu"]=array();
                                #$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
                                #$conf["arguIsAddr"]=array();
                                #$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
                                #$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
                                #$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
                                #$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
                                #$conf["enablePrintDescription"]="true";
                                #$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
                                #$conf["printDescription"]="";
                                #$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
                                $conf["external::callShell"]["escapeshellarg"]="true";
                                #$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
                                #$conf["thereIsShellVar"]=array();
                                #$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
                                #$conf["username"]="";
                                #$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
                                #$conf["password"]="";
                                #$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
                                #$conf["useScript"]="";
                                #$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
                                #$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
                                #$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
                                #$conf["inBackGround"]="";
                                #$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
                                #$conf["getErr"]="false";
                                #$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
                                #$conf["doNotRun"]="false";
                                #參考資料:
                                #exec=>http://php.net/manual/en/function.exec.php
                                #escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
                                #escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
                                #備註:
                                #不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
                                #若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
                                $callShell=external::callShell($conf["external::callShell"]);
                                unset($conf["external::callShell"]);

                                #如果執行失敗
                                if($callShell["status"]==="false"){

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

                                        #設置執行錯誤訊息
                                        $result["error"]=$callShell;

                                        #回傳結果
                                        return $result;

                                        }#if end

                                #函式說明:
                                #檢查多個字串中的每個字串是否有多個關鍵字
                                #回傳結果:
                                #$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
                                #$result["function"],當前執行的函數名稱.
                                #$result["error"],錯誤訊息.
                                #$result["argu"],使用的參數.
                                #$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
                                #$result["foundedKeyWords"],找到的關鍵字陣列.
                                #$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
                                #$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
                                #$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
                                #$result["keyWordsIncludeStr"],陣列,儲存有找到關鍵字的來源的索引(sourceIndex)與其內容(sourceVal)跟找到的關鍵字項目陣列(KeyWords).
                                #必填參數:
                                #$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
                                $conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("LOGNAME=","USERNAME=","USER=","HOME=");
                                #$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
                                $conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
                                #可省略參數:
                                #$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
                                #$conf["completeEqual"]="true";
                                #參考資料:
                                #無.
                                #備註:
                                #無.
                                $findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
                                unset($conf["search::findManyKeyWordsFromManyString"]);

                                #debug
                                #var_dump(__LINE__,$findManyKeyWordsFromManyString);

                                #如果執行不正常
                                if($findManyKeyWordsFromManyString["status"]==="false"){

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

                                        #設置執行錯誤訊息
                                        $result["error"]=$findManyKeyWordsFromManyString;

                                        #回傳結果
                                        return $result;

                                        }#if end

                                #針對每個有找到關鍵字的來源字串
                                foreach($findManyKeyWordsFromManyString["keyWordsIncludeStr"] as $keyWordsIncludeStr){

                                        #如果有多個關鍵字
                                        if(count($keyWordsIncludeStr["keyWords"])>1){

                                                #跳過
                                                continue;

                                                }#if end

                                        #解析使用者名稱
                                        #函式說明:
                                        #將字串特定關鍵字與其前面的內容剔除
                                        #回傳結果:
                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                        #$result["error"],錯誤訊息陣列.
                                        #$result["warning"],警告訊息鎮列.
                                        #$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["argu"],使用的參數.
                                        #$result["oriStr"],要處理的原始字串內容.
                                        #$result["content"],處理好的的字串內容.
                                        #必填參數:
                                        #$conf["stringIn"],字串,要處理的字串.
                                        $conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$keyWordsIncludeStr["sourceVal"];
                                        #$conf["keyWord"],字串,特定字串.
                                        $conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$keyWordsIncludeStr["keyWords"][0];
                                        #可省略參數:
                                        #$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
                                        $conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
                                        #$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
                                        #$conf["lastResult"]=$delStrBeforeKeyWord;
                                        #參考資料:
                                        #無.
                                        #備註:
                                        #無.
                                        $delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
                                        unset($conf["stringProcess::delStrBeforeKeyWord"]);

                                        #debug
                                        #var_dump(__LINE__,$delStrBeforeKeyWord);

                                        #如果執行不正常
                                        if($delStrBeforeKeyWord["status"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$delStrBeforeKeyWord;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果沒有關鍵字
                                        if($delStrBeforeKeyWord["founded"]==="false"){

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

                                                #設置執行錯誤訊息
                                                $result["error"]=$delStrBeforeKeyWord;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果不是空字串
                                        if(!empty($delStrBeforeKeyWord["content"])){

                                                #取得使用者名稱
                                                $result["phpUser"]=basename($delStrBeforeKeyWord["content"]);

                                                #結束 foreach
                                                break;

                                                }#if end

                                        }#foreach end

                                #debug
                                #var_dump(__LINE__,$result);

                                }#else

                        #預設的使用者類型為 "regular"
                        $result["phpUserType"]="regular";

                        #判斷使用者是否為管理者賬戶 - start

                        #如果有抓到使用者名稱
                        if(!empty($result["phpUser"])){

                                #如果是 root 賬號
                                if($result["phpUser"]==="root"){

                                        #設置 phpUserType 為 intrinsic
                                        $result["phpUserType"]="intrinsic";

                                        }#if end

                                #反之
                                else{

                                        #函式說明:
                                        #呼叫shell執行系統命令,並取得回傳的內容.
                                        #回傳結果:
                                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                        #$result["error"],錯誤訊息陣列.
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["argu"],使用的參數.
                                        #$result["cmd"],執行的指令內容.
                                        #$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.
                                        #$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.
                                        #$result["tmpFileOutput"],儲存輸出的暫存檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.
                                        #$result["running"],是否還在執行.
                                        #$result["pid"],pid.
                                        #$result["statusCode"],執行結束後的代碼.
                                        #$result["escape"],陣列,儲存重新排序過且已經escape過的指令(key為"cmd")與參數(key為"argu")與兩者組合的一維陣列(key為"array").
                                        #必填參數:
                                        #$conf["command"],字串,要執行的指令.
                                        $conf["external::callShell"]["command"]="userdbctl";
                                        #$conf["fileArgu"],字串,變數__FILE__的內容.
                                        $conf["external::callShell"]["fileArgu"]=__FILE__;
                                        #可省略參數:
                                        #$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.
                                        $conf["external::callShell"]["argu"]=array("user",$result["phpUser"]);
                                        #$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").
                                        #$conf["arguIsAddr"]=array();
                                        #$conf["pre"],陣列,要在本指令前執行的每個指令與參數.
                                        #$conf["pre"][$i]["cmd"],字串,要在本指令前執行的第$i+1個指令.
                                        #$conf["pre"][$i]["param"],陣列字串,要在本指令前執行的第$i+1個指令的參數.
                                        #$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".
                                        #$conf["enablePrintDescription"]="true";
                                        #$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容加上使用的$conf["argu"]參數.
                                        #$conf["printDescription"]="";
                                        #$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".如果參數為"< 、<< 、> 、>> 、| 、2>&1"之一則不會過濾.
                                        $conf["external::callShell"]["escapeshellarg"]="true";
                                        #$conf["thereIsShellVar"],陣列字串,指令搭配的參數"argu",若含有「\'」,則取代為「"」.每個argu參數都要有對應的元素."true"代表要置換.
                                        #$conf["thereIsShellVar"]=array();
                                        #$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.
                                        #$conf["username"]="";
                                        #$conf["password"],字串,root的使用者密碼,預設不使用密碼,該參數不適用於apache環境.
                                        #$conf["password"]="";
                                        #$conf["useScript"],字串,是否要啟用Linux的script指令來記錄輸出,"true"代表要,Fedora的selinux會擋住該操作;"false"代表不要,預設為"false".
                                        #$conf["useScript"]="";
                                        #$conf["logFilePath"],字串,當 $conf["useScript"] 為 "true" 時,輸出的內容要暫存到哪裡,預設為 "/tmp/.qbpwcf_tmp/external/callShell/".
                                        #$conf["logFilePath"]=".qbpwcf_tmp/external/callShell/";
                                        #$conf["inBackGround"],字串,是否要在背景執行,且不會等待程式執行結束再執行下一個指令,"true"代表是,"false"代表不要,預設為"false",如果$conf["command"]有用「;」區隔的多個指令將會出錯.
                                        #$conf["inBackGround"]="";
                                        #$conf["getErr"],字串,"true"代表將錯誤輸出變成標準輸出,反之"false"為不變動.
                                        #$conf["getErr"]="false";
                                        #$conf["doNotRun"],字串,"true"代表不執行指令,預設為"false"會執行指令.
                                        #$conf["doNotRun"]="false";
                                        #參考資料:
                                        #exec=>http://php.net/manual/en/function.exec.php
                                        #escapeshellcmd=>http://php.net/manual/en/function.escapeshellcmd.php
                                        #escapeshellarg=>http://php.net/manual/en/function.escapeshellarg.php
                                        #備註:
                                        #不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.
                                        #若使用的 command、argu 參數,含有 ~ 則會被視為字串,若有需要其於 shell 中代表的家目錄位置,可用 fileAccess::tildeToPath 來進行轉換.
                                        $callShell=external::callShell($conf["external::callShell"]);
                                        unset($conf["external::callShell"]);

                                        #如果執行失敗
                                        if($callShell["status"]==="false"){

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

                                                #設置錯誤訊息
                                                $result["error"]=$callShell;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #範例輸出
                                        #   User name: liveuser
                                        # Disposition: regular
                                        # Last Passw.: Fri 2023-09-22 08:00:00 CST
                                        #    Login OK: yes
                                        # Password OK: yes
                                        #         UID: 1000
                                        #         GID: 1000 (liveuser)
                                        # Aux. Groups: wheel
                                        #              mail
                                        #              apache
                                        #              svn
                                        #   Directory: /var/home/liveuser
                                        #     Storage: classic
                                        #       Shell: /bin/bash
                                        # Passwd Chg.: max 273y 9month 1w 4d 19h 30min/warn 1w
                                        #Pas. Ch. Now: no
                                        #   Passwords: 1
                                        #     Service: io.systemd.NameServiceSwitch

                                        #DISPOSITION 為 intrinsic 者代表為系統賬戶 root
                                        #DISPOSITION 為 system 者代表為系統賬戶
                                        #DISPOSITION 為 regular 者代表為一般賬戶
                                        #一般賬戶的 Aux. Groups 清單若有 wheel 存在,則代表要透過sudo來執行給予系統賬戶權限

                                        #函式說明:
                                        #檢查多個字串中的每個字串是否有多個關鍵字
                                        #回傳結果:
                                        #$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
                                        #$result["function"],當前執行的函數名稱.
                                        #$result["error"],錯誤訊息.
                                        #$result["argu"],使用的參數.
                                        #$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
                                        #$result["foundedKeyWords"],找到的關鍵字陣列.
                                        #$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
                                        #$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
                                        #$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
                                        #必填參數:
                                        #$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
                                        $conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("Disposition: ");
                                        #$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
                                        $conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
                                        #可省略參數:
                                        #$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
                                        $conf["search::findManyKeyWordsFromManyString"]["completeEqual"]="false";
                                        #參考資料:
                                        #無.
                                        #備註:
                                        #無.
                                        $findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
                                        unset($conf["search::findManyKeyWordsFromManyString"]);

                                        #如果執行失敗
                                        if($findManyKeyWordsFromManyString["status"]==="false"){

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

                                                #設置錯誤訊息
                                                $result["error"]=$findManyKeyWordsFromManyString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #如果沒有關鍵字
                                        if($findManyKeyWordsFromManyString["foundedAll"]==="false"){

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

                                                #設置錯誤訊息
                                                $result["error"]=$findManyKeyWordsFromManyString;

                                                #回傳結果
                                                return $result;

                                                }#if end

                                        #針對每個找到的結果
                                        foreach($findManyKeyWordsFromManyString["foundedTrueKey"] as $strWithKeyWord){

                                                #函式說明:
                                                #將字串特定關鍵字與其前面的內容剔除
                                                #回傳結果:
                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                #$result["error"],錯誤訊息陣列.
                                                #$result["warning"],警告訊息鎮列.
                                                #$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
                                                #$result["function"],當前執行的函數名稱.
                                                #$result["argu"],使用的參數.
                                                #$result["oriStr"],要處理的原始字串內容.
                                                #$result["content"],處理好的的字串內容.
                                                #必填參數:
                                                #$conf["stringIn"],字串,要處理的字串.
                                                $conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$strWithKeyWord;
                                                #$conf["keyWord"],字串,特定字串.
                                                $conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="Disposition: ";
                                                #可省略參數:
                                                #$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
                                                #$conf["recursive"]="true";
                                                #$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
                                                #$conf["lastResult"]=$delStrBeforeKeyWord;
                                                #參考資料:
                                                #無.
                                                #備註:
                                                #無.
                                                $delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
                                                unset($conf["stringProcess::delStrBeforeKeyWord"]);

                                                #如果執行失敗
                                                if($delStrBeforeKeyWord["status"]==="false"){

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

                                                        #設置錯誤訊息
                                                        $result["error"]=$delStrBeforeKeyWord;

                                                        #回傳結果
                                                        return $result;

                                                        }#if end

                                                #如果應該要存在的關鍵字不存在
                                                if($delStrBeforeKeyWord["founded"]==="false"){

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

                                                        #設置錯誤訊息
                                                        $result["error"]=$delStrBeforeKeyWord;

                                                        #回傳結果
                                                        return $result;

                                                        }#if end

                                                #判斷賬戶類型
                                                switch($delStrBeforeKeyWord["content"]){

                                                        #若是 root
                                                        case "intrinsic":

                                                                break;

                                                        #若是系統賬戶
                                                        case "system";

                                                                break;

                                                        #若是一般使用者
                                                        case "regular";

                                                                #函式說明:
                                                                #檢查多個字串中的每個字串是否有多個關鍵字
                                                                #回傳結果:
                                                                #$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
                                                                #$result["function"],當前執行的函數名稱.
                                                                #$result["error"],錯誤訊息.
                                                                #$result["argu"],使用的參數.
                                                                #$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
                                                                #$result["foundedKeyWords"],找到的關鍵字陣列.
                                                                #$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
                                                                #$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
                                                                #$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
                                                                #必填參數:
                                                                #$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
                                                                $conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array("Aux. Groups: ");
                                                                #$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
                                                                $conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$callShell["output"];
                                                                #可省略參數:
                                                                #$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
                                                                $conf["search::findManyKeyWordsFromManyString"]["completeEqual"]="false";
                                                                #參考資料:
                                                                #無.
                                                                #備註:
                                                                #無.
                                                                $findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
                                                                unset($conf["search::findManyKeyWordsFromManyString"]);

                                                                #如果執行失敗
                                                                if($findManyKeyWordsFromManyString["status"]==="false"){

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

                                                                        #設置錯誤訊息
                                                                        $result["error"]=$findManyKeyWordsFromManyString;

                                                                        #回傳結果
                                                                        return $result;

                                                                        }#if end

                                                                #初始化執行者所屬的群組
                                                                $groups=array();

                                                                #如果沒有關鍵字
                                                                if($findManyKeyWordsFromManyString["foundedAll"]==="false"){

                                                                        #代表使用者所屬的群組只有自己
                                                                        $groups[]=$result["phpUser"];

                                                                        }#if end

                                                                #反之,代表屬於多個群組.
                                                                else{

                                                                        #針對每個找到的結果
                                                                        foreach($findManyKeyWordsFromManyString["foundedTrueKey"] as $groupStartIndex=>$strWithKeyWord){

                                                                                #函式說明:
                                                                                #將字串特定關鍵字與其前面的內容剔除
                                                                                #回傳結果:
                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                #$result["error"],錯誤訊息陣列.
                                                                                #$result["warning"],警告訊息鎮列.
                                                                                #$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
                                                                                #$result["function"],當前執行的函數名稱.
                                                                                #$result["argu"],使用的參數.
                                                                                #$result["oriStr"],要處理的原始字串內容.
                                                                                #$result["content"],處理好的的字串內容.
                                                                                #必填參數:
                                                                                #$conf["stringIn"],字串,要處理的字串.
                                                                                $conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$strWithKeyWord;
                                                                                #$conf["keyWord"],字串,特定字串.
                                                                                $conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="Aux. Groups: ";
                                                                                #可省略參數:
                                                                                #$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
                                                                                #$conf["recursive"]="true";
                                                                                #$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.
                                                                                #$conf["lastResult"]=$delStrBeforeKeyWord;
                                                                                #參考資料:
                                                                                #無.
                                                                                #備註:
                                                                                #無.
                                                                                $delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
                                                                                unset($conf["stringProcess::delStrBeforeKeyWord"]);

                                                                                #如果執行失敗
                                                                                if($delStrBeforeKeyWord["status"]==="false"){

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

                                                                                        #設置錯誤訊息
                                                                                        $result["error"]=$delStrBeforeKeyWord;

                                                                                        #回傳結果
                                                                                        return $result;

                                                                                        }#if end

                                                                                #如果應該要存在的關鍵字不存在
                                                                                if($delStrBeforeKeyWord["founded"]==="false"){

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

                                                                                        #設置錯誤訊息
                                                                                        $result["error"]=$delStrBeforeKeyWord;

                                                                                        #回傳結果
                                                                                        return $result;

                                                                                        }#if end

                                                                                #設置該用戶屬的群組之一
                                                                                $groups[]=$delStrBeforeKeyWord["content"];

                                                                                #取得群組資訊之後的陣列內容
                                                                                #函式說明:
                                                                                #將陣列進行切割
                                                                                #回傳結果:
                                                                                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                                                                                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                                                                                #$result["function"],當前執行的函式名稱.
                                                                                #$result["content"]["get"],切割出來的陣列.
                                                                                #$result["content"]["leftL"],遺留下來的陣列,左邊.
                                                                                #$result["content"]["leftR"],遺留下來的陣列,右邊.
                                                                                #$result["content"]["ori"],原始的陣列.
                                                                                #$result["argu"],使用的參數.
                                                                                #必填參數:
                                                                                #$conf["array"],要進行分割的陣列.
                                                                                $conf["arrays::split"]["array"]=$callShell["output"];
                                                                                #$conf["length"],整數,要切幾個元素.
                                                                                $conf["arrays::split"]["length"]=0;
                                                                                #可省略參數:
                                                                                #$conf["offset"],整數,要從第幾個元素開始切,預設為0
                                                                                $conf["arrays::split"]["offset"]=$groupStartIndex;
                                                                                #參考資料:
                                                                                #無.
                                                                                #備註:
                                                                                #無.
                                                                                $split=arrays::split($conf["arrays::split"]);
                                                                                unset($conf["arrays::split"]);

                                                                                #如果執行失敗
                                                                                if($split["status"]==="false"){

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

                                                                                        #設置錯誤訊息
                                                                                        $result["error"]=$split;

                                                                                        #回傳結果
                                                                                        return $result;

                                                                                        }#if end

                                                                                #可能為第1個外的群組資訊陣列
                                                                                #$split["content"]["leftR"];

                                                                                #函式說明:
                                                                                #檢查多個字串中的每個字串是否有多個關鍵字
                                                                                #回傳結果:
                                                                                #$result["status"],整體來說,執行是否成功,"true"代表執行成功,"false"代表執行失敗。
                                                                                #$result["function"],當前執行的函數名稱.
                                                                                #$result["error"],錯誤訊息.
                                                                                #$result["argu"],使用的參數.
                                                                                #$result["foundedTrueKey"],結果為"true"的被搜尋元素key陣列,與其數值內容.
                                                                                #$result["foundedKeyWords"],找到的關鍵字陣列.
                                                                                #$result["foundedFalseKey"],結果為"false"的被搜尋元素key陣列,與其數值內容.
                                                                                #$result["foundedTrueKeyWords"],二維陣列,各個字串有找到的關鍵字陣列.
                                                                                #$result["foundedAll"],是否每個關鍵字都有找到,"true"代表每個都有找到,"false"代表沒有每個都找到.
                                                                                #必填參數:
                                                                                #$conf["keyWords"],字串陣列,想要搜尋的關鍵字.
                                                                                $conf["search::findManyKeyWordsFromManyString"]["keyWords"]=array(":");
                                                                                #$conf["stringArray"],字串陣列,要被搜尋的字串內容陣列.
                                                                                $conf["search::findManyKeyWordsFromManyString"]["stringArray"]=$split["content"]["leftR"];
                                                                                #可省略參數:
                                                                                #$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為"false"不需要完全符合.
                                                                                $conf["search::findManyKeyWordsFromManyString"]["completeEqual"]="false";
                                                                                #參考資料:
                                                                                #無.
                                                                                #備註:
                                                                                #無.
                                                                                $findManyKeyWordsFromManyString=search::findManyKeyWordsFromManyString($conf["search::findManyKeyWordsFromManyString"]);
                                                                                unset($conf["search::findManyKeyWordsFromManyString"]);

                                                                                #如果執行失敗
                                                                                if($findManyKeyWordsFromManyString["status"]==="false"){

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

                                                                                        #設置錯誤訊息
                                                                                        $result["error"]=$findManyKeyWordsFromManyString;

                                                                                        #回傳結果
                                                                                        return $result;

                                                                                        }#if end

                                                                                #如果沒有關鍵字
                                                                                if($findManyKeyWordsFromManyString["foundedAll"]==="false"){

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

                                                                                        #設置錯誤訊息
                                                                                        $result["error"]=$findManyKeyWordsFromManyString;

                                                                                        #回傳結果
                                                                                        return $result;

                                                                                        }#if end

                                                                                #針對每個群組名稱
                                                                                foreach($findManyKeyWordsFromManyString["foundedFalseKey"] as $group){

                                                                                        #記錄group
                                                                                        $groups[]=trim($group);

                                                                                        }#foreach end

                                                                                #檢查有無 wheel 群組在裡面
                                                                                #函式說明:
                                                                                #檢查一個數值是否與陣列裏面的元素相同,找到一個相符合的元素後就會停止搜尋.
                                                                                #回傳結果:
                                                                                #$result["status"],"true"表示執行正確,"false"表示執行錯誤.
                                                                                #$result["founded"],"true"表示有找到相同的,"false"表示沒有找到相同的.
                                                                                #$result["error"],錯誤訊息
                                                                                #$result["function"],當前執行的函數名稱
                                                                                #$result["argv"],使用的參數
                                                                                #$result["equalVarName"],相等的變數名稱或key.
                                                                                #$result["equalVarValue"],相等的變數數值內容.
                                                                                #必填參數:
                                                                                #$conf["conditionElement"],字串,條件元素,要等於的元素內容.
                                                                                $conf["cmd::getEqualVar"]["conditionElement"]="wheel";
                                                                                #$conf["compareElements"],字串陣列,要比對的陣列變數內容.
                                                                                $conf["cmd::getEqualVar"]["compareElements"]=$groups;
                                                                                #可省略參數:
                                                                                #無.
                                                                                #參考資料:
                                                                                #無.
                                                                                #備註:
                                                                                #無.
                                                                                $getEqualVar=search::getEqualVar($conf["cmd::getEqualVar"]);
                                                                                unset($conf["cmd::getEqualVar"]);

                                                                                #如果執行失敗
                                                                                if($getEqualVar["status"]==="false"){

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

                                                                                        #設置錯誤訊息
                                                                                        $result["error"]=$getEqualVar;

                                                                                        #回傳結果
                                                                                        return $result;

                                                                                        }#if end

                                                                                #如果是 可以用 sudo 的賬號
                                                                                if($getEqualVar["founded"]==="true"){

                                                                                        #設置為 wheel 群組的成員
                                                                                        $result["phpUserType"]="wheel";

                                                                                        }#if end

                                                                                #只要找到一個,結束foreach
                                                                                break;

                                                                                }#else end

                                                                }#foreach end

                                                                break;

                                                        }#switch end

                                                }#foreach end

                                        }#else end

                                }#if end

                        #取得server的ip
                        $result["serverIp"]=gethostbyname(gethostname());

                        #設置通訊協定
                        $result["scheme"]="file";

                        #設置為cmd模式
                        $result["mode"]="cmd";

                        #設置用戶端要求的完整網址
                        $result["requestUriFull"]=__FILE__;

                        #函式說明:
                        #將字串特定關鍵字與其前面的內容剔除
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列.
                        #$result["warning"],警告訊息鎮列.
                        #$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.
                        #$result["function"],當前執行的函數名稱.
                        #$result["argu"],使用的參數.
                        #$result["oriStr"],要處理的原始字串內容.
                        #$result["content"],處理好的的字串內容.
                        #必填參數:
                        #$conf["stringIn"],字串,要處理的字串.
                        $conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$result["requestUriFull"];
                        #$conf["keyWord"],字串,特定字串.
                        $conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";
                        #可省略參數:
                        #$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.
                        $conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";
                        #$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則回改回傳該內容.
                        #$conf["lastResult"]=$delStrBeforeKeyWord;
                        #參考資料:
                        #無.
                        #備註:
                        #無.
                        $delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);
                        unset($conf["stringProcess::delStrBeforeKeyWord"]);

                        #如果執行失敗
                        if($delStrBeforeKeyWord["status"]==="false"){

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

                                #設置執行錯誤訊息
                                $result["error"]=$insertData;

                                #回傳結果
                                return $result;

                                }#if end

                        #取得目前要求執行的網址爲
                        $result["requestUri"]=$delStrBeforeKeyWord["content"];

                        }#else end

                #函式說明:
                #取得apache接收到的header
                #回傳結果:
                #$result["status"],執行成功與否,"true"代表成功,"false"代表失敗.
                #$result["content"],取得的header陣列.
                #$result["function"],當前執行的函數名稱.
                #必填參數:
                #無
                #可省略參數:
                #無
                #參考資料:
                #無.
                #備註:
                #無.
                $getReceivedHeaders=header::getReceivedHeaders();

                #如果執行失敗
                if($getReceivedHeaders["status"]=="false"){

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

                        #設置執行錯誤訊息
                        $result["error"]=$getReceivedHeaders;

                        #回傳結果
                        return $result;

                        }#if end

                #設置取得的 header 陣列
                $result["header"]=$getReceivedHeaders["content"];

                #取得讀取到 body 字串
                $result["body"]=file_get_contents('php://input');

                #執行到這邊代表執行正常
                $result["status"]="true";

                #回傳結果
                return $result;

                }#function getConnectionInfo end

        /*
        #函式說明:
        #回傳可以連線到伺服器端網頁的port
        #回傳結果:
        #$result,可以連線到伺服器端網頁的port
        #必填參數:
        #無.
        #可省略參數:
        #無.
        #參考資料:
        #http://php.net/manual/en/reserved.variables.server.php
        #備註:
        #無.
        */
        public static function getClientPort(){

                #取得可以連線到伺服器端網頁的port
                $clientPORT = $_SERVER['SERVER_PORT'];

                #回傳使用者的IP
                return $clientPORT;

                }#function getClientPORT end

        /*
        #函式說明:
        #取得 dns/ip 的地理位置資訊
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #$result["content"],取得的回應內容.
        #必填參數:
        #$conf["fileArgu"],字串,__FILE__的內容.
        #$conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["addr"],字串,dns或ip.
        #$conf["addr"]="";
        #參考資料:
        #無.
        #備註:
        #請檢查參數.
        */
        public static function getIpGeo($conf=array()){

                #初始化要回傳的結果
                $result=array();

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

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

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

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

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

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

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

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end

                #如果沒有變數 addr
                if(!isset($conf["addr"])){

                        #取得用戶端ip
                        #函式說明:
                        #回傳用戶端的IP位置
                        #回傳的結果:
                        #$result,用戶端的ip,若在命令列下執行則回傳getServerIP()的結果.
                        $conf["addr"]=csInformation::getClientIP();

                        }#if end

                #查詢相關地理位置資訊的網址
                $endPoint="https://tools.keycdn.com/geo.json?host=".$conf["addr"];

                #函式說明:
                #運行curl cmd
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["content"],取得的回應內容.
                #$result["cmd"],執行的command
                #必填參數:
                #$conf["url"],字串,目標url.
                $conf["catchWebContent::curlCmd"]["url"]=$endPoint;
                #$conf["fileArgu"],字串,變數__FILE__的內容.
                $conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];
                #可省略參數:
                #$conf["header"],字串陣列,要傳送的header.
                $conf["catchWebContent::curlCmd"]["header"]=array("User-Agent: keycdn-tools:https://www.qbpwcf.org");
                #$conf["allowAnySSLcertificate"],字串,是否允許不可信任的SSL憑證,預設為"true".
                #$conf["allowAnySSLcertificate"]="";
                #$conf["postVar"],字串陣列,每個要傳送的post變數名稱(陣列的key值)與數值.
                #$conf["catchWebContent::curlCmd"]["postVar"]=$post;
                #$conf["urlEncode"],字串,post的內容是否要url_encode,"true"代表要,預設為"false"代表不要.
                #$conf["urlEncode"]="false";
                #$conf["agent"],字串,user agent的名稱.
                $conf["catchWebContent::curlCmd"]["agent"]="Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0";
                $curlCmd=catchWebContent::curlCmd($conf["catchWebContent::curlCmd"]);
                unset($conf["catchWebContent::curlCmd"]);

                #如果運行失敗
                if($curlCmd["status"]==="false"){

                        #設置錯誤狀態
                        $result["status"]="false";

                        #設置錯誤訊息
                        $result["error"]=$curlCmd;

                        #回傳結果
                        return $result;

                        }#if end

                #設置執行正常的識別
                $result["status"]="true";

                /*
                範例回傳結果:
                {
                        "status":"success",
                        "description":"Data successfully received.",
                        "data":{
                                "geo":{
                                        "host":"www.google.com",
                                        "ip":"74.125.29.147",
                                        "rdns":"qg-in-f147.1e100.net",
                                        "asn":"AS15169",
                                        "isp":"Google Inc. ",
                                        "country_name":"United States",
                                        "country_code":"US",
                                        "region":"CA",
                                        "city":"Mountain View",
                                        "postal_code":"94043",
                                        "continent_code":"NA",
                                        "latitude":37.419200897217,
                                        "longitude":-122.05740356445,
                                        "dma_code":807,
                                        "area_code":650,
                                        "timezone":"America\/Los_Angeles",
                                        "datetime":"2015-05-22 09:10:35"
                                        }
                                }
                        }
                }

                or

                {
                   "status":"error",
                   "description":"Hostname did not resolve any IP."
                }
                */
                #解析回應
                $res=json_decode($curlCmd["content"][0]);

                #如果查詢失敗
                if($res->status==="error"){

                        #設置錯誤狀態
                        $result["status"]="false";

                        #設置錯誤訊息
                        $result["error"]=$res;

                        #回傳結果
                        return $result;

                        }#if end

                #取得回應的內容
                $result["content"]=$res->data->geo;

                #回傳結果
                return $result;

                }#function getIpGeo end

        /*
        #函式說明:
        #將ipv4轉換成ipv6
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #$result["content"],取得的回應內容.
        #$result["argu"],使用的參數.
        #必填參數:
        #$conf["ipv4"],字串,人可讀的ipv4字串.
        $conf["ipv4"]="";
        #可省略參數:
        #無.
        #參考資料:
        #http://benjr.tw/17314
        #https://www.ultratools.com/tools/ipv4toipv6
        #備註:
        #無.
        */
        public static function ipv4toipv6($conf){

                #初始化要回傳的結果
                $result=array();

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

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

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

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

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

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

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

                                }#if end

                        #回傳結果
                        return $result;

                        }#if end

                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$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["variable::checkArguments"]["varInput"]=&$conf;
                #$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variable::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #可以省略的參數:
                #$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variable::checkArguments"]["mustBeFilledVariableName"]=array("ipv4");
                #$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.
                $conf["variable::checkArguments"]["mustBeFilledVariableType"]=array("string");
                #$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.
                $conf["variable::checkArguments"]["canBeEmptyString"]="false";
                #$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.
                #$conf["canNotBeEmpty"]=array();
                #$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.
                #$conf["canBeEmpty"]=array();
                #$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.
                #$conf["skipableVariableCanNotBeEmpty"]=array();
                #$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");
                #$conf["skipableVariableName"]=array();
                #$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");
                #$conf["skipableVariableType"]=array();
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["skipableVarDefaultValue"]=array("");
                #$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmpty"]="";
                #$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".
                #$conf["disallowAllSkipableVarIsEmptyArray"]="";
                #$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["variable::checkArguments"]);
                unset($conf["variable::checkArguments"]);

                #如果檢查參數失敗
                if($checkArguments["status"]==="false"){

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

                        #設置錯誤訊息
                        $result["error"]=$checkArguments;

                        #回傳結果
                        return $result;

                        }#if end

                #分割每個ipv4的數字
                #函式說明:
                #將固定格式的字串分開,並回傳分開的結果。
                #回傳結果:
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$result["error"],錯誤訊息陣列
                #$result["function"],當前執行的函數名稱.
                #$result["argu"],使用的參數.
                #$result["oriStr"],要分割的原始字串內容
                #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                #$result["dataCounts"],爲總共分成幾段
                #$result["found"],是否有在$conf["stringIn"]找到$conf["spiltSymbol"],"true"代表有找到,"false"代表沒有找到.
                #必填的參數:
                $conf["stringProcess::spiltString"]["stringIn"]=$conf["ipv4"];#要處理的字串。
                $conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割
                #可省略參數:
                #$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.
                $conf["stringProcess::spiltString"]["allowEmptyStr"]="false";
                $spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);
                unset($conf["stringProcess::spiltString"]);

                #如果執行失敗
                if($spiltString["status"]==="false"){

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

                        #設置錯誤訊息
                        $result["error"]=$spiltString;

                        #回傳結果
                        return $result;

                        }#if end

                #如果沒有找到切割用的關鍵字
                if($spiltString["found"]==="false"){

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

                        #設置錯誤訊息
                        $result["error"]=$spiltString;

                        #回傳結果
                        return $result;

                        }#if end

                #如果沒有切割出4段
                if($spiltString["dataCounts"]!==4){

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

                        #設置錯誤訊息
                        $result["error"]=$spiltString;

                        #回傳結果
                        return $result;

                        }#if end

                #轉換每段ip位置為16進位
                $ipv6="0:0:0:0:0:ffff:".sprintf('%2x',$spiltString["dataArray"][0]).sprintf('%02x',$spiltString["dataArray"][1]).":".sprintf('%2x',$spiltString["dataArray"][2]).sprintf('%02x',$spiltString["dataArray"][3]);

                #取得 ipv6
                $result["content"]=$ipv6;

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

                #回傳結果
                return $result;

                }#function ipv4toipv6 end

        }#class csInformation end

?>