2.取得並更改目前目錄 使用getcwd()函數可以取得目前的工作目錄,該函數沒有參數。成功則傳回目前的工作目錄,失敗則回傳FALSE 3.開啟和關閉目錄句柄 opendir($dir) closed($dir_handle) 4.讀取目錄內容 readdir(),此參數是一個已經開啟的目錄句柄,與while循環可以實現對目錄的遍歷 5.取得指定路徑中的目錄與檔案 。 array scandir(string $directory [, int $sorting_order [, resource $context ]]) 說明:$directory為指定路徑。參數$sorting_order預設是按字母升序排列,如果設為1表示按字母的降序排列。 $context是可選參數,是一個資源變量,可以用stream_context_create()函數生成,這個變數保存著一些與特定的操作對象相關的資料。 函數運行成功則傳回一個包含指定路徑下的所有目錄和檔案名稱的數組,失敗則傳回FALSE 2.操作文件的一般方法 3.文件的開啟與關閉 1.開啟文件 resource fopen(string $filename , string $mode [, bool $use_include_path [, resource $context ]]) ●$filename參數。 fopen()函數將$filename參數指定的名字資源綁定到一個流上 ●$mode參數。 $mode參數指定了fopen()函數存取檔案的模式,取值請參考表4.5。 $mode 說 明 'r' 只讀方式開啟文件,從文件頭開始讀 'r ' 讀寫方式開啟文件,從文件頭開始讀寫 'w' 寫入方式開啟文件,將文件指標指向文件頭。如果檔案已經存在則刪除已有內容,如果檔案不存在則嘗試建立它 'w ' 讀寫方式開啟文件,將文件指標指向文件頭。如果檔案已經存在則刪除已有內容,如果檔案不存在則嘗試建立它 'a' 寫入方式開啟文件,將文件指標指向文件末尾,如果文件已有內容將從文件末尾開始寫入。如果文件不存在則嘗試建立它 'a ' 讀寫方式開啟文件,將文件指標指向文件末端。如果文件已有內容將從文件結尾開始讀寫。如果文件不存在則嘗試建立它 'x' 建立並以寫入方式開啟文件,將文件指標指向文件頭。如果檔案已存在,則fopen()呼叫失敗並傳回FALSE,並產生一條E_WARNING層級的錯誤訊息。如果文件不存在則嘗試建立它。此選項由PH及以後的版本所支持,僅能用於本地文件 'x ' 建立並以讀寫方式開啟文件,將文件指標指向文件頭。如果檔案已存在,則fopen()呼叫失敗並傳回FALSE,並產生一條E_WARNING層級的錯誤訊息。如果文件不存在則嘗試建立它。此選項由PH及以後的版本所支持,僅能用於本地文件 'b' 二進位模式,用於連接在其他模式後面。如果檔案系統能夠區分二進位檔案和文字檔案(Windows區分,而UNIX不區分),則需要使用到這個選項,建議一直使用這個選項以便獲得最大程度的可移植性 ●$use_include_path參數。如果需要在include_path(PHP的include路徑,在PHP的設定檔設定)中搜尋文件, 可選參數 $use_include_path的值可設為1或TRUE,預設為FALSE。 ●$context參數。可選的$context參數只有檔案遠端開啟時(如透過HTTP開啟)才使用,它是一個資源變量, 其中保存著與fopen()函數具體的操作對像有關的一些資料。如果fopen()開啟的是一個HTTP位址, 那麼這個變數記錄著HTTP請求的請求類型、HTTP版本及其他頭資訊;如果開啟的是FTP位址, 記錄的可能是FTP的被動/主動模式 2.關閉文件 bool fclose(resource $handle) 4.文件的寫入 文件寫入前需開啟文件,不存在先創建它,一般用fopen()函數創建 ●fwrite().檔案開啟後,寫入內容 int fwrite(resource $handle , string $string [, int $length ]) 說明:參數$handle是寫入的檔案句柄, $string是將要寫入檔案中的字串數據, $length是可選參數,如果指定了$length,則當寫入了$string中的前$length個位元組的資料後停止寫入。 ●file_put_contents()函數。 PHP 5也引進了file_put_contents()函數。這個函數的功能與依序呼叫fopen()、fwrite()、fclose()函數的函數一樣。文法格式如下: int file_put_contents(string $filename , string $data [, int $flags [, resource $context ]]) 說明:$filename是要寫入資料的檔案名稱。 $data是要寫入的字串,$data也可以是數組,但不能為多維數組。 在使用FTP或HTTP向遠端檔案寫入資料時,可以使用可選參數$flags和$context,這裡不具體介紹。 寫入成功後函數會傳回寫入的位元組數,否則傳回FALSE。 ●fputcsv()函數。 CSV是比較常用的檔案格式,一般以.csv作為副檔名。 CSV格式把文件的一行看做是一筆記錄,記錄裡的欄位使用逗號分隔。 在PHP中使用 fputcsv()函數可以把指定的陣列格式化為符合CSV檔案格式的內容,並寫入檔案指標所指向的目前行。文法格式如下: int fputcsv(resource $handle [, array $fields [, string $delimiter [, string $enclosure ]]]) 說明:參數$handle是要寫入的檔案句柄。 參數$fields是要格式化的陣列。 可選的$delimiter參數用於設定字段分界符(只允許一個字元),預設為逗號。 可選的$enclosure參數設定欄位環繞符(只允許一個字元),預設為雙引號 5 檔案的讀取 1.讀取任意長度 fread()函數可以用來讀取文件的內容,語法格式如下: string fread(int $handle, int $length) 說明:參數$handle是已經開啟的檔案指針, $length是指定讀取的最大位元組數,$length的最大取值為8192。 如果讀完$length個位元組數之前遇到檔案結尾標誌(EOF),則傳回所讀取的字符,並停止讀取操作。 如果讀取成功則傳回所讀取的字串,如果出錯回傳FALSE。 注意:在讀取文件後顯示文件內容時,文字中可能含有無法直接顯示的字符,如HTML標記。 這時需要使用htmlspecialchars()函數將HTML標記轉換為實體才能顯示檔案中的字元。 2.讀取整份文件 ●file()函數。 file()函數用於將整個檔案讀取到一個陣列中,語法格式如下: array file(string $filename [, int $use_include_path [, resource $context ]]) 說明:本函數的作用是將文件作為一個數組返回,數組中的每個單元都是文件中相應的一行,包括換行符在內, 如果失敗則回傳FALSE。參數$filename是讀取的檔案名,參數$use_inclue_path和$context的意義與先前介紹的相同 ●readfile()函數。 readfile()函數用來輸出一個檔案的內容到瀏覽器中,語法格式如下: int readfile(string $filename [, bool $use_include_path [, resource $context ]]) ●fpassthru()函數。 fpassthru()函數可以將給定的檔案指標從目前的位置讀取到EOF,並且把結果寫到輸出緩衝區。 要使用這個函數,必須先使用fopen()函數開啟文件,然後將文件指標當作參數傳遞給fpassthru()函數, fpassthru()函數把文件指標所指向的文件內容傳送到標準輸出。如果操作成功傳回讀取到的位元組數,否則回傳FALSE。 ●file_get_contents()函數。 file_get_contents()函數可以將整個或部分檔案內容讀取到一個字串中, 函數與依序呼叫fopen()、fread()及fclose()函數的函數一樣。文法格式如下: string file_get_contents(string $filename [, int $offset [, int $maxlen ]]) 說明:$filename是要讀取的檔案名,可選參數$offset可以指定從檔案頭開始的偏移量, 函數可以傳回從$offset所指定的位置開始長度為$maxlen的內容。如果失敗,函數將傳回FALSE 3. 讀取一行數據 ●fgets()函數。 fgets()函數可以從文件中讀出一行文本,語法格式如下: string fgets(int $handle [, int $length ]) 說明:$handle是已經開啟的檔案句柄,可選參數$length指定了傳回的最大位元組數,考慮到行結束符, 最多可以傳回length-1個位元組的字串。如果沒有指定$length,預設為1024個位元組 ●fgetss()函數與fgets()基本上相同,不過fgetss()函數會嘗試從讀取的文字中去掉任何html和php標記。 ●fgetcsv()函數。 fgetcsv()函數可以讀取指定檔案的目前行,使用CSV格式解析出字段,並傳回一個包含這些字段的數組。 文法格式如下: array fgetcsv(int $handle [, int $length [, string $delimiter [, string $enclosure ]]]) 4. 讀取一個字符 fgetc()函數。 fgetc()函數可以從檔案指針讀取一個字符,語法格式為: string fgetc(resource $handle) 此函數傳回$handle指標所指向的檔案中的一個字符,遇到EOF則傳回FALSE 5. 使用指定格式讀取文件 fscanf()函數。 fscanf()函數可以讀取檔案中的數據,並根據指定的格式進行格式化,並傳回一個陣列。文法格式如下: mixed fscanf(resource $handle , string $format [, mixed &$... ]) 格式字串中的任何空白都會與輸入流中的任何空白相符。 這意味著甚至格式字串中的製表符“t”也會與輸入流中的一個空格字元相符。 6.檔案的上傳與下載 1.文件上傳 文件上傳可以透過提交html表單來實現。檔案上傳結束後,預設儲存在臨時目錄中,這時必須從臨時目錄中刪除或移動到其他地方 使用PHP的move_uploaded_file()將其移到其它位置上 move_uploaded_file()函數語法格式如下: bool move_uploaded_file(string $filename , string $destination) 注意:在將文件移動之前需要檢查文件是否是透過HTTP POST上傳的,這可以用來確保惡意的用戶無法欺騙腳本去訪問本不能訪問的文件, 這時需要使用is_uploaded_file()函數。此函數的參數為檔案的暫存檔案名,若檔案是透過HTTP POST上傳的,則函數傳回TRUE。 範例4.5 將由HTML表單上傳的GIF圖片檔案移到html目錄中
2.文件下載 header()函數的功能是向瀏覽器發送正確的HTTP標頭,標頭指定了網頁內容的類型、頁面的屬性等資訊。 header()函數的功能很多,這裡只列出以下幾點: ●頁面跳轉。如果header()函數的參數為“Location: xxx”,頁面就會自動跳到「xxx」所指向的URL位址。例如: header("Location: http://www.baidu.com"); //跳到百度頁面 header("Location: first.php"); //跳到工作目錄的first.php頁面 ●指定網頁內容。例如,同樣的一個XML格式的文件,如果header()函數的參數指定為“Content-type: application/xml”, 瀏覽器會將其依照XML檔案格式來解析。但如果是“Content-type: text/xml”,瀏覽器就會將其視為文字解析。 header()函數結合readfile()函數可以下載將要瀏覽的檔案 7.其他常用檔案函數 1.計算檔案大小 filesize()函數用來計算檔案的大小,以位元組為單位 filesize()函數結合fread()函數可以實作一次讀取整個檔案 2.判斷文件是否存在 file_exits() is_dir()函數用來判斷給定檔名是否為目錄 is_file()函數用來判斷給定檔案名稱是否為檔案。 is_readable()函數用於判斷給定檔案是否可讀。 is_writeable()用來判斷給定的檔案是否可寫 3.刪除文件 unlink() 4.複製文件 bool copy(string $source,string $dest),如果目示檔案已存在,則將被覆蓋 5.移動、重新命名文件 除了move_uploaded_file()函數,還有一個rename()函數也可以移動檔案。 文法格式如下: bool rename ( string $oldname , string $newname [, resource $context ] ) 說明:rename()函數主要用於對一個檔案進行重新命名,$oldname是檔案的舊名,$newname為新的檔案名稱。 當然,如果$oldname與$newname的路徑不相同,就實作了移動該檔案的功能 6.文件指標操作 PHP中有很多操作檔案指標的函數,如rewind()、ftell()、fseek()函數等。先前使用過的feof()函數用來測試檔案指標是否處於檔案尾部, 也屬於檔案指標操作函數。 rewind()函數。用於重置檔案的指標位置,使指標返回到檔案頭。它的參數只有一個,就是已經開啟的指定檔案的檔案句柄。 ftell()函數。可以以位元組為單位,報告檔案中指標的位置,也就是檔案流中的偏移量。它的參數也是已經開啟的檔案句柄。 fseek()函數。可用於移動文件指針,語法格式如下: int fseek ( resource $handle , int $offset [, int $whence ] ) 例4.8 投票統計
|