Subversion Repositories php-qbpwcf

Rev

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) 2015~2025 Min-Jhin,Chen

    This file is part of QBPWCF.

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

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

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

*/
namespace qbpwcf;
                
/*
類別說明:
用於處理csv格式檔案的類別.
備註:
無.
*/
class csv{

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

        /*
        #函式說明:
        #快速建立一個csv檔案,並且要求使用者下載。
        #回傳結果:
        #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],取得當前執行的函數名稱
        #$result["content"],輸出的csv檔案位置.
        #如果有設置$conf["noDownload"]爲"true"的話,則會回傳檔案的位置
        #必填參數:
        #$conf["dataArray"],字串陣列,要寫入的文字.$conf["dataArray"][$i],代表第 $i 行的內容,$conf["dataArray"][$i][$j],代表第 $i 第 $j個欄位的內容.
        $conf["dataArray"]=array();
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["csvFilePathAndName"]="";#輸出的csv檔案路徑與名稱,預設爲系統時間,副檔名"csv"會自動加上.
        #$conf["noDownload"]="true";#如果爲"true"則代表不要讓使用者下載,但會回傳檔案的相對位置,預設為"true".
        #參考資料:
        #http://php.net/manual/en/function.str-split.php
        #http://php.net/manual/en/function.fputcsv.php
        #備註:
        #可用fputcsv涵式替代
        #建議增加自動判斷是否要建立csv檔路徑所需的資料夾
        */
        public static function create(&$conf){
                        
                #初始化要回傳的變數
                $result=array();
                
                #初始化當前執行的函數名稱
                $result["funciton"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

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

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$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("dataArray","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("csvFilePathAndName","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(null,"true");
                #$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["csvFilePathAndName"] 沒有設置
                if(!isset($conf["csvFilePathAndName"])){
                        
                        #預設爲系統時間
                        #涵式說明:
                        #回傳RFC822格式的當前時間,格式會像這種 「Wed, 25 Jan 12 19:13:15 +0800」
                        #回傳的結果:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$reuslt["error"],執行不正常結束的錯訊息陣列.
                        #$result["function"],當前執行的函式名稱.
                        #$result["content"],RFC822格式的時間.
                        #必填的參數:
                        $conf["time"]["get_RFC822_Time"]["timeZone"]="Asia/Taipei";#時區代號,可以設定的時區列表:http://www.php.net/manual/en/timezones.php
                                #ex:"Asia/Taipei"
                        $systemTime=time::get_RFC822_Time($conf["time"]["get_RFC822_Time"]);
                        unset($conf["time"]["get_RFC822_Time"]);
                        
                        #如果取得時間失敗
                        if($systemTime["status"]=="false"){
                                
                                #設置執行不正常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$systemTime;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        #設定檔案名稱
                        $conf["csvFilePathAndName"]=$systemTime;
                        
                        }#if end
                
                #加上副檔名csv
                $conf["csvFilePathAndName"]=$conf["csvFilePathAndName"].".csv";
                
                /*
                
                #檢查 $conf["csvFilePathAndName"] 是否含有 "/"
                #函式說明:
                #檢查字串裡面有無指定的關鍵字
                #回傳的結果:
                #$result["status"],"true"代表執行成功,"false"代表執行失敗。
                #$result["error"],錯誤訊息
                #$result["founded"],是否找到關鍵字,"true"代表有找到關鍵字;"false"代表沒有找到關鍵字。
                #$result["keyWordCount"],找到的關鍵字數量.
                #必填的參數:
                $conf["search.findKeyWord"]["keyWord"]="/";#想要搜尋的關鍵字
                $conf["search.findKeyWord"]["string"]=$conf["csvFilePathAndName"];#要被搜尋的字串內容
                #可省略的參數:
                #$conf["search.findKeyWord"]["completeEqual"]="true";#是否內容要完全符合,不能多出任何不符合的內容,預設為不需要完全符合。
                $searchResult=search::findKeyWord($conf["search.findKeyWord"]);
                unset($conf["search.findKeyWord"]);
                
                #如果搜尋失敗
                if($searchResult["status"]=="false"){
                        
                        #設置執行異常
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$searchResult;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果csv的檔案位置含有 "/" 
                if($searchResult["founded"]=="true"){
                
                        #用 "/" 去分割csv檔案路徑字串
                        #涵式說明:
                        #將固定格式的字串分開,並回傳分開的結果。
                        #回傳的參數:
                        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                        #$result["error"],錯誤訊息陣列
                        #$result["oriStr"],要分割的原始字串內容
                        #$result["dataArray"],爲分割好字串的陣列內容,$result["dataArray"][$i]爲第($i+1)段的內容。
                        #$result["dataCounts"],爲總共分成幾段
                        #必填的參數:
                        $conf["stringProcess.spiltString"]["stringIn"]=$conf["csvFilePathAndName"];#要處理的字串。
                        $conf["stringProcess.spiltString"]["spiltSymbol"]="/";#爲以哪個符號作爲分割
                        #備註:
                        #建議新增如果透過" "分割後的內容含有""的元素,將其移除,並將後面有內容的元素補上,key也重新排序。
                        $stringSpiltResult=stringProcess::spiltString($conf["stringProcess.spiltString"]);
                        unset($conf["stringProcess.spiltString"]);
                        
                        #如果分割csv的檔案位置路徑字串失敗
                        if($stringSpiltResult["status"]=="false"){
                                
                                #設置執行異常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$searchResult;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                                
                        #初始化檔案路徑變數
                        $filePath="";   
                                
                        #將資料夾路徑字串組合起來,剔除csv檔的名稱。
                        for($i=0;$i<$stringSpiltResult["dataCounts"]-1;$i++){
                                
                                #串聯路徑
                                $filePath=$filePath.$stringSpiltResult["dataArray"][$i];
                                
                                #如果不是最後一筆
                                if($i!=$stringSpiltResult["dataCounts"]-2){
                                        
                                        #串聯路徑
                                        $filePath=$filePath."/";
                                        
                                        }#if end
                                                                        
                                }#for end
                                        
                        #涵式說明:
                        #建立資料夾,若要建立的資料夾所屬路徑不存在,則會自動嘗試建立,建立後的資料夾也可指定權限.
                        #回傳的結果:
                        #$result["status"],"true"爲建立成功,"false"爲建立失敗.
                        #$result["error"],錯誤訊息陣列
                        #必填的參數:
                        $conf["fileAccess.createFolderAfterCheck"]["dirPositionAndName"]=$filePath;#新建的位置與名稱
                        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                        $conf["fileAccess.createFolderAfterCheck"]["fileArgu"]=$conf["fileArgu"];
                        #可省略的參數:
                        #$conf["fileAccess.createFolderAfterCheck"]["dirPermission"]="";#新建資料夾的權限設定,預設爲0770,亦即擁有者,同群組者可以讀,寫,存取,其他人僅能存取.
                        $pathCreateResult=fileAccess::createFolderAfterCheck($conf["fileAccess.createFolderAfterCheck"]);
                        unset($conf["fileAccess.createFolderAfterCheck"]);
                        
                        #如果 建立資料夾路徑失敗
                        if($pathCreateResult["status"]=="false"){
                                
                                #設置執行異常
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"]=$pathCreateResult;
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        }#if end
                
                */
                
                #var_dump($conf["csvFilePathAndName"]);
                
                #建立csv檔案
                #涵式說明:
                #將字串寫入到檔案
                #回傳的結果:
                #$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
                #$result["error"],錯誤訊息陣列.
                #必填的參數:
                $conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱
                $conf["fileAccess"]["writeTextIntoFile"]["inputString"]="";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                #$conf["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                $createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
                unset($conf["fileAccess"]["writeTextIntoFile"]);
                                        
                #如果 $createStatus["status"] 等於 "false"
                if($createStatus["status"]=="false"){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$createStatus;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #依據陣列組數寫入置檔案中
                for($i=0;$i<count($conf["dataArray"]);$i++){
                        
                        #如果該列資料不存在
                        if(!isset($conf["dataArray"][$i])){
                                
                                #跳到下個迴圈
                                continue;
                                
                                }#if end
                        
                        #取得該筆資料有幾個欄位
                        $thisDataCotainElementsCount=count($conf["dataArray"][$i]);

                        #計數用的變數
                        $temp=0;

                        #針對每一組
                        foreach($conf["dataArray"][$i] as $key=>$value){

                                #如果不是最後一個元素
                                if($temp!=$thisDataCotainElementsCount-1){

                                        #涵式說明:
                                        #將字串寫入到檔案
                                        #$result["status"],true表示檔案寫入成功,false表示檔案寫入失敗.
                                        #$result["error"],錯誤訊息陣列.
                                        #必填的參數:
                                        $conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱

                                        #檢測$value的開頭與結尾是否有皆爲「"」

                                        #將每欄的內容一個個字分開
                                        $strArray=str_split($value,1);

                                        #取得裏面有幾個元素
                                        $strArrayElementCount=count($strArray);

                                        #如果第一個元素爲「"」
                                        if($strArray[0]=="\""){

                                                #如果元素數量大於2
                                                if($strArrayElementCount>2){
                                                        
                                                        #如果最後一個元素爲「"」
                                                        if($strArray[$strArrayElementCount-1]=="\""){

                                                                #寫入欄位時不用加上「"」
                                                                $conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value.",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。

                                                                #檢查變數內容
                                                                #var_dump($conf["fileAccess"]["writeTextIntoFile"]["inputString"]);

                                                                }#if end

                                                        }#if end

                                                #元素內容小於2
                                                else{

                                                        #寫入欄位時不用加上「"」
                                                        $conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value.",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。

                                                        }#else end

                                                }#if end

                                        #反之第一個元素不爲「"」
                                        else{
                                        
                                                #檢查變數內容
                                                #var_dump($value);

                                                $conf["fileAccess"]["writeTextIntoFile"]["inputString"]="\"".$value."\",";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。

                                                }#else end

                                        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                                        $conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
                                        #可省略的參數:
                                        $conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                                        $createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
                                        unset($conf["fileAccess"]["writeTextIntoFile"]);
                                        
                                        #計數用的變數加1
                                        $temp++;

                                        #如果 $createStatus["status"] 等於 "false"
                                        if($createStatus["status"]=="false"){
                                                
                                                #設置錯誤識別
                                                $result["status"]="false";
                                                
                                                #設置錯誤訊息
                                                $result["error"]=$createStatus;
                                                
                                                #回傳結果
                                                return $result;
                                                
                                                }#if end

                                        }#if end

                                #反之爲最後一個元素
                                else{
                                        
                                        #檢測$value的開頭與結尾是否有皆爲「"」

                                        #將每欄的內容一個個字分開
                                        $strArray=str_split($value,1);

                                        #取得裏面有幾個元素
                                        $strArrayElementCount=count($strArray);

                                        #如果第一個元素爲「"」
                                        if($strArray[0]=="\""){

                                                #如果元素數量大於2
                                                if($strArrayElementCount>2){
                                                        
                                                        #如果倒數第2個元素爲「"」
                                                        if($strArray[$strArrayElementCount-1]=="\""){

                                                                #寫入欄位時不用加上「"」
                                                                $conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。

                                                                }#if end

                                                        }#if end

                                                #元素內容小於2
                                                else{

                                                        #寫入欄位時不用加上「"」
                                                        $conf["fileAccess"]["writeTextIntoFile"]["inputString"]=$value."\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。

                                                        }#else end

                                                }#if end

                                        #反之第一個元素不爲「"」
                                        else{

                                                $conf["fileAccess"]["writeTextIntoFile"]["inputString"]="\"".$value."\"\r\n";#爲要寫入到裏面的內容,若要每筆資料寫入後換行,則可以在字串內容後面加上 \r\n 即可。

                                                }#else end

                                        #寫入時加上換行符號
                                        #涵式說明:
                                        #將字串寫入到檔案
                                        #回傳的結果:
                                        #$result,true表示檔案建立成功,false表示檔案建立失敗
                                        #必填的參數:
                                        $conf["fileAccess"]["writeTextIntoFile"]["fileName"]=$conf["csvFilePathAndName"];#爲要編輯的檔案名稱
                                        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                                        $conf["fileAccess"]["writeTextIntoFile"]["fileArgu"]=$conf["fileArgu"];
                                        #可省略的參數:
                                        $conf["fileAccess"]["writeTextIntoFile"]["writeMethod"]="a";#爲檔案撰寫的方式,可省略,是複寫'a'還是,重新寫入'w',預設爲'w',重新寫入。
                                        $createStatus=fileAccess::writeTextIntoFile($conf["fileAccess"]["writeTextIntoFile"]);
                                        unset($conf["fileAccess"]["writeTextIntoFile"]);
                                        
                                        #如果 $createStatus["status"] 等於 "false"
                                        if($createStatus["status"]=="false"){
                                                
                                                #設置錯誤識別
                                                $result["status"]="false";
                                                
                                                #設置錯誤訊息
                                                $result["error"]=$createStatus;
                                                
                                                #回傳結果
                                                return $result;
                                                
                                                }#if end
                                                        
                                        }#else end

                                }#foreach end
                                
                        #函數說明:
                        #延長php的執行時間,每呼叫一次會初始化執行時間爲0,然後設定下次可以執行多久.
                        #回傳結果:
                        #$result["status"],執行是否正常,"true"為正常,"false"為不正常.
                        #$result["error"],錯誤訊息陣列.
                        #$result["function"],當前執行的函數名稱.
                        #必填參數:
                        #$conf["sec"],整數,要延長多少執行時間,單位爲秒
                        $conf["config::delayRunTimeExectionMax"]["sec"]=300;
                        #參考資料:
                        #http://php.net/manual/en/function.set-time-limit.php
                        $delayRunTimeExectionMax=config::delayRunTimeExectionMax($conf["config::delayRunTimeExectionMax"]);
                        unset($conf["config::delayRunTimeExectionMax"]);
                        
                        #如果執行失敗
                        if($delayRunTimeExectionMax["status"]==="false"){
                        
                                #設定類別圖繪製失敗
                                $result["status"]="false";                      
                                                        
                                #設定該檔案的類別圖繪製失敗提示
                                $result["error"]=$delayRunTimeExectionMax;
                                
                                #回傳結果
                                return $result;
                        
                                }#if end

                        }#for end
                        
                #修改產生好的csv檔權限
                $chmodResult=chmod($conf["csvFilePathAndName"],0775);
                
                #如果修改檔案權限失敗
                if($chmodResult==FALSE){
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"][]="檔案「".$conf["csvFilePathAndName"]."」的權限變更失敗";
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #如果 $conf["noDownload"] 有設置
                if(isset($conf["noDownload"])){
                        
                        #如果 $conf["noDownload"] 等於 true
                        if($conf["noDownload"]=="true"){
                                
                                #設置執行正常
                                $result["status"]="true";
                                
                                #設置檔案的位置
                                $result["content"]=$conf["csvFilePathAndName"];
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        }#if end

                #要求使用者下載該檔案
                #說明:
                #要求使用者Download某檔案
                #回傳結果:
                #$result["status"],字串,"true"爲成功,"false"反之失敗
                #$result["error"],陣列,錯誤訊息
                #$result["function"],字串,當前執行的函數名稱.
                #必填的參數:
                $conf["header"]["askUserDownloadFile"]["filePositionAndName"]=$conf["csvFilePathAndName"];#檔案的位置與名稱
                #可省略的參數:
                $conf["header"]["askUserDownloadFile"]["fileDisplayName"]=basename($conf["csvFilePathAndName"]);#要顯示的檔案名稱,若要放中文請將其文字放在()裏面,這樣種文字才會顯現。預設為 basename($conf["filePositionAndName"]);
                #$conf["header"]["askUserDownloadFile"]["mimeType"],字串,檔案的mimeType,預設為"application/octet-stream".
                #$conf["header"]["askUserDownloadFile"]["mimeType"]="application/octet-stream";s
                #參考資料來源:
                #http:#php.net/manual/en/function.readfile.php
                $askUserDownloadFile=header::askUserDownloadFile($conf["header"]["askUserDownloadFile"]);
                unset($conf["header"]["askUserDownloadFile"]);
                
                #如果要求下載檔案失敗
                if($askUserDownloadFile["status"]=="false"){
                        
                        #設置執行正常
                        $result["status"]="false";
                        
                        #設置檔案的位置
                        $result["content"]=$askUserDownloadFile;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #設置執行正常
                $result["status"]="true";
                
                #設置檔案的位置
                $result["content"]=$conf["csvFilePathAndName"];
                
                #回傳結果
                return $result;
                
                }#function create end
        
        /*
        #函式說明:
        #讀取csv檔案的內容
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱.
        #$result["csvFileContent"],csv檔案內容的陣列.
                #$result["csvFileContent"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
                #如果 $conf["firstLineVarName"]爲"true"的話則會回傳 $result["csvFileContent"]["第幾列"]["第一列各個欄位的名稱"]
        #$result["lineArray"],csv檔案逐列內容的陣列.
        #$result["lineArrayCount"],總共幾列資料.
        #必填參數:
        #$conf["csvFilePositionAndName"],字串,csv檔案的位置
        $conf["csvFilePositionAndName"]="";
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱),"預設為true".
        #$conf["firstLineVarName"]="true";
        #參考資料:
        #http://www.php.net/manual/en/function.str-split.php
        #http://chuangmaster.pixnet.net/blog/post/33560606-%5B%E8%BD%89%E8%B2%BC%5D%E9%97%9C%E6%96%BC%E5%9B%9E%E8%BB%8A(%5Cr)%E8%88%87%E6%8F%9B%E8%A1%8C(%5Cn)
        #http://php.net/manual/en/function.fgetcsv.php
        #備註:
        #可用fgetcsv函數替代
        */
        public static function loadCsvFile(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;
                                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

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

                        #回傳結果
                        return $result;
                        
                        }#if end                
                        
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$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("csvFilePositionAndName","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("firstLineVarName");
                #$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["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["fileContent"],爲檔案的內容陣列
                #$result["lineCount"],爲檔案內容總共的行數
                #必填的參數:
                $conf["fileAccess"]["getFileContent"]["filePositionAndName"]=$conf["csvFilePositionAndName"];#爲檔案的位置以及名稱
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["fileAccess"]["getFileContent"]["fileArgu"]=$conf["fileArgu"];
                #參考資料:
                #file():取得檔案內容的行數
                #http:#php.net/manual/en/function.file.php
                $fileContentArray=fileAccess::getFileContent($conf["fileAccess"]["getFileContent"]);
                unset($conf["fileAccess"]["getFileContent"]);
                                                        
                #如果 $fileContentArray["status"] 等於 "false" 則代表檔案內容抓取失敗
                if($fileContentArray["status"]=="false"){

                        #設定執行錯誤識別
                        $result["status"]="false";
        
                        #記錄錯誤訊息
                        $result["error"]=$fileContentArray;

                        #回傳檔案內容
                        return $result;

                        }#if end
                
                #初始化csv檔案逐行內容的陣列
                $result["lineArray"]=$fileContentArray["fileContent"];
                
                #取得內容有幾列
                $result["lineArrayCount"]=$fileContentArray["lineCount"];
                
                #初始化第一行的內容
                $firstLineContent=array();

                #有幾行就執行幾次
                for($i=0;$i<$result["lineArrayCount"];$i++){

                        #將每行的文字一個個字分開
                        $lineContentArray=str_split($result["lineArray"][$i],1);

                        #取得陣列裏面字的長度
                        $wordCount=count($lineContentArray);
                        
                        #初始化開始紀錄欄位內容的識別
                        #"false"代表目前沒有進行紀錄
                        #"true"代表目前在進行紀錄
                        $wordStart="false";
                        
                        #初始化用於確保單欄裡面可以多逗號的雙引號「"」
                        #"false"代表目前在 「"」 外
                        #"true"代表目前在 「"」內
                        $testDelimiter="false";
                        
                        #初始化欄位內容的陣列
                        $wordArray=array();
                        
                        #暫存形成字的字串
                        $wordClip="";
                        
                        #有幾個字就執行幾次
                        for($j=0;$j<$wordCount;$j++){

                                #如果 
                                #$wordStart 為 "false"
                                #$testDelimiter 為 "false" 且
                                #$lineContentArray[$j] 等於 「"」
                                if($wordStart=="false" && $testDelimiter=="false" && $lineContentArray[$j]=="\"" ){
                                                                                        
                                        #進入""範圍裡面
                                        $testDelimiter="true";
                                        
                                        #開始讀取欄位內容
                                        $wordStart="true";
                                        
                                        #跳到下一個迴圈
                                        continue;
                                        
                                        }#if end
                                        
                                #如果 $testDelimiter 為 "true" 且
                                #$wordStart 為 "true" 且
                                #$lineContentArray[$j] 等於 「"」
                                if($wordStart=="true" && $testDelimiter=="true" && $lineContentArray[$j]=="\"" ){
                                        
                                        #echo "<br>離開\"";
                                        
                                        #離開""範圍裡面
                                        $testDelimiter="false";
                                        
                                        #停止讀取欄位內容
                                        $wordStart="false";
                                        
                                        #如果是最後一個字
                                        if($j==$wordCount-1){
                                                                                                
                                                #將取得的片段內容儲存成一個欄位
                                                $wordArray[]=$wordClip;

                                                #將片段的內容初始化
                                                $wordClip="";
                                                
                                                #跳到下一個迴圈
                                                continue;
                                                
                                                }#if end
                                                
                                        #跳到下一個迴圈
                                        continue;
                                        
                                        }#if end

                                #如果
                                #$wordStart 等於 "true"  或 $testDelimiter 等於 "true"
                                #或
                                #$wordStart 等於 "false" 且 $testDelimiter 等於 "false" 且 $lineContentArray[$j] 不等於 ","
                                if(
                                        ($wordStart=="true" || $testDelimiter=="true")
                                        ||
                                        ($wordStart=="false" && $testDelimiter=="false" && $lineContentArray[$j]!=",")
                                        ){
                                        
                                        #暫存形成字的字串
                                        $wordClip=$wordClip.$lineContentArray[$j];
                                        
                                        #echo "<br>讀取".$lineContentArray[$j];
                                        #echo "<br>暫存欄位內容變成".$wordClip;
                                        
                                        #如果是最後一個字
                                        if($j==$wordCount-1){
                                                                                                
                                                #將取得的片段內容儲存成一個欄位
                                                $wordArray[]=$wordClip;

                                                #將片段的內容初始化
                                                $wordClip="";
                                                
                                                #將欄位開始設為 "false"
                                                $wordStart="false";
                                                
                                                #跳到下一個迴圈
                                                continue;
                                                
                                                }#if end
                                                
                                        #跳到下一個迴圈
                                        continue;
                                        
                                        }#if end
                                         
                                #如果 $lineContentArray[$j]等於 「,」 且 $testDelimiter 等於 "false"
                                if($lineContentArray[$j]=="," && $testDelimiter=="false" ){
                                        
                                        #將取得的片段內容儲存成一個欄位
                                        $wordArray[]=$wordClip;

                                        #echo "<br>遇到逗號,欄位內容讀取完畢";

                                        #將片段的內容初始化
                                        $wordClip="";
                                        
                                        #將欄位開始設為 "false"
                                        $wordStart="false";
                                                                                                                                
                                        #跳到下一個迴圈
                                        continue;
                                        
                                        }#if end
                                        
                                }#for end

                        #如果目前讀到的是第一行
                        if($i==0){

                                #取得第一行的內容
                                $firstLineContent=$wordArray;

                                }#if end

                        #如果 $conf["firstLineVarName"] 等於 true
                        if($conf["firstLineVarName"]=="true"){
                        
                                #將 $wordArray 的 key 更改爲第一行的欄位內容
                                #函式說明:
                                #將陣列的key重新排序,然後回傳,以便後續存取。
                                #也可以指定key的內容,但一定要跟元素數量相同。
                                #若指定了key的名稱,則 $result["dataContent"] 會變成 $result["dataContent"]["指定的key名稱"]
                                #回傳的解果:
                                #$result["status"],執行是否成功,"true"代表成功,"false"代表失敗.
                                #$result["error"],執行錯誤的訊息.
                                #$result["function"],當前執行的函數名稱.
                                #$result["dataContent"],儲存陣列元素的內容.
                                #必填的參數:
                                $conf["arrays"]["createV2"]["arrayContent"]=$wordArray;#陣列變數
                                #可省略的參數:
                                $conf["arrays"]["createV2"]["specifiesKeyArray"]=$firstLineContent;#指定key的名稱,須與$conf["arrayContent"]的元素數量相同
                                $temp=arrays::createV2($conf["arrays"]["createV2"]);
                                unset($conf["arrays"]["createV2"]);

                                #如果建立陣列失敗
                                if($temp["status"]=="false"){
                                        
                                        #設置執行錯誤
                                        $result["status"]="false";
                                        
                                        #設置錯誤訊息
                                        $result["error"]=$temp;
                                        
                                        #回傳結果
                                        return $result;
                                        
                                        }#if end

                                #取得更改後的結果 
                                $wordArray=$temp["dataContent"];

                                }#if end                                

                        #取得該行的各欄位內容
                        $result["csvFileContent"][$i]=$wordArray;
                        
                        }#for end
                        
                #執行到這邊代表執行成功
                $result["status"]="true";
                        
                #回傳csv檔案的內容
                return $result;
                
                }#function loadCsvFile end
                
        /*
        #函式說明:
        #讀取csv檔案的內容
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱
        #$result["content"],csv檔案內容的陣列
                #$result["content"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
                #如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["content"]["第幾列"]["第一列各個欄位的名稱"]
        #$result["title"],欄位的名稱
        #$result["lineCount"],總共幾列資料
        #必填參數:
        #$conf["csvFilePositionAndName"],字串,csv檔案的位置
        $conf["csvFilePositionAndName"]="";
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數:
        #$conf["firstLineVarName"]="true";#第一行是否爲變數名稱(各個欄位的名稱),預設為"true".
        #參考資料:
        #http://www.php.net/manual/en/function.str-split.php
        #http://php.net/manual/en/function.fgetcsv.php
        #備註:
        #無.
        */
        public static function read(&$conf){
                
                #初始化要回傳的內容
                $result=array();
                
                #設置當前函數名稱
                $result["function"]=__FUNCTION__;
                                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

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

                        #回傳結果
                        return $result;
                        
                        }#if end                
                        
                #檢查參數
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$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("csvFilePositionAndName","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("firstLineVarName");
                #$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["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        
                        
                #初始化用來儲存csv內容的變數
                $csvFileContent=array();
                
                #如果開啓 $conf["csvFilePositionAndName"] 成功
                if(($handle=fopen($conf["csvFilePositionAndName"],"r"))!==FALSE){
                        
                        #如果檔案還有內容
                        while(($data=fgetcsv($handle))!==FALSE){
                        
                                #儲存該行內容
                                $csvFileContent[]=$data;
                                
                                }#while end
                                                
                        }#if end
                        
                #反之
                else{
                        
                        #設置錯誤識別
                        $result["status"]="false";
                        
                        #設置錯訊息
                        $resukt["error"][]="檔案".$conf["csvFilePositionAndName"]."開啓失敗!";
                        
                        #回傳結果
                        return $result;
                        
                        }#else end
                        
                #初始化欄位標題陣列
                $title=array(); 
                        
                #如果 $conf["firstLineVarName"] 爲 "true"
                if($conf["firstLineVarName"]=="true"){
                                                
                        #迴圈,執行欄位數次數
                        for($i=0;$i<count($csvFileContent[0]);$i++){
                                
                                #取得欄位名稱
                                $title[]=$csvFileContent[0][$i];
                                
                                }#for end
                                
                        #取得欄位名稱
                        $result["title"]=$title;
                                
                        #用欄位名稱作爲key來儲存每列內容
                        #迴圈,執行列數次數
                        for($i=1;$i<count($csvFileContent);$i++){
                                
                                #迴圈,執行欄位數目次
                                for($j=0;$j<count($csvFileContent[0]);$j++){
                                        
                                        #用數字作爲key來儲存內容
                                        $result["content"][$j][$i-1]=$csvFileContent[$i][$j];
                                        
                                        #用欄位名稱作爲key來儲存內容
                                        $result["content"][$title[$j]][$i-1]=$csvFileContent[$i][$j];
                                        
                                        }#for end
                                        
                                }#for end
                        
                        }#if end
                
                #反之直接儲存 fgetcsv 取得的內容
                else{
                
                        #取得csv檔案內容
                        $result["content"]=$csvFileContent;
                        
                        }#else end
                        
                #取得資料筆數
                $result["lineCount"]=count($result["content"])/2;
                        
                #設置執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#funciton read end
                
        /*
        #函式說明:
        #計屬csv檔裡面的關鍵字,亦即內容剛好等於關鍵字的次數.
        #回傳的結果:
        #$result["status"],執行正常與否,"true"為正常,"false"為不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["content"],找到的關鍵字數量.
        #$result["function"],當前執行的函數名稱.
        #必填參數:
        #$conf["csvFileAddress"],字串,csv檔案的位置與名稱.
        $conf["csvFileAddress"]="";
        #$conf["keyWord"],字串,要尋找的關鍵字.
        $conf["keyWord"]="";
        #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
        $conf["fileArgu"]=__FILE__;
        #可省略參數: 
        #$conf["firstLineVarName"],字串,第一行是否爲變數名稱(各個欄位的名稱),"true"表示第一列不在搜尋範圍裡,預設為"true".
        #$conf["firstLineVarName"]="true";
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function keyWordsCount(&$conf){
                
                #初始化要回傳的變數
                $reuslt=array();
                
                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

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

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #初始化計數關鍵字的變數
                $result["content"]=0;
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$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("csvFileAddress","keyWord","fileArgu");
                #$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("string","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("firstLineVarName");
                #$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["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
                        
                #讀座位表csv檔
                #涵式說明:
                #讀取csv檔案的內容
                #回傳得結果:
                #$result["status"],執行是否正常,"true"代表正常;"false"代表不正常.
                #$result["error"],錯誤訊息陣列.
                #$result["function"],當前執行的函數名稱.
                #$result["csvFileContent"],csv檔案內容的陣列.
                        #$result["csvFileContent"]["$i"]["$j"]代表第$i+1列第$j+1欄位的內容.
                        #如果 $conf["firstLineVarName"]爲"true"的話則會多回傳 $result["csvFileContent"]["第幾列"]["第一列各個欄位的名稱"]
                #$result["lineArray"],csv檔案逐列內容的陣列.
                #$result["lineArrayCount"],總共幾列資料.
                #必填的參數:
                $conf["csv"]["loadCsvFile"]["csvFilePositionAndName"]=$conf["csvFileAddress"];#csv檔案的位置
                #$conf["fileArgu"],字串,php變數__FILE__的內容,亦即該檔案在檔案系統的絕對路徑
                $conf["csv"]["loadCsvFile"]["fileArgu"]=$conf["fileArgu"];
                #可省略的參數:
                $conf["csv"]["loadCsvFile"]["firstLineVarName"]=$conf["firstLineVarName"];#第一行是否爲變數名稱(各個欄位的名稱)
                #參考資料來源:
                #http://www.php.net/manual/en/function.str-split.php
                #參考資料來源
                #http://chuangmaster.pixnet.net/blog/post/33560606-%5B%E8%BD%89%E8%B2%BC%5D%E9%97%9C%E6%96%BC%E5%9B%9E%E8%BB%8A(%5Cr)%E8%88%87%E6%8F%9B%E8%A1%8C(%5Cn)
                $seatMap=csv::loadCsvFile($conf["csv"]["loadCsvFile"]);
                unset($conf["csv"]["loadCsvFile"]);
                                        
                #如果 $seatMap["status"] 等於 "false"
                if($seatMap["status"]=="false"){

                        #設置執行錯誤
                        $result["status"]="true";
                        
                        #設置錯誤訊息
                        $result["error"]=$seatMap;
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #根據csv檔裡每列內容
                foreach($seatMap["csvFileContent"] as $row){
                        
                        #根據每列的欄元素
                        foreach($row as $col){                                  
                                
                                #如果欄位內容等於關鍵字
                                if($col==$conf["keyWord"]){
                                        
                                        #$result["content"]加1
                                        $result["content"]++;
                                        
                                        }#if end
                                
                                }#foreach end
                        
                        }#foreach end
                        
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                
                }#function keyWordCount end
                
        /*
        #函式說明:
        #將透過db::fastGetDbData取得的資料表資料轉換成用csv::create建立csv檔所需的格式   ,亦即轉換成一個二維陣列記錄每筆資料每個欄位填寫的內容.
        #回傳結果:
        #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函數名稱.
        #$result["content"],轉換好要給csv::create建立csv檔所需的格式變數.
        #必填參數:
        #$conf["db::fastGetDbData"],陣列,透過db::fastGetDbData取得的回傳結果.
        $conf["db::fastGetDbData"]=$;
        #可省略參數:
        #$conf["columnTitleName"],字串陣列,每個欄位的名稱,預設為資料表欄位的名稱.
        #$conf["columnTitleName"]=array();
        #參考資料:
        #無.
        #備註:
        #無.
        */
        public static function dataTable2csvFormat(&$conf){
                
                #初始化要回傳的變數
                $reuslt=array();
                
                #取得當前執行的函數名稱
                $result["function"]=__FUNCTION__;
                
                #初始化要回傳的csv格式變數   
                $result["content"]=array();     
                
                #如果 $conf 不為陣列
                if(gettype($conf)!="array"){
                        
                        #設置執行失敗
                        $result["status"]="false";
                        
                        #設置執行錯誤訊息
                        $result["error"][]="\$conf變數須為陣列形態";

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

                        #回傳結果
                        return $result;
                        
                        }#if end
                
                #檢查參數
                #函式說明:
                #檢查必填與可省略的參數,可省略參數可指定預設要給與什麼數值內容。
                #$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
                #$reuslt["error"],執行不正常結束的錯訊息陣列.
                #$result["function"],當前執行的函式名稱.
                #$result["passed"],識別要檢查的全體變數是否存在以及型態是否正確的變數,"true"代表檢查全部通過;"false"代表檢查不通過
                #$result[$shouldBtCheckedVarName]["varExist"],所檢查的變數是否存在,"false"代表不存在;"true"代表存在
                #$result[$shouldBtCheckedVarName]["varType"],所檢查的變數型態是否正確,"false"代表錯誤;"true"代表正確
                #$result[$shouldBtCheckedVarName]["error"],每個參數設定的錯誤訊息
                #必填寫的參數:
                #$conf["variableCheck::checkArguments"]["varInput"],陣列變數,要檢查的陣列變數,請在要檢查的參數前面加上&,這樣變動的結果才能被套用。
                $conf["variableCheck::checkArguments"]["varInput"]=&$conf;
                #$conf["variableCheck::checkArguments"]["mustBeFilledVariableName"],爲必填參數的變數名稱陣列,形態爲陣列變數,例如: $conf["mustBeFilledVariableName"] = array("id","account","password");
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableName"]=array("db::fastGetDbData");
                #$conf["variableCheck::checkArguments"]["mustBeFilledVariableType"],爲必填參數的變數陣列應該爲何種變數形態,形態爲陣列 例如: $conf["mustBeFilledVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck::checkArguments"]["mustBeFilledVariableType"]=array("array");
                #可以省略的參數:
                #$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("columnTitleName");
                #$conf["variableCheck::checkArguments"]["skipableVariableType"],爲可省略參數的變數名稱陣列,形態爲陣列變數,例如: $conf["skipableVariableType"] = array("string",integer,"double"); 
                $conf["variableCheck::checkArguments"]["skipableVariableType"]=array("array");
                #$conf["skipableVarDefaultValue"],字串陣列,每個不存在的可省略變數要初始化為什麼,"null"代表不指定,若預設值是必填參數之一,請將$conf["mustBeFilledVar"]改成"\$conf["\mustBeFilledVar\"]".
                #$conf["skipableVarDefaultValue"]=array("");
                #$conf["variableCheck::checkArguments"]["referenceVarKey"],字串,$conf參數後面的key值,用於移除不要的參考陣列.
                $conf["variableCheck::checkArguments"]["referenceVarKey"]="variableCheck::checkArguments";
                #$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["db::fastGetDbData"] 的執行結果不為正常的
                if($conf["db::fastGetDbData"]["status"]=="false"){
                        
                        #echo "123";
                        
                        #設置執行錯誤
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$conf["db::fastGetDbData"];
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果 $conf["db::fastGetDbData"] 的資料筆數為 0
                if($conf["db::fastGetDbData"]["dataCount"]==0){
                        
                        #echo "123";
                        
                        #設置執行錯誤
                        $result["status"]="false";
                        
                        #設置錯誤訊息
                        $result["error"]=$conf["db::fastGetDbData"];
                        
                        #回傳結果
                        return $result;
                        
                        }#if end
                        
                #如果沒有設置 $conf["columnTitleName"]
                if(!isset($conf["columnTitleName"])){
                        
                        #預設為資料表的欄位名稱
                        $conf["columnTitleName"]=$conf["db::fastGetDbData"]["dataColumnName"];
                        
                        }#if end
                        
                #反之有設置 $conf["columnName"]
                else{
                        
                        #如果 $conf["columnName"] 的數量與 $conf["db::fastGetDbData"]["dataColumnName"] 不一樣
                        if(count($conf["columnTitleName"])!=count($conf["db::fastGetDbData"]["dataColumnName"])){
                                
                                #設置執行錯誤
                                $result["status"]="false";
                                
                                #設置錯誤訊息
                                $result["error"][]="參數\$conf[\"columnName\"]與\$conf[\"db::fastGetDbData\"][\"dataColumnName\"]的元素數量要一樣";
                                
                                #回傳結果
                                return $result;
                                
                                }#if end
                        
                        }#else end
                                        
                #建立標題欄的內容       
                $result["content"][]=$conf["columnTitleName"];
                        
                #有幾筆資料就執行幾次迴圈
                for($i=0;$i<$conf["db::fastGetDbData"]["dataCount"];$i++){
                        
                        #初始化暫存的陣列
                        $temp["oneData"]=array();
                        
                        #有幾個欄位就執行幾次迴圈
                        for($j=0;$j<count($conf["columnTitleName"]);$j++){
                                
                                #記錄第$i+1筆資料的第$j+1欄位的內容
                                $temp["oneData"][]=$conf["db::fastGetDbData"]["dataContent"][$conf["db::fastGetDbData"]["dataColumnName"][$j]][$i];
                                
                                }#for end
                        
                        #記錄第$i+1筆資料的內容
                        $result["content"][]=$temp["oneData"];
                        
                        }#for end
                        
                #執行到這邊代表執行正常
                $result["status"]="true";
                
                #回傳結果
                return $result;
                                        
                }#function dataTable2csvFormat end
        
        }#class csv end
        
?>