[PHP]檔案讀寫

更新於 2024/12/04閱讀時間約 5 分鐘

檔案屬性

  • filetype(string):回傳參數檔案的種類字串,可能的回傳值有:fifo、char、dir、block、link、file和unknown,如果有錯誤回傳false。
  • fileatime(string):回傳參數檔案的最後存取時間,單位是UNIX的時間戳記,如果錯誤回傳false。
  • filemtime(string):回傳參數檔案的最後更改時間,單位是UNIX的時間戳記,如果錯誤回傳false。
  • filesize(string):回傳參數檔案尺寸,以位元組為單位,如果錯誤回傳false。
  • is_dir(string):如果參數路徑存在且是路徑,回傳true,否則回傳false。
  • is_file(string):如果參數檔案存在且是檔案,回傳true,否則回傳false。
  • is_readable(string):如果參數檔案存在且可讀,回傳true,否則回傳false。
  • is_writeable(string):如果參數檔案存在且可寫,回傳true,否則回傳false。如果是路徑,檢查路徑是否可寫。
  • is_uploaded_file(string):如果參數檔案是使用HTTP POST上傳的檔案,就回傳true;否則為false。


開啟檔案

$fp = fopen($file, "r")  // 開啟檔案

or exit("檔案 $file 開啟錯誤");

第一個參數為要開啟的檔案路徑或URL網址字串。(路徑如果是「\」,就需要使用逸出字元);第二個參數為檔案開啟的模式。


檔案開啟模式

  • r:唯讀檔案
  • r+:讀寫檔案,檔案指標位在檔頭,寫入資料會覆寫檔案內容。
  • w:寫入檔案,清除目前檔案所有內容,檔案指標指向檔頭,如果檔案不存在,建立此檔案。
  • w+:讀寫檔案,清除目前檔案所有內容,檔案指標指向檔頭,如果檔案不存在,建立此檔案。
  • a:寫入檔案,檔案指標指向檔尾,從檔尾開始寫入資料,如果檔案不存在,建立此檔案。
  • a+:讀寫檔案,檔案指標指向檔尾,從檔尾開始寫入資料,如果檔案不存在,建立此檔案。
  • b:二進位檔案,不可以單獨使用,需要配合其他檔案模式。


關閉檔案

在完成檔案的讀寫後,請使用fclose()關閉檔案。

fclose($fp);

參數為所開啟的檔案。


寫入資料到檔案

寫入資料

if (fwrite($fp, $content))   // 寫入檔案

print "寫入檔案 $file 成功";

else

print "寫入檔案 $file 錯誤";

第一個參數為開啟的檔案。第二個參數為要寫入的內容。


限制寫入資料長度

if (fwrite($fp, $content, 10))   // 寫入檔案

print "寫入檔案 $file 成功";

else

print "寫入檔案 $file 錯誤";

第一個參數為開啟的檔案。第二個參數為要寫入的內容。第三個參數為限制寫入資料的位元組數。


讀取檔案內容

位元組數讀取內容

$contents = fread($fp, filesize($file));

第一個參數為開啟的檔案。第二個參數為要讀取的位元組數。(檔案內容如果有換行符號,可以使用nl2br(),將換行符號轉換成「<br/>」標籤)


讀取內容到陣列

這種讀取方式,會以換行符號對資料做分割。

$lines = file($file);  // 將檔案讀入陣列

// 一行一行的顯示檔案內容

foreach ($lines as $line_num => $line) {

echo "$line_num : " . $line;

}


讀取內容並輸出

$num = readfile($file);


讀取圖檔

readfile()讀檔

$fileData = exif_read_data($file);

// HTTP標頭資訊

header("Content-Type: " . $fileData['MimeType']);

header("Content-Length: " . $fileData['FileSize']);

// 讀取檔案內容

readfile($file);


base64圖檔

$fileData = exif_read_data($file);

$fileEncode = base64_encode(file_get_contents($file));

// 輸出 <img> 標籤

echo '<img src="data:'.$fileData['MimeType'].';base64,'.$fileEncode.'"/>';
















