如何應用fopen()函數的選擇模式?

來源:互聯網
上載者:User
如何應用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()函數的選擇模式我們就介紹到這裡,小夥伴們可以自己在本地試一試~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.