如何應用fopen()函數的選擇模式?
一、fopen()函數
在php中使用fopen()函數開啟一個檔案,具體文法格式如下:
resource fopen ( string filename , string $mode [, int use_include_path[, resource zcontext ]] )
參數 filename 指定開啟的檔案名稱。
注意:
參數 filename可以使包含檔案路徑的檔案名稱(比如:“C:/Windows/php.ini”或者“./php.ini”),可為了避免不同系統之間切換可能會帶來的麻煩,採用“/”作為路徑分隔字元,參數 filename 也可以是由魔種協議給出的 URL (比如:“http://mrbccd.cn”或者“ftp://www.mrbccd.cn//”),如果指定 URL 地址,則可以開啟遠程檔案。
參數 mode 設定開啟檔案的方法,參數值如下表:
mode |
模式名稱 |
說明 |
r |
唯讀 |
讀模式—進行讀取,檔案指標位於檔案的開頭 |
r+ |
讀寫 |
讀寫入模式—進行讀寫,檔案指標位於檔案的開頭。在現有檔案的內容的末尾之前進行寫入就會覆蓋原有的 |
W |
唯寫 |
寫入模式—進行寫入檔案,檔案指標指向標頭檔。如果檔案存在,則所有檔案內容被刪除,否則函數將建立這個檔案 |
w+ |
讀寫 |
讀寫入模式—進行讀寫,檔案指標指向標頭檔。如果檔案存在,則所有檔案內容被刪除,否則函數將建立這個檔案 |
x |
謹慎寫 |
寫入模式開啟檔案,從檔案頭開始寫。如果檔案已經存在,則該檔案將不會被開啟,函數返回false,PHP將產生一個警告 |
x+ |
謹慎寫 |
讀/寫入模式開啟檔案,從檔案頭開始寫。如果檔案已經存在,則該檔案將不會被開啟,函數返回false,PHP將產生一個警告 |
a |
追加 |
追加模式開啟檔案,檔案指標指向尾檔案,如果該檔案已有內容,則將從檔案末尾開始追加,如果該檔案不存在,則函數將建立這個檔案 |
a+ |
追加 |
追加模式開啟檔案,檔案指標指向標頭檔,如果該檔案已有內容,則將從檔案末尾開始追加或者讀取,如果該檔案不存在,則函數將建立這個檔案 |
b |
二進位 |
二進位模式—用於與其他模式進行串連。如果檔案系統能夠區分二進位檔案和文字檔,可能會使用它。Windows可以區分;UNIX則不區分,推薦使用這個選項,便於獲得最大程度的可移植性。它是預設模式 |
t |
文本 |
用於與其他模式的結合。這個模式只是 Windows下的一個選項 |
參數use_include_path 可為選擇參數,決定是否在 include_path(php.ini 的include_path選項)定義的目錄中搜尋filename 檔案,比如:在php.ini檔案中設定include_path 選項的值為“E:\AppServ\www\MR\Instance\07\”,如果希望伺服器在這個路徑下開啟所指定的檔案,則設定參數 use_include_path 的值為 1 或者 TRUE。
參數 context 稱為上下文,同樣為選擇性參數,它是設定流操作的特定選項,用於控制流程的操作特性。一般情況下只需要預設的流操作設定,不需要使用此參數。
二、模式選擇
不同的作業系統具有不同得行結束習慣,當要在文字檔中插入一個新行時,對於行結束符的選擇必須適合使用者的作業系統,如果使用錯誤的行結束符,那麼當開啟檔案時,輸出的可以是一堆亂碼,所以正確的使用行結束符是非常重要的。
基於UNIX 的系統使用\n作為行結束符,基於 Windows的系統,使用\r\n作為行結束符,基於 Macintosh 的系統使用\r作為行結束符。
在 Windows 下提供一個文本轉換標記(“t”)可以將\n轉換位\r\n;或者也可以使用(“b”)設定二進位模式,這樣就不會對資料進行轉換。所以,在Windows系統要使用行結束符有兩個選擇:一使用文本轉換標記(“t”)進行轉換;二使用(“b”)設定mode參數的模式為二進位。
預設的轉換模式依賴於 SAPI 和使用的 PHP版本,因此為了便於移植,建議在應用 fopen()函數時要制定恰當的模式。
如果想讓\n作為行結束符的純文字檔案在其他應用程式(如 Notepad)中也有效。那麼建議在在指令碼中使用(“t”)模式。在其他情況下使用(“b”)。
如果在操作二進位檔案時沒有指定(“b”)模式,可能會輸出一些奇怪的內容,因此,考慮到程式的可移植性,強烈建議在在用 fopen()開啟檔案時總是使用(“b”)模式;同時,建議重寫那些依賴於(“t”)模式的代碼。使其使用正確的行結束符和正確的(“b”)模式。
關於如何應用fopen()函數的選擇模式我們就介紹到這裡,小夥伴們可以自己在本地試一試~