avatar-img
8會員
123內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
小黑與程式的邂逅 的其他內容
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
HTTP通訊協定不會持續保持連線和保留客戶端的使用者狀態,因此需要將使用者狀態傳遞下去,以便保留使用者狀態,稱為「狀態管理」(State Management)。 客戶端: 此部份是將資料存在使用者電腦或HTML網頁或標籤中,以便傳遞。常用方法如下: 表單欄位:使用HTML表單欄位內容傳遞資料
為了加速網頁存取,因此都會將網頁內容保留在快取空間(Cache)的資料夾或磁碟。也就是說,當你在瀏覽網頁時,瀏覽的網頁內容會被保留在你電腦裡的快取空間(Cache),在你重複瀏覽到相同網頁時,瀏覽器會先到快取空間尋找有沒有該網頁的的檔案,如果有就直接取用,不會再次下載網頁內容。 但當網頁內容有保密
可以使用$_SERVER取得Web伺服器的系統資訊,常用變數名稱如下: GATEWAY_INTERFACE:伺服器CGI版本。 PHP_SELF:目前執行PHP程式的檔案名稱。 DOCUMENT_ROOT:目前執行PHP程式的根目錄。 QUERY_STRING:URL參數的資料。 REMO
$GLOBALS:包含目前執行PHP程式的所有全域變數,其鍵值是全域變數名稱。 $_SERVER:Web伺服器的變數,屬於目前PHP程式執行環境的相關資料。 $_GET:儲存HTTP GET方法傳入PHP程式表單欄位值或URL參數的結合陣列,其鍵值是欄位或參數名稱。 $_POST:儲存HT
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
HTTP通訊協定不會持續保持連線和保留客戶端的使用者狀態,因此需要將使用者狀態傳遞下去,以便保留使用者狀態,稱為「狀態管理」(State Management)。 客戶端: 此部份是將資料存在使用者電腦或HTML網頁或標籤中,以便傳遞。常用方法如下: 表單欄位:使用HTML表單欄位內容傳遞資料
為了加速網頁存取,因此都會將網頁內容保留在快取空間(Cache)的資料夾或磁碟。也就是說,當你在瀏覽網頁時,瀏覽的網頁內容會被保留在你電腦裡的快取空間(Cache),在你重複瀏覽到相同網頁時,瀏覽器會先到快取空間尋找有沒有該網頁的的檔案,如果有就直接取用,不會再次下載網頁內容。 但當網頁內容有保密
可以使用$_SERVER取得Web伺服器的系統資訊,常用變數名稱如下: GATEWAY_INTERFACE:伺服器CGI版本。 PHP_SELF:目前執行PHP程式的檔案名稱。 DOCUMENT_ROOT:目前執行PHP程式的根目錄。 QUERY_STRING:URL參數的資料。 REMO
$GLOBALS:包含目前執行PHP程式的所有全域變數,其鍵值是全域變數名稱。 $_SERVER:Web伺服器的變數,屬於目前PHP程式執行環境的相關資料。 $_GET:儲存HTTP GET方法傳入PHP程式表單欄位值或URL參數的結合陣列,其鍵值是欄位或參數名稱。 $_POST:儲存HT
你可能也想看
Google News 追蹤
Thumbnail
投資新手大多從身邊市場開始著手,選擇台股市場入門,單筆投資或台股定期定額投資,隨著經驗累積,進入美股市場也是好選擇,這篇文章帶你前進美股投資,證券開戶選擇國內券商複委託,使用美股定期定額投資,並以國泰 CUBE App為例說明。 內容目錄: 1.一站式開戶:以國泰世華 CUBE App 為例
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
使用 GD庫: 1.先確認 PHP GD lib 是否已安裝,利用 phpinfo() 頁面來檢查。 <?php phpinfo(); ?> 如果出現 GD Support "enabled",就是有啟用 GD lib了, 如果沒有的話,請打開 php.ini 找到 ;extension=
Thumbnail
由於開發多個專案的時候,頻繁切換本地環境的PHP版本實在太麻煩,於是想要可以直接使用指令就完成切換的功能,於是有了這篇文章。
Thumbnail
本文將介紹在Windows環境中安裝Oracle Instant Client及相關PHP擴展,以進行與Oracle Database的串接。透過本文所述步驟,您將能在Windows環境中順利進行PHP與Oracle Database的串接設定。
Thumbnail
底下是HTML的上傳檔案程式碼: <form action="upload.php" method="post" enctype="multipart/form-data"> 選擇檔案: <input type="file" name="file"/><hr/> <input typ
Thumbnail
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
有一種狀況,URL GET method 有設變數,卻是空值 http://foo.bar.xxx/idol.php?IdolGroup= 這時,變數就算初始化也還是 null, 不會變成預設值
Thumbnail
程式如下: 跑了五次,每次判斷一千萬回 f1() 陣列的方式: 5.2219750881195 5.194901943
Thumbnail
這支 PHP 的小程式,輸入時間,會顯示回傳的時間: 放在 command line 執行,如下: $ php cst.php “2018–04–01 00:00:00 cst” 多了 14 小時,好神奇。 追 PHP Source 好了,看問題在哪。找到這支定義時區的設定: timezonemap
E 本筆記參考: 1. https://hivenson.pixnet.net/blog/post/191702742
取得2021年11月共有幾天: $total_days = cal_days_in_month(CAL_GREGORIAN, 11, 2021);   // $total_days=30 本筆記參考: 1. https://www.codegrepper.com/code-examples/php
Thumbnail
投資新手大多從身邊市場開始著手,選擇台股市場入門,單筆投資或台股定期定額投資,隨著經驗累積,進入美股市場也是好選擇,這篇文章帶你前進美股投資,證券開戶選擇國內券商複委託,使用美股定期定額投資,並以國泰 CUBE App為例說明。 內容目錄: 1.一站式開戶:以國泰世華 CUBE App 為例
Thumbnail
這是張老師的第三本書,我想前二本應該也有很多朋友們都有讀過,我想絕對是受益良多,而這次在書名上就直接點出,著重在從投資的角度來切入
Thumbnail
使用 GD庫: 1.先確認 PHP GD lib 是否已安裝,利用 phpinfo() 頁面來檢查。 <?php phpinfo(); ?> 如果出現 GD Support "enabled",就是有啟用 GD lib了, 如果沒有的話,請打開 php.ini 找到 ;extension=
Thumbnail
由於開發多個專案的時候,頻繁切換本地環境的PHP版本實在太麻煩,於是想要可以直接使用指令就完成切換的功能,於是有了這篇文章。
Thumbnail
本文將介紹在Windows環境中安裝Oracle Instant Client及相關PHP擴展,以進行與Oracle Database的串接。透過本文所述步驟,您將能在Windows環境中順利進行PHP與Oracle Database的串接設定。
Thumbnail
底下是HTML的上傳檔案程式碼: <form action="upload.php" method="post" enctype="multipart/form-data"> 選擇檔案: <input type="file" name="file"/><hr/> <input typ
Thumbnail
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
有一種狀況,URL GET method 有設變數,卻是空值 http://foo.bar.xxx/idol.php?IdolGroup= 這時,變數就算初始化也還是 null, 不會變成預設值
Thumbnail
程式如下: 跑了五次,每次判斷一千萬回 f1() 陣列的方式: 5.2219750881195 5.194901943
Thumbnail
這支 PHP 的小程式,輸入時間,會顯示回傳的時間: 放在 command line 執行,如下: $ php cst.php “2018–04–01 00:00:00 cst” 多了 14 小時,好神奇。 追 PHP Source 好了,看問題在哪。找到這支定義時區的設定: timezonemap
E 本筆記參考: 1. https://hivenson.pixnet.net/blog/post/191702742
取得2021年11月共有幾天: $total_days = cal_days_in_month(CAL_GREGORIAN, 11, 2021);   // $total_days=30 本筆記參考: 1. https://www.codegrepper.com/code-examples/php