Rev 3 | Rev 66 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*QBPWCF, Quick Build PHP website Component base on Fedora Linux.Copyright (C) 2014~2025 Min-Jhin,ChenThis file is part of QBPWCF.QBPWCF is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with QBPWCF. If not, see <http://www.gnu.org/licenses/>.*/namespace qbpwcf;/*類別說明:檔案存取應用的類別.備註:無.*/class fileAccess{/*#函式說明:#當前類別被呼叫的靜態方法不存在時,將會執行該函數,回報該方法不存在.#回傳結果:#$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/*#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["fileInfo"],實際上寫入的檔案資訊陣列.#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.#$result["argu"],使用的參數.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.#$conf["fileName"]="";#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".#$conf["inputString"]="";#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.#$conf["writeMethod"]="a";#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.#$conf["checkRepeat"]="";#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.#$conf["filenameExtensionStartPoint"]="";#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.#$conf["repeatNameRule"]="";#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".#$conf["web"]="true";#參考資料:#無.#備註:#無.*/public static function writeTextIntoFile(&$conf){#初始化要回傳的變數$result=array();#初始化當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName","inputString","writeMethod","checkRepeat","filenameExtensionStartPoint","repeatNameRule","web");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string","string","string","string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"","w","false",null,null,"true");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果沒有設置 $conf["fileName"]if(!isset($conf["fileName"])){#設定要檢查是否有重複的檔案名稱$conf["checkRepeat"]="true";#亂數產生檔案名稱#函式說明:#建立以圖片(PNG格式)呈現的驗證碼.#回傳的解果:#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.#$result["error"],錯誤訊息.#$result["function"],檔前執行的函數名稱.#$result["randNumberWord"],傳驗證碼的內容.#$result["imgAddress"],圖片的位置與名稱.#必填參數:#$conf["imgAddressAndName"],字串,爲驗證碼圖片儲存的位置與名稱,副檔名程式會自動產生$conf["authenticate::validationCode"]["imgAddressAndName"]="don't need!";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["authenticate::validationCode"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["num"],字串,爲驗證碼的位數,請輸入阿拉伯數字,預設為"8"位數.$conf["authenticate::validationCode"]["num"]="10";#$conf["disableImg"],字串,是否要取消驗證碼圖片的輸出,"true"為要取消,預設為"false"為不取消$conf["authenticate::validationCode"]["disableImg"]="true";#$conf["imgToData"],字串,預設為"true"代表將圖片轉存成base64圖片,並將原始圖片移除;反之為"false"#$conf["imgToData"]="true";$validationCode=authenticate::validationCode($conf["authenticate::validationCode"]);unset($conf["authenticate::validationCode"]);#如果亂數產生錯誤if($validationCode["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$validationCode;#回傳結果return $result;}#if end#取得產生的檔案名稱$conf["fileName"]=$validationCode["randNumberWord"];}#if end#剃除 $conf["fileName"] 開頭的 "./"#函式說明:#移除字串開頭的特定內容#回傳的接結果:#$result["status"],寄信的情況,若爲"true",則十之八九沒有問題.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數.#$result["content"],處理好的字串.#必填參數:#$conf["inputStr"],字串,要檢查並移除開頭有 $conf["keyWords"] 的字串.$conf["stringProcess::delKeyWordsInStrHead"]["inputStr"]=$conf["fileName"];#$conf["keyWord"],字串,要移除的字串開頭關鍵字.$conf["stringProcess::delKeyWordsInStrHead"]["keyWord"]="./";#可省略參數:#無.$delKeyWordsInStrHead=stringProcess::delKeyWordsInStrHead($conf["stringProcess::delKeyWordsInStrHead"]);unset($conf["stringProcess::delKeyWordsInStrHead"]);#如果處理失敗if($delKeyWordsInStrHead["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$delKeyWordsInStrHead;#回傳結果return $result;}#if end#取得處理好的檔案名稱$conf["fileName"]=$delKeyWordsInStrHead["content"];#函式說明:#確保路徑存在.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#必填參數:#$conf["path"],要檢查的路徑$conf["fileAccess::validatePath"]["path"]=$conf["fileName"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".$conf["fileAccess::validatePath"]["haveFileName"]="true";#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.#$conf["dirPermission"]="";$conf["fileAccess::validatePath"]["web"]=$conf["web"];$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);unset($conf["fileAccess::validatePath"]);#debug#var_dump($validatePath);exit;#如果確保路徑失敗if($validatePath["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$validatePath;#回傳結果return $result;}#if endif($conf["checkRepeat"]=="true"){#函式說明:#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.#回傳的結果:#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["createdFileName"],建立好的檔案名稱.#$result["createdFilePath"],檔案建立的路徑.#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.#必填參數:#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑$conf["fileAccess::createFileAfterCheck"]["checkedFileAndPath"]=$conf["fileName"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::createFileAfterCheck"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#如果有設定 $conf["filenameExtensionStartPoint"]if(isset($conf["filenameExtensionStartPoint"])){#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.$conf["fileAccess::createFileAfterCheck"]["filenameExtensionStartPoint"]=$conf["filenameExtensionStartPoint"];}#if end#如果有設定 $conf["repeatNameRule"]if(isset($conf["repeatNameRule"])){#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".$conf["fileAccess::createFileAfterCheck"]["repeatNameRule"]=$conf["repeatNameRule"];}#if end#如果有設定 $conf["web"] 參數if(isset($conf["web"])){$conf["fileAccess::createFileAfterCheck"]["web"]=$conf["web"];}#if end$createFileAfterCheck=fileAccess::createFileAfterCheck($conf["fileAccess::createFileAfterCheck"]);unset($conf["fileAccess::createFileAfterCheck"]);#debug#var_dump($createFileAfterCheck);#exit;#如果嘗試建立檔案失敗if($createFileAfterCheck["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$createFileAfterCheck;#回傳結果return $result;}#if end#取得建立的檔案資訊$result["fileInfo"]["createdFilePathAndName"]=$createFileAfterCheck["createdFilePathAndName"];$result["fileInfo"]["createdFilePath"]=$createFileAfterCheck["createdFilePath"];$result["fileInfo"]["createdFileName"]=$createFileAfterCheck["createdFileName"];#取得建立好的檔案路徑與名稱$conf["fileName"]=$createFileAfterCheck["createdFilePathAndName"];}#if end#反之沒有要檢查檔案是否存在else{#取得建立的檔案資訊$result["fileInfo"]["createdFilePathAndName"]=$conf["fileName"];$result["fileInfo"]["createdFilePath"]=$validatePath["path"];$result["fileInfo"]["createdFileName"]=$validatePath["fileName"];}#else end#設定要寫入或複寫的檔案$fileopenResult=fopen($conf["fileName"],$conf["writeMethod"]);#如果 $fileopenResult 等於 FALSEif($fileopenResult==FALSE){#設置錯誤識別$result["status"]="false";#代表打開檔案失敗$result["error"][]="檔案".$conf["fileName"]."開啟失敗";#回傳結果return $result;}#if end#將資料寫入到檔案裡面$fwriteResult=fwrite($fileopenResult,$conf["inputString"]);#如果 $fwriteResult 等於 FALSEif($fwriteResult!=0 && $fwriteResult==FALSE){#設置錯誤識別$result["status"]="false";#代表檔案寫入失敗$result["error"][]="檔案".$conf["fileName"]."寫入失敗";#回傳結果return $result;}#if end#存檔並關閉檔案$fcloseResult=fclose($fileopenResult);#如果 $fcloseResult 等於 FALSEif($fcloseResult==FALSE){#設置錯誤識別$result["status"]="false";#代表檔案寫入失敗$result["error"][]="檔案".$conf["fileName"]."儲存失敗";#回傳結果return $result;}#if end#檢查用來寫入的檔案是否存在#函式說明:檢查多個檔案與資料夾是否存在#回傳的結果:#$result["varName"][$i],爲第$i個變數的名稱。#$result["varExist"][$i],爲第$i個變數是否存在,true代表存在,false代表不存在。#必填參數:$conf["fileAccess::checkMutiFileExist"]["fileArray"]=array($conf["fileName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false".$conf["fileAccess::checkMutiFileExist"]["web"]=$conf["web"];#參考資料來源:#http:#php.net/manual/en/function.file-exists.php#http:#php.net/manual/en/control-structures.foreach.php$fileAccess["checkMutiFileExist"]=fileAccess::checkMultiFileExist($conf["fileAccess::checkMutiFileExist"]);unset($conf["fileAccess::checkMutiFileExist"]);#如果檢查檔案是否存在失敗if($fileAccess["checkMutiFileExist"]["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息陣列$result["error"]=$fileAccess["checkMutiFileExist"];#回傳結果return $result;}#if end#如果$fileAccess["checkMutiFileExist"]["varExist"][0] 等於 "false"if($fileAccess["checkMutiFileExist"]["varExist"][0]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$fileAccess["checkMutiFileExist"];#設置錯誤訊息陣列$result["error"][]="愈建立的檔案不存在";#回傳結果return $result;}#if end#函式說明:#依據取得檔案的擁有着資訊#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],檔案擁有着資訊.#$result["content"],檔案資訊陣列.#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.#$result["content"]["ownerPerm"],檔案擁有者權限資訊.#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.#$result["content"]["ownerName"],檔案擁有着資訊.#$result["content"]["groupName"],檔案所屬擁有着資訊.#$result["content"]["size"],檔案大小.#$result["content"]["modifyDate"],檔案變更年月日.#$result["content"]["modifyTime"],檔案變更時分秒.#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.#必填參數:#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];#$conf["file"],字串,要查看擁有者資訊的檔案.$conf["fileAccess::fileInfo"]["file"]=$conf["fileName"];#可省略參數:#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".#$conf["fileToRead"]="help";#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".#$conf["output"]="help.html";#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false".$conf["fileAccess::fileInfo"]["web"]=$conf["web"];#參考資料:#fileowner=>http://php.net/manual/en/function.fileowner.php#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);unset($conf["fileAccess::fileInfo"]);#如果取得檔案資訊失敗if($fileInfo["status"]==="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$fileInfo;#回傳結果return $result;}#if end#取得檔案的擁有者名稱$fileOwner=$fileInfo["content"]["ownerName"];#執行php的帳戶$runner=csInformation::runner();#如果執行php的使用者等於檔案的擁有者名稱或為rootif($runner===$fileOwner || $runner==="root"){#改變檔案的權限為0770chmod($conf["fileName"],0770);}#if end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function writeTextIntoFile end/*#函式說明:#一次建立多個檔案,並寫入內容.#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["content"][i],實際上寫入的第$i+1個檔案資訊陣列.#$result["content"][i]["createdFileName"],第$i+1個建立好的檔案名稱.#$result["content"][i]["createdFilePath"],第$i+1個檔案建立的路徑.#$result["content"][i]["createdFilePathAndName"].第$i+1個建立好的檔案名稱與路徑.#$result["argu"],使用的參數.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#$conf["fileName"],字串陣列,爲要寫入的多個檔案名稱$conf["fileName"]=array("");#可省略參數:#$conf["inputString"],字串陣列,爲要寫入到各別檔案裏面的內容,預設每個元素為空字串.#$conf["inputString"]=array("");#參考資料:#無.#備註:#無.*/public static function writeMultiFile(&$conf){#初始化要回傳的變數$result=array();#初始化當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileName");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("inputString");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("fileName","inputString");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果沒有設定要個別寫入的內容if(!isset($conf["inputString"])){#針對每個檔案名稱for($i=0;$i<count($conf["fileName"]);$i++){#建立空的 $conf["inputString"]$conf["inputString"][$i]="";}#for end}#if end#針對每個要寫入的檔案foreach($conf["fileName"] as $index => $file2writre){#取得要寫入的內容$content2writre=$conf["inputString"][$index];#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["fileInfo"],實際上寫入的檔案資訊陣列.#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.#$result["argu"],使用的參數.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.$conf["fileAccess::writeTextIntoFile"]["fileName"]=$file2writre;#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".$conf["fileAccess::writeTextIntoFile"]["inputString"]=$content2writre;#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.#$conf["writeMethod"]="a";#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.#$conf["checkRepeat"]="";#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.#$conf["filenameExtensionStartPoint"]="";#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.#$conf["repeatNameRule"]="";#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess::writeTextIntoFile"]["web"]="false";#備註:#無.$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);unset($conf["fileAccess::writeTextIntoFile"]);#如果建立檔案失敗if($writeTextIntoFile["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$writeTextIntoFile;#回傳結果return $result;}#if end#設置建立好的檔案資訊$result["content"][]=$writeTextIntoFile["fileInfo"];}#foreach end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function writeMultiFile end/*#函式說明:#將多行字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行函數的名稱.#必填參數:#$conf["fileName"],字串,爲要編輯的檔案名稱$conf["fileName"]="";#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。$conf["inputString"]=array("");#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#參考資料:#無.#備註:#無.*/public static function writeMultiLine(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileName","inputString","fileArgu");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck.isexistMulti"]["variableType"]=array("string","array","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);unset($conf["variableCheck.isexistMulti"]);#如果檢查失敗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#檢查可省略參數#函式說明:#檢查一包含數個可省略變數的陣列變數,其型態是否正確,省略掉的陣列變數可以直接給定預設值。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],參數是否都通過檢查,"true",代表有通過檢查,"false"代表沒有通過檢查。#必填參數:#$conf["variableCheck.checkSkipableVarType"]["checkedVar"],陣列,要檢查的變數陣列名稱為?$conf["variableCheck.checkSkipableVarType"]["checkedVar"]=$conf;#$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"],字串陣列,要檢查型態是否設定正確的變數名稱陣列.$conf["variableCheck.checkSkipableVarType"]["sikpableVarNameArray"]=array("writeMethod");#$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"],字串陣列,要檢查的每個變數,其型態應該要為何?$conf["variableCheck.checkSkipableVarType"]["skipableVarTypeArray"]=array("string");#$argu,要直接存取的陣列變數名稱,變數前面加上「&」,如果要在別的函式裡面使用本函式,請記得將變動過結果($argu)給使用該函式的設定變數(通常是$conf=$argu).$argu=&$conf;#可省略參數:#$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"],字串陣列,每個不存的變數要初始化為什麼,"null"代表不指定.$conf["variableCheck.checkSkipableVarType"]["skipableVarDefaultValue"]=array("w");#無$checkResult=variableCheck::checkSkipableVarType($conf["variableCheck.checkSkipableVarType"],$argu);unset($conf["variableCheck.checkSkipableVarType"]);#如果檢查不通過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#初始化第一次寫入識別變數$firstTimeToWrite="true";#有幾行字要寫就執行幾次foreach($conf["inputString"] as $inputStr){#附加 "\r\n"$inputStr=$inputStr.PHP_EOL;#如果是第一次寫入if($firstTimeToWrite=="true"){#如果是要重新寫入if($conf["writeMethod"]=="w"){#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess.writeTextIntoFile"]["fileName"]=$conf["fileName"];#爲要編輯的檔案名稱$conf["fileAccess.writeTextIntoFile"]["inputString"]=$inputStr;#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess.writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess.writeTextIntoFile"]["web"]="false";$writeStatus=fileAccess::writeTextIntoFile($conf["fileAccess.writeTextIntoFile"]);unset($conf["fileAccess.writeTextIntoFile"]);#如果寫入失敗if($writeStatus["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置執行錯誤訊息$result["error"]=$writeStatus;#回傳結果return $result;}#if end}#if end#反之不是重新寫入,而是附加寫入。else{#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess.writeTextIntoFile"]["fileName"]=$conf["fileName"];#爲要編輯的檔案名稱$conf["fileAccess.writeTextIntoFile"]["inputString"]=$inputStr;#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess.writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess.writeTextIntoFile"]["web"]="false";$writeStatus=fileAccess::writeTextIntoFile($conf["fileAccess.writeTextIntoFile"]);unset($conf["fileAccess.writeTextIntoFile"]);#如果寫入失敗if($writeStatus["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置執行錯誤訊息$result["error"]=$writeStatus;#回傳結果return $result;}#if end}#else end#將之設為不是第一次寫入$firstTimeToWrite="false";}#if end#反之不是第一次寫入else{#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess.writeTextIntoFile"]["fileName"]=$conf["fileName"];#爲要編輯的檔案名稱$conf["fileAccess.writeTextIntoFile"]["inputString"]=$inputStr;#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess.writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess.writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess.writeTextIntoFile"]["web"]="false";$writeStatus=fileAccess::writeTextIntoFile($conf["fileAccess.writeTextIntoFile"]);unset($conf["fileAccess.writeTextIntoFile"]);#如果寫入失敗if($writeStatus["status"]=="false"){#設置執行錯誤$result["status"]="false";#設置執行錯誤訊息$result["error"]=$writeStatus;#回傳結果return $result;}#if end}#else end}#foreach end#執行到這邊代表一切正常$result["status"]="true";#回傳結果return $result;}#function writeMultiLine end/*#函式說明:#依據行號分隔抓取檔案的內容,結果會回傳一個陣列#回傳的變數說明:#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.#$result["error"],錯誤訊息提示.#$result["warning"],警告訊息.#$result["function"],當前執行的函數名稱.#$result["fileContent"],爲檔案的內容陣列.#$result["lineCount"],爲檔案內容總共的行數.#$result["fullContent"],為檔案的完整內容.#$result["base64data"],為檔案的base64內容.#$result["mimeType"],為檔案的mime type.#必填參數:#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.$conf["filePositionAndName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["web"],是要取得網路上的檔案則為"true";反之預設為"false".#$conf["web"]="true";#$conf["createIfnotExist"],字串,預設為"false"代表檔案不存在也不需要建立;反之為"true".#$conf["createIfnotExist"]="false";#$conf["autoDeleteSpaceOnEachLineStart"],字串,預設為"false",不做額外處理;反之為"true"#$conf["autoDeleteSpaceOnEachLineStart"]="false";#參考資料:#file(),取得檔案內容的行數.#file=>http:#php.net/manual/en/function.file.php#rtrim(),剔除透過file()取得每行內容結尾的換行符號.#filesize=>http://php.net/manual/en/function.filesize.php#參考資料:#無.#備註:#無.*/public static function getFileContent($conf){#初始化要回傳的內容$result=array();#取得當前執行函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],執行不正常結束的錯訊息陣列.#$result["simpleError"],簡單表示的錯誤訊息.#$result["function"],當前執行的函式名稱.#$result["argu"],設置給予的參數.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可省略參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePositionAndName","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$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["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("createIfnotExist","web","autoDeleteSpaceOnEachLineStart");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","false","false");#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".#$conf["disallowAllSkipableVarIsEmpty"]="";#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".#$conf["disallowAllSkipableVarIsEmptyArray"]="";#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".#$conf["disallowAllSkipableVarNotExist"]="";#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料:#array_keys=>http://php.net/manual/en/function.array-keys.php#備註:#無.$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查出錯if($checkArguments["status"]==="false"){#設置執行錯誤識別$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果檢查參數不通過if($checkArguments["passed"]==="false"){#設置執行錯誤識別$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#檢查檔案是否存在#函式說明:檢查多個檔案與資料夾是否存在#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($conf["filePositionAndName"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".$conf["fileAccess"]["checkMutiFileExist"]["disableWebSearch"]="true";#如果有設置 $conf["web"]if(isset($conf["web"])){#設置 web 參數.$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];}#if end#參考資料來源:#http:#php.net/manual/en/function.file-exists.php#http:#php.net/manual/en/control-structures.foreach.php$fileCheckResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);unset($conf["fileAccess"]["checkMutiFileExist"]);#如果檢查檔案是否存在出錯if($fileCheckResult["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置執行錯誤訊息$result["error"]=$fileCheckResult;#回傳結果return $result;}#if end#如果該檔案不存在if($fileCheckResult["varExist"][0]=="false"){#如果也不要自動建立檔案if($conf["createIfnotExist"]==="false"){#設置執行錯誤識別$result["status"]="false";#設置執行錯誤訊息$result["error"]=$fileCheckResult;#設置易讀的錯誤訊息$result["error"][]="名為".$fileCheckResult["varName"][0]."的檔案不存在";#回傳結果return $result;}#if end#執行到這邊代表需要建立該檔案#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["fileInfo"],實際上寫入的檔案資訊陣列.#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.#$result["argu"],使用的參數.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.$conf["fileAccess::writeTextIntoFile"]["fileName"]=$fileCheckResult["varNameFullPath"][0];#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".$conf["fileAccess::writeTextIntoFile"]["inputString"]="";#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.#$conf["checkRepeat"]="";#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.#$conf["filenameExtensionStartPoint"]="";#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.#$conf["repeatNameRule"]="";#如果有設置 $conf["web"]if(isset($conf["web"])){#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess::writeTextIntoFile"]["web"]=$conf["web"];}#if end#參考資料:#無.#備註:#無.$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);unset($conf["fileAccess::writeTextIntoFile"]);#如果建立檔案失敗if($writeTextIntoFile["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置執行錯誤訊息$result["error"]=$writeTextIntoFile;#回傳結果return $result;}#if end}#if end#file absolute addr$fileAbAddr=$fileCheckResult["varNameFullPath"][0];#將檔案的內容放進變數裡面(會得到陣列)$fileContent=file($fileAbAddr);#如果 $fileContent 等於if($fileContent==FALSE){#如果檔案大小為0bytesif(filesize($fileAbAddr)==0){#設置錯誤識別$result["warning"][]="執行結果沒有輸出內容";}#if end#反之檔案有內容else{#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="讀取檔案失敗";#回傳結果return $result;}#else end}#if end#針對每行內容for($i=0;$i<count($fileContent);$i++){#剔除字串尾的換行符號$fileContent[$i]=rtrim($fileContent[$i]);#如果要移除開頭的空白if($conf["autoDeleteSpaceOnEachLineStart"]==="true"){#如果開頭是空格while(strpos($fileContent[$i]," ")===0){#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$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"]=$fileContent[$i];#$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"]=$delStrBeforeKeyWord;#回傳結果return $result;}#if end#取得剔除開頭空格後的內容$fileContent[$i]=$delStrBeforeKeyWord["content"];}#while end}#if end}#for end#取得總共有幾行$lineCount=count($fileContent);#將檔案內容的陣列放進 $result 陣列變數裏面$result["fileContent"]=$fileContent;#建立暫存檔案$tmpFile=tempnam("/tmp", "qbpwcf");#讀取要取得的檔案內容$content=file_get_contents($fileAbAddr);#debug#var_dump(__FILE__,__LINE__,$content);#開啟暫存檔案(寫入模式)$file=fopen($tmpFile,'w');#寫入讀取到的內容fwrite($file,$content);#關閉暫存檔案fclose($file);#取得檔案的 mime 類型$mimeType=mime_content_type($tmpFile);#設置檔案的mime類型$result["mimeType"]=$mimeType;#取得檔案的內容為字串$result["fullContent"]=file_get_contents($tmpFile);#debug#var_dump(__FILE__,__LINE__,$result["fullContent"]);#取得檔案的base64data$result["base64data"]="data:".$result["mimeType"].";base64,".base64_encode($result["fullContent"]);#移除暫存檔案unlink($tmpFile);#將檔案內容的行數放進 $result 陣列變數裏面$result["lineCount"]=$lineCount;#執行到這邊代表執行成功$result["status"]="true";#回傳結果return $result;}#function getFileContent end/*#函式說明:#依據逗號分隔抓取檔案的內容,結果會回傳一個陣列#回傳結果:#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.#$result["error"],錯誤訊息提示.#$result["function"],函數名稱.#$result["lineCount"]爲總共有幾行#$result["lineContent"][i]["dataCounts"],爲第 i+1 行總共有幾個字串#$result["lineContent"][0][i],爲第1行第 i+1 個分割好的字串#$result["lineContent"][1][i],爲第2行第 i+1 個分割好的字串#必填參數:#$conf["filePositionAndName"],字串,要抓取的檔案位置與名稱$conf["filePositionAndName"]="";#可省略參數:#$conf["spiltSign"],字串,爲要用來分割字串的符號,可省略,預設爲「,」#$conf["spiltSign"]="";#參考資料:#無.#備註:#無.*/public static function getFileContentSpiltBySomething($conf){#初始化要回傳的內容$result=array();#取得當前執行函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#如果 $conf["spiltSign"] 爲空,則預設爲","。if(!isset($conf["spiltSign"])){$conf["spiltSign"]=",";}#if end#依據行號抓取所有的內容#函式說明:#依據行號分隔抓取檔案的內容,結果會回傳一個陣列#回傳的變數說明:#$result["fileContent"],爲檔案的內容陣列#$result["lineCount"],爲檔案內容總共的行數#必填參數:$conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["filePositionAndName"];#爲檔案的位置以及名稱#參考資料:#file():取得檔案內容的行數#http:#php.net/manual/en/function.file.php$fileContent=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);unset($conf["fileAccess"]["getFileContent"]);#如果取得檔案內容失敗if($fileContent["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$fileContent;#回傳結果return $result;}#if end#迴圈,有幾行資料就執行幾次for($i=0;$i<$fileContent["lineCount"];$i++){#將該行內容用逗號分隔$conf["stringProcess"]["spiltString"]["stringIn"]=$fileContent["fileContent"][$i];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]=$conf["spiltSign"];#爲以哪個符號作爲分割$lineSpiltResult[$i]=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果分割字串失敗if($lineSpiltResult[$i]["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$lineSpiltResult[$i];#回傳結果return $result;}#if end}#for end#取得$result["lineContent"]=$lineSpiltResult;#取得資料的行數$result["lineCount"]=$fileContent["lineCount"];#回傳結果return $result;}#function getFileContentSpiltBySomething end/*#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileArray"]=array();#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".#$conf["web"]="true";#參考資料:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑#$result["varName"][$i]結果未實作*/public static function checkMultiFileExist(&$conf){#初始化要回傳的變數$result=array();#設置當前執行的涵式$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArray","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("disableWebSearch","userDir","web");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true","true","true");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#初始化儲存每個檔案是否存在的陣列變數$result["varName"]=array();$result["varExist"]=array();#針對每個要檢查的檔案foreach($conf["fileArray"] as $i=>$varName){#儲存要判斷是否存在的物件$result["varName"][]=$varName;#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$varName;#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];#備註:#建構中,fileSystemRelativePosition尚未實作.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);#如果轉換成絕對路徑失敗if($getInternetAddressV2["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#傳參考$getInternetAddress=&$getInternetAddressV2;#如果沒有檔案的絕對路徑位置if(!isset($getInternetAddress["fileSystemAbsoulutePosition"])){#置換成給予的參數網址$conf["fileArray"][$i]=$getInternetAddress["content"];#設置無法從檔案系統找到$exist=FALSE;}#if end#反之取得else{#轉換好的絕對路徑$conf["fileArray"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];#判斷該檔案是否存在$exist=file_exists($conf["fileArray"][$i]);#如果不存在或是指向不存在目標的連結if($exist===false){#判斷是否為軟連結$exist=is_link($conf["fileArray"][$i]);}#if end`}#else end#如果 $exist 等於 false (檔案不存在) 且 沒有停用網路搜尋功能if($exist===FALSE && $conf["disableWebSearch"]==="false"){#將目標轉換成網址#函式說明:#將檔案的位置名稱變成網址#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],網址.#必填參數:#$conf["address"],字串,檔案的相對位置.$conf["fileAccess::getInternetAddress"]["address"]=$conf["fileArray"][$i];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];$getInternetAddress=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddress"]);unset($conf["fileAccess::getInternetAddress"]);#如果轉換失敗if($getInternetAddress["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getInternetAddress;#回傳結果return $result;}#if end#函式說明:#運行curl cmd#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],取得的回應內容.#$result["cookie"],cookie檔案的位置與名稱.#$result["cmd"],執行的command.#$result["argu],使用的參數.#必填參數:#$conf["url"],字串,目標url.$conf["catchWebContent::curlCmd"]["url"]=$getInternetAddress["content"];#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["catchWebContent::curlCmd"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$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#反之檔案存在網路上else{#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面$result["varName"][$i]=$getInternetAddress["content"];#如果存在檔案路徑的絕對位置if(isset($getInternetAddress["fileSystemAbsoulutePosition"])){#設置該檔案的絕對路徑位置$result["varNameFullPath"][$i]=$getInternetAddress["fileSystemAbsoulutePosition"];}#if end#反之代表輸入參數是網址else{#設置該檔案的網址$result["varNameWebPath"][$i]=$getInternetAddress["content"];}#else end#設置有無找到的識別$result["varExist"][$i]=$curlCmd["founded"];}#else end}#if end#反之檔案不存在,且停用網路搜尋.else if($exist===FALSE){#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面$result["varName"][$i]=$conf["fileArray"][$i];$result["varNameFullPath"][$i]=$conf["fileArray"][$i];$result["varExist"][$i]="false";#設置全部檔案都存在的識別變數為 "false"$result["allExist"]="false";}#if end#反之代表檔案存在else{#將該檔案的路徑名稱與是否存在的訊息儲存到 $result 陣列變數裏面$result["varNameFullPath"][$i]=$conf["fileArray"][$i];#如果 web 參數為 "true"if($conf["web"]==="true"){#設置網路上的位置$result["varNameWebPath"][$i]=$getInternetAddress["content"];}#if end$result["varExist"][$i]="true";}#else end}#foreach end#如果所有檔案與資料夾都找到的識別變數不存在if(!isset($result["allExist"])){#設置全部檔案與資料夾都有找到$result["allExist"]="true";}#if end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function checkMutiFileExist/*#函式說明:#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.#回傳結果:#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["argu"],使用的參數.#$result["createdFileName"],建立好的檔案名稱.#$result["createdFilePath"],檔案建立的路徑.#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.#必填參數:#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑$conf["checkedFileAndPath"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點.#$conf["filenameExtensionStartPoint"]="";#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)".#$conf["repeatNameRule"]="";#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".#$conf["web"]="false";#參考資料:#無.#備註:#如果要在/tmp底下建立檔案,若在apache環境下則會被作業系統特殊處理,即不等於實際上的路徑.*/public static function createFileAfterCheck(&$conf){#初始化要回傳的結果$result=array();#設置當前執行的涵式$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","checkedFileAndPath");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("filenameExtensionStartPoint","repeatNameRule","web");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("1","(\$i)","false");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#確保要建立檔案的路徑#函式說明:#確保路徑存在.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["path"],建立好的路徑字串.#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.#必填參數:#$conf["path"],要檢查的路徑$conf["fileAccess::validatePath"]["path"]=$conf["checkedFileAndPath"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".$conf["fileAccess::validatePath"]["haveFileName"]="true";#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.#$conf["dirPermission"]="";$conf["fileAccess::validatePath"]["web"]=$conf["web"];$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);unset($conf["fileAccess::validatePath"]);#debug#var_dump($validatePath);#exit;#如果確保路徑失敗if($validatePath["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$validatePath;#回傳結果return $result;}#if end#取得要建立的檔案名稱$createdFileName=$validatePath["fileName"];#取得要建立的路徑$createdFilePath=$validatePath["path"];#透過無窮迴圈嘗試建立不同編號的檔案for($i=0;$i>-1;$i++){#如果 $i 為 0if($i==0){#檢查該檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);unset($conf["fileAccess"]["checkMutiFileExist"]);#debug#var_dump($checkResult);#exit;#如果檢查檔案是否存在失敗if($checkResult["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $createFilePath.$createdFileName 檔案存在if($checkResult["varExist"][0]=="true"){#跳過這次迴圈continue;}#if end#反之代表 $createFilePath.$createdFileName 檔案不存在else{#嘗試建立該檔案#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $fileCreateResult["status"] 等於 "true"if($fileCreateResult["status"]=="true"){#代表檔案建立成功#更新建立的檔案名稱$result["createdFileName"]=$createdFileName;#設置新建立的檔案名稱與路徑$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];#設置新建立的檔與路徑$result["createdFilePath"]=$createdFilePath;#跳出迴圈break;}#if end#反之代表檔案建立失敗else{#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$fileCreateResult;#回傳結果return $result;}#else end}#else end}#if end#反之代表有相同檔名存在else{#用「.」分割檔案名稱#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$createdFileName;#要處理的字串。$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#初始化儲存建立的檔案名稱$createdFileName="";#初始化儲存編號的變數$no="";#如果沒有dot存在if($spiltString["found"]=="false"){#解析 $conf["repeatNameRule"],用 \$i 分割.#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割#可省略參數:#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割檔案名稱失敗if($noString["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$noString;#回傳結果return $result;}#if end#如果 編號規則字串 分割出來的段數為2if($noString["dataCounts"]==2){#組合編號$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];}#if end#反之 號規則字串 分割出來的段數為1else if($noString["dataCounts"]==1){#判斷 "\$i" 在開頭或結尾#函式說明:#取得關鍵字在字串的哪個位置#回傳結果:#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["argu"],傳入的參數.#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.#必填參數:#$conf["inputStr"],字串,被搜尋的字串.$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];#$conf["keyWord"],字串,關鍵字.$conf["search::findKeyWordPosition"]["keyWord"]="\$i";#參考資料:#http://php.net/manual/en/function.strpos.php$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);unset($conf["search::findKeyWordPosition"]);#如果取得關鍵字位置失敗if($findKeyWordPosition["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWordPosition;#回傳結果return $result;}#if end#如果關鍵字在開頭if($findKeyWordPosition["head"]=="true"){#組合編號$no=$i.$noString["dataArray"][0];}#if end#反之如果關鍵字在結尾else if($findKeyWordPosition["tail"]=="true"){#組合編號$no=$noString["dataArray"][0].$i;}#if end#其他情況else{#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWordPosition;#設置額外的錯誤訊息$result["error"][]="非預期的結果";#回傳結果return $result;}#else end}#if end#反之 編號規則字串 分割出來的段數為0else if($noString["dataCounts"]==0){#組合編號$no=$j;}#if end#其他結果else{#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$noString;#設置額外的錯誤訊息$result["error"][]="非預期的結果";#回傳結果return $result;}#else end#串接編號到檔案名稱上$createdFileName=$validatePath["fileName"].$no;}#if end#反之有dot存在else{#依據 $spiltString["dataCounts"] 值來組裝新的檔案名稱for($j=0;$j<$spiltString["dataCounts"];$j++){#如果是副檔名的前一段內容if(($conf["filenameExtensionStartPoint"]+1)==($spiltString["dataCounts"]-$j)){#解析 $conf["repeatNameRule"],用 \$i 分割.#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["repeatNameRule"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="\$i";#爲以哪個符號作爲分割#可省略參數:#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.$conf["stringProcess::spiltString"]["allowEmptyStr"]="false";$noString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割檔案名稱失敗if($noString["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$noString;#回傳結果return $result;}#if end#如果 編號規則字串 分割出來的段數為2if($noString["dataCounts"]==2){#組合編號$no=$noString["dataArray"][0].$i.$noString["dataArray"][1];}#if end#反之 號規則字串 分割出來的段數為1else if($noString["dataCounts"]==1){#判斷 "\$i" 在開頭或結尾#函式說明:#取得關鍵字在字串的哪個位置#回傳結果:#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["argu"],傳入的參數.#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.#必填參數:#$conf["inputStr"],字串,被搜尋的字串.$conf["search::findKeyWordPosition"]["inputStr"]=$conf["repeatNameRule"];#$conf["keyWord"],字串,關鍵字.$conf["search::findKeyWordPosition"]["keyWord"]="\$i";#參考資料:#http://php.net/manual/en/function.strpos.php$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);unset($conf["search::findKeyWordPosition"]);#如果取得關鍵字位置失敗if($findKeyWordPosition["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWordPosition;#回傳結果return $result;}#if end#如果關鍵字在開頭if($findKeyWordPosition["head"]=="true"){#組合編號$no=$i.$noString["dataArray"][0];}#if end#反之如果關鍵字在結尾else if($findKeyWordPosition["tail"]=="true"){#組合編號$no=$noString["dataArray"][0].$i;}#if end#其他情況else{#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWordPosition;#設置額外的錯誤訊息$result["error"][]="非預期的結果";#回傳結果return $result;}#else end}#if end#反之 編號規則字串 分割出來的段數為0else if($noString["dataCounts"]==0){#組合編號$no=$j;}#if end#其他結果else{#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$noString;#設置額外的錯誤訊息$result["error"][]="非預期的結果";#回傳結果return $result;}#else end#串接編號到檔案名稱上$createdFileName=$createdFileName.$spiltString["dataArray"][$j].$no;#如果不是最後一段if($j!=$spiltString["dataCounts"]-1){#串接並加上 dot$createdFileName=$createdFileName.".";}#if end}#if end#反之如果不是最後一段else if($j!=$spiltString["dataCounts"]-1){#串接並加上 dot$createdFileName=$createdFileName.$spiltString["dataArray"][$j].".";}#if end#反之是最後一段else{#串接並加上 dot$createdFileName=$createdFileName.$spiltString["dataArray"][$j];}#else end}#for end}#else end#檢查加上編號的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess"]["checkMutiFileExist"]["fileArray"]=array($createdFilePath."/".$createdFileName);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess"]["checkMutiFileExist"]["fileArgu"]=$conf["fileArgu"];#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php$conf["fileAccess"]["checkMutiFileExist"]["web"]=$conf["web"];$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess"]["checkMutiFileExist"]);unset($conf["fileAccess"]["checkMutiFileExist"]);#如果檢查檔案是否存在失敗if($checkResult["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["varExist"][0] 等於 "true"if($checkResult["varExist"][0]=="true"){#取得要建立的檔案名稱$createdFileName=$validatePath["fileName"];#跳到下個迴圈continue;}#if end#反之代表 $createFilePath.$createdFileName."(".$i.")" 檔檔案不存在else{#嘗試建立該檔案#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#必填參數:$conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$createdFilePath."/".$createdFileName;#爲要編輯的檔案名稱$conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。$conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:$conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。$conf["fileAccess"]["writeTextIntoFile"]["web"]=$conf["web"];$fileCreateResult=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);unset($conf["fileAccess"]["writeTextIntoFile"]);#如果 $fileCreateResult["status"] 等於 "true"if($fileCreateResult["status"]=="true"){#代表檔案建立成功#更新建立的檔案名稱$result["createdFileName"]=$createdFileName;#跳出迴圈break;}#if end#反之代表檔案建立失敗else{#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$fileCreateResult;#回傳結果return $result;}#else end}#else end}#else end}#for end#如果不存在建立的檔案名稱if(!isset($result["createdFileName"])){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="建立的檔案名稱不存在";#回傳結果return $result;}#if end#執行到這邊代表執行成功$result["status"]="true";#設置新建立的檔案名稱與路徑$result["createdFilePathAndName"]=$createdFilePath."/".$result["createdFileName"];#設置新建立的檔與路徑$result["createdFilePath"]=$createdFilePath;#回傳結果return $result;}#fucntion createFileAfterCheck end/*#函式說明:#將檔案內容清空#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列#必填參數:#$conf["fileAddr"],字串,要清空的檔案位置與名稱.$conf["fileAddr"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["web"],"true"代表為網頁系統,"false"代表檔案系統,預設為"false".#$conf["web"]="false";#參考資料:#無.#備註:#無.*/public static function emptyFile(&$conf){#初始化要回傳的結果$result=array();#設置當前執行的涵式$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddr");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["fileAddr"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];#備註:#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);#如果確保路徑失敗if($getInternetAddressV2["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#更新檔案路徑$conf["fileAddr"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];#確保要建立檔案的路徑#函式說明:#確保路徑存在.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["path"],建立好的路徑字串.#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.#必填參數:#$conf["path"],要檢查的路徑$conf["fileAccess::validatePath"]["path"]=$conf["fileAddr"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::validatePath"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".$conf["fileAccess::validatePath"]["haveFileName"]="true";#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.#$conf["dirPermission"]="";#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::validatePath"]["web"]="false";$validatePath=fileAccess::validatePath($conf["fileAccess::validatePath"]);unset($conf["fileAccess::validatePath"]);#如果確保路徑失敗if($validatePath["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$validatePath;#回傳結果return $result;}#if end#清空檔案#函式說明:#將字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["fileInfo"],實際上寫入的檔案資訊陣列.#$result["fileInfo"]["createdFileName"],建立好的檔案名稱.#$result["fileInfo"]["createdFilePath"],檔案建立的路徑.#$result["fileInfo"]["createdFilePathAndName"].建立好的檔案名稱與路徑.#$result["argu"],使用的參數.#必填參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["fileName"],字串,爲要編輯的檔案名稱,預設為隨機產生的檔案名稱.#$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];$conf["fileAccess::writeTextIntoFile"]["fileName"]=$validatePath["path"]."/".$validatePath["fileName"];;#$conf["inputString"],字串,爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可,預設為"".#$conf["inputString"]="";#$conf["writeMethod"],字串,爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入.#$conf["writeMethod"]="a";#$conf["checkRepeat"],字串,"true"代表建立檔案之前要先檢查檔案是否存在,若存在則在原名稱後面加上從(1)開始的編號.#$conf["checkRepeat"]="";#$conf["filenameExtensionStartPoint"],字串,檔案的副檔名是從倒數第幾個小數點(dot)開始,預設為"1",最後一個小數點,必須與$conf["checkRepeat"]搭配才會生效.#$conf["filenameExtensionStartPoint"]="";#$conf["repeatNameRule"],字串,遇到相同名稱的檔案要如何加上識別的編號,編號用「\$i」表示,預設為"(\$i)",必須與$conf["checkRepeat"]搭配才會生效.#$conf["repeatNameRule"]="";#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::writeTextIntoFile"]["web"]="false";$writeTextIntoFile=fileAccess::writeTextIntoFile($conf["fileAccess::writeTextIntoFile"]);unset($conf["fileAccess::writeTextIntoFile"]);#如果確保路徑失敗if($writeTextIntoFile["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$writeTextIntoFile;#回傳結果return $result;}#if end#設置執行正常$result["status"]="true";#儲存建立的結果$result["content"]=$writeTextIntoFile;#回傳結果return $result;}#function emptyFile end/*#函式說明:#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#必填參數:#$conf["dirPositionAndName"]="";#新建的位置與名稱$conf["dirPositionAndName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.#$conf["dirPermission"]="";#參考資料:#mkdir=>http://php.net/manual/en/function.mkdir.php#chmod=>http://php.net/manual/en/function.chmod.php#參考資料:#無.#備註:#同 function createFolderAfterCheck.*/public static function createNewFolder(&$conf){/*#函式說明:#檢查要建立的檔案路徑是否存在,若不存在則建立新檔案,若檔案已存在則會在原檔名後面加上從(1)開始的編號,再度嘗試建立檔案,以避免資料異常.#回傳的結果:#$result["status"],執行狀態,"true"代表執行正常,"false"代表執行失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["createdFileName"],建立好的檔案名稱.#$result["createdFilePath"],檔案建立的路徑.#$result["createdFilePathAndName"].建立好的檔案名稱與路徑.#必填參數:#$conf["checkedFileAndPath"],字串陣列,要建立的檔案路徑$conf["checkedFileAndPath"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;*/return fileAccess::createFolderAfterCheck($conf);unset($conf);}#function createNewFolder end/*#函式說明:#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#$result["argu"],使用的參數.#$result["content"],建立的目錄路徑.#必填參數:#$conf["dirPositionAndName"]="";#新建的位置與名稱$conf["dirPositionAndName"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.#$conf["dirPermission"]="";#$conf["web"],"false"代表在檔案系統環境,"true"代表在網頁稀系統環境.#$conf["web"]="false";#參考資料:#mkdir=>http://php.net/manual/en/function.mkdir.php#chmod=>http://php.net/manual/en/function.chmod.php#備註:#無.*/public static function createFolderAfterCheck(&$conf){#初始化要回傳的結果$result=array();#初始化警告訊息陣列$result["warning"]=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","dirPositionAndName");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("dirPermission","web");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("0770","false");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]==="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]==="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$checkArguments;#回傳結果return $result;}#if end#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["dirPositionAndName"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];#備註:#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);#如果 $getInternetAddressV2["status"] 等於 "false"if($getInternetAddressV2["status"]==="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#取得絕對位置$conf["dirPositionAndName"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];#用「/」分割要建立的路徑#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["dirPositionAndName"];$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割失敗if($spiltString["status"]=="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$spiltString;#回傳結果return $result;}#if end$checkedPath="";#依據切割成的路徑片段數目for($i=0;$i<$spiltString["dataCounts"];$i++){$checkedPath=$checkedPath."/".$spiltString["dataArray"][$i];#檢查路徑是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($checkedPath);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);#如果檢查資料夾路徑失敗if($checkMultiFileExist["status"]=="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$spiltString;#回傳結果return $result;}#if end#如果目錄不存在if($checkMultiFileExist["allExist"]=="false"){#如果有這個名稱的東西存在if(file_exists($checkedPath)){#如果目錄存在if(is_dir($checkedPath)){#目錄已經存在換下一層continue;}#if end}#if end#建立目錄$mkdir=@mkdir($checkedPath,0770);#如果建立目錄失敗#參考資料:#http://php.net/manual/en/function.mkdir.phpif($mkdir===false){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"][]="建立目錄「".$checkedPath."」失敗";#回傳結果return $result;}#if end#更改目錄的權限為 0770chmod($checkedPath,0770);}#if end}#for end#取得建立好的目錄$result["content"]=$checkedPath;#執行到這邊代表執行成功$result["status"]="true";#回傳結果return $result;}#function createFolderAfterCheck end/*#函式說明:#移除檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息陣列.#$result["function"],當前執行的函數名稱.#$result["argu"],當前函式使用的參數.#必填參數:#$conf["fileAddress"],字串,要移除檔案的位置.$conf["fileAddress"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.#$conf["allowDelSymlink"]="true";#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.#$conf["allowDelFolder"]="true";#參考資料:#無.#備註:#無.*/public static function delFile(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","allowDelSymlink","allowDelFolder");#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");#$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#如果 $conf["commentsArray"] 有設定if(isset($conf["commentsArray"])){#印出提示文字#函式說明:#印出多行文字,結尾自動換行.#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#必填參數:#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);unset($conf["cmd::echoMultiLine"]);#如果印出提示文字失敗if($echoMultiLine["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$echoMultiLine;#回傳結果return $result;}#if end}#if end#檢查要移除的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess.checkMultiFileExist"]["fileArray"]=array($conf["fileAddress"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$conf["fileAccess.checkMultiFileExist"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess.checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".$conf["fileAccess.checkMultiFileExist"]["web"]="false";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php$checkResult=fileAccess::checkMultiFileExist($conf["fileAccess.checkMultiFileExist"]);unset($conf["fileAccess.checkMultiFileExist"]);#var_dump($checkResult);#如果檢查檔案是否存在失敗if($checkResult["status"]==="false"){#設置執行失敗$result["status"]="false";#回傳錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果目標檔案不存在if($checkResult["varExist"][0]==="false"){#設置錯誤識別$result["status"]="true";#回傳錯誤訊息$result["warning"][]="要移除的檔案不存在";#回傳結果return $result;}#if end#如果要移除的目標是檔案if(is_file($conf["fileAddress"])){#移除檔案,並回傳移除的結果$eraseResult=(@unlink($conf["fileAddress"]));#如果 $eraseResult 等於 falseif($eraseResult===false){#設置錯誤識別$result["status"]="false";#回傳錯誤訊息$result["error"][]="檔案移除失敗";#回傳結果return $result;}#if end}#if end#反之要移除的目標是目錄else if(is_dir($conf["fileAddress"])){#如果允許移除目錄if($conf["allowDelFolder"]==="true"){#移除目錄跟底下的內容w函式說明:#呼叫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"],執行結束後的代碼.#必填參數:#$conf["command"],字串,要執行的指令.$conf["external::callShell"]["command"]="rm";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=__FILE__;#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-rf",$conf["fileAddress"]);#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").#$conf["arguIsAddr"]=array();#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.#$conf["plainArgu"]=array();#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".#$conf["useApostrophe"]=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}#if end#反之不允許else{#設置錯誤識別$result["status"]="false";#回傳錯誤訊息$result["error"][]="不允許移除目錄";#回傳結果return $result;}#else end}#if end#反之else{#可能為 軟連結#如果允許移除if($conf["allowDelSymlink"]==="true"){#移除檔案,並回傳移除的結果$eraseResult=(@unlink($conf["fileAddress"]));#如果 $eraseResult 等於 falseif($eraseResult===false){#設置錯誤識別$result["status"]="false";#回傳錯誤訊息$result["error"][]="檔案移除失敗";#回傳結果return $result;}#if end}#if end#反之else{#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="不允許移除 檔案、目錄 以外類型的目標";#回傳結果return $result;}#else end}#else end#執行到這邊代表執行正常.$result["status"]="true";#回傳結果return $result;}#function delFile end/*#函式說明:#移除多個檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["argu"],使用的參數.#$result["content"],陣列,移除各個檔案的結果.#必填參數:#$conf["fileAddress"],字串陣列,要移除檔案的位置.$conf["fileAddress"]=array("");#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function delMultiFile(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得使用的參數.$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","fileAddress");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);#$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#針對每個要移除的檔案foreach($conf["fileAddress"] as $fileAddr){#函式說明:#移除檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#$result["function"],當前執行的函數名稱#必填參數:#$conf["fileAddress"],字串,要移除檔案的位置.$conf["fileAccess::delFile"]["fileAddress"]=$fileAddr;#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");#備註:#無.$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);unset($conf["fileAccess::delFile"]);#如果檢查失敗if($delFile["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$delFile;#回傳結果return $result;}#if end#取得移除檔案的結果$result["content"][]=$delFile;}#foreach end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function delMultiFile end/*#函式說明:#確保路徑存在.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["path"],建立好的路徑字串.#$result["fileName"],檔案名稱,若 $conf["haveFileName"] 為 "true" 則會回傳.#$result["argu"],使用的參數.#必填參數:#$conf["path"],要檢查的路徑$conf["path"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".#$conf["haveFileName"]="false";#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人無法使用.#$conf["dirPermission"]="";#$conf["web"],是否為檔案系統,"true"為網頁路徑,"false"為網頁系統,預設為"false".#$conf["web"]="";#參考資料:#無.#備註:#無.*/public static function validatePath(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$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::checkArgument"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArgument"]["mustBeFilledVariableName"]=array("path","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArgument"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArgument"]["referenceVarKey"]="variableCheck::checkArgument";#可以省略的參數:#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArgument"]["canBeEmptyString"]="false";#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或集合.$conf["variableCheck::checkArgument"]["skipableVariableCanNotBeEmpty"]=array("haveFileName","dirPermission","web");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArgument"]["skipableVariableName"]=array("haveFileName","dirPermission","web");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArgument"]["skipableVariableType"]=array("string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArgument"]["skipableVarDefaultValue"]=array("false","0770","false");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArgument=variableCheck::checkArguments($conf["variableCheck::checkArgument"]);unset($conf["variableCheck::checkArgument"]);#如果檢查過程出錯if($checkArgument["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkArgument;#回傳結果return $result;}#if end#如果檢查不通過if($checkArgument["passed"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkArgument;#回傳結果return $result;}#if end#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["path"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];#備註:#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);#如果檢查過程出錯if($getInternetAddressV2["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#取得轉換好的絕對路徑$result["path"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];#debug#var_dump($getInternetAddressV2);exit;#如果 路徑 含有檔案名稱if($conf["haveFileName"]==="true"){#預設要加回去的結束字串為空字串$endStr="";#如果開頭跟結尾都是 "'"if( strpos($result["path"],"'")===0 && strpos($result["path"],"'")===(strlen($result["path"])-1) ){#設置要加回去的結束字串$endStr="'";}#if end#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$result["path"];#$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#初始化儲存 path$path="";#針對n-1段的內容for($i=0;$i<$spiltString["dataCounts"]-1;$i++){#串接路徑$path=$path."/".$spiltString["dataArray"][$i];}#for end#如果路徑為空if($path===""){#則與設為根目錄$path="/";}#if end#設置檔案名稱$result["fileName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#取得不含檔案名稱的路徑$conf["path"]=$path.$endStr;#取得不含檔案名稱的路徑$result["path"]=$path.$endStr;}#if end#函式說明:#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列#必填參數:$conf["fileAccess::createFolderAfterCheck"]["dirPositionAndName"]=$conf["path"];#新建的位置與名稱#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.$conf["fileAccess::createFolderAfterCheck"]["dirPermission"]=$conf["dirPermission"];$conf["fileAccess::createFolderAfterCheck"]["web"]="false";#參考資料:#mkdir=>http://php.net/manual/en/function.mkdir.php#chmod=>http://php.net/manual/en/function.chmod.php$createFolderAfterCheck=fileAccess::createFolderAfterCheck($conf["fileAccess::createFolderAfterCheck"]);unset($conf["fileAccess::createFolderAfterCheck"]);#如果建立路徑過程出錯if($createFolderAfterCheck["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$createFolderAfterCheck;#回傳結果return $result;}#if end#如果有警告訊息if(count($createFolderAfterCheck["warning"])>0){#取得警告訊息$result["error"]=$createFolderAfterCheck["warning"];#設置執行失敗$result["status"]="false";#回傳結果return $result;}#if end#執行到這邊代表成功$result["status"]="true";#回傳結果return $result;}#function validatePath end/*#函式說明:#解析路徑的每個層級.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["content"],解析出來的路徑階層.#必填參數:#$conf["path"],要檢查的路徑$conf["path"]="";#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".#$conf["haveFileName"]="false";#參考資料:#無.#備註:#無.*/public static function parsePath(&$conf){#初始化要回傳的內容$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#記錄使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$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("path");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");#$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("false");#$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#函式說明:#將固定格式的字串分開,並回傳分開的結果.#回傳結果:#$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"]=$conf["path"];#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#可省略參數:#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.#$conf["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#確認是否為絕對路徑#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["content"],符合條件的字串,去掉字首字尾後的結果.#$result["returnString"],爲符合字首字、尾條件的字串內容。#$result["argu"],使用的參數.#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]="/";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。#備註:#無.$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果檢查有誤if($getMeetConditionsString["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果是絕對路徑if($getMeetConditionsString["founded"]==="true"){#初始化路徑為 "/"$result["content"][]="/";}#if end#針對每個切割出來的路徑階層foreach($spiltString["dataArray"] as $index => $dir){#如果路徑結尾含有檔案名稱if($conf["haveFileName"]==="true"){#如果是最後一段if($index===$spiltString["dataCounts"]-1){#忽略continue;}#if end}#if end#後面加上 資料夾名稱 跟 "/"$newPath=$dir."/";#如果有 contentif(isset($result["content"])){#如果有上個資料夾if(isset($result["content"][count($result["content"])-1])){#後面加上 上個資料夾名稱 加上資料夾名稱 跟 "/"$newPath=$result["content"][count($result["content"])-1].$dir."/";}#if end}#if end#並新增置結果$result["content"][]=$newPath;}#foreach end#var_dump($result["content"]);#設置執行正常$result["status"]="true";#回傳結果return $result;}#function parsePath end/*#函式說明:#檢查路徑是否存在.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["found"],路徑是否存在,"true"代表存在,"false"代表不存在.#$result["content"],每個階層路徑的檢查結果,每個元素有檢查的路徑"path"跟是否有存在或可存取的識別"found".#必填參數:#$conf["path"],要檢查的路徑$conf["path"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".#$conf["haveFileName"]="false";#參考資料:#無.#備註:#無.*/public static function checkPathExist(&$conf){#初始化要回傳的內容$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#記錄使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$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("path","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("haveFileName");#$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("false");#$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#函式說明:#解析路徑的每個層級.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["content"],解析出來的路徑階層.#必填參數:#$conf["path"],要檢查的路徑$conf["fileAccess::parsePath"]["path"]=$conf["path"];#可省略參數:#$conf["haveFileName"],字串,"true"代表有$conf["path"]檔案名稱,"false"代表$conf["path"]為純路徑,預設為"false".$conf["fileAccess::parsePath"]["haveFileName"]=$conf["haveFileName"];#參考資料:#無.#備註:#無.$parsePath=fileAccess::parsePath($conf["fileAccess::parsePath"]);unset($conf["fileAccess::parsePath"]);#如果檢查有誤if($parsePath["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$parsePath;#回傳結果return $result;}#if end#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$parsePath["content"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="true";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".$conf["fileAccess::checkMultiFileExist"]["userDir"]="false";#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".$conf["fileAccess::checkMultiFileExist"]["web"]="false";#參考資料:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑#$result["varName"][$i]結果未實作$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果執行異常if($checkMultiFileExist["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果有路徑無法存取if($checkMultiFileExist["allExist"]==="false"){#設置執行正常識別$result["status"]="true";#設置路徑找不到$result["found"]="false";#針對每個路徑的搜尋結果foreach($checkMultiFileExist["varExist"] as $index => $found){#設置路徑尋找結果$result["content"][]=array("found"=>$found,"path"=>$checkMultiFileExist["varNameFullPath"][$index]);}#foreach end#回傳結果return $result;}#if end#設置路徑有找到$result["found"]="true";#設置執行正常識別$result["status"]="true";#回傳結果return $result;}#function checkPathExist end/*#函式說明:#demo建立pdf檔#必填參數:#無#可省略參數:#無#參考資料:#tcpdf=>http://www.tcpdf.org/examples.php#備註:#開發中,需要安裝 php-tcpdf 套件.*/public static function demoCreateTcPdfFile(){#避免 TCPDF ERROR: Some data has already been output, can't send PDF file 錯誤產生ob_end_clean();#create new PDF document$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);#set document information$pdf->SetCreator(PDF_CREATOR);$pdf->SetAuthor('qbpwc');$pdf->SetTitle('pdf sample title');$pdf->SetSubject('pdf sample subject');$pdf->SetKeywords('pdf, sample, tcpdf, qbpwc');#set default header data$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));$pdf->setFooterData(array(0,64,0), array(0,64,128));#set header and footer fonts$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));#set default monospaced font$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);#set margins$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);#set auto page breaks$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);#set image scale factor$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);#set some language-dependent strings (optional)if (@file_exists(dirname(__FILE__).'/lang/eng.php')){require_once(dirname(__FILE__).'/lang/eng.php');$pdf->setLanguageArray($l);}#if end#set default font subsetting mode$pdf->setFontSubsetting(true);#Set font#dejavusans is a UTF-8 Unicode font, if you only need to#print standard ASCII chars, you can use core fonts like#helvetica or times to reduce file size.$pdf->SetFont('dejavusans', '', 14, '', true);#Add a page#This method has several options, check the source code documentation for more information.$pdf->AddPage();#set text shadow effect$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));#Set some content to print$html="<h5>Hello World!</h5>";// Print text using writeHTMLCell()$pdf->writeHTMLCell(0,0,'','',$html,0,1,0,true,'',true);// Close and output PDF document// This method has several options, check the source code documentation for more information.$pdf->Output('fileAccessT/example_001.pdf','I');}#function demoCreateTcPdfFile end/*#函式說明:#取得檔案路徑字串的路徑與檔案的名稱與檔案副檔名#回傳的結果:#$result["status"],執行是否正常,"true"正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函式名稱.#$result["filePath"],路徑字串.#$result["fileName"],檔案名稱字串.#$result["fileExtention"],檔案的副檔名.#$result["fullFileName"],含副檔名的檔案名稱.#$result["fullFilePathAndName"],完整的檔案路徑(含副檔名).#必填參數:#$conf["fileAddressAndName"],字串,檔案名稱與其路徑.$conf["fileAddressAndName"]="";#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function getFileAddressAndNameAndFileExtention(&$conf){#初始化要回傳的參數$result=array();#取得當前執行函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileAddressAndName");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("outputAddress","noDownload");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".bin/".$conf["cppAddress"].".bin","true");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkArguments["status"] 等於 "false"if($checkArguments["status"]=="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果 $checkArguments["passed"] 等於 "false"if($checkArguments["passed"]=="false"){#設置 $result["status"] 為 "false"$result["status"]="false";#設置 $result["error"]$result["error"]=$checkArguments;#回傳結果return $result;}#if end#確認路徑是否為絕對路徑#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["content"],符合條件的字串,去掉字首字尾後的結果.#$result["returnString"],爲符合字首字、尾條件的字串內容。#$result["argu"],使用的參數.#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["fileAccess::getMeetConditionsString"]["checkString"]=$conf["fileAddressAndName"];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["fileAccess::getMeetConditionsString"]["frontWord"]="/";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。#備註:#無.$getMeetConditionsString=search::getMeetConditionsString($conf["fileAccess::getMeetConditionsString"]);unset($conf["fileAccess::getMeetConditionsString"]);#如果執行出錯if($getMeetConditionsString["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#預設參數 $conf["fileAddressAndName"] 不為 "/" 開始$fileAddressAndNameStarFromRoot="true";#如果是 "/" 開頭if($getMeetConditionsString["founded"]==="false"){#設置參數 $conf["fileAddressAndName"] 為 "/" 開始$fileAddressAndNameStarFromRoot="true";}#if end#檢查是否有路徑資訊#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess"]["spiltString"]["stringIn"]=$conf["fileAddressAndName"];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果 $spiledResult["status"] 等於 "false"if($spiledResult["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiledResult;#回傳結果return $result;}#if end#如果 $spiledResult["dataCounts"] 大於 1if($spiledResult["dataCounts"]>1){#代表有路徑字串#初始化路徑字串暫存變數$tempPathStr="";#如果是絕對路徑if($fileAddressAndNameStarFromRoot==="true"){#加上根目錄$tempPathStr=$tempPathStr."/";}#if end#取得路徑字串for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){#串連片段路徑字串$tempPathStr=$tempPathStr.$spiledResult["dataArray"][$i]."/";}#for end#取得檔案的路徑$result["filePath"]=$tempPathStr;}#if end#反之 $spiledResult["dataCounts"] 等於 1else{#檔案的路徑設為""$result["filePath"]="";}#else end#取得檔案名稱(含副檔名)$result["fullFileName"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];#取得副檔名#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess"]["spiltString"]["stringIn"]=$result["fullFileName"];#要處理的字串。$conf["stringProcess"]["spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割$spiledResult=stringProcess::spiltString($conf["stringProcess"]["spiltString"]);unset($conf["stringProcess"]["spiltString"]);#如果 $spiledResult["status"] 等於 "false"if($spiledResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiledResult;#回傳結果return $result;}#if end#如果 $spiledResult["dataCounts"] 大於 1if($spiledResult["dataCounts"]>1){#代表有副檔名#初始化檔名字串暫存變數$tempFileNameStr="";#取得路徑字串for($i=0;$i<$spiledResult["dataCounts"]-1;$i++){#如果是最後一個小黑點前面的字串片段if($i==$spiledResult["dataCounts"]-2){#串連片段路徑字串$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i];}#if end#反之不是最後一個小黑點前面的字串片段else{#串連片段路徑字串(含小黑點)$tempFileNameStr=$tempFileNameStr.$spiledResult["dataArray"][$i].".";}#else end}#for end#取得檔名$result["fileName"]=$tempFileNameStr;#取得副檔名$result["fileExtention"]=$spiledResult["dataArray"][$spiledResult["dataCounts"]-1];}#if end#反之 $spiledResult["dataCounts"] 等於 1else{#檔案的副檔名設為""$result["fileExtention"]="";#取得檔案的名稱$result["fileName"]=$spiledResult["dataArray"][0];}#else end#如果 $result["fileExtention"] 不等於 ""if($result["fileExtention"]!=""){#將副檔名用小黑點跟檔案名稱連在一塊$result["fullFileName"]=$result["fileName"].".".$result["fileExtention"];}#if end#反之代表沒有副檔名else{#取得含副檔名的檔案名稱$result["fullFileName"]=$result["fileName"].$result["fileExtention"];}#else end#完整的檔案路徑(含副檔名).$result["fullFilePathAndName"]=$result["filePath"].$result["fullFileName"];#設置執行正常的識別$result["status"]="true";#回傳結果return $result;}#funciton getFileAddressAndNameAndFileExtention end/*#函式說明:#將資料夾或檔案打包成tar檔案#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數名稱#$result["error"],錯誤訊息.#$result["content"],檔案輸出後的位置與名稱.#必填參數:#$conf["packetTarget"],陣列,要打包的每個資料夾與檔案位置$conf["packetTarget"]=array("");#$conf["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.$conf["createdTarFile"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function makeTarFile(&$conf){#初始化要回傳的內容$result=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","packetTarget","createdTarFile");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$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();$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#初始化打包要用的tar指令參數$paramsArray=array("-cvf",$conf["createdTarFile"].".tar");#檢查要打包的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=$conf["packetTarget"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查要打包的檔案失敗if($checkMultiFileExist["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果要打包的檔案有缺if($checkMultiFileExist["allExist"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#有幾個要打包的目標就執行幾次for($i=0;$i<count($conf["packetTarget"]);$i++){#串接上要打包的檔案或資料夾$paramsArray[]=$conf["packetTarget"][$i];}#for end#函式說明:#呼叫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").#必填參數:#$conf["command"],字串,要執行的指令.$conf["external::callShell"]["command"]="tar";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=$paramsArray;#$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 來進行轉換.$conf["external::callShell"]=external::callShell($conf["external::callShell"]);unset($conf["external::callShell"]);#如果執行shell失敗if($callShell["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#打包好的檔案位置與名稱$result["content"]=$conf["createdTarFile"].".tar";#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function makeTarFile end/*#函式說明:#將一個檔案壓縮成xz檔案#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數名稱#$result["error"],錯誤訊息.#$result["content"],檔案輸出後的位置與名稱.#必填參數:#$conf["compressTarget"],字串,要打包的每個資料夾與檔案位置$conf["compressTarget"]="";#$conf["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.$conf["createdXzFile"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function makeXzFile(&$conf){#初始化要回傳的內容$result=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdXzFile");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$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();$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#檢查要用xz壓縮的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查書否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["compressTarget"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查要用xz壓縮的檔案失敗if($checkMultiFileExist["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果要用xz壓縮的檔案有缺if($checkMultiFileExist["allExist"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#壓縮要用的xz語法#函式說明:#呼叫shell執行系統命令,並取得回傳的內容.#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["output"],爲執行完二元碼後的輸出陣列#必填的參數$conf["external::callShell"]["command"]="xz";#要執行的指令與參數#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-v","-v","-z","-c",$conf["compressTarget"],">",$conf["createdXzFile"].".xz ");#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".$conf["external::callShell"]["escapeshellarg"]="true";#參考資料:#http://php.net/manual/en/function.exec.php$callShell=external::callShell($conf["external::callShell"]);unset($conf["external::callShell"]);#如果執行shell失敗if($callShell["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#壓縮好的檔案位置與名稱$result["content"]=$conf["createdXzFile"].".xz";#執行到這邊代表執行正常$result["status"]="status";#回傳結果return $result;}#function makeXzFile end/*#函式說明:#將資料夾或檔案打包壓縮成tar.xz檔案#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數名稱#$result["error"],錯誤訊息.#$result["content"],檔案輸出後的位置與名稱.#必填參數:#$conf["compressTarget"],陣列,要打包壓縮的每個資料夾與檔案位置$conf["compressTarget"]=array();#$conf["createdTarXzFile"],字串,打包壓縮好的檔案要放在哪裡,副檔名.tar.xz會自動加上.$conf["createdTarXzFile"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");#$conf["includeDotStart"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「.」開頭的檔案目錄,預設為"false",不包含,"true"為要包含.#$conf["includeDotStart"]="false";#$conf["includeWaveEnd"],字串,當參數$conf["commentsArray"]含有星號時是否要包含「~」結尾的檔案.預設為"false",不包含,"true"為要包含.#$conf["includeWaveEnd"]="false";#參考資料:#無.#備註:#建議加上 --exclude-backups, --exclude-caches-all*/public static function makeTarXzFile(&$conf){#初始化要回傳的內容$result=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","compressTarget","createdTarXzFile");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","array","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","includeDotStart","includeWaveEnd");#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,"false","false");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();$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#如果 $conf["commentsArray"] 有設定if(isset($conf["commentsArray"])){#印出提示文字#函式說明:#印出多行文字,結尾自動換行.#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#必填參數:#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);unset($conf["cmd::echoMultiLine"]);#如果印出提示文字失敗if($echoMultiLine["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$echoMultiLine;#回傳結果return $result;}#if end}#if end#解析要處理的檔案路徑#函式說明:#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個解析回來的檔案路徑字串.#$result["pathCount"],整數,有幾個路徑.#必填參數:#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["path"]=$conf["compressTarget"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["includeDotStart"]==="true"?"false":"true";#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.$conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["includeWaveEnd"]==="true"?"false":"true";$realPathArray=fileAccess::resolveMultiPostionStringWhichContainStarSymbol($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);unset($conf["fileAccess::resolveMultiPostionStringWhichContainStarSymbol"]);#如果解析路徑失敗if($realPathArray["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$realPathArray;#回傳結果return $result;}#if end#取得解析好的檔案路徑陣列$conf["compressTarget"]=$realPathArray["content"];#將路徑轉換成相對路徑#函式說明:#將多個路徑字串變成相對於當前路徑的相對路徑字串#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個轉換好的相對路徑字串.#必填參數:#$conf["path"],陣列字串,要轉換成相對路徑的字串.;$conf["fileAccess::getRelativePath"]["path"]=$conf["compressTarget"];#$conf["fileArgu"],字串,當前路徑.$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);unset($conf["fileAccess::getRelativePath"]);#如果轉換失敗if($getRelativePath["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$getRelativePat;#回傳結果return $result;}#if end#打包成tar檔#函式說明:#將資料夾或檔案打包成tar檔案#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數名稱#$result["error"],錯誤訊息.#$result["content"],檔案輸出後的位置與名稱.#必填參數:#$conf["fileAccess::makeTarFile"]["packetTarget"],陣列,要打包的每個資料夾與檔案位置$conf["fileAccess::makeTarFile"]["packetTarget"]=$getRelativePath["content"];#$conf["fileAccess::makeTarFile"]["createdTarFile"],字串,打包好的檔案要放在哪裡,副檔名.tar會自動加上.$conf["fileAccess::makeTarFile"]["createdTarFile"]=$conf["createdTarXzFile"];#$conf["fileAccess::makeTarFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::makeTarFile"]["fileArgu"]=$conf["fileArgu"];$makeTarFile=fileAccess::makeTarFile($conf["fileAccess::makeTarFile"]);unset($conf["fileAccess::makeTarFile"]);#如果打包失敗if($makeTarFile["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$makeTarFile;#回傳結果return $result;}#if end#壓縮成xz檔#函式說明:#將一個檔案壓縮成xz檔案#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數名稱#$result["error"],錯誤訊息.#$result["content"],檔案輸出後的位置與名稱.#必填參數:#$conf["fileAccess::makeXzFile"]["compressTarget"],字串,要打包的每個資料夾與檔案位置$conf["fileAccess::makeXzFile"]["compressTarget"]=$makeTarFile["content"];#$conf["fileAccess::makeXzFile"]["createdXzFile"],字串,打包好的檔案要放在哪裡,副檔名.xz會自動加上.$conf["fileAccess::makeXzFile"]["createdXzFile"]=$makeTarFile["content"];#$conf["fileAccess::makeXzFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::makeXzFile"]["fileArgu"]=$conf["fileArgu"];$makeXzFile=fileAccess::makeXzFile($conf["fileAccess::makeXzFile"]);unset($conf["fileAccess::makeXzFile"]);#如果壓縮失敗if($makeXzFile["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$makeXzFile;#回傳結果return $result;}#if end#移除tar檔案#函式說明:#移除檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#$result["function"],當前執行的函數名稱#必填參數:$conf["fileAccess::delFile"]["fileAddress"]=$makeTarFile["content"];#要移除檔案的位置#$conf["fileAccess::delFile"]["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);unset($conf["fileAccess::delFile"]);#如果移除tar檔案失敗if($delFile["status"]=="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$delFile;#回傳結果return $result;}#if end#取得壓縮好的檔案位置與名稱$result["content"]=$makeXzFile["content"];#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function makeTarXzFile end/*#函式說明:#移動檔案#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["function"],當前執行的函數名稱#$result["error"],錯誤訊息.#$result["content"],檔案輸出後的位置與名稱.#必填參數:#$conf["from"],字串,要移動的檔案名稱與位置.$conf["from"]="";#$conf["to"],字串,要移動到的位置與名稱$conf["to"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");#參考資料:#無.#備註:#無.*/public static function mv(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("from","to","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray");#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();$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#如果 $conf["commentsArray"] 有設定if(isset($conf["commentsArray"])){#印出提示文字#函式說明:#印出多行文字,結尾自動換行.#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#必填參數:#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);unset($conf["cmd::echoMultiLine"]);#如果印出提示文字失敗if($echoMultiLine["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$echoMultiLine;#回傳結果return $result;}#if end}#if end#檢查要移動的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["from"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查失敗if($checkMultiFileExist["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果來源檔案不存在if($checkMultiFileExist["allExist"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="檔案「".$conf["from"]."」不存在";#回傳結果return $result;}#if end#函式說明:#呼叫shell執行系統命令,並取得回傳的內容.#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["output"],爲執行完二元碼後的輸出陣列#必填的參數$conf["external::callShell"]["command"]="mv";#要執行的指令與參數$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"]; #__FILE__的內容#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-v",$conf["from"],$conf["to"]);#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["external::callShell"]["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".$conf["external::callShell"]["escapeshellarg"]="true";#參考資料:#http://php.net/manual/en/function.exec.php$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";#儲存移動後的位置與名稱$result["content"]=$conf["to"];#回傳結果return $result;}#function mv end/*#函式說明:#取得目錄底下所有目錄與檔案的樹狀結構.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["position"],根目錄位置.#$result["content"],陣列,檔案目錄的樹狀結構.#$result["content"][$i]["name"],根目錄底下第$i+1個檔案或目錄的名稱#$result["content"][$i]["folder"],根目錄底下第$i+1個名稱是目錄("true")還是檔案("false").#$result["content"][$i]["position"],根目錄底下第$i+1個名稱或目錄的位置.#$result["content"][$i]["ownerPerm"],根目錄底下第$i+1個使用者的權限.#$result["content"][$i]["groupPerm"],根目錄底下第$i+1個群組使用者的權限.#$result["content"][$i]["otherPerm"],根目錄底下第$i+1個其他使用者的權限.#$result["content"][$i]["ownerName"],根目錄底下第$i+1個擁有者賬戶.#$result["content"][$i]["groupName"],根目錄底下第$i+1個群組擁有者賬戶.#$result["content"][$i]["next"][$j]["name"],第$i+1個為目錄的名稱的目錄底下第$j+1個檔案或目錄的名稱#$result["content"][$i]["next"][$j]["folder"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱是目錄("true")還是檔案("false").#$result["content"][$i]["next"][$j]["position"],第$i+1個為目錄的名稱的目錄底下第$j+1個名稱或目錄的位置.#$result["content"][$i]["next"][$j]["ownerPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個使用者的權限.#$result["content"][$i]["next"][$j]["groupPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組使用者的權限.#$result["content"][$i]["next"][$j]["otherPerm"],第$i+1個為目錄的名稱的目錄底下第$j+1個其他使用者的權限.#$result["content"][$i]["next"][$j]["ownerName"],第$i+1個為目錄的名稱的目錄底下第$j+1個擁有者賬戶.#$result["content"][$i]["next"][$j]["groupName"],第$i+1個為目錄的名稱的目錄底下第$j+1個群組擁有者賬戶.#以此類推...#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["position"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function getListTree(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);unset($conf["variableCheck.isexistMulti"]);#如果檢查失敗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#如果目錄不為 . 與 ..if(basename($conf["position"])!="." && basename($conf["position"])!=".."){#檢查目錄是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["position"]);#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查目錄失敗if($checkMultiFileExist["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果目錄不存在if($checkMultiFileExist["varExist"][0]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end}#if end#取得根目錄的樹狀結構#函式說明:#取得目錄底下所有目錄與檔案清單.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,目錄底下的檔案與子目錄.#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.#$result["position"],目前的位置.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["fileAccess::getList"]["position"]=$conf["position"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#無#參考資料來源:#opendir=>http://php.net/manual/en/function.opendir.php#is_dir=>http://php.net/manual/en/function.is-dir.php$rootList=fileAccess::getList($conf["fileAccess::getList"]);unset($conf["fileAccess::getList"]);#如果取得根目錄底下的資料失敗if($rootList["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$rootList;#回傳結果return $result;}#if end#取得當前目錄$result["position"]=$rootList["position"];#取得根目錄層級可以看到的檔案與目錄$result["content"]=$rootList["content"];#如果當前目錄有檔案與子目錄if(isset($result["content"])){#當前層級有幾個檔案目錄就執行幾次for($i=0;$i<count($result["content"]);$i++){#如果該單位是目錄if($result["content"][$i]["folder"]=="true"){#呼叫當前函數,取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊#函式說明:#取得目錄底下所有目錄與檔案的樹狀結構.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,檔案目錄的樹狀結構.#$result["total"],根目錄底下有多少目錄與檔案#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["fileAccess::getListTree"]["position"]=$conf["position"]."/".$result["content"][$i]["name"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::getListTree"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#無$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);unset($conf["fileAccess::getListTree"]);#如果取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊失敗if($getListTree["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getListTree;#回傳結果return $result;}#if end#如果 $conf["position"]."/".$result["content"][$i]["name"] 目錄有檔案與子目錄if(isset($getListTree["content"])){#取得 $conf["position"]."/".$result["content"][$i]["name"] 目錄底下的檔案目錄資訊$result["content"][$i]["next"]=$getListTree["content"];}#if end#取得當前目錄$result["content"][$i]["position"]=$rootList["position"];}#if end}#for end}#if end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function getListTree end/*#函式說明:#取得目錄底下所有目錄與檔案清單.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,目錄底下的檔案與子目錄.#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.#$result["content"][$i]["ownerPerm"],字串,使用者的權限.#$result["content"][$i]["groupPerm"],字串,群組使用者的權限.#$result["content"][$i]["otherPerm"],字串,其他使用者的權限.#$result["content"][$i]["ownerName"],字串,擁有者賬戶.#$result["content"][$i]["groupName"],字串,群組擁有者賬戶.#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.#$result["position"],目前的位置.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["position"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無#參考資料:#opendir=>http://php.net/manual/en/function.opendir.php#is_dir=>http://php.net/manual/en/function.is-dir.php#備註:#無.*/public static function getList(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#初始化記載檔案目錄名單的陣列$result["content"]=array();#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck.isexistMulti"]["variableCheck"]=array("fileArgu","position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck.isexistMulti"]["variableType"]=array("string","string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);unset($conf["variableCheck.isexistMulti"]);#如果檢查失敗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#檢查目標路徑是否為「/」開頭的路徑#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$conf["position"];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]="/";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果檢查關鍵字失敗if($getMeetConditionsString["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果目標路徑不為「/」開頭的路徑,則為相對路徑if($getMeetConditionsString["founded"]=="false"){#取得目標位置的路徑#函式說明:#將檔案的位置名稱變成網址#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],網址.#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.#必填參數:#$conf["address"],字串,檔案的相對位置.$conf["fileAccess::getInternetAddress"]["address"]=$conf["position"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.#$conf["fileAccess::getInternetAddress"]["userDir"]="true";$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);unset($conf["fileAccess::getInternetAddress"]);#如果將檔案的位置名稱變成網址失敗if($getInternetAddress["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getInternetAddress;#回傳結果return $result;}#if end#置換目標位置為檔案系統路徑的絕對位置$conf["position"]=$getInternetAddress["fileSystemAbsoulutePosition"];}#if end#如果目標是資料夾if(is_dir($conf["position"])) {#設置為資料夾$result["folder"]="true";#如果開啟資料夾成功if($dh=opendir($conf["position"])){#初始化計數變數$count=0;#如果資料夾裡面有檔案while(($fileName=readdir($dh))!==false){#debug#echo "有檔案";#如果名稱是「.」或「..」if($fileName=="." || $fileName==".."){#則跳過continue;}#if end#取得檔案或子目錄名稱$result["content"][$count]["name"]=$fileName;#取得詳細資訊#函式說明:#取得節點的資訊.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],檔案資訊陣列.#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.#$result["content"]["ownerPerm"],檔案擁有者權限資訊.#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.#$result["content"]["ownerName"],檔案擁有着資訊.#$result["content"]["groupName"],檔案所屬擁有着資訊.#$result["content"]["size"],檔案大小.#$result["content"]["modifyDate"],檔案變更年月日.#$result["content"]["modifyTime"],檔案變更時分秒.#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.#必填參數:#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.$conf["fileAccess::fileInfo"]["fileArgu"]=$conf["fileArgu"];#$conf["file"],字串,要查看擁有者資訊的檔案.$conf["fileAccess::fileInfo"]["file"]=$conf["position"]."/".$fileName;#可省略參數:#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess::fileInfo"]["web"]="false";#參考資料:#fileowner=>http://php.net/manual/en/function.fileowner.php#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php#備註:#無.$fileInfo=fileAccess::fileInfo($conf["fileAccess::fileInfo"]);unset($conf["fileAccess::fileInfo"]);#如果執行失敗if($fileInfo["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$fileInfo;#回傳結果return $result;}#if end#設置是否為資料夾$result["content"][$count]["folder"]=$fileInfo["content"]["is_folder"];#設置使用者的權限$result["content"][$count]["ownerPerm"]=$fileInfo["content"]["ownerPerm"];#設置群組的權限$result["content"][$count]["groupPerm"]=$fileInfo["content"]["groupPerm"];#設置其他使用者的權限$result["content"][$count]["otherPerm"]=$fileInfo["content"]["otherPerm"];#設置其擁有者賬戶$result["content"][$count]["ownerName"]=$fileInfo["content"]["ownerName"];#設置其群組擁有者賬戶$result["content"][$count]["groupName"]=$fileInfo["content"]["groupName"];#計數加1$count++;}#while#關閉資料夾closedir($dh);}#if end#開啟資料夾失敗else{#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="開啟資料夾「".$conf["position"]."」失敗";#回傳結果return $result;}#else end}#if end#反之是檔案else{#設置不為目錄$result["folder"]="false";}#else end#取得目前位置$result["position"]=$conf["position"];#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function getList end/*#函式說明:#取得目錄底下所有目錄與檔案的樹狀結構.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,檔案目錄的樹狀結構.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["position"]="";#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function exportListTree(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:$conf["variableCheck.isexistMulti"]["varInput"]=$conf;#要檢查的陣列變數$conf["variableCheck.isexistMulti"]["variableCheck"]=array("position");#要檢查的變數名稱陣列,形態爲陣列變數,例如: $conf["variableCheck"] = array("id","account","password");#可以省略的參數:$conf["variableCheck.isexistMulti"]["variableType"]=array("string");#要檢查的陣列變數內的元素應該爲何種變數形態,形態爲陣列 例如: $conf[variableType] = array("string","int","double");$conf["variableCheck.isexistMulti"]["canBeEmptyString"]="false";#變數內容如果是空字串就不能算是有設置的話,請設為"false",預設為也算是有設置。$checkResult=variableCheck::isexistMulti($conf["variableCheck.isexistMulti"]);unset($conf["variableCheck.isexistMulti"]);#如果檢查失敗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#函式說明:#取得目錄底下所有目錄與檔案的樹狀結構.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,檔案目錄的樹狀結構.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["fileAccess::getListTree"]["position"]=$conf["position"];#可省略參數:#無#備註:#若檔案與目錄的名稱含有「[」與「]」與「(」與「)」將會無法取得其目錄底下的內容#若檔案與目錄的名稱含有「 」將會無法檢查檔案是否存在#改用opendir()函數應該可以解決大部分的bug.$getListTree=fileAccess::getListTree($conf["fileAccess::getListTree"]);unset($conf["fileAccess::getListTree"]);#如果取得 目標目錄底下所有目錄與檔案的樹狀結構 失敗if($getListTree["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getListTree;#回傳結果return $result;}#if end#目標目錄底下有幾個}#function exportListTree end/*#函式說明:#解壓縮tar.xz檔案,解壓縮完畢後,tar.xz檔案會被移除.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#必填參數:#$conf["tarXzFile"],字串變數,壓縮檔的位置與名稱,副檔名".tar.xz"會自動補上.$conf["tarXzFile"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["extractTo"],字串,要解壓縮到哪邊,預設為當前路徑"."#$conf["extractTo"]=".";#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");#參考資料:#無.#備註:#無.*/public static function unpackTarXzFile(&$conf){#初始化要回傳的內容$result=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","tarXzFile");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("commentsArray","extractTo");#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,".");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();$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#如果 $conf["commentsArray"] 有設定if(isset($conf["commentsArray"])){#印出提示文字#函式說明:#印出多行文字,結尾自動換行.#回傳的結果:#$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#必填參數:#$conf["outputStringArray"],字串陣列,每行要印出的文字內容.$conf["cmd::echoMultiLine"]["outputStringArray"]=$conf["commentsArray"];$echoMultiLine=cmd::echoMultiLine($conf["cmd::echoMultiLine"]);unset($conf["cmd::echoMultiLine"]);#如果印出提示文字失敗if($echoMultiLine["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$echoMultiLine;#回傳結果return $result;}#if end}#if end#檢查要移動的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["tarXzFile"].".tar.xz");#要檢查書否存在的檔案有哪些,須爲一維陣列數值。#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查失敗if($checkMultiFileExist["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果來源檔案不存在if($checkMultiFileExist["allExist"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="檔案「".$conf["tarXzFile"].".tar.xz」不存在";#回傳結果return $result;}#if end#進行解壓縮xz檔#函式說明:#呼叫shell執行系統命令,並取得回傳的內容.#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["cmd"],執行的指令內容.#$result["output"],爲執行完二元碼後的輸出陣列.#必填的參數#$conf["command"],字串,要執行的指令與.$conf["fileAccess::callShell"]["command"]="xz -v -v -d -f ".$conf["tarXzFile"].".tar.xz";#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.#$conf["fileAccess::callShell"]["argu"]=array();#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".#$conf["escapeshellarg"]="true";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.#參考資料:#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$callShell=external::callShell($conf["fileAccess::callShell"]);unset($conf["fileAccess::callShell"]);#如果解壓縮xz檔案失敗if($callShell["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#解壓縮tar檔#函式說明:#呼叫shell執行系統命令,並取得回傳的內容.#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["cmd"],執行的指令內容.#$result["output"],爲執行完二元碼後的輸出陣列.#必填的參數#$conf["command"],字串,要執行的指令與.$conf["fileAccess::callShell"]["command"]="tar";#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["fileAccess::callShell"]["argu"]=array("-xvf",$conf["tarXzFile"]."tar",$conf["extractTo"]);#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"true".$conf["fileAccess::callShell"]["escapeshellarg"]="true";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行.#參考資料:#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$callShell=external::callShell($conf["fileAccess::callShell"]);unset($conf["fileAccess::callShell"]);#如果解壓縮xz檔案失敗if($callShell["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#移除tar檔#函式說明:#移除檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#$result["function"],當前執行的函數名稱#必填參數:$conf["fileAccess::delFile"]["fileAddress"]=$conf["tarXzFile"].".tar";#要移除檔案的位置#可省略參數:#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);unset($conf["fileAccess::delFile"]);#如果移除檔案失敗if($delFile["status"]=="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$delFile;#回傳結果return $result;}#if end#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function unpackTarXzFile end/*#函式說明:#用data:mimeType;base64,fileVar的形式來提供檔案的連結,亦即檔案儲存在變數裡面.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息#$result["content"],檔案變數的內容#$result["fileTypeName"],副檔名,ex:「.tar.xz」.#$result["function"],當前執行的函數名稱#必填參數:#$conf["filePosition"],要轉存成2元碼的檔案位置與名稱$conf["filePosition"]="";#$conf["mimeType"],2元碼的內容是什麼$conf["mimeType"]="";#可省略參數:#$conf["compressType"],2元碼壓縮的方式,預設為"base64".#$conf["compressType"]="base64";#$conf["delFile"],讀取完檔案後,要移除檔案嗎?"true"代表要移除,"false"代表不要移除,預設為"false".#$conf["delFile"]="false";#參考資料:#將檔案用字串變數儲存起來=>http://php.net/manual/en/function.file-get-contents.php#壓縮2元碼=>http://php.net/manual/en/function.base64-encode.php#備註:#無.*/public static function data(&$conf){#初始化要回傳的內容$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#必填寫的參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePosition");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("mimeType","compressType","delFile");#$conf["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,「null」代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("null","base64","false");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();$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#依據檔案名稱取得副檔名 $result["fileTypeName"]#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=basename($conf["filePosition"]);#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]=".";#爲以哪個符號作爲分割#備註:#建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割字串失敗if($spiltString["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#初始化副檔名$result["fileTypeName"]="";#如果只有一段代表沒有副檔名if($spiltString["dataCounts"]==1){#副檔名設置為 "unknow"$result["fileTypeName"]="unknow";}#if end#不符合以上條件,但至少有兩段else if($spiltString["dataCounts"]>=2){#執行 $spiltString["dataCounts"] 減一次的迴圈for($i=1;$i<$spiltString["dataCounts"];$i++){#串接副檔名$result["fileTypeName"]=$result["fileTypeName"].".".$spiltString["dataArray"][$i];}#for end}#if end#讀取檔案內容$fileBin=file_get_contents($conf["filePosition"],"rb");#編碼檔案$base64fileBin=base64_encode($fileBin);#如果 $conf["delFile"] 等於 "true"if($conf["delFile"]=="true"){#移除檔案#函式說明:#移除檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#$result["function"],當前執行的函數名稱#必填參數:$conf["fileAccess::delFile"]["fileAddress"]=$conf["filePosition"];#要移除檔案的位置$del=fileAccess::delFile($conf["fileAccess::delFile"]);unset($conf["fileAccess::delFile"]);#如果移除圖片失敗if($del["status"]=="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$del;#回傳結果return $result;}#if end}#if end#放置檔案的語法$result["content"]="data:".$conf["mimeType"].";".$conf["compressType"].",".$base64fileBin;#執行到這邊代表執行正常$result["status"]="true";#回傳結果return $result;}#function data end/*#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["address"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料:#無.#備註:#無.*/public static function getInternetAddress(&$conf){#初始化要回傳的變數$result=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得使用的參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("userDir");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("true");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["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#如果是本來就是網址了if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){#設置執行正常$result["status"]="true";#取得網址$result["content"]=$conf["address"];#回傳結果return $result;}#if end#解析 $conf["fileArgu"]#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割字串失敗if($spiltString["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$spiltString;#回傳結果return $result;}#if end#函式說明:#將多個路徑字串變成相對於當前路徑的相對路徑字串#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個轉換好的相對路徑字串.#必填參數:#$conf["path"],陣列字串,要轉換成相對路徑的字串.;$conf["fileAccess::getRelativePath"]["path"]=array($conf["address"]);#$conf["fileArgu"],字串,當前路徑.$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);unset($conf["fileAccess::getRelativePath"]);#如果取得相對位置失敗if($getRelativePath["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$getRelativePath;#回傳結果return $result;}#if end#取得轉換成相對路徑的位置$result["fileSystemRelativePosition"]=$getRelativePath["content"][0];#解析 $conf["fileArgu"]#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割字串失敗if($spiltString["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$spiltString;#回傳結果return $result;}#if end#debug#var_dump($spiltString);#var_dump($_SERVER);#初始化檔案在伺服器上的檔案系統位置$result["fileSystemAbsoulutePosition"]="/";#將最後一段捨棄for($i=0;$i<$spiltString["dataCounts"]-1;$i++){$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$spiltString["dataArray"][$i]."/";}#for end#取得非直觀的絕對位置$result["fileSystemAbsoulutePosition"]=$result["fileSystemAbsoulutePosition"].$result["fileSystemRelativePosition"];#將檔案的相對路徑進行整理,變成可以直接讀的路徑.#函式說明:#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.#回傳的結果:#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.#$result["function"],當前執行的函數.#$result["error"],錯誤訊息陣列.#$result["changedPath"],處理完後回傳的目錄字串.#$result["oriPath"],原始的路徑字串#必填參數:#$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"],字串,要處理的檔案目錄字串.$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$result["fileSystemAbsoulutePosition"];$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);unset($conf["stringProcess::changeDirByDotDotSolidus"]);#如果處理失敗if($changeDirByDotDotSolidus["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$changeDirByDotDotSolidus;#回傳結果return $result;}#if end#改變為易讀的絕對路徑$result["fileSystemAbsoulutePosition"]=$changeDirByDotDotSolidus["changedPath"];#如果 $conf["userDir"] 為 "true"if($conf["userDir"]==="true"){#重設為 絕對路徑 [/~家目錄名稱」$result["webPathFromRoot"]="/~".$spiltString["dataArray"][1];#從第四段到倒數第二段,將其內容合併for($i=3;$i<$spiltString["dataCounts"]-1;$i++){$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];}#for end}#if end#反之 $conf["userDir"] 為 "false",else{#重設為 ""$result["webPathFromRoot"]="";#可能的根目錄層級 - start#解析 $conf["fileArgu"]#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$_SERVER["PHP_SELF"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$keyWord=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果處理失敗if($keyWord["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$keyWord;#回傳結果return $result;}#if end#取得關鍵字$keyWord=$keyWord["dataArray"][0];#預設層級為4層$layer=4;#檢查每個絕對路徑片段for($i=0;$i<$spiltString["dataCounts"]-1;$i++){#如果路徑片段等於 $keyWordif($spiltString["dataArray"][$i]===$keyWord){#取得層級$layer=$i;#跳出迴圈break;}#if end}#for end#可能的根目錄層級 - end#網頁於檔案系統中的存放路徑可能為「/var/www/html」,從第四段到倒數第二段,將其內容合併for($i=$layer;$i<$spiltString["dataCounts"]-1;$i++){$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$spiltString["dataArray"][$i];}#for end}#else end#加上檔案的路徑$result["webPathFromRoot"]=$result["webPathFromRoot"]."/".$conf["address"];#取得檔案位於網頁伺服器的絕對位置#函式說明:#取得用戶端的資訊,並依據需要寫入到資料表裡面#回傳結果:#$result["status"],執行是否正常,"true"代表執行成功,"false"代表執行失敗.#$result["error"],錯誤訊息.#$result["function"],檔前執行的函數名稱.#$result["userBrowserType"],爲使用者的瀏覽器資訊#$result["userIp"],爲使用者的IP#$result["serverIp"],為伺服器的IP#$result["scheme"],通訊協定#$result["serverPort"],伺服器給對外下載網頁的port#$result["requestUri"],爲使用者要求的網址#$result["username"],爲使用者目前的帳戶,若爲""則表示尚未登入成功#$result["clientRequestIP"],用戶端要求的ip與port#必填參數:$conf["csInformation::getConnectionInfo"]["getAccount"]="false";#是否要取得帳號#可省略參數:#$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"]);#如果取得連線資訊失敗if($getConnectionInfo["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$getConnectionInfo;#回傳結果return $result;}#if end#如果運行環境為 "web"if($getConnectionInfo["mode"]=="web"){#為絕對路徑加上通訊協定與ip與port#$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["serverIp"].":".$getConnectionInfo["serverPort"].$result["webPathFromRoot"];#為絕對路徑加上用戶端通訊協定與ip與port$result["content"]=$getConnectionInfo["scheme"]."://".$getConnectionInfo["clientRequestIP"].$result["webPathFromRoot"];}#if end#反之如果為 "cmd" 環境else{$result["content"]="null";}#else end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function getInternetAddress end/*#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["address"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".#$conf["web"]="true";#參考資料:#無.#備註:#無.*/public static function getInternetAddressV2(&$conf){#初始化要回傳的變數$result=array();#記錄當前執行的函數名稱$result["function"]=__FUNCTION__;#取得參數$result["argu"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("address","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$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["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");#$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("true");#$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["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#如果是本來就是網址了if(strpos($conf["address"],'https://')===0 || strpos($conf["address"],'http://')===0){#取得網址$result["content"]=$conf["address"];}#if end#反之是絕對或相對路徑else{#確認 $conf["address"] 是否為 escaped 後的內容#函式說明:#判斷字串是否一定需要經過escapeshellarg才能為單一shell參數,並回傳可以成為單一shell參數的結果.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["argu"],使用的參數.#$result["content"],字串,單一shell參數.#$result["escaped"],字串,"true"代表content為 escape後的結果;反之為"false".#$result["urlEncodeStr"],字串,未被escape過的單一shell參數被url encode後的結果.#必填參數:#$conf["str"],字串,認為要為單一 shell參數的字串.$conf["stringProcess::toSingleShellArg"]["str"]=$conf["address"];#可省略參數:#無.#參考資料:#無.#備註:#無.$toSingleShellArg=stringProcess::toSingleShellArg($conf["stringProcess::toSingleShellArg"]);unset($conf["stringProcess::toSingleShellArg"]);#如果執行失敗if($toSingleShellArg["status"]==="false"){#設置錯誤狀態$result["status"]="false";#設置錯誤提示$result["error"]=$toSingleShellArg;#回傳結果return $result;}#if end#取得不含escape字元的address參數$conf["address"]=urldecode($toSingleShellArg["urlEncodeStr"]);#不是絕對位置if(strpos($conf["address"],"/")!==0){#如果有這些參數if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){#網址$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];}#if end#反之else{#網址設置為 null$result["content"]=null;}#else}#if end#反之是絕對位置else{#移除開頭的 "/"$conf["address"]=substr($conf["address"],1);#如果有這些參數if( isset($_SERVER['REQUEST_SCHEME']) && isset($_SERVER['SERVER_NAME']) && isset($_SERVER['SERVER_PORT']) ){#網址$result["content"]=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$conf["address"];}#if end#反之else{#網址設置為 null$result["content"]=null;}#else}#else end#取得 doc root;$docRoot=$_SERVER['DOCUMENT_ROOT'];#如果不是網路環境if($conf["web"]==="false"){#不採用 docRoot$docRoot="";}#if end#如果不存在 DOCUMENT_ROOT 變數或 web 參數為 "false" 且為相對位置.if( ($_SERVER['DOCUMENT_ROOT']==="" || $conf["web"]==="false") && (strpos($result["argu"]["address"],"/")!==0) ){#執行 "pwd" 取得當前位置exec("pwd",$output,$status);#預設為`pwd`的結果加"/"$docRoot=$output[0]."/";}#if end#如果是絕對位置else if(strpos($result["argu"]["address"],"/")===0){#補回 "/"$conf["address"]="/".$conf["address"];}#if end#針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.$result["fileSystemAbsoulutePosition"]=$docRoot.$conf["address"];}#else end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function getInternetAddressV2 end/*#函式說明:#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個解析回來的檔案路徑字串.#必填參數:#$conf["path"],字串,要解析含有「*」的檔案路徑字串.$conf["path"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.#$conf["noDotStart"]="true";#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.#$conf["noWaveEnd"]="true";#參考資料:#無.#備註:#無.*/public static function resolvePostionStringWhichContainStarSymbol(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkResult["status"] 等於 "fasle"if($checkResult["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#轉換檔案路徑為相對於伺服器檔案系統的絕對路徑#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],網址.#$result["localAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器檔案系統的絕對位置.#必填參數:#$conf["address"],字串,檔案的相對位置.$conf["fileAccess::getInternetAddress"]["address"]=$conf["path"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是.$conf["fileAccess::getInternetAddress"]["userDir"]="true";$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);unset($conf["fileAccess::getInternetAddress"]);#如果轉換路徑失敗if($getInternetAddress["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#取得轉換好的路徑$conf["path"]=$getInternetAddress["fileSystemAbsoulutePosition"];#檢查檔案路徑字串是否含有「*」#函式說明:#檢查字串裡面有無指定的關鍵字#回傳結果:#$result["status"],"true"代表執行成功,"false"代表執行失敗。#$result["error"],錯誤訊息#$result["function"],當前執行的函數名稱.#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。#$result["keyWordCount"],找到的關鍵字數量.#必填參數:$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字$conf["search::findKeyWord"]["string"]=$conf["path"];#要被搜尋的字串內容#可省略參數:#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);unset($conf["search::findKeyWord"]);#如果尋找關鍵字出錯if($findKeyWord["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWord;#回傳結果return $result;}#if end#如果含有「*」if($findKeyWord["founded"]=="true"){#透過「/」分割路徑字串#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["path"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$spiltPathStr=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割字串失敗if($spiltPathStr["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltPathStr;#回傳結果return $result;}#if end#初始化暫存展開後的檔案路徑字串$extendPath=array("");#要解析的路徑分成幾段就執行幾次foreach($spiltPathStr["dataArray"] as $pathPart){#檢查該段名稱是否有「*」#函式說明:#檢查字串裡面有無指定的關鍵字#回傳結果:#$result["status"],"true"代表執行成功,"false"代表執行失敗。#$result["error"],錯誤訊息#$result["function"],當前執行的函數名稱.#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。#$result["keyWordCount"],找到的關鍵字數量.#必填參數:$conf["search::findKeyWord"]["keyWord"]="*";#想要搜尋的關鍵字$conf["search::findKeyWord"]["string"]=$pathPart;#要被搜尋的字串內容#可省略參數:#$conf["fileAccess::findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);unset($conf["search::findKeyWord"]);#如果尋找關鍵字出錯if($findKeyWord["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWord;#回傳結果return $result;}#if end#如果不含「*」if($findKeyWord["founded"]=="false"){#針對每個既有的路徑for($i=0;$i<count($extendPath);$i++){#加上切割好的路徑$extendPath[$i]=$extendPath[$i]."/".$pathPart;}#for end}#if end#反之該段含有「*」else{#用「*」分割該段#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳的參數:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$pathPart;#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="*";#爲以哪個符號作爲分割$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分字串失敗if($spiltString["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltStringByStar;#回傳結果return $result;}#if end#如果用「*」分割後的段數為0if($spiltString["dataCounts"]==0){#初始化儲存符合條件的路徑$newExtendPath=array();#代表沒有塞選條件#當前有幾個符合條件的路徑就執行幾次for($i=0;$i<count($extendPath);$i++){#取得該目錄下所有的東西#取得該目錄底下的檔案目錄清單#函式說明:#取得目錄底下所有目錄與檔案清單.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,目錄底下的檔案與子目錄.#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.#$result["position"],目前的位置.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["fileAccess::getList"]["position"]=$extendPath[$i];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#無#參考資料來源:#opendir=>http://php.net/manual/en/function.opendir.php#is_dir=>http://php.net/manual/en/function.is-dir.php$getList=fileAccess::getList($conf["fileAccess::getList"]);unset($conf["fileAccess::getList"]);#如果取得目標目錄底下的檔案目錄清單失敗if($getList["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getList;#回傳結果return $result;}#if end#如果底下有東西if(count($getList["content"])>0){#初始化儲存要檢查的檔案或資料夾名稱陣列$list=array();#針對每個檔案或資料夾foreach($getList["content"] as $num=>$array){#儲存該名稱$list[]=$array["name"];}#foreach end#初始化儲存符合新條件字串的陣列$tempExtendPath=array();#針對每個現有的路徑字串for($j=0;$j<count($extendPath);$j++){#附加每個符合條件的名稱到路徑字串裡面for($k=0;$k<count($list);$k++){#如果 $conf["noDotStart"] 為 "true"if($conf["noDotStart"]==="true"){#將 $list[$k] 用 "/" 分割#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$list[$k];#要處理的字串。$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"){#針對每個段落foreach($spiltString["dataArray"] as $pp){#看該符合的名稱開頭是否包含「.」#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$pp;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]=".";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有「.」在開頭if($getMeetConditionsString["founded"]=="true"){#忽略這個名稱continue 2;}#if end}#foreach end}#if end#反之沒有關鍵字「/」存在else{#看該符合的名稱開頭是否包含「.」#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]=".";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有「.」在開頭if($getMeetConditionsString["founded"]=="true"){#忽略這個名稱continue;}#if end}#else end}#if end#如果 $conf["noWaveEnd"] 為 "true"if($conf["noWaveEnd"]==="true"){#看該符合的名稱結尾是否包含「~」#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$list[$k];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["frontWord"]=".";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["tailWord"]="~";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有「~」在結尾if($getMeetConditionsString["founded"]=="true"){#忽略這個名稱continue;}#if end}#if end#暫存該符合的路徑$tempExtendPath[]=$extendPath[$j]."/".$list[$k];}#for end}#for end#該次有幾個符合的路徑就執行幾次foreach($tempExtendPath as $path){#暫存符合的路徑$newExtendPath[]=$path;}#for end}#if end#反之該目錄底下沒有東西else{#移除該 $extendPath[$i]unset($extendPath[$i]);}#else end}#for end#置換原始符合條件字串的路徑字串陣列$extendPath=$newExtendPath;}#if end#反之用「*」分割後有分段else{#初始化暫存符合條件的新路徑陣列變數$newExtendPath=array();#當前有幾個符合條件的路徑就執行幾次for($i=0;$i<count($extendPath);$i++){#取得該目錄下所有的東西#函式說明:#取得目錄底下所有目錄與檔案清單.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,目錄底下的檔案與子目錄.#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.#$result["position"],目前的位置.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["fileAccess::getList"]["position"]=$extendPath[$i];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#無#參考資料來源:#opendir=>http://php.net/manual/en/function.opendir.php#is_dir=>http://php.net/manual/en/function.is-dir.php$getList=fileAccess::getList($conf["fileAccess::getList"]);unset($conf["fileAccess::getList"]);#如果取得目標目錄底下的檔案目錄清單失敗if($getList["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getList;#回傳結果return $result;}#if end#如果底下有東西if(count($getList["content"])>0){#初始化儲存要檢查的檔案或資料夾名稱陣列$list=array();#針對每個檔案或資料夾foreach($getList["content"] as $num=>$array){#儲存該名稱$list[]=$array["name"];}#foreach end#初始化儲存符合的名稱$passedName=array();#依據每個檔案目錄名稱,檢查有無符合篩選條件foreach($list as $filteredName){#初始化儲存被檢查的片段檔案資料夾名稱$partName=$filteredName;#依據 $pathPart 分割成幾段(關鍵字數量)就執行幾次for($i=0;$i<$spiltString["dataCounts"];$i++){#尋找關鍵字 $spiltString["dataArray"][$i]#函式說明:#檢查字串裡面有無指定的關鍵字#回傳結果:#$result["status"],"true"代表執行成功,"false"代表執行失敗。#$result["error"],錯誤訊息#$result["function"],當前執行的函數名稱.#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。#$result["keyWordCount"],找到的關鍵字數量.#必填參數:$conf["search::findKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#想要搜尋的關鍵字$conf["search::findKeyWord"]["string"]=$partName;#要被搜尋的字串內容#可省略參數:#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);unset($conf["search::findKeyWord"]);#如果尋找關鍵字失敗if($findKeyWord["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWord;#回傳結果return $result;}#if end#如果有找到關鍵字if($findKeyWord["founded"]=="true"){#如果是最後一段要檢查的關鍵字if($i==$spiltString["dataCounts"]-1){#判斷該關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的開頭#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果關鍵字是在開頭if($getMeetConditionsString["founded"]=="true"){#判斷關鍵字是否在該檔案目錄名稱的開頭#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]=$spiltString["dataArray"][0];#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果關鍵字不在開頭if($getMeetConditionsString["founded"]=="false"){#不符合條件,跳過該檔案目錄名稱break;}#if end}#if end#判斷最後一個關鍵字是否在該未分割的 $pathPart(含有*字號的關鍵字字串) 的結尾#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$pathPart;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字尾的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果關鍵字是在字尾if($getMeetConditionsString["founded"]=="true"){#判斷關鍵字是否在該片段的開頭#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["frontWord"]=$partName;#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果關鍵字不在結尾if($getMeetConditionsString["founded"]=="false"){#不符合條件,跳過該檔案目錄名稱break;}#if end}#if end#如果 $conf["noDotStart"] 為 "true"if($conf["noDotStart"]==="true"){#看該符合的名稱開頭是否包含「.」#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]=".";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["tailWord"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有「.」在開頭if($getMeetConditionsString["founded"]=="true"){#中斷迴圈break;}#if end}#if end#如果 $conf["noWaveEnd"] 為 "true"if($conf["noWaveEnd"]==="true"){#看該符合的名稱結尾是否包含「~」#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$filteredName;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.#$conf["search::getMeetConditionsString"]["frontWord"]=".";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["tailWord"]="~";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果 取得符合特定字首的字串 出錯if($getMeetConditionsString["status"]=="false"){#設置執行錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有「~」在結尾if($getMeetConditionsString["founded"]=="true"){#中斷迴圈break;}#if end}#if end#取得該符合的名稱$passedName[]=$filteredName;#中斷迴圈break;}#if end#將 $partName 從左到關鍵字結束的部份剔除#函式說明:#將特定字串前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$partName;#要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=$spiltString["dataArray"][$i];#特定字串.$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);unset($conf["stringProcess::delStrBeforeKeyWord"]);#如果將 $partName 從左到關鍵字結束的部份剔除失敗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#取得剔除過關鍵字前字串的字串$partName=$delStrBeforeKeyWord["content"];}#if end#反之關鍵字不存在else{#儲存被拋棄的片段#$result["dismissLog"][]="片段「".$partName."」沒有關鍵字「".$spiltString["dataArray"][$i]."」";#該名稱不符合條件break;}#else end}#for end}#foreach end#初始化儲存符合的暫存路徑$tempExtendPath=array();#針對每個現有的路徑字串for($j=0;$j<count($extendPath);$j++){#附加每個符合條件的名稱到路徑字串裡面for($k=0;$k<count($passedName);$k++){#暫存該符合的路徑$tempExtendPath[]=$extendPath[$j]."/".$passedName[$k];}#for end}#for end#該次有幾個符合的路徑就執行幾次foreach($tempExtendPath as $path){#暫存符合的路徑$newExtendPath[]=$path;}#foreach end}#if end#反之該目錄底下沒有東西else{#移除該 $extendPath[$i]unset($extendPath[$i]);}#else end}#for end#如果有新的路徑產生if(count($newExtendPath)>0){#置換原始符合條件字串的路徑字串陣列$extendPath=$newExtendPath;}#if end#反之找不到後續符合的路徑else{$extendPath=array();}#else end}#else end}#else end}#foreach end}#if end#反之沒有含有「*」else{#判斷 $conf["path"] 是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["path"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查失敗if($checkMultiFileExist["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果存在if($checkMultiFileExist["varExist"][0]=="true"){#初始化暫存展開後的檔案路徑字串$extendPath=array($conf["path"]);}#if end#反之不存在else{#置換符合的路徑為空字串$extendPath=array();}#else end#初始化暫存展開後的檔案路徑字串$extendPath=array($conf["path"]);}#else end#取得解析完「*」的檔案路徑字串$result["content"]=$extendPath;#取得有幾個檔案路徑$result["pathCount"]=count($result["content"]);#設置執行正常$result["status"]="true";#回傳結果return $result;}#function resolvePostionStringWhichContainStarSymbol end/*#函式說明:#將含有「*」的多個檔案路徑名稱,變成多個符合條件的路徑檔案.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個解析回來的檔案路徑字串.#$result["pathCount"],整數,有幾個路徑.#必填參數:#$conf["path"],字串陣列,要解析含有「*」的檔案路徑字串.$conf["path"]=array();#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.#$conf["noDotStart"]="true";#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.#$conf["noWaveEnd"]="true";#參考資料:#無.#備註:#無.*/public static function resolveMultiPostionStringWhichContainStarSymbol(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("noDotStart","noWaveEnd");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false","true");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkResult["status"] 等於 "fasle"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#針對每個要解析的路徑字串foreach($conf["path"] as $path){#函式說明:#將含有「*」的檔案路徑名稱,變成多個符合條件的路徑檔案.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個解析回來的檔案路徑字串.#必填參數:#$conf["path"],字串,要解析含有「*」的檔案路徑字串.$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["path"]=$path;#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["noDotStart"],字串,"true"代表不包含「.」開頭的名稱,預設為"false"代表包含「.」開頭的名稱.$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noDotStart"]=$conf["noDotStart"];#$conf["noWaveEnd"],字串,預設為"true"代表不包含「~」結尾的名稱,"false"代表包含結尾為「~」的名稱.$conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]["noWaveEnd"]=$conf["noWaveEnd"];$resolvePostionStringWhichContainStarSymbol=fileAccess::resolvePostionStringWhichContainStarSymbol($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);unset($conf["fileAccess::resolvePostionStringWhichContainStarSymbol"]);#如果解析失敗if($resolvePostionStringWhichContainStarSymbol["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$resolvePostionStringWhichContainStarSymbol;#回傳結果return $result;}#if end#針對每個解析出來的路徑foreach($resolvePostionStringWhichContainStarSymbol["content"] as $filteredPath){#儲存符合條件的路徑$result["content"][]=$filteredPath;}#foreach end}#foreach end#如果有路徑存在if(isset($result["content"])){#取得有幾個路徑$result["pathCount"]=count($result["content"]);}#if end#反之else{#設置空的路徑結果$result["content"]=array();#取得有幾個路徑$result["pathCount"]=count($result["content"]);}#else end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function resolveMultiPostionStringWhichContainStarSymbol end/*#函式說明:#將多個路徑字串變成相對於當前路徑的相對路徑字串#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],字串陣列,多個轉換好的相對路徑字串.#$result["cmd"],使用的指令.#必填參數:#$conf["path"],陣列字串,要轉換成相對路徑的字串.;$conf["path"]=array();#$conf["fileArgu"],字串,當前路徑.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.#$conf["baseFrom"]="";#參考資料:#無.#備註:#無.*/public static function getRelativePath(&$conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","fileArgu");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("baseFrom");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null);#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkResult["status"] 等於 "false"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#取得參數$result["argu"]=$conf;#函式說明:#將固定格式的字串分開,並回傳分開的結果.#回傳結果:#$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["fileAccess::spiltString"]["stringIn"]=$conf["fileArgu"];#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.$conf["fileAccess::spiltString"]["spiltSymbol"]="/";#可省略參數:#$conf["allowEmptyStr"],是否允許分割出來空字串,預設為"false"不允許;"true"代表允許.$conf["fileAccess::spiltString"]["allowEmptyStr"]="false";#參考資料:#無.#備註:#無.$spiltString=stringProcess::spiltString($conf["fileAccess::spiltString"]);unset($conf["fileAccess::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#取得 $conf["fileArgu"] 的路徑#函式說明:#將固定格式的字串分開,並回傳分開的結果.#回傳結果:#$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"]=$conf["fileArgu"];#$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/*#break pointvar_dump($spiltString);exit;*/#預設 fileArgu 的路徑為 ""$fileArguPath="";#針對每個目錄for($i=0;$i<$spiltString["dataCounts"]-1;$i++){#串接路徑$fileArguPath=$fileArguPath."/".$spiltString["dataArray"][$i];}#for end#取得相對於目標的當前位置#函式說明:#呼叫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").#必填參數:#$conf["command"],字串,要執行的指令.$conf["external::callShell"]["command"]="cd";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array($fileArguPath,";","pwd");#$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#如果執行失敗if(!isset($callShell["output"][0])){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end/*#break pointvar_dump($callShell);exit;*/#記錄執行的指令$result["cmd"][]=$callShell["cmd"];#保存相對於目標的當前位置$pwd=$callShell["output"][0];#更新 fileArgu$conf["fileArgu"]=$pwd."/".$spiltString["dataArray"][$spiltString["dataCounts"]-1];#針對每個 $conf["path"]foreach($conf["path"] as $path){#將 $path 變成易讀的格式#函式說明:#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.#回傳的結果:#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.#$result["function"],當前執行的函數.#$result["error"],錯誤訊息陣列.#$result["changedPath"],處理完後回傳的目錄字串.#$result["oriPath"],原始的路徑字串#必填參數:#$conf["dirStr"],字串,要處理的檔案目錄字串.$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$path;$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);unset($conf["stringProcess::changeDirByDotDotSolidus"]);#如果處理失敗if($changeDirByDotDotSolidus["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$changeDirByDotDotSolidus;#回傳結果return $result;}#if end#取得易讀的路徑$path=$changeDirByDotDotSolidus["changedPath"];#判斷 $path 是否為絕對路徑#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$path;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]="/";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果檢查失敗if($getMeetConditionsString["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果沒有「/」開頭if($getMeetConditionsString["founded"]==="false"){#將 $conf["fileArgu"] 最後面的檔案或目錄名稱剔除#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列#$result["function"],當前執行的函數名稱.#$result["oriStr"],要分割的原始字串內容#$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。#$result["dataCounts"],爲總共分成幾段#必填參數:$conf["stringProcess::spiltString"]["stringIn"]=$conf["fileArgu"];#要處理的字串。$conf["stringProcess::spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割$spiltString=stringProcess::spiltString($conf["stringProcess::spiltString"]);unset($conf["stringProcess::spiltString"]);#如果分割字串失敗if($spiltString["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#初始化相對路徑為開頭片段""$relativePathPart="/";#剔除最後一段for($i=0;$i<$spiltString["dataCounts"]-1;$i++){#串接起來$relativePathPart=$relativePathPart.$spiltString["dataArray"][$i]."/";}#for end#如果有設定 baseFromif(isset($conf["baseFrom"])){#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$path;#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::getInternetAddressV2"]["web"]="false";#參考資料:#無.#備註:#無.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);##var_dump(__LINE__." ".print_r($getInternetAddressV2,true));#如果執行失敗if($getInternetAddressV2["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#取得絕對位置$path=$getInternetAddressV2["fileSystemAbsoulutePosition"];#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["baseFrom"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::getInternetAddressV2"]["web"]="false";#參考資料:#無.#備註:#無.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);#var_dump(__LINE__." ".print_r($getInternetAddressV2,true));#如果執行失敗if($getInternetAddressV2["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#取得絕對位置$conf["baseFrom"]=$getInternetAddressV2["fileSystemAbsoulutePosition"];#函式說明:#將多個路徑字串變成相對於當前路徑的相對路徑字串#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],字串陣列,多個轉換好的相對路徑字串.#必填參數:#$conf["path"],陣列字串,要轉換成相對路徑的字串.;$conf["fileAccess::getRelativePath"]["path"]=array($path);#$conf["fileArgu"],字串,當前路徑.$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["baseFrom"]."/name";#可省略參數:#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.#$conf["baseFrom"]="";#參考資料:#無.#備註:#無.$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);unset($conf["fileAccess::getRelativePath"]);#var_dump(__LINE__." ".print_r($getRelativePath,true));#如果執行失敗if($getRelativePath["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getRelativePath;#回傳結果return $result;}#if end#取得轉換好的絕對路徑$relativePathPart=$getRelativePath["content"][0]."/";#清空path,避免出錯$path="";}#if end#轉換成易讀的相對路徑#函式說明:#將檔案目錄的絕對位置中的 "../" 剔除變成直觀的路徑.#回傳的結果:#$result["status"],執行是否成功,"true"代表執行成功,"false"代表執行失敗.#$result["function"],當前執行的函數.#$result["error"],錯誤訊息陣列.#$result["changedPath"],處理完後回傳的目錄字串.#$result["oriPath"],原始的路徑字串#必填參數:#$conf["dirStr"],字串,要處理的檔案目錄字串.$conf["stringProcess::changeDirByDotDotSolidus"]["dirStr"]=$relativePathPart.$path;$changeDirByDotDotSolidus=stringProcess::changeDirByDotDotSolidus($conf["stringProcess::changeDirByDotDotSolidus"]);unset($conf["stringProcess::changeDirByDotDotSolidus"]);#var_dump($changeDirByDotDotSolidus);#如果轉換失敗if($changeDirByDotDotSolidus["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$changeDirByDotDotSolidus;#回傳結果return $result;}#if end#轉換為相對路徑#函式說明:#將多個路徑字串變成相對於當前路徑的相對路徑字串#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],字串陣列,多個轉換好的相對路徑字串.#必填參數:#$conf["path"],陣列字串,要轉換成相對路徑的字串.;$conf["fileAccess::getRelativePath"]["path"]=array($changeDirByDotDotSolidus["changedPath"]);#$conf["fileArgu"],字串,當前路徑.$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);unset($conf["fileAccess::getRelativePath"]);#var_dump($getRelativePath);#如果轉換路徑失敗if($getRelativePath["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$changeDirByDotDotSolidus;#回傳結果return $result;}#if end#取得相對路徑$result["content"][]=$getRelativePath["content"][0];}#if end#反之有「/」開頭else{#函式說明:#移除多個絕對路徑字串開頭相同的部分#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["content"],處理好的的字串內容.#必填參數:#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.$conf["fileAccess::delSamePathHead"]["pathIn"]=array($path,$conf["fileArgu"]);$delSamePathHead=fileAccess::delSamePathHead($conf["fileAccess::delSamePathHead"]);unset($conf["fileAccess::delSamePathHead"]);#var_dump($delSamePathHead);#如果移除多個絕對路徑字串開頭相同的部分失敗if($delSamePathHead["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$delSameHead;#回傳結果return $result;}#if end#如果 $conf["fileArgu"] 剩下空if($delSamePathHead["content"][1]===""){#檢查 $delSamePathHead[0] 開頭是否為「/」#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$delSamePathHead["content"][0];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]="/";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果檢查失敗if($getMeetConditionsString["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有開頭有「/」if($getMeetConditionsString["founded"]==="true"){#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delSamePathHead["content"][0];#要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";#特定字串.$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);unset($conf["stringProcess::delStrBeforeKeyWord"]);#如果 將字串特定關鍵字與其前面的內容剔除 失敗if($delStrBeforeKeyWord["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$delStrBeforeKeyWord;#回傳結果return $result;}#if end#取得相對位置$result["content"][]=$delStrBeforeKeyWord["content"];}#if end#反之else{#取得相對位置$result["content"][]=$delSamePathHead["content"][0];}#else end}#if end#反之剩下的 $conf["fileArgu"] 不為空else{#檢查 $delSamePathHead["content"][1] 有幾個「/」#函式說明:#檢查字串裡面有無指定的關鍵字#回傳結果:#$result["status"],"true"代表執行成功,"false"代表執行失敗。#$result["error"],錯誤訊息#$result["function"],當前執行的函數名稱.#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。#$result["keyWordCount"],找到的關鍵字數量.#必填參數:$conf["search::findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字$conf["search::findKeyWord"]["string"]=$delSamePathHead["content"][1];#要被搜尋的字串內容#可省略參數:#$conf["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);unset($conf["search::findKeyWord"]);#如果 檢查字串裡面有無指定的關鍵字 失敗if($findKeyWord["status"]==="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$findKeyWord;#回傳結果return $result;}#if end#有幾個「/」就執行幾次for($i=0;$i<$findKeyWord["keyWordCount"];$i++){#在前面加上 "../"$delSamePathHead["content"][0]="../".$delSamePathHead["content"][0];}#for end#取得相對位置$result["content"][]=$delSamePathHead["content"][0];}#else end}#else end}#foreach end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function getRelativeParh end/*#函式說明:#移除多個絕對路徑字串開頭相同的部分#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["argu"],參數.#$result["content"],處理好的的字串內容.#必填參數:#$conf["pathIn"],字串陣列,每個要處理的絕對路徑字串.$conf["pathIn"]=array();#可省略參數:#無#參考資料:#無.#備註:#無.*/public static function delSamePathHead(&$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變數須為陣列形態";#如果傳入的參數為 nullif($conf==null){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#取得參數$result["argv"]=$conf;#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("pathIn");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");#$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkResult["status"] 等於 "fasle"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#檢查是否都為絕對路徑#函式說明:#取得多個符合特定字首與字尾的字串.#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["function"],當前執行的函數名稱.#$result["returnString"],爲符合字首條件的字串陣列內容。#必填參數:#$conf["checkString"],陣列字串,要檢查的字串們.$conf["search::getMeetConditionsStringMulti"]["checkString"]=$conf["pathIn"];#要檢查的字串陣列#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsStringMulti"]["frontWord"]="/";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.#$conf["tailWord"]="";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsStringMulti=search::getMeetConditionsStringMulti($conf["search::getMeetConditionsStringMulti"]);unset($conf["search::getMeetConditionsStringMulti"]);#如果檢測是否為絕對路徑失敗if($getMeetConditionsStringMulti["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsStringMulti;#增加額外的錯誤訊息$result["error"][]="僅接受絕對路徑字串";#回傳結果return $result;}#if end#函式說明:#將多個固定格式的字串分開,並回傳分開的結果#回傳的參數:#$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"]=$conf["pathIn"];#$conf["spiltSymbol"],字串,爲要以哪個符號作爲分割.$conf["stringProcess::spiltMutiString"]["spiltSymbol"]="/";$spiltMutiString=stringProcess::spiltMutiString($conf["stringProcess::spiltMutiString"]);#如果分割所有路徑字串失敗if($spiltMutiString["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltMutiString;#回傳結果return $result;}#if end#初始化暫存每個路徑分割成的段數$spiltedPathCount=array();#取得每個路徑分割成的段數#針對每個 $spiltMutiString["spiltString"]for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){$spiltedPathCount[]=$spiltMutiString["spiltString"][$i]["dataCounts"];}#for end#取得所有路徑字串分割後的最小數量#涵式說明#找最小值,結果會回傳最小值#回傳的內容#$result["status"],執行是否正常,"true"為正常,"false"為不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["key"],最大值原先的key.#$result["value"],陣列裏面最小的數值.#必填參數:$conf["math::getMinValue"]["rawDataArray"]=$spiltedPathCount;#爲原始數據$getMinValue=math::getMinValue($conf["math::getMinValue"]);unset($conf["math::getMinValue"]);#如果取得最小數值失敗if($getMinValue["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$getMinValue;#回傳結果return $result;}#if end#初始化暫存每個路徑字串的前面幾個片段是相同的$samePartCount=0;#var_dump($getMinValue["value"]);#依據所有路徑字串分割後的最小數量for($j=0;$j<$getMinValue["value"];$j++){#初始化暫存第一個路徑的片段字串$firstPathPart="";#針對每個 $spiltMutiString["spiltString"]for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){#暫存分割的字串$spiltedPath=$spiltMutiString["spiltString"][$i];#如果是第一個路徑if($i==0){#取得第一個路徑的片段字串$firstPathPart=$spiltedPath["dataArray"][$j];}#if end#如果第$i+1個路徑片段不跟第1個路徑的片段字串一樣if($spiltedPath["dataArray"][$j]!=$firstPathPart){#讓最外層迴圈中止$getMinValue["value"]=-1;#跳出迴圈break;}#if end}#for end#代表每個路徑字串的第$j段是一樣的.$samePartCount=$j;}#for end#var_dump($samePartCount);#依據每個路徑for($i=0;$i<count($spiltMutiString["spiltString"]);$i++){#初始化儲存第$i+1個處理好的路徑字串$result["content"][$i]="";#依據 $samePartCount 與 路徑的段數for($j=$samePartCount;$j<$spiltMutiString["spiltString"][$i]["dataCounts"];$j++){#如果不是第一段if($j!=$samePartCount){#組裝每個路徑片段$result["content"][$i]=$result["content"][$i]."/".$spiltMutiString["spiltString"][$i]["dataArray"][$j];}#if end#反之為第一段else{#組裝每個路徑片段$result["content"][$i]=$result["content"][$i].$spiltMutiString["spiltString"][$i]["dataArray"][$j];}#else end}#for end}#for end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function delSamePathHead end/*#函式說明:#於本套件位置底下的tmp資料夾下建立與回傳暫存檔案名稱路徑#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"],暫存檔案的路徑與名稱.#$result["fileName"],暫存檔案的名稱.#$result["path"],暫存檔案的路徑.#必填參數:#無.#可省略參數:#$conf["content"],陣列,每行檔案的內容,預設為空陣列,不寫入任何資料.#$conf["contant"]=array();#參考資料:#無.#備註:#無.*/public static function createTempFile(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#取得參數$result["argu"]=$conf;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif(is_null($conf)){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#檢查參數#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],執行不正常結束的錯訊息陣列.#$result["simpleError"],簡單表示的錯誤訊息.#$result["function"],當前執行的函式名稱.#$result["argu"],設置給予的參數.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可省略參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");#$conf["mustBeFilledVariableName"]=array();#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null、any代表不指定變數形態.其中 resource也包含"resource (closed)".#$conf["mustBeFilledVariableType"]=array();#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["canNotBeEmpty"]=array();#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["skipableVariableCanNotBeEmpty"]=array();#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("content");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(array());#$conf["disallowAllSkipableVarIsEmpty"],字串,是否允許每個可省略參數都為空字串,預設為"true"允許,反之為"false".#$conf["disallowAllSkipableVarIsEmpty"]="";#$conf["disallowAllSkipableVarIsEmptyArray"],字串,是否允許每個可省略參數都為空陣列,預設為"true"允許,反之為"false".#$conf["disallowAllSkipableVarIsEmptyArray"]="";#$conf["disallowAllSkipableVarNotExist"],字串,是否不允許每個可省略參數都不存在,預設為"false"代表允許,反之為"true".#$conf["disallowAllSkipableVarNotExist"]="";#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料:#array_keys=>http://php.net/manual/en/function.array-keys.php#備註:#無.$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果執行失敗if($checkArguments["status"]==="false"){#設置執行異常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果檢查不通過if($checkArguments["passed"]==="false"){#設置執行異常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#取得相對於當前路徑的 tmp 目錄.exec("cd ".pathinfo(__FILE__)["dirname"]."/../../../var/qbpwcf/tmp;pwd;",$output,$status);#如果執行失敗if($status!==0){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="取得暫存目錄失敗";#回傳結果return $result;}#if end#設置預設的暫存目錄$defaultTmpDir=$output[0];#取得暫存檔案的路徑與名稱$result["content"]=tempnam($defaultTmpDir,"qbpwcf_tmpfile_");#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["argu"],使用的參數.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:#$conf["stringIn"],字串,要處理的字串.$conf["stringPorcess::delStrBeforeKeyWord"]["stringIn"]=$result["content"];#$conf["keyWord"],字串,特定字串.$conf["stringPorcess::delStrBeforeKeyWord"]["keyWord"]=$defaultTmpDir."/qbpwcf_tmpfile_";#可省略參數:#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.#$conf["recursive"]="true";#$conf["lastResult"],陣列,本函式前次執行的結果,若沒有找到關鍵字,則會改回傳該內容.#$conf["lastResult"]=$delStrBeforeKeyWord;#參考資料:#無.#備註:#無.$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringPorcess::delStrBeforeKeyWord"]);unset($conf["stringPorcess::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#取得檔案名稱$result["fileName"]=$delStrBeforeKeyWord["content"];#函式說明:#將字串特定關鍵字與其後面的內容剔除#回傳結果:#$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"]=$result["content"];#$conf["keyWord"],字串,特定字串.$conf["stringProcess::delStrAfterKeyWord"]["keyWord"]=$result["fileName"];#可省略參數:#$conf["deleteLastRepeatedOne"],字串,預設為"false";若為"true"則代表連續遇到同 $conf["keyWord"] 的內容,要將移除內容的起點往後移動到為後一個 $conf["keyWord"].#$conf["deleteLastRepeatedOne"]="";#參考資料:#無.#備註:#無.$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["path"]=$delStrAfterKeyWord["content"];#如果有內容要寫入if(!empty($conf["content"])){#函式說明:#將多行字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行函數的名稱.#必填參數:#$conf["fileName"],字串,爲要編輯的檔案名稱$conf["fileAccess::writeMultiLine"]["fileName"]=$result["content"];#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["content"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::writeMultiLine"]["fileArgu"]=__FILE__;#可省略參數:#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#參考資料:#無.#備註:#無.$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);unset($conf["fileAccess::writeMultiLine"]);#如果執行失敗if($writeMultiLine["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$writeMultiLine;#回傳結果return $result;}#if end}#if end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function createTempFile end/*#函式說明:#分割檔案,分割出來的檔案名稱編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["cmd"],執行的指令.#$result["content"],執行指令回傳的結果.#必填參數:#$conf["file"],字串,要分割的檔案名稱.$conf["file"]="";#可省略參數:#$conf["splitNameHead"],字串,分割成檔案的名稱開頭,預設為 $conf["file"]."-" .#$conf["splitNameHead"]="";#$conf["partSize"],字串,分割檔的大小為多少?可以為XMB,XGB,XKB,可參見split指令的說明,預設為50MB.#$conf["partSize"]="";#參考資料:#無.#備註:#需要有split指令*/public static function split(&$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變數須為陣列形態";#如果傳入的參數為 nullif($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("file");#$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("splitNameHead","partSize");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]",若後面需要加上內容,則可以再補上\",後面再補上要串接的內容.$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("\$conf[\"file\"]\"-","50MB");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php#建議:#增加可省略參數全部不能為空字串或空陣列的參數功能.$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查參數失敗if($checkArguments["status"]==="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果要分割的檔案存在if(file_exists($conf["file"])){#取得執行的指令$result["cmd"]="split -b ".$conf["partSize"]." '".$conf["file"]."' '".$conf["splitNameHead"]."'";#執行還原的指令exec($result["cmd"],$output,$status);#取得執行後的輸出$result["content"]=$output;}#if end#反之else{#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="要分割的檔案「".$conf["file"]."」不存在";#回傳結果return $result;}#else end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function split end/*#函式說明:#合併檔案,檔案編號為aa, ab ac...ba, bb, bc...,zx, zy, zz的順序.#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["cmd"],執行的指令.#$result["content"],執行指令回傳的結果.#必填參數:#$conf["filePartHead"],字串,分割檔案的名稱開頭.$conf["filePartHead"]="";#$conf["oriFileName"],字串,合併後的檔案名稱.$conf["oriFileName"]="";#可省略參數:#無#參考資料:#無.#備註:#需要有cat指令.#僅能在命令列執行.*/public static function merge(&$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變數須為陣列形態";#如果傳入的參數為 nullif($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("filePartHead","oriFileName");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","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["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#建議:#增加可省略參數全部不能為空字串或空陣列的參數功能.$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查參數失敗if($checkArguments["status"]==="false"){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#定義編號$charArray=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","v","u","w","x","y","z");#定義分割檔案的前置字串$filePartHead=$conf["filePartHead"];#要合併成的檔案名稱$oriFileName=$conf["oriFileName"];#初始化要執行合併的語法$restoreCmd="cat ";#有幾個編號就執行幾次for($i=0;$i<count($charArray);$i++){#有幾個編號就執行幾次for($j=0;$j<count($charArray);$j++){#如果該分割檔存在if(file_exists($filePartHead.$charArray[$i].$charArray[$j])){#串接要還原的分割檔$restoreCmd=$restoreCmd." '".$filePartHead.$charArray[$i].$charArray[$j]."'";}#if end#反之else{#如果是第一個分割檔就找不到if($i===0 && $j===0){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="找不到第一個分割檔「".$filePartHead.$charArray[$i].$charArray[$j]."」";#回傳結果return $result;}#if end#串接要還原成的檔案名稱$restoreCmd=$restoreCmd." > '".$oriFileName."'";#取得執行的指令$result["cmd"]=$restoreCmd;#執行還原的指令exec($restoreCmd,$output,$status);#取得執行後的輸出$result["content"]=$output;#結束回圈break 2;}#else end}#for end}#for end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function merge end/*#函式說明:#取得檔案的部分內容#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["cmd"],執行的指令.#$result["content"],取得的檔案內容.#$result["length"],取得的內容長度.#$result["EOF"],識別是否已經到檔案結尾,"true"代表是,"false"代表不是.#$result["mimeType"],檔案的 mime type.#必填參數:#$conf["file"],字串,檔案的路徑與名稱.$conf["file"]="";#$conf["fileArgu"],字串,__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["bytes"],整數字串,要讀取多少bytes.$conf["bytes"]="";#$conf["startIndex"],要從哪個bytes位置開始,起始點為0.$conf["startIndex"]="";#可省略參數:#無#參考資料:#無.#備註:#無*/public static function getFilePart(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif(is_null($conf)){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址,若"web"參數為"true",才會有該內容.#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=__FILE__;#可省略參數:#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".#$conf["web"]="true";#參考資料:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑#$result["varName"][$i]結果未實作$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果執行失敗if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果檔案不存在if($checkMultiFileExist["allExist"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#取得mimetype$mimetype=mime_content_type($conf["file"]);#取得檔案的 mime type$result["mimeType"]=$mimetype;#透過 dd 指令,取得部分內容.#函式說明:#呼叫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"]="dd";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("if=".$conf["file"],"bs=".$conf["bytes"],"count=1","status=none");#$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["escapeshellarg"]="false";#$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["content"]=$callShell["output"][0];#取得內容長度$result["length"]=strlen($result["content"]);#預設尚未到檔案結尾$result["EOF"]="false";#如果取得的內容長度小於預期if($result["length"]<$conf["bytes"]){#設置已經到檔案結尾了$result["EOF"]="true";}#if end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function getFilePart end/*#函式說明:#取得節點的資訊.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],檔案資訊陣列.#$result["content"]["is_folder"],是否為目錄,"true"代表是,"false"代表不是.#$result["content"]["ownerPerm"],檔案擁有者權限資訊.#$result["content"]["groupPerm"],檔案歸屬群組權限資訊.#$result["content"]["otherPerm"],檔案對於其他身份使用者的權限資訊.#$result["content"]["subElementCount"],目錄底下的檔案目錄數量.#$result["content"]["ownerName"],檔案擁有着資訊.#$result["content"]["groupName"],檔案所屬擁有着資訊.#$result["content"]["size"],檔案大小.#$result["content"]["modifyDate"],檔案變更年月日.#$result["content"]["modifyTime"],檔案變更時分秒.#$result["content"]["modifyTimeFloat"],檔案變更時間秒的float數值.#$result["content"]["timezone"],檔案變更時間的時區與UTC的差距.#必填參數:#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["file"],字串,要查看擁有者資訊的檔案.$conf["file"]="";#可省略參數:#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".#$conf["web"]="true";#參考資料:#fileowner=>http://php.net/manual/en/function.fileowner.php#posix_getpwuid=>http://php.net/manual/en/function.posix-getpwuid.php#備註:#無.*/public static function fileInfo(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["ileAccess::checkArguments"]["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("web");#$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("true");#$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["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#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「document_root」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddressV2"]["address"]=$conf["file"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddressV2"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],字串,"true"代表檔案是放在web環境;"false"是代表在檔案系統環境,預設為"true".$conf["fileAccess::getInternetAddressV2"]["web"]=$conf["web"];#備註:#建構中,fileSystemRelativePosition尚未實作,檢查參數尚未實作.$getInternetAddressV2=fileAccess::getInternetAddressV2($conf["fileAccess::getInternetAddressV2"]);unset($conf["fileAccess::getInternetAddressV2"]);#如果取得位置失敗if($getInternetAddressV2["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$getInternetAddressV2;#回傳結果return $result;}#if end#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($getInternetAddressV2["fileSystemAbsoulutePosition"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#$conf["web"],檔案是否位於網站上"true",若是在檔案系統則為"false",預設為"true".$conf["fileAccess::checkMultiFileExist"]["web"]="false";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查檔案存在失敗if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果檔案不存在if($checkMultiFileExist["allExist"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#透過ls指令取得檔案的資訊#函式說明:#呼叫shell執行系統命令,並取得回傳的內容.#回傳的結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["cmd"],執行的指令內容.#$result["fullCmd"],如果參數 $conf["inBackGround"] 為 "true" 則會回傳該值.#$result["output"],爲執行完二元碼後的輸出陣列,若 $conf["inBackGround"] 為 "true",則為當下的輸出.#$result["tmpFileOutput"],儲存輸出的暫村檔案名稱,若 $conf["inBackGround"] 為 "true" 則會回傳該值.#$result["running"],是否還在執行.#$result["pid"],pid#必填的參數#$conf["command"],字串,要執行的指令$conf["external::callShell"]["command"]="ls";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-l","--full-time","-d",$conf["file"]);#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").$conf["external::callShell"]["arguIsAddr"]=array("false","false","false","false");#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".$conf["external::callShell"]["escapeshellarg"]="true";#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.#$conf["username"]="";#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於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"]="";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.#參考資料:#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$callShell=external::callShell($conf["external::callShell"]);unset($conf["external::callShell"]);#如果執行失敗if($callShell["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#解析檔案資訊#-rwxrwx--x. 1 apache apache 65K 2017-04-16 22:53:19.044545806 +0800 fileAccessT.php#取得權限資訊 -rwxrwx--x$perm=substr($callShell["output"][0],0,strpos($callShell["output"][0],'.'));#如果是目錄if(substr($perm,0,1)==="d"){#設定為目錄$result["content"]["is_folder"]="true";}#if end#反之else{#設定不為目錄$result["content"]["is_folder"]="false";}#else end#解析檔案擁有者權限資訊$result["content"]["ownerPerm"]=substr($perm,1,3);#如果檔案擁有者名稱為空if(empty($result["content"]["ownerPerm"])){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#解析檔案歸屬群組權限資訊$result["content"]["groupPerm"]=substr($perm,4,3);#解析檔案對於其他身份使用者的權限資訊$result["content"]["otherPerm"]=substr($perm,7,3);#取得目錄底下的檔案目錄數量起始點$subElementStartPos=strpos($callShell["output"][0],' ');#取得目錄底下的檔案目錄數量結束點$subElementEndPos=strpos($callShell["output"][0],' ',$subElementStartPos+1);#取得目錄底下的檔案目錄數量$result["content"]["subElementCount"]=substr($callShell["output"][0],$subElementStartPos,$subElementEndPos-$subElementStartPos);#取得檔案擁有着資訊的起點$ownerNameStrPos=strpos($callShell["output"][0],' ',$subElementEndPos)+1;#取得檔案擁有着資訊的結束點$ownerNameEndPos=strpos($callShell["output"][0],' ',$ownerNameStrPos+1);#取得檔案擁有着資訊$result["content"]["ownerName"]=substr($callShell["output"][0],$ownerNameStrPos,$ownerNameEndPos-$ownerNameStrPos);#取取得檔案群組擁有者資訊的起點$groupNameStrPos=strpos($callShell["output"][0],' ',$ownerNameEndPos)+1;#取得檔案群組擁有者資訊的結束點$groupNameEndPos=strpos($callShell["output"][0],' ',$groupNameStrPos);#取得檔案群組擁有者資訊$result["content"]["groupName"]=substr($callShell["output"][0],$groupNameStrPos,$groupNameEndPos-$groupNameStrPos);#取得檔案大小的起點$sizeStrPos=strpos($callShell["output"][0],' ',$groupNameEndPos)+1;#取得檔案大小的結束點$sizeEndPos=strpos($callShell["output"][0],' ',$sizeStrPos);#取得檔案大小$result["content"]["size"]=substr($callShell["output"][0],$sizeStrPos,$sizeEndPos-$sizeStrPos);#取得檔案變更年月日的起點$modifyDateStrPos=strpos($callShell["output"][0],' ',$sizeEndPos)+1;#取得檔案變更年月日的結束點$modifyDateEndPos=strpos($callShell["output"][0],' ',$modifyDateStrPos);#取得檔案變更年月日$result["content"]["modifyDate"]=substr($callShell["output"][0],$modifyDateStrPos,$modifyDateEndPos-$modifyDateStrPos);#取得檔案變更時分秒的起點$modifyTimeStrPos=strpos($callShell["output"][0],' ',$modifyDateEndPos)+1;#取得檔案變更時分秒的結束點$modifyTimeEndPos=strpos($callShell["output"][0],'.',$modifyTimeStrPos);#取得檔案變更時分秒$result["content"]["modifyTime"]=substr($callShell["output"][0],$modifyTimeStrPos,$modifyTimeEndPos-$modifyTimeStrPos);#取得檔版變更時間秒的float數值起點$modifyTimeFloatStrPos=strpos($callShell["output"][0],'.',$modifyTimeEndPos)+1;#取得檔版變更時間秒的float數值結束點$modifyTimeFloatEndPos=strpos($callShell["output"][0],' ',$modifyTimeFloatStrPos);#取得檔版變更時間秒的float數值$result["content"]["modifyTimeFloat"]=substr($callShell["output"][0],$modifyTimeFloatStrPos,$modifyTimeFloatEndPos-$modifyTimeFloatStrPos);#取得時區起始點$timezoneStrPos=strpos($callShell["output"][0],' ',$modifyTimeFloatEndPos)+1;#取得時區結束點$timezoneEndPos=strpos($callShell["output"][0],' ',$timezoneStrPos)+1;#取得檔案變更時間的時區與UTC的差距.$result["content"]["timezone"]=substr($callShell["output"][0],$timezoneStrPos,$timezoneEndPos-$timezoneStrPos);#設置執行正常$result["status"]="true";#回傳結果return $result;}#function fileInfo end/*#函式說明:#依據函數getListTree執行的結果,將其底下與其子目錄底下的特定檔案內容依據目錄層級輸出成html檔案#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],html檔案輸出的位置與名稱.#必填參數:#$conf["getListTree"],陣列變數,函數getListTree執行的結果.$conf["getListTree"]=$getListTree;#可省略參數:#$conf["fileToRead"],字串,要讀取的檔案名稱為何?預設為"help".#$conf["fileToRead"]="help";#$conf["output"],字串,輸出的網頁檔案位置與名稱,副檔名html會自動補上,預設為"help".#$conf["output"]="help.html";#參考資料:#無.#備註:#建構中...*/public static function createHelpFile($conf){#初始化要回傳的結果$result=array();#設置當其函數名稱$result["function"]=__FUNCTION__;#如果 $conf 不為陣列if(gettype($conf)!="array"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"][]="\$conf變數須為陣列形態";#如果傳入的參數為 nullif($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[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填寫的參數:#$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("getListTree");#$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");#$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["variableCheck::checkArguments"]["canBeEmptyString"],必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true"。$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["variableCheck::checkArguments"]["skipableVariableName"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileToRead","output");#$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string");#$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("help","help");#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["variableCheck::checkArguments"]["arrayCountEqualCheck"][]=array("leaderWordArray","leaderWordOptionCountArray");#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php$checkResult=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果 $checkResult["status"] 等於 "fasle"if($checkResult["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $checkResult["passed"] 等於 "fasle"if($checkResult["passed"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$checkResult;#回傳結果return $result;}#if end#如果 $conf["getListTree"]["status"] 不存在if(!isset($conf["getListTree"]["status"])){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"][]="getListTree參數必須為getListTree函數執行後的結果";#回傳結果return $result;}#if end#如果 $conf["getListTree"] 執行失敗if($conf["getListTree"]["status"]=="false"){#設置錯誤識別$result["status"]="false";#設置錯誤訊息$result["error"]=$conf["getListTree"];#回傳結果return $result;}#if end#如果有目錄檔案if(isset($conf["getListTree"]["content"])){}#if end}#function createHelpFile end/*#函式說明:#嵌入pdf檔案到網頁上面#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],嵌入pdf檔案的語法#必填參數:#$conf["fileArgu"],字串,當前檔案的位置亦即__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["file"],字串,pdf檔案位置.$conf["file"]="";#可省略參數:#$conf["type"],字串,要用"iframe"還是"object"的方式嵌入pdf檔案,預設為"iframe".#$conf["type"]="iframe";#參考資料:#嵌入pdf到網頁=>https://stackoverflow.com/questions/14690000/embed-a-pdf-in-html5#備註:#如果是網址就會出錯.*/public static function embedPdf(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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("file","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="true";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("function");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("width","height");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("type");#$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("iframe");#$conf["arrayCountEqualCheck"],字串陣列,為檢查哪些陣列參數的元素數量要一樣,$conf["arrayCountEqualCheck"][$i]=array()為第$i組key為哪些的變數其元素數量要相等.#$conf["arrayCountEqualCheck"][]=array();#參考資料來源:#array_keys=>http://php.net/manual/en/function.array-keys.php#建議:#增加可省略參數全部不能為空字串或空陣列的參數功能.$checkArguments=variableCheck::checkArguments($conf["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查參數失敗if($checkArguments["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果參數檢查不通過if($checkArguments["passed"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#檢查檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱。#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".$conf["fileAccess::checkMultiFileExist"]["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查檔案是否存在失敗if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果檔案不存在if($checkMultiFileExist["allExist"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#產生 base64 的 pdf 編碼字串$base64pdf=base64_encode(file_get_contents($conf["file"]));#產生 base64 的 pdf 編碼字串 data$base64pdfData="data:application/pdf;base64,".$base64pdf;#判斷要用哪種方式嵌入pdfswitch($conf["type"]){#如果是用 object 方式case "object":#產生嵌入的語法$embedSyntax="<object style=\"width:100%;height:100%;\" data=\"".$base64pdfData."\"></object>";#取得語法$result["content"]=&$embedSyntax;#跳出 switchbreak;#預設default:#產生嵌入的語法$embedSyntax="<iframe style=\"width:100%;height:100%;\" src=\"".$base64pdfData."\"></iframe>";#取得語法$result["content"]=&$embedSyntax;}#switch end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function embedPdf end/*#函式說明:#用linux unzip去解壓縮zip檔案#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"]["each"],每個檔案的資訊.#$result["content"]["each"]["Length"][$i],各別檔案目錄的原始長度.#$result["content"]["each"]["Method"][$i],各別檔案目錄的壓縮方法.#$result["content"]["each"]["Size"][$i],各別檔案目錄的壓縮後長度.#$result["content"]["each"]["Cmpr"][$i],各別檔案目錄的壓縮率.#$result["content"]["each"]["Date"][$i],各別檔案目錄的最後修改日期.#$result["content"]["each"]["Time"][$i],各別檔案目錄的最後修改時間.#$result["content"]["each"]["CRC-32"][$i],各別檔案目錄的CRC-32檢查碼.#$result["content"]["each"]["Name"][$i],各別檔案目錄的路徑與名稱.#$result["content"]["total"],統整的資訊.#$result["content"]["Length"],總共的檔案長度.#$result["content"]["Size"],壓縮後的檔案長度.#$result["content"]["Cmpr"],平均壓縮率.#$result["content"]["count"],壓縮檔裡面總共的檔案跟目錄數目.#必填參數;#$conf["zip"],字串,要解壓縮的zip檔案.$conf["zip"]="";#$conf["fileArgu"],字串,__FILE__的內容.$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["extract"],字串,要解壓縮到那個路徑,預設為當前位置"./".#$conf["extract"]="";#備註:#建議加上特定邊碼的支援例如、單*/public static function unzip(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("zip","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("zip","fileArgu");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("extract");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("extract");#$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("./");#$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["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#檢查要解壓縮的檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["zip"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查檔案是否存在失敗if($checkMultiFileExist["status"]==="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果要解壓縮的檔案不存在if($checkMultiFileExist["allExist"]==="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#函式說明:#呼叫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#必填參數:#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="unzip";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-d",$conf["extract"],"-o","-q",$conf["zip"]);#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").#$conf["arguIsAddr"]=array();#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".$conf["external::callShell"]["escapeshellarg"]="true";#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.#$conf["username"]="";#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於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"]="";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.#參考資料:#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$callShell=external::callShell($conf["external::callShell"]);unset($conf["external::callShell"]);#如果執行cmd失敗if($callShell["status"]==="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#函式說明:#呼叫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#必填的參數#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="unzip";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-v",$conf["zip"]);#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").#$conf["arguIsAddr"]=array();#$conf["enablePrintDescription"],字串,是否要印出$conf["printDescription"]的內容,"true"代表要,"false"代表不要,預設為"false".#$conf["enablePrintDescription"]="true";#$conf["printDescription"],字串,執行該外部程式前要印出來的的文字,預設為$conf["command"]的內容.#$conf["printDescription"]="";#$conf["escapeshellarg"],字串,是否要啟用過濾參數,用了比較安全,但可能會出錯,"true"為啟用,"false"為不啟用,預設為"false".$conf["external::callShell"]["escapeshellarg"]="true";#$conf["username"],字串,要用什麼使用者來執行,預設為執行php的使用者,該參數不適用於apache環境.#$conf["username"]="";#$conf["password"],字串,與$conf["username"]搭配的使用者密碼,預設不使用密碼,該參數不適用於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"]="";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.#參考資料:#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$callShell=external::callShell($conf["external::callShell"]);unset($conf["external::callShell"]);#如果執行cmd失敗if($callShell["status"]==="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#取得輸出的內容陣列$unzipInfo=$callShell["output"];/*Length Method Size Cmpr Date Time CRC-32 Name-------- ------ ------- ---- ---------- ----- -------- ----4194304 Defl:X 2507269 40% 05-04-2002 17:30 9386a740 PS2 Bios 30004R V6 Pal.bin4 Defl:X 6 -50% 05-15-2005 06:45 054a6ec2 PS2 Bios 30004R V6 Pal.MEC1024 Defl:X 22 98% 06-25-2005 14:55 3493bb06 PS2 Bios 30004R V6 Pal.NVM199680 Defl:X 70524 65% 06-02-2004 16:50 2c3bcd32 rom1.bin4194304 Defl:X 2637496 37% 02-20-2005 21:12 6f8e3c29 SCPH-70004_BIOS_V12_PAL_200.BIN3145728 Defl:X 3138427 0% 02-20-2005 21:12 bf3cbc65 SCPH-70004_BIOS_V12_PAL_200.EROM1024 Defl:X 706 31% 02-20-2005 21:12 a8d51ead SCPH-70004_BIOS_V12_PAL_200.NVM524288 Defl:X 149924 71% 02-20-2005 21:12 0e8797c0 SCPH-70004_BIOS_V12_PAL_200.ROM1524288 Defl:X 149924 71% 02-20-2005 21:12 0e8797c0 SCPH-70004_BIOS_V12_PAL_200.ROM24194304 Defl:X 2213105 47% 10-18-2000 06:06 b7ef81a9 scph10000.bin1024 Defl:X 11 99% 01-01-2005 00:42 efb5af2e scph10000.NVM4194304 Defl:X 2511182 40% 06-27-2003 10:51 a19e0bf5 scph39001.bin4 Defl:X 6 -50% 05-14-2005 16:00 054a6ec2 scph39001.MEC1024 Defl:X 20 98% 05-31-2005 16:09 e14a6cd6 scph39001.NVM-------- ------- --- -------21175304 13378622 37% 14 files*/#取得行數$lineCount=count($unzipInfo);#取得標題#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$unzipInfo[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"]==="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#取得標題欄位$titles=$spiltString["dataArray"];#取得標題欄位數目$titleCount=$spiltString["dataCounts"];#針對每列輸出for($i=3;$i<$lineCount-2;$i++){#取得各欄位的內容#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$unzipInfo[$i];#要處理的字串。$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#取得各欄位的內容$cols=$spiltString["dataArray"];#取得欄位的數目$colsCount=$spiltString["dataCounts"];#如果實際抓出的內容欄位數量大於標題欄位數量,代表檔案/目錄名稱含有空格if($colsCount>$titleCount){#新的檔案名稱$newFileName="";#針對每個多出的欄位for($j=$titleCount;$j<$colsCount;$j++){#串接屬於檔案名稱的部分$newFileName=$newFileName.$cols[$j];#如果不是最後一個項目if($j!==$colsCount-1){#增加空格$newFileName=$newFileName." ";}#if end}#for end#取代成對的檔案名稱$cols[$titleCount-1]=$newFileName;}#if end#針對每個欄位for($j=0;$j<$titleCount;$j++){#取得欄位內容$result["content"]["each"][$titles[$j]][]=$cols[$j];}#for end}#for end#取得 total 的輸出內容#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$unzipInfo[$lineCount-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"]==="false"){#設置執行不正常$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#取得各欄位的內容$cols=$spiltString["dataArray"];#取得總共的檔案長度$result["content"]["total"][$titles[0]]=$cols[0];#取得壓縮時的總共檔案長度$result["content"]["total"][$titles[2]]=$cols[1];#取得壓縮時的總共檔案長度$result["content"]["total"][$titles[3]]=$cols[2];#取得解壓縮出了多少檔案跟目錄$result["content"]["total"]["count"]=explode(" ",$cols[3])[0];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function unzip end/*#函式說明:#接收Range: bytes=0-499格式的header, 輸出檔案的片段或完整檔案.#回傳結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函式名稱.#必填參數:#$conf["filePath"],字串,檔案的路徑.$conf["filePath"]="";#可省略參數:#$conf["fileName"],字串,顯示的檔案名稱,預設為basename($conf["filePath"]);#$conf["fileName"]="";#參考資料:#https://gdfan1114.wordpress.com/2015/01/14/php-%E5%AF%A6%E4%BD%9C%E6%94%AF%E6%8F%B4-http-%E7%BA%8C%E5%82%B3%E5%8A%9F%E8%83%BD/#http://php.net/manual/en/function.filemtime.php#http://php.net/manual/en/function.connection-status.php#http://php.net/manual/en/function.fread.php#備註:#請勿在運行該函式前印出任何內容,這是要給用戶端接收的內容.*/public static function partDownload(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("filePath");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$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["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("fileName");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("fileName");#$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(null);#$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["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查參數失敗if($checkArguments["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果檢查參數不通過if($checkArguments["passed"]==="false"){#設置執行失敗$result["status"]="false";#設置執行錯誤$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果沒有設置 $conf["fileName"]if(!isset($conf["fileName"])){#取得檔案名稱$filename=basename($conf["filePath"]);}#if end#反之else{#取得設定好的檔案名稱$filename=&$conf["fileName"];}#else end#取得檔案路徑$location=$conf["filePath"];#取得mimetype$mimetype=mime_content_type($location);#如果檔案不存在if(!file_exists($location)){#提示找不到檔案header("HTTP/1.1 404 Not Found");#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="檔案 ".$location." 不存在.";#回傳結果return $result;}#if end#取得檔案的bytes長度$size = filesize($location);#取得檔案的最後變更日期$time = date('r', filemtime($location));#讀取檔案的2元碼內容$fm = @fopen($location, 'rb');#如果開啟檔案失敗if(!$fm){#提示錯誤header("HTTP/1.1 505 Internal server error");#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="開啟檔案 ".$location." 失敗.";#回傳結果return $result;}#if end#初始化要提供的bytes長度起始點$begin = 0;#初始化要提供的bytes長度結束點$end = $size - 1;#如果有接收到 'HTTP_RANGE' 的 header 訊息if(isset($_SERVER['HTTP_RANGE'])){#接收到的範例#Range: bytes=0-499#取得要求的bytes位置範圍sscanf($_SERVER['HTTP_RANGE'], "bytes=%d-%d",$begin,$end);#如果 $begin 或 $end 有缺if(!isset($begin) || !isset($end)){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";#回傳結果return $result;}#if end#如果 $begin 沒有小於等於 $endif(!($begin<=$end)){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="header \"Range\" 的數值格式為 \"bytes=0-499\"";#回傳結果return $result;}#if end}#if end#提示 200 okheader('HTTP/1.1 200 OK');#提示 mimetypeheader("Content-Type: $mimetype");#要先驗證cache中的資料,取得的內容放在快取的時間為0header('Cache-Control: public, must-revalidate, max-age=0');#提示不要cacheheader('Pragma: no-cache');#提示接收的 Ranges 單位為 bytesheader('Accept-Ranges: bytes');#數值傳輸的內容長度為多少header('Content-Length:' . (($end - $begin) + 1));#提示內容為檔案的哪邊到哪邊與總共的長度header("Content-Range: bytes $begin-$end/$size");#提示檔案的名稱header("Content-Disposition: inline; filename=$filename");#提示用2元碼傳輸header("Content-Transfer-Encoding: binary");#提示檔案最後變更日期header("Last-Modified: $time");#初始化當前位置$cur = $begin;#指定讀取的起始點為 $beginfseek($fm, $begin, 0);#讀取內容, 若不是檔案結尾, 且當前位置($cur)小於等於 本次要提供的長度結尾($end), 且connection_status為0while(!feof($fm) && $cur<=$end && (connection_status()===0)){#一次最多印出 1024*16bytes 的長度,若剩下長度不足則只印出剩下的長度.echo fread($fm, min(1024 * 16, ($end - $cur) + 1));#更改位置$cur += 1024 * 16;}#while end}#function partDownload end/*#函式說明:#尋找檔案.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["warning"],警告訊息陣列.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["found"],是否有找到可以轉換的檔案,"true"代表有;"false"代表沒有.#$result["content"],找到的檔案陣列.#必填參數:#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.$conf["keyWord"]="";#$conf["path"],字串陣列,虛擬硬碟檔案的搜尋路徑,預設為當前路徑.$conf["path"]=array();#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#參考資料:#http://php.net/manual/en/function.glob.php#備註:#無.*/public static function findFile(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path","keyWord","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array","string","string");#$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["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["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#檢查要搜尋的路徑是否都存在#函式說明:#s檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["self::checkMultiFileExist"]["fileArray"]=$conf["path"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["self::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=self::checkMultiFileExist($conf["self::checkMultiFileExist"]);unset($conf["self::checkMultiFileExist"]);#如果檢查目錄存在失敗if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果目錄不存在if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果有路徑不存在if($checkMultiFileExist["allExist"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#設置提示有路徑不存在的訊息$result["warning"][]="參數path的路徑沒有每個都存在";#回傳結果return $result;}#if end#預設沒有找到檔案$result["found"]="false";#針對每個要搜尋的路徑foreach($conf["path"] as $path){#函式說明:#用find指令尋找檔案#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["found"],是否有找到符合的檔案,"true"代表有;"false"代表沒有.#$result["content"],找到的檔案陣列.#必填參數:#$conf["keyWord"],字串,要搜尋的檔案關鍵字,可用"*"符號,例如"*.qcow2",就代表檔案名成為"qcow2"結尾的檔案.$conf["cmd::find"]["keyWord"]=$conf["keyWord"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["cmd::find"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["path"],字串,搜尋的路徑,預設為"/".$conf["cmd::find"]["path"]=$path;#$conf["fileOnly"],字串,"true"代表只要找檔案,"false"代表.$conf["cmd::find"]["fileOnly"]="true";#參考資料:#http://php.net/manual/en/function.glob.php$find=cmd::find($conf["cmd::find"]);unset($conf["cmd::find"]);#如果尋找檔案失敗if($find["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$find;#回傳結果return $result;}#if end#如果有找到符合的檔案if($find["found"]==="true"){#設置有找到檔案$result["found"]="true";#針對每個找到的檔案foreach($find["content"] as $filtedFile){#設置有找到的檔案$result["content"][]=$filtedFile;}#foreach end}#if end}#foreach end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function findFile end/*#函式說明:#判斷檔案位於哪個分割區#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["content"],找到的檔案所屬分割區資訊.#必填參數:#$conf["file"],字串,檔案的路徑與名稱.$conf["file"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function addrInMountPoint(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$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["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["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#函式說明:#透過lsblk指令的輸出取得已經掛載的blk.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["content"],lsblk的輸出內容.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["cmd::lsblk"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#無.$lsblk=cmd::lsblk($conf["cmd::lsblk"]);unset($conf["cmd::lsblk"]);#如果執行失敗if($lsblk["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$lsblk;#回傳結果return $result;}#if end#將 $conf["file"] 轉換成絕對路徑#函式說明:#將檔案的位置名稱變成網址,也可以取得檔案位於伺服器上檔案系統的絕對位置.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],網址,若是在命令列執行,則為"null".#$result["webPathFromRoot"],相對於網頁根目錄的路徑.#$result["fileSystemAbsoulutePosition"],針對伺服器端的絕對位置,亦即從網頁「/」目錄開始的路徑.#$result["fileSystemRelativePosition"],針對伺服器檔案系統的相對位置.#必填參數:#$conf["address"],字串,檔案的相對位置,若為絕對位置則會自動轉換成相對位置.$conf["fileAccess::getInternetAddress"]["address"]=$conf["file"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::getInternetAddress"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";$getInternetAddress=fileAccess::getInternetAddress($conf["fileAccess::getInternetAddress"]);unset($conf["fileAccess::getInternetAddress"]);#如果執行失敗if($getInternetAddress["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$getInternetAddress;#回傳結果return $result;}#if end#使用絕對位置作為輸入字串#函式說明:#尋找字串是否存在對應的關鍵字,且符合的最常關鍵字為何?#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["function"],當前執行的函式名稱.#$result["argu"],所使用的參數.#$result["founded"],是否有找到關鍵字,"true"代表有找到,"false"代表沒有找到.#$result["content"],最符合的字串完整內容.#必填參數:#$conf["input"],字串,要比對的字串陣列.$conf["search::findLikelyStr"]["input"]=$getInternetAddress["fileSystemAbsoulutePosition"];#$conf["keyWord"],字串陣列,要搜尋的關鍵字.$conf["search::findLikelyStr"]["keyWord"]=$lsblk["content"]["MOUNTPOINT"];$findLikelyStr=search::findLikelyStr($conf["search::findLikelyStr"]);unset($conf["search::findLikelyStr"]);#如果執行失敗if($findLikelyStr["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$findLikelyStr;#回傳結果return $result;}#if end#如果找不到歸屬的分割區if($findLikelyStr["found"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$findLikelyStr;#回傳結果return $result;}#if end#設置歸屬的分割區資訊$result["content"]=$findLikelyStr["content"];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function addrInMountPoint end/*#函式說明:#取得檔案的副檔名#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["content"],副檔名.#$result["name"],不含副檔的名稱.#$result["fullName"],含副檔的名稱.#$result["path"],檔案所處的路徑.#必填參數:#$conf["file"],字串,檔案的路徑與名稱.$conf["file"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function getExtension(&$conf=array()){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$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["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["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#初始化檔案的路徑$result["path"]="./";#用 "/" 來分割字串#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$conf["file"];#要處理的字串。$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#初始化含副檔名的檔案名稱$result["fullName"]=$conf["file"];#如果有"/"存在if($spiltString["found"]==="true"){#取得含副檔名的檔案名稱$result["fullName"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#取得檔案的路徑$result["path"]=substr($conf["file"],0,strlen($conf["file"])-strlen($result["fullName"]));}#if end#用 "." 來分割字串#函式說明:#將固定格式的字串分開,並回傳分開的結果。#回傳結果:#$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"]=$result["fullName"];#要處理的字串。$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#預設副檔名為 ""$result["content"]="";#預設不含副檔名的檔案名稱$result["name"]=$result["fullName"];#如果有"."存在if($spiltString["found"]==="true"){#取得含副檔名$result["content"]=$spiltString["dataArray"][$spiltString["dataCounts"]-1];#取得不含副檔名的檔案名稱$result["name"]=substr($result["fullName"],0,strlen($result["fullName"])-strlen($result["content"])-1);}#if end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function getExtension end/*#函式說明:#從檔案尾部開始讀取#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["content"],讀取到的內容陣列.#$result["totalLineCount"],檔案的總共行數.#$result["lines"],取得輸出的行數.#$result["lineNum"],取得當前行數.#必填參數:#$conf["file"],字串,檔案的路徑與名稱.$conf["file"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#可省略參數:#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".#$conf["web"]="false";#$conf["line2start"],字串,從第幾列開始,預設為總行書減去linesPerTime+1.#$conf["line2start"]="";#$conf["linesPerTime"],字串,一次最多讀取幾列,預設爲10列.#$conf["linesPerTime"]="10";#參考資料:#無.#備註:#無.*/public static function tail(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web","line2start","linesPerTime");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web","line2start","linesPerTime");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array("false",null,"10");#$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["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#檢查檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".#$conf["disableWebSearch"]="false";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".#$conf["userDir"]="true";#$conf["web"],字串,"true"代表位網頁系統,"false"為檔案系統,預設為"false".$conf["fileAccess::checkMultiFileExist"]["web"]=$conf["web"];#參考資料來源:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果執行失敗if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果檔案無法存取if($checkMultiFileExist["allExist"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#取得檔案的行數#函式說明:#呼叫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"],執行結束後的代碼.#必填的參數#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="cat";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array($conf["file"],"|","wc","-l");#$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".$conf["external::callShell"]["escapeshellarg"]="true";#$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";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.#參考資料:#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$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["totalLineCount"]=$callShell["output"][0];#如果未設置 $conf["line2start"]if(!isset($conf["line2start"])){#$conf["line2start"]為總行數減去一次要看的行數減1$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;}#if end#如果開始行數小於1if($conf["line2start"]<1){#$conf["line2start"]為總行數減去一次要看的行數減1$conf["line2start"]=$result["totalLineCount"]-$conf["linesPerTime"]+1;}#if end#如果開始行數小於1if($conf["line2start"]<1){#$conf["line2start"]為1$conf["line2start"]=1;}#if end#取得指定範圍的行數#取得檔案的行數#函式說明:#呼叫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"],執行結束後的代碼.#必填的參數#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="sed";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-n",$conf["line2start"].",".($conf["line2start"]+$conf["linesPerTime"]-1)."p",$conf["file"]);#$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".$conf["external::callShell"]["escapeshellarg"]="true";#$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";#備註:#不是所有指令都能用apache的身份執行,目前已知java,javac指令無法執行,使用root身份可能會被selinux阻擋.#參考資料:#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$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["lines"]=count($callShell["output"]);#取得目前的輸出內容$result["content"]=$callShell["output"];#取得當前行數$result["lineNum"]=$conf["line2start"]+$result["lines"]-1;#如果當前行號小於總行數if($result["lineNum"]<$result["totalLineCount"]){#設置還有剩餘的內容$result["left"]="true";}#if end#反之else{#設置無剩餘的內容$result["left"]="false";}#else end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function tail end/*#函式說明:#解析PHP檔案裡面的變數.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["content"],找到的變數內容陣列,若有多個變數則會用array來表示.#必填參數:#$conf["file"],字串,檔案的路徑與名稱.$conf["file"]="";#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileArgu"]=__FILE__;#$conf["varName"],字串陣列,要搜尋的變數名稱,例如要搜尋變數$email則輸入"email".$conf["varName"]=array();#可省略參數:#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false",預設為"false".#$conf["web"]="true";#參考資料:#https://www.php.net/manual/en/function.parse-str.php#備註:#無.*/public static function parseVaraiableInPHPfile(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("file","fileArgu","varName");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string","array");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file","fileArgu","varName");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");#$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("false");#$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["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#初始化儲存解析出來的變數內容$result["content"]=array();#讀取檔案#函式說明:#依據行號分隔抓取檔案的內容,結果會回傳一個陣列#回傳的變數說明:#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.#$result["error"],錯誤訊息提示.#$result["warning"],警告訊息.#$result["function"],當前執行的函數名稱.#$result["fileContent"],爲檔案的內容陣列.#$result["lineCount"],爲檔案內容總共的行數.#$result["fullContent"],為檔案的完整內容.#$result["base64data"],為檔案的base64內容.#$result["mimeType"],為檔案的mime type.#必填參數:#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.$conf["ileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["ileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".$conf["ileAccess::getFileContent"]["web"]=$conf["web"];#參考資料:#file(),取得檔案內容的行數.#file=>http:#php.net/manual/en/function.file.php#rtrim(),剔除透過file()取得每行內容結尾的換行符號.#filesize=>http://php.net/manual/en/function.filesize.php$getFileContent=fileAccess::getFileContent($conf["ileAccess::getFileContent"]);unset($conf["ileAccess::getFileContent"]);#如果讀取檔案失敗if($getFileContent["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$getFileContent;#回傳結果return $result;}#if end#針對每列檔案內容foreach($getFileContent["fileContent"] as $line){#針對每個要搜尋的變數foreach($conf["varName"] as $keyWord){#如果關鍵字小於被搜尋的字串長度if( strlen($line) < strlen($keyWord)+1 ){#跳過continue;}#if end#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["returnString"],爲符合字首條件的字串內容。#$result["argu"],使用的參數.#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$line;#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["frontWord"]="$".$keyWord;#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["tailWord"]=";";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果失敗if($getMeetConditionsString["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果有找到關鍵字if($getMeetConditionsString["founded"]==="true"){#剔除變數名稱#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:#$conf["stringIn"],字串,要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$line;#$conf["keyWord"],字串,特定字串.$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="$".$keyWord;#可省略參數:#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.#$conf["recursive"]="true";#參考資料:#無.#備註:#無.$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);unset($conf["stringProcess::delStrBeforeKeyWord"]);#如果執行失敗if($delStrBeforeKeyWord["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$delStrBeforeKeyWord;#回傳結果return $result;}#if end#如果沒有找到應該存在的php變數if($delStrBeforeKeyWord["founded"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$delStrBeforeKeyWord;#回傳結果return $result;}#if end#剔除 "=" 前面的內容#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:#$conf["stringIn"],字串,要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];#$conf["keyWord"],字串,特定字串.$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="=";#可省略參數:#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.#$conf["recursive"]="true";#參考資料:#無.#備註:#無.$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"){#跳過continue;}#if end#剔除 value 前面的空白#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:#$conf["stringIn"],字串,要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$delStrBeforeKeyWord["content"];#$conf["keyWord"],字串,特定字串.$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]=" ";#可省略參數:#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,直到沒有關鍵字為止.$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";#參考資料:#無.#備註:#無.$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);unset($conf["stringProcess::delStrBeforeKeyWord"]);#如果執行失敗if($delStrBeforeKeyWord["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$delStrBeforeKeyWord;#回傳結果return $result;}#if end#取得找到的變數eval("\$result[\"content\"][\"".$keyWord."\"][]=".$delStrBeforeKeyWord["content"]);}#if end}#foreach end}#foreach end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function parseVaraiableInPHPfile end/*#函式說明:#開啟特定目錄,取得底下的檔案路徑清單.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["argu"],所使用的參數.#$result["content"],讀取到的內容陣列.#$result["content"][$i],第$i+1個結果.#$result["content"][$i]["name"],第$i+1個名稱.#$result["content"][$i]["dir"],第$i+1個檔案是否為資料夾.#$result["content"][$i]["info"],第$i+1個檔案的額外資訊.#$result["content"][$i]["size"],第$i+1個檔案的大小(bytes).#必填參數:#$conf["path"],字串,要取得檔案資訊的所屬路徑.$conf["path"]="";#可省略參數:#無.#參考資料#無.#備註:#無.*/public static function listInfo(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");#$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("false");#$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["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#初始化儲存解析出來的變數內容$result["content"]=array();#取得特定位置的資訊$pathInfo=@dir($conf["path"]);#如果取得路徑資訊失敗if($pathInfo===false){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"][]="無法存取路徑(".$conf["path"].")";#回傳結果return $result;}#if end#讀取底下一個檔案,暫存到 $tmpItem 裡面,且當結果不為 false 時進入迴圈.while(false !== $tmpItem = $pathInfo->read()){#宣告儲存資訊的變數$item=array();#儲存名稱$item["name"]=$tmpItem;#預設不為資料夾$item["dir"]="false";#若為資料夾if(is_dir($conf["path"]."/".$tmpItem)){#設置為"true"$item["dir"]="true";}#if end#取得檔案識別器$finfo = finfo_open(FILEINFO_MIME);#取得 info$item["info"]=@finfo_file($finfo,$conf["path"]."/".$tmpItem);#取得檔案大小$item["size"]=filesize($conf["path"]."/".$tmpItem);#close connectionfinfo_close($finfo);#記錄該檔案資訊$result["content"][]=$item;}#while end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function listInfo end/*#函式說明:#取得目錄底下的詳細資訊.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["size"],該清單的大小,單位為bytes.#$result["dataCount"],該清單的長度.#$result["path"],字串,檢視的路徑,必為"/"結尾.#$result["content"],指定目錄底下的所有檔案資訊.#$result["content"][$i]["nType&permission"],第$i個節點類型、權限.#$result["content"][$i]["nType"],第$i個節點類型,"-"代表檔案,"d"代表資料夾.#$result["content"][$i]["permission"],第$i個節點權限.#$result["content"][$i]["ownByUser"],第$i個節點擁有者賬號.#$result["content"][$i]["ownByGroup"],第$i個節點擁有者群組.#$result["content"][$i]["bytes"],第$i個節點大小.#$result["content"][$i]["date"],第$i個節點最後變更日期.#$result["content"][$i]["time"],第$i個節點最後異動時間.#$result["content"][$i]["timeDetail"],第$i個節點最後異動詳細時間.#$result["content"][$i]["timezone"],第$i個節點的時區.#$result["content"][$i]["name"],第$i個節點的名稱.#$result["content"][$i]["secondName"],第$i個節點為檔案時,若有附檔名,會記錄在這.#$result["content"][$i]["mimeType"],第$i個節點為檔案且可以讀取時,會有 mime type 可取得.#必填參數:#$conf["path"],字串,要檢視的路徑,若非"/"結尾,會自動補上.$conf["path"]="";#可省略參數:#無.#參考資料:#https://www.businessweekly.com.tw/careers/Blog/14307#備註:#無.*/public static function ls(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif(is_null($conf)){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$reuslt["error"],執行不正常結束的錯訊息陣列.#$result["simpleError"],簡單表示的錯誤訊息.#$result["function"],當前執行的函式名稱.#$result["argu"],設置給予的參數.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可省略參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("path");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$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["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["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果執行失敗if($checkArguments["status"]==="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果參數檢查不通過if($checkArguments["passed"]==="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$checkArguments;#回傳結果return $result;}#if end#確認 $conf["path"] 是否為 "/" 結尾#函式說明:#取得符合特定字首與字尾的字串#回傳結果:#$result["status"],若爲"true"則代表執行正常;若爲"false"則代表執行失敗。#$result["function"],當前執行的函數名稱.#$result["error"],錯誤訊息陣列.#$result["founded"],若為"true"則代表有找到符合字首條件的結果;若爲"false"則代表沒有找到。#$result["content"],符合條件的字串,去掉字首字尾後的結果.#$result["returnString"],爲符合字首字、尾條件的字串內容。#$result["argu"],使用的參數.#必填參數:#$conf["checkString"],字串,要檢查的字串.$conf["search::getMeetConditionsString"]["checkString"]=$conf["path"];#可省略參數:#$conf["frontWord"],字串,用來檢查字首應該要有什麼字串,預設不指定.#$conf["frontWord"]="";#$conf["tailWord"],字串,用來檢查字尾應該要有什麼字串,預設不指定.$conf["search::getMeetConditionsString"]["tailWord"]="/";#參考資料:#str_spilt(),可以將字串依照字母分割成一個個陣列字串。#備註:#無.$getMeetConditionsString=search::getMeetConditionsString($conf["search::getMeetConditionsString"]);unset($conf["search::getMeetConditionsString"]);#如果執行失敗if($getMeetConditionsString["status"]==="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$getMeetConditionsString;#回傳結果return $result;}#if end#如果沒有 "/" 結尾if($getMeetConditionsString["founded"]==="false"){#於結尾加上 "/"$conf["path"]=$conf["path"]."/";}#if end#記錄真正的路徑$result["path"]=$conf["path"];#函式說明:#呼叫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").#必填參數:#$conf["command"],字串,要執行的指令.$conf["external::callShell"]["command"]="ls";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=__FILE__;#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("-al","--full-time","-t","-B",$conf["path"]);#$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"]);#debug#var_dump(__FILE__,__LINE__,$callShell);#如果執行失敗if($callShell["status"]==="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#初始化儲存檔案資訊為空$result["content"]=array();#針對每行輸出foreach($callShell["output"] as $index=>$line){#如果是第一筆if($index===0){#取得資料筆數$result["dataCount"]=explode(" ",$line)[0];#換下一輪continue;}#if end#函式說明:#將固定格式的字串分開,並回傳分開的結果.#回傳結果:#$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"]=$line;#$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#如果分割好的數量小於8if($spiltString["dataCounts"]<8){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#初始化要儲存的檔案資訊陣列$fileInfo=array();#取得 節點類型、權限$fileInfo["nType&permission"]=$spiltString["dataArray"][0];#剔除結尾的 "."$fileInfo["nType&permission"]=substr($fileInfo["nType&permission"],0,strlen($fileInfo["nType&permission"])-1);#取得節點類型$fileInfo["nType"]=$fileInfo["nType&permission"][0];#取得節點權限$fileInfo["permission"]=substr($fileInfo["nType&permission"],1);#取得擁有者賬號$fileInfo["ownByUser"]=$spiltString["dataArray"][2];#取得群組擁有者群組$fileInfo["ownByGroup"]=$spiltString["dataArray"][3];#取得size$fileInfo["bytes"]=$spiltString["dataArray"][4];#取得最後異動日期$fileInfo["date"]=$spiltString["dataArray"][5];#取得最後異動時間$fileInfo["time"]=explode(".",$spiltString["dataArray"][6])[0];#取得最後異動的詳細時間$fileInfo["timeDetail"]=$spiltString["dataArray"][6];#取得timezone資訊$fileInfo["timezone"]=$spiltString["dataArray"][7];#函式說明:#將固定格式的字串分開,並回傳分開的結果.#回傳結果:#$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"]=$line;#$conf["spiltSymbol"],字串,爲以哪個符號作爲分割.$conf["stringProcess::spiltString"]["spiltSymbol"]=$fileInfo["date"]." ".$fileInfo["timeDetail"]." ".$fileInfo["timezone"];#可省略參數:#$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#如果分割好的數量小於8if($spiltString["dataCounts"]<2){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#取得節點名稱,剔除開頭的空白.$fileInfo["name"]=substr($spiltString["dataArray"][1],1);#排除 "." 跟 ".."if($fileInfo["name"]==="." || $fileInfo["name"]===".."){#跳過continue;}#if end#如果是檔案if($fileInfo["nType"]==="-"){#取得mime type$fileInfo["mimeType"]=@mime_content_type($conf["path"].$fileInfo["name"]);#如果讀取失敗if($fileInfo["mimeType"]===false){#通常為沒有權限#跳過該檔案continue;}#if end#確認檔案名稱中間含是否有 "."#函式說明:#取得關鍵字在字串的哪個位置(字首,字尾,中間)#回傳結果:#$result["status"],執行成功與否,若爲"true",代表執行成功,若爲"false"代表執失敗。#$result["error"],錯誤訊息陣列.#$result["function"],當前執行的函數名稱.#$result["found"],是否有關鍵字存在,若為"true",代表存在;反之為"false".#$result["argu"],傳入的參數.#$result["head"],關鍵字是否在字串的開頭,"true"代表是,"false"代表不是.#$result["tail"],關鍵字是否在字串的尾端,"true"代表是,"false"代表不是.#$result["center"],關鍵字是否在字串的中間,"true"代表是,"false"代表不是.#$result["indexS"],關鍵字在被搜尋字串的哪個位置開始.#$result["indexE"],關鍵字在被搜尋字串的哪個位置結束.#必填參數:#$conf["inputStr"],字串,被搜尋的字串.$conf["search::findKeyWordPosition"]["inputStr"]=$fileInfo["name"];#$conf["keyWord"],字串,關鍵字.$conf["search::findKeyWordPosition"]["keyWord"]=".";#可省略參數:#無.#參考資料:#http://php.net/manual/en/function.strpos.php#備註:#無.$findKeyWordPosition=search::findKeyWordPosition($conf["search::findKeyWordPosition"]);unset($conf["search::findKeyWordPosition"]);#如果執行失敗if($findKeyWordPosition["status"]==="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#如果含有 "." 存在if($findKeyWordPosition["found"]==="true"){#如果 "." 是在中間,不是在尾巴.if($findKeyWordPosition["center"]==="true" && $findKeyWordPosition["tail"]==="false"){#取得 "." 之後的內容#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["argu"],使用的參數.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#$result["deleted"],被移除的內容.#必填參數:#$conf["stringIn"],字串,要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$fileInfo["name"];#$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"]=$spiltString;#回傳結果return $result;}#if end#如果該存在的 "." 不存在if($delStrBeforeKeyWord["founded"]==="false"){#設置執行錯誤$result["status"]="false";#設置錯誤訊息$result["error"]=$spiltString;#回傳結果return $result;}#if end#取得附檔名$fileInfo["secondName"]=$delStrBeforeKeyWord["content"];}#if end}#if end}#if end#儲存檔案資訊$result["content"][]=$fileInfo;}#foreach end#設置清單的長度$result["dataCount"]=count($result["content"]);#設置執行正常$result["status"]="true";#回傳結果return $result;}#function ls end/*#函式說明:#將 ~ 轉換為家目錄路徑#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"],轉換好的內容.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileArgu"]=__FILE__;#可省略參數:#無.#參考資料:#https://www.businessweekly.com.tw/careers/Blog/14307#備註:#無.*/public static function tildeToPath(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("web");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");#$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("web");#$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("false");#$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["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#函式說明:#呼叫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"],執行結束後的代碼.#必填參數:#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="echo";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=array("~");#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").#$conf["arguIsAddr"]=array();#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.#$conf["plainArgu"]=array();#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".#$conf["useApostrophe"]=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阻擋.$callShell=external::callShell($conf["external::callShell"]);unset($conf["external::callShell"]);#如果執行失敗if($callShell["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$callShell;#回傳結果return $result;}#if end#如果沒有預期的輸出if(!isset($callShell["output"][0])){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"][]="沒有得到預期的輸出";#設置執行失敗訊息$result["error"][]=$callShell;#回傳結果return $result;}#if end#取得輸出$result["content"]=$callShell["output"][0];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function tildeToPath end/*#函式說明:#建立軟連結.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"],軟連結的資訊.#$result["cmd"],執行的指令陣列.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["linkTo"],字串,軟連結要指向哪邊.$conf["linkTo"]="";#可省略參數:#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.#$conf["path"]="";#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.#$conf["name"]="";#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.#$conf["overWrite"]="true";#參考資料:#無.#備註:#無.*/public static function createLink(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkTo");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false");#$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["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#如果是相對位置if(!(strpos($conf["linkTo"],"/")===0)){#將 $conf["linkTo"] 轉換為針對產生位置的相對位置.#函式說明:#將多個路徑字串變成相對於當前路徑的相對路徑字串#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["argu"],使用的參數.#$result["content"],字串陣列,多個轉換好的相對路徑字串.#必填參數:#$conf["path"],陣列字串,要轉換成相對路徑的字串.;$conf["fileAccess::getRelativePath"]["path"]=array($conf["linkTo"]);#$conf["fileArgu"],字串,當前路徑.$conf["fileAccess::getRelativePath"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["baseFrom"],字串,指定要依據哪個位置為起點的起始位置,預設不指定,代表使用當前路徑.$conf["fileAccess::getRelativePath"]["baseFrom"]=$conf["path"];#參考資料:#無.#備註:#無.$getRelativePath=fileAccess::getRelativePath($conf["fileAccess::getRelativePath"]);unset($conf["fileAccess::getRelativePath"]);#如果執行失敗if($getRelativePath["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$getRelativePath;#回傳結果return $result;}#if end/*#break pointvar_dump($conf);var_dump($getRelativePath);exit;*/#取得執行的指令$result["cmd"][]=$getRelativePath["cmd"];#取得正確的相對位置$conf["linkTo"]=$getRelativePath["content"][0];}#if end#初始化給 ln 指令的參數$paramsForLn=array("-s",$conf["linkTo"]);#函式說明:#將字串特定關鍵字與其前面的內容剔除#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$result["warning"],警告訊息鎮列.#$result["founded"],有無找到定字串"true"代表有,"false"代表沒有.#$result["function"],當前執行的函數名稱.#$result["oriStr"],要處理的原始字串內容.#$result["content"],處理好的的字串內容.#必填參數:#$conf["stringIn"],字串,要處理的字串.$conf["stringProcess::delStrBeforeKeyWord"]["stringIn"]=$conf["linkTo"];#$conf["keyWord"],字串,特定字串.$conf["stringProcess::delStrBeforeKeyWord"]["keyWord"]="/";#可省略參數:#$conf["recursive"],字串,預設為"false"代表找到一個關鍵字就會停止;"true"代表會即重複執行,知道沒有關鍵字為止.$conf["stringProcess::delStrBeforeKeyWord"]["recursive"]="true";#參考資料:#無.#備註:#無.$delStrBeforeKeyWord=stringProcess::delStrBeforeKeyWord($conf["stringProcess::delStrBeforeKeyWord"]);unset($conf["stringProcess::delStrBeforeKeyWord"]);#var_dump(__LINE__." ".print_r($delStrBeforeKeyWord,true));#如果執行失敗if($delStrBeforeKeyWord["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$delStrBeforeKeyWord;#回傳結果return $result;}#if end#如果沒有找到 "/"if($delStrBeforeKeyWord["founded"]==="false"){#設置 預設的 軟連名稱$softLink=$conf["linkTo"];}#if end#反之有 "/"else{#設置 預設的 軟連結名稱$softLink=$delStrBeforeKeyWord["content"];}#else end/*#break pointvar_dump(__LINE__." ".$softLink);exit;*/#預設欲建立的軟連結名稱$createdSoftLink=$softLink;#如果有設置 pathif(isset($conf["path"])){#確認 path 存在#函式說明:#建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限,要設定權限,必須為資料夾的擁有者.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#必填參數:#$conf["dirPositionAndName"]="";#新建的位置與名稱$conf["fileAccess::createNewFolder"]["dirPositionAndName"]=$conf["path"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::createNewFolder"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["dirPermission"],字串,新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.#$conf["dirPermission"]="";#參考資料:#mkdir=>http://php.net/manual/en/function.mkdir.php#chmod=>http://php.net/manual/en/function.chmod.php#參考資料:#無.#備註:#同 function createFolderAfterCheck.$createNewFolder=fileAccess::createNewFolder($conf["fileAccess::createNewFolder"]);unset($conf["fileAccess::createNewFolder"]);#如果執行失敗if($createNewFolder["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$createNewFolder;#回傳結果return $result;}#if end#var_dump(__LINE__." ".print_r($conf,true));#預設要加 slash$slash="/";#如果 path 為 "/" 結尾if($conf["path"][strlen($conf["path"])-1]==="/"){#不用 slash$slash="";}#if end#如果有設置 nameif(isset($conf["name"])){#指定軟連結要放在哪邊$paramsForLn[]=$conf["path"].$slash.$conf["name"];#更新欲建立的軟連結名稱$createdSoftLink=$conf["path"].$slash.$conf["name"];/*#break pointvar_dump($conf["path"],$softLink,$createdSoftLink);exit;*/}#if end#反之else{#指定軟連結要放在哪邊$paramsForLn[]=$conf["path"];#更新欲建立的軟連結名稱$createdSoftLink=$conf["path"].$slash.$softLink;/*#break pointvar_dump($conf["path"],$softLink,$createdSoftLink);exit;*/}#else end#var_dump($createdSoftLink);}#if end#反之如果有設置 nameelse if(isset($conf["name"])){#指定軟連結的名稱$paramsForLn[]=$conf["name"];#更新欲建立的軟連結名稱$createdSoftLink=$conf["name"];#var_dump(__LINE__." ".$createdSoftLink);}#if end/*# break pointvar_dump($createdSoftLink);exit;*/#如果要覆蓋既有的目標if($conf["overWrite"]==="true"){#函式說明:#移除檔案#回傳結果:#$result["status"],"true"代表移除成功,"false"代表移除失敗.#$result["error"],錯誤訊息陣列#$result["warning"],警告訊息陣列#$result["function"],當前執行的函數名稱#必填參數:#$conf["fileAddress"],字串,要移除檔案的位置.$conf["fileAccess::delFile"]["fileAddress"]=$createdSoftLink;#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑.$conf["fileAccess::delFile"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["commentsArray"],字串陣列,提示的文字描述,$conf["commentsArray"][$i]代表第($+1)行的描述.#$conf["commentsArray"]=array("");#$conf["allowDelSymlink"],字串,預設為"false",不移除軟連結;"true"代表要移除軟連結.$conf["fileAccess::delFile"]["allowDelSymlink"]="true";#$conf["allowDelFolder"],字串,預設為"false",不移除目錄;"true"代表要移除目錄.$conf["fileAccess::delFile"]["allowDelFolder"]="true";#參考資料:#無.#備註:#無.$delFile=fileAccess::delFile($conf["fileAccess::delFile"]);unset($conf["fileAccess::delFile"]);/*#break pointvar_dump($delFile);exit;*/#如果執行失敗if($delFile["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$delFile;#回傳結果return $result;}#if end}#if end#函式說明:#呼叫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"],執行結束後的代碼.#必填參數:#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="ln";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=$paramsForLn;#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").#$conf["arguIsAddr"]=array();#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.#$conf["plainArgu"]=array();#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".#$conf["useApostrophe"]=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["external::callShell"]["getErr"]="true";#$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阻擋.$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["cmd"][]=$callShell["cmd"];#初始化給 ls 指令的參數$paramsForLs=array("-l",$paramsForLn[count($paramsForLn)-1]);#取得軟連結的資訊#函式說明:#呼叫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"],執行結束後的代碼.#必填參數:#$conf["command"],字串,要執行的指令與.$conf["external::callShell"]["command"]="ls";#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["external::callShell"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["argu"],陣列字串,指令搭配的參數,預設為空陣列.$conf["external::callShell"]["argu"]=$paramsForLs;#$conf["arguIsAddr"],陣列字串,指令搭配的哪些參數為路徑,為路徑的參數會進行轉換以便符合呼叫當前函數的位置,預設不指定,若有3個參數,其中第3個參數為路徑,則表示為array("false","false","true").#$conf["arguIsAddr"]=array();#$conf["plainArgu"],字串陣列,哪幾個參數不要加上"",若為"true"則代表不用包;反之"false"則代表要包.#$conf["plainArgu"]=array();#$conf["useApostrophe"],字串陣列,如果有需要包住,則用「'」,而非「"」處理.前者為"true";後者為"false".#$conf["useApostrophe"]=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["external::callShell"]["getErr"]="true";#$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阻擋.$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["cmd"][]=$callShell["cmd"];#取得軟連結的資訊$result["content"]=$callShell["output"];#設置執行正常$result["status"]="true";#回傳結果return $result;}#function createLink end/*#函式說明:#針對特定目錄下的內容建立軟連結.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"],字串陣列,每個建立的軟連結資訊.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["linkToDir"],字串,軟連結要指向哪個目錄底下的內容.$conf["linkToDir"]="";#可省略參數:#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.#$conf["path"]="";#$conf["name"],字串陣列,軟連結的名稱,預設為 "linkToDir" 目錄底下的檔案或目錄名稱.若要指定特定檔案目錄的軟連結名稱,則可以用 $conf["name"][]=array("原始名稱","新的名稱"); 來指定.#$conf["name"]=array(array("oriName","newName"));#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.#$conf["overWrite"]="true";#參考資料:#無.#備註:#無.*/public static function createMultiLinkInDir(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","linkToDir");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("path","name","overWrite");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("path","name","overWrite");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("string","array","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(".",null,"false");#$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["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#函式說明:#取得目錄底下所有目錄與檔案清單.#回傳結果:#$result["status"],"true"爲建立成功,"false"爲建立失敗.#$result["error"],錯誤訊息陣列.#$result["function"],函數名稱.#$result["content"],陣列,目錄底下的檔案與子目錄.#$result["content"][$i]["name"],字串,目錄底下的檔案與子目錄的名稱.#$result["content"][$i]["folder"],字串,第$i+1個名稱為目錄還是檔案.#$result["folder"],字串,當前目標為目錄還是檔案"true"代表為目錄,"false"代表為檔案.#$result["position"],目前的位置.#必填參數:#$conf["position"],字串,目錄位置與名稱,「.」代表當前位置,「..」代表上一層.$conf["fileAccess::getList"]["position"]=$conf["linkToDir"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::getList"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#無#參考資料:#opendir=>http://php.net/manual/en/function.opendir.php#is_dir=>http://php.net/manual/en/function.is-dir.php#備註:#無.$getList=fileAccess::getList($conf["fileAccess::getList"]);unset($conf["fileAccess::getList"]);#如果檢查參數失敗if($getList["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$getList;#回傳結果return $result;}#if end#針對目標目錄底下的所有檔案foreach($getList["content"] as $oriName){#如果有設定 $conf["name"]if(isset($conf["name"])){#預設不指定新的軟連結名稱unset($newSoftLinkName);#針對每個原始目標的名稱foreach($conf["name"] as $customName){#如果是指定的目標if($oriName["name"]===$customName[0]){#設置新的軟連結名稱$newSoftLinkName=$customName[1];}#if end}#foreach end}#if end#建立軟連結#函式說明:#建立軟連結.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"],軟連結的資訊.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileAccess::createLink"]["fileArgu"]=$conf["fileArgu"];#$conf["linkTo"],字串,軟連結要指向哪邊.$conf["fileAccess::createLink"]["linkTo"]=$conf["linkToDir"]."/".$oriName["name"];#可省略參數:#$conf["path"],字串,軟連結要放在哪邊,預設為當前位置.$conf["fileAccess::createLink"]["path"]=$conf["path"];#如果有新的軟連結名稱if(isset($newSoftLinkName)){#$conf["name"],字串,軟連結的名稱,預設為 "linkTo" 參數的檔案或目錄名稱.$conf["fileAccess::createLink"]["name"]=$newSoftLinkName;}#if end#$conf["overWrite"],字串,"true"代表要移除既有的項目名稱,來重新建立軟連結;預設為"false"不進行處理.$conf["fileAccess::createLink"]["overWrite"]=$conf["overWrite"];#參考資料:#無.#備註:#無.$createLink=fileAccess::createLink($conf["fileAccess::createLink"]);unset($conf["fileAccess::createLink"]);#var_dump(__LINE__." ".print_r($createLink,true));#如果檢查參數失敗if($createLink["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$createLink;#回傳結果return $result;}#if end#儲存建立好的軟連結資訊$result["content"][]=$createLink["content"];}#foreach end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function createMultiLink end/*#函式說明:#更新檔案的內容.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函數名稱.#$result["content"],軟連結的資訊.#必填參數:#$conf["fileArgu"],字串,變數__FILE__的內容.$conf["fileArgu"]=__FILE__;#$conf["file"],字串,要更新的檔案位置與名稱.$conf["file"]="";#可省略參數:#$conf["overWriteWith"],字串陣列,要置換成什麼樣的內容,每個元素代表一行內容.#$conf["overWriteWith"]=array();#$conf["replaceWith"],字串陣列,要將什麼內容置換成什麼內容.#$conf["replaceWith"]=array(array("ori content","new content"),array("ori content","new content"),...);#$conf["replaceLike"],字串,預設為"false",代表要完全符合關鍵字才能進行整行替換;反之為"true".#$conf["replaceLike"]="false";#$conf["addToTailWhenNoMatch"],字串,預設為"false"不做事;若為"true",則代表若使用 "replaceWith" 參數但沒有符合條件的內容出現,則新增到檔案的尾端.#$conf["addToTailWhenNoMatch"]="false";#$conf["addToTailBeforeThat"],字串,當 "replaceWith" 參數有使用,且 "addToTailWhenNoMatch" 為 "true" 時,若有使用該參數,則會從尾端尋找符合條件的行內容,然後將 沒有符合 "replaceWith" 條件的內容新增在此之前.#$conf["addToTailBeforeThat"]="?\>";#參考資料:#無.#備註:#無.*/public static function updateFile(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif($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["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可以省略的參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("fileArgu","file");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.$conf["variableCheck::checkArguments"]["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["variableCheck::checkArguments"]["canNotBeEmpty"]=array("file");#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.$conf["variableCheck::checkArguments"]["skipableVariableCanNotBeEmpty"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");#$conf["skipableVariableName"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["skipableVariableName"]=array("overWriteWith","replaceWith","addToTailWhenNoMatch","addToTailBeforeThat","replaceLike");#$conf["skipableVariableType"],陣列字串,爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double");$conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array","array","string","string","string");#$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,null與代表不指定,若預設值是參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".$conf["variableCheck::checkArguments"]["skipableVarDefaultValue"]=array(null,null,"false",null,"false");#$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["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#檢查檔案是否存在#函式說明:#檢查多個檔案與資料夾是否存在.#回傳的結果:#$result["status"],執行正常與否,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息陣列.#$resutl["function"],當前執行的涵式名稱.#$result["argu"],使用的參數.#$result["allExist"],所有檔案皆存在的識別,"true"代表皆存在,"false"代表沒有全部都存在.#$result["varName"][$i],爲第$i個資料夾或檔案的路徑與名稱。#$result["varNameFullPath"][$i],爲第$i個資料夾或檔案的完整檔案系統路徑與名稱,如果不存在則代表路徑是網址.#$result["varNameWebPath"][$i],為第$i個資料夾或檔案的網址#$result["varExist"][$i],爲第$i個資料夾或檔案是否存在,"true"代表存在,"false"代表不存在。#必填參數:#$conf["fileArray"],陣列字串,要檢查是否存在的檔案有哪些,須爲一維陣列數值。$conf["fileAccess::checkMultiFileExist"]["fileArray"]=array($conf["file"]);#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::checkMultiFileExist"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["disableWebSearch"],"字串",是否取消「當檔案找不到時,改用catchWebContent類別的wget函數來檢查檔案是否存在於網路上」的功能,"false"不取消,若要取消該功能請設為"true",若抓到的內容為空字串則會視為檔案不存在,預設為"true".$conf["disableWebSearch"]="true";#$conf["userDir"],字串,網頁是否置放於家目錄底下,"true"為是,"false"為不是,預設為"true".$conf["userDir"]="false";#$conf["web"],字串,檔案是放在web就是"true",反之為檔案系統"false",預設為"true".$conf["web"]="false";#參考資料:#http://php.net/manual/en/function.file-exists.php#http://php.net/manual/en/control-structures.foreach.php#備註:#函數file_exists檢查的路徑為檔案系統的路徑#$result["varName"][$i]結果未實作$checkMultiFileExist=fileAccess::checkMultiFileExist($conf["fileAccess::checkMultiFileExist"]);unset($conf["fileAccess::checkMultiFileExist"]);#如果檢查參數失敗if($checkMultiFileExist["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果目標檔案不存在if($checkMultiFileExist["allExist"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$checkMultiFileExist;#回傳結果return $result;}#if end#如果有設置 overWriteWithif(isset($conf["overWriteWith"])){#函式說明:#將多行字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行函數的名稱.#必填參數:#$conf["fileName"],字串,爲要編輯的檔案名稱$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。$conf["fileAccess::writeMultiLine"]["inputString"]=$conf["overWriteWith"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#參考資料:#無.#備註:#無.$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);unset($conf["fileAccess::writeMultiLine"]);#如果執行失敗if($writeMultiLine["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$writeMultiLine;#回傳結果return $result;}#if end}#if end#如果有設置 "replaceWith"if(isset($conf["replaceWith"])){#取得檔案的內容#函式說明:#依據行號分隔抓取檔案的內容,結果會回傳一個陣列#回傳的變數說明:#$result["status"],執行是否成功,"true"代表成功;"fasle"代表失敗.#$result["error"],錯誤訊息提示.#$result["warning"],警告訊息.#$result["function"],當前執行的函數名稱.#$result["fileContent"],爲檔案的內容陣列.#$result["lineCount"],爲檔案內容總共的行數.#$result["fullContent"],為檔案的完整內容.#$result["base64data"],為檔案的base64內容.#$result["mimeType"],為檔案的mime type.#必填參數:#$conf["filePositionAndName"],字串,爲檔案的位置以及名稱.$conf["fileAccess::getFileContent"]["filePositionAndName"]=$conf["file"];#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::getFileContent"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["web"],是要取得網路上的檔案則為"true";反之則為"false".$conf["fileAccess::getFileContent"]["web"]="false";#參考資料:#file(),取得檔案內容的行數.#file=>http:#php.net/manual/en/function.file.php#rtrim(),剔除透過file()取得每行內容結尾的換行符號.#filesize=>http://php.net/manual/en/function.filesize.php#參考資料:#無.#備註:#無.$getFileContent=fileAccess::getFileContent($conf["fileAccess::getFileContent"]);unset($conf["fileAccess::getFileContent"]);#如果執行失敗if($getFileContent["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$getFileContent;#回傳結果return $result;}#if end#取得原始檔案的每行內容$oriFileContentByLine=&$getFileContent["fileContent"];#針對每個 replaceWith 條件foreach($conf["replaceWith"] as $replaceInfo){#預設尚未找到符合的關鍵字$foundKeyWord=false;#取得要替換的目標字串$oriStr=$replaceInfo[0];#取得要替換成的字串內容$newStr=$replaceInfo[1];#針對每行原始內容foreach($oriFileContentByLine as $index => $line){#函式說明:#檢查字串裡面有無指定的關鍵字#回傳結果:#$result["status"],"true"代表執行成功,"false"代表執行失敗。#$result["error"],錯誤訊息#$result["function"],當前執行的函數名稱.#$result["argu"],使用的參數.#$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。#$result["keyWordCount"],找到的關鍵字數量.#必填參數:#$conf["keyWord"],字串,想要搜尋的關鍵字.$conf["search::findKeyWord"]["keyWord"]=$oriStr;#$conf["string"],字串,要被搜尋的字串內容$conf["search::findKeyWord"]["string"]=$line;#可省略參數:#如果要完全符合關鍵字if($conf["replaceLike"]==="false"){#$conf["completeEqual"],字串,是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。$conf["search::findKeyWord"]["completeEqual"]="true";}#if end#參考資料:#無.#備註:#無.$findKeyWord=search::findKeyWord($conf["search::findKeyWord"]);unset($conf["search::findKeyWord"]);#如果執行失敗if($findKeyWord["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$findKeyWord;#回傳結果return $result;}#if end#如果有找到關鍵字if($findKeyWord["founded"]==="true"){#更新該行內容$oriFileContentByLine[$index]=$newStr;#設置有找到符合的關鍵字$foundKeyWord=true;}#if end}#foreach end#如果沒有找到關鍵字if($foundKeyWord===false){#如果要新增內容if($conf["addToTailWhenNoMatch"]==="true"){#如果有設置 addToTailBeforeThatif(isset($conf["addToTailBeforeThat"])){#預設沒有找到符合的關鍵字$foundKeyWord=false;#初始化要記錄要 append 回去的各行內容.$linesToAppend=array();#倒敘,針對每行內容for($i=count($oriFileContentByLine)-1;$i>=0;$i--){#儲存要 append 回去的行內容$linesToAppend[]=$oriFileContentByLine[$i];#如果找到關鍵字了if($oriFileContentByLine[$i]===$conf["addToTailBeforeThat"]){#設置有找到符合的關鍵字$foundKeyWord=true;#更新該行內容$oriFileContentByLine[$i]=$line;#倒敘陣列$linesToAppend=array_reverse($linesToAppend);#針對每行要 append 回去的內容foreach($linesToAppend as $lineToAppend){#append 行內容$oriFileContentByLine[]=$lineToAppend;}#foreach end}#if end}#for end#如果沒有找到關鍵字if($foundKeyWord===false){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"]="can't find \"".$conf["addToTailBeforeThat"]."\" to insert before it.";#回傳結果return $result;}#if end}#if end}#if end}#if end}#foreach end#函式說明:#將多行字串寫入到檔案#回傳結果:#$result["status"],"true"表示檔案寫入成功,"false"表示檔案寫入失敗.#$result["error"],錯誤訊息陣列.#$result["function"],當前執行函數的名稱.#必填參數:#$conf["fileName"],字串,爲要編輯的檔案名稱$conf["fileAccess::writeMultiLine"]["fileName"]=$conf["file"];#$conf["inputString"],字串陣列,爲要寫入到 $conf["fileName"] 裏面的內容. $conf["inputString"][$i] 代表第 $i+1 行。$conf["fileAccess::writeMultiLine"]["inputString"]=$oriFileContentByLine;#$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑$conf["fileAccess::writeMultiLine"]["fileArgu"]=$conf["fileArgu"];#可省略參數:#$conf["fileAccess::writeMultiLine"]["writeMethod"]="w";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。#參考資料:#無.#備註:#無.$writeMultiLine=fileAccess::writeMultiLine($conf["fileAccess::writeMultiLine"]);unset($conf["fileAccess::writeMultiLine"]);#如果執行失敗if($writeMultiLine["status"]==="false"){#設置執行失敗$result["status"]="false";#設置執行失敗訊息$result["error"]=$writeMultiLine;#回傳結果return $result;}#if end}#if end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function updateFile end/*#函式說明:#輔助使用PHP內建的chmod函式.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],錯誤訊息.#$result["function"],當前執行的函式名稱.#$result["argu"],使用的參數.#$result["cmd"],執行的指令.#$result["content"],執行的結果陣列,如果參數 "recursive" 跟 "excludeSelf" 都有設定的話,就會回傳該結果.#必填參數:#$conf["mode"],字串,要變成什麼權限.$conf["mode"]="";#$conf["target"],字串,需要變更權限的目標.$conf["target"]="";#可省略參數:#無.#參考資料:#無.#備註:#無.*/public static function chmod(&$conf){#初始化要回傳的結果$result=array();#取得當前執行的函數名稱$result["function"]=__FUNCTION__;#如果沒有參數if(func_num_args()==0){#設置執行失敗$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變數須為陣列形態";#如果傳入的參數為 nullif(is_null($conf)){#設置執行錯誤訊息$result["error"][]="\$conf變數不得為null,請檢查函數「".$result["function"]."」的參數設置有無正確!";}#if end#回傳結果return $result;}#if end#函式說明:#檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容.#回傳結果:#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.#$result["error"],執行不正常結束的錯訊息陣列.#$result["simpleError"],簡單表示的錯誤訊息.#$result["function"],當前執行的函式名稱.#$result["argu"],設置給予的參數.#$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過#$result[$shouldBeCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在#$result[$shouldBeCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確#$result[$shouldBeCheckedVarName]["error"],每個參數設定的錯誤訊息#$result["shouldNotBeEmpty"],不應該為空字串或控陣列的變數.#$result["argu"],字串陣列,目前輸入的參數名稱陣列.#$result["legalVarName"],字串陣列,合法可用的參數名稱陣列.#$result["notNeedVar"],字串陣列,多餘的參數名稱.#必填參數:#$conf["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。$conf["variableCheck::checkArguments"]["varInput"]=&$conf;#$conf["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.$conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";#可省略參數:#$conf["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,元素數量需要跟"mustBeFilledVariableType"參數的元素數量一致,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("mode","target");#$conf["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列,元素數量需要跟"mustBeFilledVariableName"參數的元素數量一致,例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double","resource","object"); , null代表不指定變數形態.$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","string");#$conf["canBeEmptyString"],字串,必填變數內容如果是空字串就不能算是有設置的話,請設為"false",預設爲"true",可以為空字串.#$conf["canBeEmptyString"]="false";#$conf["canNotBeEmpty"],字串陣列,哪些必填參數的內容不得為空字串或空陣列,僅當$conf["canBeEmptyString"]為"true"時會生效.#$conf["canNotBeEmpty"]=array();#$conf["canBeEmpty"],字串陣列,哪些必填參數的內容可為空字串或空陣列,僅當$conf["canBeEmptyString"]為"false"時會生效.#$conf["canBeEmpty"]=array();#$conf["skipableVariableCanNotBeEmpty"],字串陣列,哪些可省略參數不可以為空字串或空陣列.#$conf["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["variableCheck::checkArguments"]);unset($conf["variableCheck::checkArguments"]);#如果檢查參數失敗if($checkArguments["status"]==="false"){#設置執行失敗$result["status"]="false";#設置錯誤資訊$result["error"]=$checkArguments;#回傳結果return $result;}#if end#如果檢查參數不通過if($checkArguments["passed"]==="false"){#設置執行失敗$result["status"]="false";#設置錯誤資訊$result["error"]=$checkArguments;#回傳結果return $result;}#if end#將$conf["mode"]轉換為10進位的整數$conf["mode"]=(int)base_convert($conf["mode"],8,10);#變更 target 的檔案權限為代碼$chmod=chmod($conf["target"],$conf["mode"]);#如果改變檔案權限失敗if($chmod===false){#設置執行失敗$result["status"]="false";#設置錯誤訊息$result["error"][]="改變 ".$conf["target"]." 檔案的權限資訊為 ".$conf["mode"]." 失敗,通常只有系統帳戶才能變更之.";#回傳結果return $result;}#if end#設置執行正常$result["status"]="true";#回傳結果return $result;}#function chmod end}#class fileAccess end?>