fopen -- 打开文件或者 URL
fopen
(PHP 3, PHP 4, PHP 5)
fopen?--?打開文件或者 URL
說明
resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
fopen() 將 filename 指定的名字資源綁定到一個流上。如果 filename 是 "scheme://..." 的格式,則被當成一個 URL,PHP 將搜索協議處理器(也被稱為封裝協議)來處理此模式。如果該協議尚未注冊封裝協議,PHP 將發出一條消息來幫助檢查腳本中潛在的問題并將 filename 當成一個普通的文件名繼續執行下去。
如果 PHP 認為 filename 指定的是一個本地文件,將嘗試在該文件上打開一個流。該文件必須是 PHP 可以訪問的,因此需要確認文件訪問權限允許該訪問。如果激活了安全模式或者 open_basedir 則會應用進一步的限制。
如果 PHP 認為 filename 指定的是一個已注冊的協議,而該協議被注冊為一個網絡 URL,PHP 將檢查并確認 allow_url_fopen 已被激活。如果關閉了,PHP 將發出一個警告,而 fopen 的調用則失敗。
注意: 所支持的協議列表見附錄 N。某些協議(也被稱為 wrappers)支持 context 和/或 php.ini 選項。參見相應的頁面哪些選項可以被設定(例如 php.ini 中用于 http wrapper 的 user_agent 值)。
?
?
注意: 對 context 的支持是 PHP 5.0.0 添加的。有關 context 的說明見參考 CLIX, Stream Functions。
?
?
注意: 自 PHP 4.3.2 起,對所有區別二進制和文本模式的平臺默認模式都被設為二進制模式。如果在升級后腳本碰到問題,嘗試暫時使用 't' 標記,直到所有的腳本都照以下所說的改為更具移植性以后。
?
?
mode 參數指定了所要求到該流的訪問類型。可以是以下:
表 1. fopen() 中 mode 的可能值列表
mode
說明
'r'
只讀方式打開,將文件指針指向文件頭。
'r+'
讀寫方式打開,將文件指針指向文件頭。
'w'
寫入方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建之。
'w+'
讀寫方式打開,將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創建之。
'a'
寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
'a+'
讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
'x'
創建并以寫入方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。
'x+'
創建并以讀寫方式打開,將文件指針指向文件頭。如果文件已存在,則 fopen() 調用失敗并返回 FALSE,并生成一條 E_WARNING 級別的錯誤信息。如果文件不存在則嘗試創建之。這和給 底層的 open(2) 系統調用指定 O_EXCL|O_CREAT 標記是等價的。此選項被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。
?
?
注意: 不同的操作系統家族具有不同的行結束習慣。當寫入一個文本文件并想插入一個新行時,需要使用符合操作系統的行結束符號。基于 Unix 的系統使用 n 作為行結束字符,基于 Windows 的系統使用 rn 作為行結束字符,基于 Macintosh 的系統使用 r 作為行結束字符。
如果寫入文件時使用了錯誤的行結束符號,則其它應用程序打開這些文件時可能會表現得很怪異。
Windows 下提供了一個文本轉換標記('t')可以透明地將 n 轉換為 rn。與此對應還可以使用 'b' 來強制使用二進制模式,這樣就不會轉換數據。要使用這些標記,要么用 'b' 或者用 't' 作為 mode 參數的最后一個字符。
默認的轉換模式依賴于 SAPI 和所使用的 PHP 版本,因此為了便于移植鼓勵總是指定恰當的標記。如果是操作純文本文件并在腳本中使用了 n 作為行結束符,但還要期望這些文件可以被其它應用程序例如 Notepad 讀取,則在 mode 中使用 't'。在所有其它情況下使用 'b'。
在操作二進制文件時如果沒有指定 'b' 標記,可能會碰到一些奇怪的問題,包括壞掉的圖片文件以及關于 rn 字符的奇怪問題。
?
?
注意: 為移植性考慮,強烈建議在用 fopen() 打開文件時總是使用 'b' 標記。
?
?
注意: 再一次,為移植性考慮,強烈建議你重寫那些依賴于 't' 模式的代碼使其使用正確的行結束符并改成 'b' 模式。
?
?
如果也需要在 include_path 中搜尋文件的話,可以將可選的第三個參數 use_include_path 設為 '1' 或 TRUE。
如果打開失敗,本函數返回 FALSE。
?
例 1. fopen() 例子
<?php
$handle?=?fopen("/home/rasmus/file.txt",?"r");
$handle?=?fopen("/home/rasmus/file.gif",?"wb");
$handle?=?fopen("http://www.example.com/",?"r");
$handle?=?fopen("ftp://user:password@example.com/somefile.txt",?"w");
?>
如果在用服務器模塊版本的 PHP 時在打開和寫入文件上遇到問題,記住要確保所使用的文件是服務器進程所能夠訪問的。
在 Windows 平臺上,要小心轉義文件路徑中的每個反斜線,或者用斜線。
?
<?php
$handle?=?fopen("c:\data\info.txt",?"r");
?>
警告
當使用 SSL 時,Microsoft IIS 將違反協議不發送 close_notify 標記就關閉連接。PHP 將在到達數據尾端時報告 "SSL: Fatal Protocol Error"。要繞過此問題,應將 error_reporting 級別降低為不包括警告。PHP 4.3.7 及更高版本可以在當使用 https:// 封裝協議打開流的時候檢測出有此問題的 IIS 服務器并抑制警告。如果使用 fsockopen() 來創建一個 ssl:// 套接字,則需要自己檢測并抑制警告信息。
注意: 當安全模式被激活時,PHP 將檢查被操作的目錄是否和正在執行的腳本有相同的 UID(所有者)。
總結
以上是生活随笔為你收集整理的fopen -- 打开文件或者 URL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel函数怎么用android,在A
- 下一篇: php 编译指定libiconv,PHP