1. 程式人生 > >fopen -- 開啟檔案或者 URL

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:[email protected]/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

fopen (PHP 3, PHP 4, PHP 5) fopen -- 開啟檔案或者 URL 說明 resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] ) fop

關於fopen開啟檔案失敗的問題

2018年11月02日 13:23:13 動了情的痞子要學習 閱讀數:7 個人分類: 個人

fopen開啟檔案時,路徑中包含中文

轉載來自:http://blog.csdn.net/zmq5411/article/details/21003831 找了好多資料,一下午的時間,終於找到了,什麼加L啊,_T啊,寫UTF轉換函式啊,通通沒調通,原來是應該使用wfopen函式開啟啊 具體內容也可移步到原部落格

fopen開啟檔案時位置指標的問題

      最近在寫一個程式是涉及到檔案的操作,其中遇到一個問題是開啟檔案後判斷檔案是否為空,剛開始想到了每次開啟檔案都是向檔案新增資料,就是以a+方式開啟,就想到用ftell函式直接得到當前位置如果不為0則說明檔案不為空,但是這樣程式執行一直沒打到想要的效果,除錯時發現開啟

Idea設定單擊開啟檔案或者雙擊開啟檔案、自動定位檔案所在的位置

曾經有一次在idea中不知道點選了哪裡,導致每次單擊某個檔案,這個檔案就自動打開了,強迫症表示不服。經過各種百度終於發現,如何設定Idea單擊開啟檔案或者雙擊開啟檔案,同時記錄一下如何自動定位檔案所在的

C# 選擇檔案、選擇資料夾、開啟檔案或者資料夾)

1、選擇檔案用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//該值確定是否可以選擇多個檔案 dialog.Title = "請選擇資料夾"; dialog.Filter = "

C# 選擇檔案、選擇資料夾、開啟檔案或者資料夾) 路徑中獲取檔案全路徑、目錄、副檔名、檔名稱 追加、拷貝、刪除、移動檔案、建立目錄 修改檔名、資料夾名!!

https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1、選擇檔案用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;/

cfile fopen fopen_s win10下開啟檔案失敗

vc程式在win10下面使用fopen 開啟檔案失敗,在網上查 了下是因為UAC許可權的問題如下:   由於windows vista win7 win8 win 10 添加了UAC許可權,所以會導致 在系統盤下 建立檔案失敗。返回拒絕訪問錯誤。 UAC是微軟為了提高Windows的安全性,自

bat批處理開啟檔案路徑或者程式

PEM開啟程式 @echo off start /min "" "D:\Program Files\Xshell\Xshell.exe" PEM設定延時時間 timeout /t 10 start /min "" "D:\Program Files\SecureCRT\SecureCRT

開啟txt或者其他檔案出現編碼錯誤的

解決方案:txt檔案“另存為”設定編碼格式為“utf-8” 轉自https://blog.csdn.net/qq_38734403/article/details/79529953,是這篇文章讓我

vim開啟檔案,第一個字元或者上次關閉時的位置變成了字元p

我使用SecureCRT登入Linux,在用vim開啟文字的時候,第一個字元或者是上次開啟的位置的字元會變成符號‘p’. 出現這種情況的原因是終端的相容問題,網上給出的解決方案是:只要在 ~/.bashrc 裡面加上 “export TERM=linux” 就

為什麼用fopen開啟遠端URL會很慢?

1. HTTP HEADER之詭 $content = file_get_contents('http://www.baidu.com/logo.png'); 這是php中一種讀取網路圖片的方式,就跟讀本地檔案一樣,用起來十分方便。但是這種方式存在一個問題,部分網路地址讀

lsof 檢視程序開啟那些檔案 或者 檢視檔案給那個程序使用

lsof命令是什麼? 可以列出被程序所開啟的檔案的資訊。被開啟的檔案可以是 1.普通的檔案,2.目錄  3.網路檔案系統的檔案,4.字元裝置檔案  5.(函式)共享庫  6.管道,命名管道 7.符號連結 8.底層的socket字流,網路socket,unix域名so

【影象處理】Matlab開啟PCD或者PLY檔案點雲檔案

一、Windows系統實現配置PCL庫 最新版本的PCL Windows已經進行了更新,不少網路現有教程都無法使用。建議放棄掙扎,使用PCL更換Ubuntu。 二、Matlab開啟PCD或者其他點雲檔案 如果提示缺少pcread,會自動安裝MATLAB影象處理Toolbox。 p

解決Google Docs無法登入或者登入後無法開啟檔案的問題

作為一個Google Docs的老使用者,我經常向朋友們推薦這項服務。推薦的理由無非如下:1. 線上的辦公軟體套裝,相容Microsoft office和Open office等大多數格式,你可以將word、PowerPoint等檔案上傳至Google Docs並在線檢視和編

PHP下使用fopen函式開啟檔案時的幾點注意

對一個檔案資源進行操作時,我們首先要使用fopen函式開啟檔案。這時要注意以下幾點: 1,在windows環境下編寫程式碼,但你的伺服器是另外一臺linux主機,這時就不能訪問windows下的檔案,會提示檔案找不到的錯誤 2,如果伺服器是在linux下,就不要使用類似ht

fopen開啟2G以上大檔案

    fopen開啟2G以上的檔案,是無法開啟的,我估計是跟32Bit有關係,跟記憶體大小有關係。     網上說的一些方法:     (1)用fopen64     (2)#undef   _FILE_OFFSET_BITS                #define   _FILE_OFFSET_

linux命令 — lsof 檢視程序開啟哪些檔案 或者 檢視檔案給哪個程序使用-zt

可以使用ps -fe|grep filename,也可以使用fuser filename檢視只檢視該程序:ps -ef | grep 11345檢視該程序開啟的檔案:lsof -p 11345檢視記憶體分配:lcat /proc/11345/maps檢視堆疊:pstack

使用vi開啟檔案如何跳到某一行,第一行或者最後一行呢

使用vi編輯器的時候,預設開啟的時候,滑鼠是在第一行的第一個位置。 如果你想開啟的時候,滑鼠會出現在某一行,可以用以下命令。 :$ 跳到檔案最後一行 :0或:1 跳到

vs2015 開啟專案或者建立新WEB專案失敗,無法讀取配置檔案 redirection.config

在網上沒有類似的解決方法 ,所以特意寫下來。 經過: 1、當前開啟的的是32位的VS2015,所以在C:\Program Files (x86)裡面IIS Express夾查詢檔案,結果也能找到 redirection.config這個檔案 2、檢查這個檔案的許可權,新增