PHP 檔案系統
在本教程中,你將學習如何使用 PHP 的檔案系統函式動態建立,訪問(或讀取)和操作檔案。
在 PHP 中使用檔案
由於 PHP 是伺服器端程式語言,因此它允許你使用儲存在 Web 伺服器上的檔案和目錄。在本教程中,你將學習如何使用 PHP 檔案系統函式在 Web 伺服器上建立,訪問和操作檔案。
使用 PHP fopen()
函式開啟檔案
要使用檔案,首先需要開啟檔案。PHP fopen()
函式用於開啟檔案。該函式的基本語法如下:
fopen(filename , mode)
fopen()
傳遞的第一個引數指定要開啟的檔名稱,第二個引數指定應在哪種模式下開啟檔案。例如:
<?php
$handle = fopen("data.txt", "r");
?>
可以使用以下模式之一開啟檔案:
模式 | 解釋 |
---|---|
r |
開啟檔案以供讀取。 |
r+ |
開啟檔案進行讀寫。 |
w |
開啟檔案僅寫入並清除檔案內容。如果該檔案不存在,PHP 將嘗試建立它。 |
w+ |
開啟檔案進行讀寫,清除檔案內容。如果該檔案不存在,PHP 將嘗試建立它。 |
a |
附加。開啟檔案僅供寫入。通過寫入檔案末尾來保留檔案內容。如果該檔案不存在,PHP 將嘗試建立它。 |
a+ |
讀/追加。開啟檔案進行讀寫。通過寫入檔案末尾來保留檔案內容。如果該檔案不存在,PHP 將嘗試建立它。 |
x |
開啟檔案僅供寫入。如果檔案已存在,則返回 FALSE 並生成錯誤。如果該檔案不存在,PHP 將嘗試建立它。 |
x+ |
開啟檔案進行讀寫; 否則它與 x 具有相同的行為。 |
如果你嘗試開啟不存在的檔案,PHP 將生成警告訊息。因此,為了避免這些錯誤訊息,你應該始終使用 PHP file_exists()
函式在嘗試訪問檔案或目錄之前檢查檔案或目錄是否存在。
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Attempt to open the file
$handle = fopen($file, "r");
} else{
echo "ERROR: File does not exist.";
}
?>
提示: 檔案和目錄的操作容易出錯。因此,實現某種形式的錯誤檢查是一種很好的做法,這樣如果發生錯誤,你的指令碼將優雅地處理錯誤。請參閱有關 PHP 錯誤處理 的教程。
使用 PHP fclose()
函式關閉檔案
完成檔案處理後,需要關閉它。 fclose()
函式用於關閉檔案,如以下示例所示:
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Open the file for reading
$handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
/* Some code to be executed */
// Closing the file handle
fclose($handle);
} else{
echo "ERROR: File does not exist.";
}
?>
注意: 儘管 PHP 在指令碼終止時會自動關閉所有開啟的檔案,但在執行所有操作後關閉檔案是一種很好的習慣。
使用 PHP fread()
函式從檔案中讀取
現在你已經瞭解瞭如何開啟和關閉檔案。在下一節中,你將學習如何從檔案中讀取資料。PHP 有幾個用於從檔案中讀取資料的函式。只需一次操作,你就可以從一個字元讀取整個檔案。
讀取固定數量的字元
fread()
函式可用於從檔案中讀取指定數量的字元。此函式的基本語法如下,
fread(file handle , length in bytes)
此函式有兩個引數 - 檔案控制代碼和要讀取的位元組數。以下示例從包含空格的 data.txt
檔案中讀取 20 個位元組。讓我們假設檔案 data.txt
包含一段文字 The quick brown fox jumps over the lazy dog.
。
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Open the file for reading
$handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
// Read fixed number of bytes from the file
$content = fread($handle, "20");
// Closing the file handle
fclose($handle);
// Display the file content
echo $content;
} else{
echo "ERROR: File does not exist.";
}
?>
上面的例子將產生以下輸出:
The quick brown fox jumps over the lazy dog.
讀取檔案的全部內容
fread()
函式可與 filesize()
函式結合使用,以立即讀取整個檔案。該 filesize()
函式以位元組為單位返回檔案的大小。
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Open the file for reading
$handle = fopen($file, "r") or die("ERROR: Cannot open the file.");
// Reading the entire file
$content = fread($handle, filesize($file));
// Closing the file handle
fclose($handle);
// Display the file content
echo $content;
} else{
echo "ERROR: File does not exist.";
}
?>
上面的例子將產生以下輸出:
The quick brown fox jumps over the lazy dog.
在 PHP 中讀取檔案的全部內容的最簡單方法是使用該 readfile()
函式。此函式允許你讀取檔案的內容而無需開啟它。以下示例將生成與上例相同的輸出:
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Reads and outputs the entire file
readfile($file) or die("ERROR: Cannot open the file.");
} else{
echo "ERROR: File does not exist.";
}
?>
上面的例子將產生以下輸出:
The quick brown fox jumps over the lazy dog.
讀取檔案的全部內容而不需要開啟它的另一種方法是使用該 file_get_contents()
函式。此函式接受檔案的名稱和路徑,並將整個檔案讀入字串變數。這是一個例子:
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Reading the entire file into a string
$content = file_get_contents($file) or die("ERROR: Cannot open the file.");
// Display the file content
echo $content;
} else{
echo "ERROR: File does not exist.";
}
?>
另一種從檔案中讀取整個資料的方法是 PHP 的 file()
函式。它的函式類似 file_get_contents()
,但它將檔案內容作為一個行陣列返回,而不是單個字串。返回陣列的每個元素對應於檔案中的一行。
要處理檔案資料,你需要使用 foreach 迴圈 遍歷陣列。這是一個示例,它將檔案讀入陣列,然後使用迴圈顯示它:
<?php
$file = "data.txt";
// Check the existence of file
if(file_exists($file)){
// Reading the entire file into an array
$arr = file($file) or die("ERROR: Cannot open the file.");
foreach($arr as $line){
echo $line;
}
} else{
echo "ERROR: File does not exist.";
}
?>
使用 PHP fwrite()
函式寫入檔案
同樣,你可以使用 PHP fwrite()
函式將資料寫入檔案或附加到現有檔案。該函式的基本語法如下:
fwrite(file handle , string)
fwrite()
函式有兩個引數 - file handle
和要寫入的資料字串 string
,如以下示例所示:
<?php
$file = "note.txt";
// String of data to be written
$data = "The quick brown fox jumps over the lazy dog.";
// Open the file for writing
$handle = fopen($file, "w") or die("ERROR: Cannot open the file.");
// Write data to the file
fwrite($handle, $data) or die ("ERROR: Cannot write the file.");
// Closing the file handle
fclose($handle);
echo "Data written to the file successfully.";
?>
在上面的例子中,如果 note.txt
檔案不存在,PHP 將自動建立它並寫入資料。但是,如果 note.txt
檔案已經存在,PHP 將在寫入新資料之前刪除此檔案的內容(如果有),但是如果你只想附加檔案並保留現有內容,則只需在上面的例子中使用模式 a
而不是 w
。
另一種方法是使用 file_put_contents()
函式。它是 file_get_contents()
函式的對應函式,提供了一種將資料寫入檔案而不需要開啟它的簡單方法。此函式接受檔案的名稱和路徑以及要寫入檔案的資料。這是一個例子:
<?php
$file = "note.txt";
// String of data to be written
$data = "The quick brown fox jumps over the lazy dog.";
// Write data to the file
file_put_contents($file, $data) or die("ERROR: Cannot write the file.");
echo "Data written to the file successfully.";
?>
如果 file_put_contents()
函式中指定的檔案已存在,PHP 將預設覆蓋它。如果要保留檔案的內容,可以將特殊 FILE_APPEND
標誌作為第三個引數傳遞給 file_put_contents()
函式。它只是將新資料附加到檔案而不是重寫它。這是一個例子:
<?php
$file = "note.txt";
// String of data to be written
$data = "The quick brown fox jumps over the lazy dog.";
// Write data to the file
file_put_contents($file, $data, FILE_APPEND) or die("ERROR: Cannot write the file.");
echo "Data written to the file successfully.";
?>
使用 PHP rename()
函式重新命名檔案
你可以使用 PHP 的 rename()
函式重新命名檔案或目錄,如下所示:
<?php
$file = "file.txt";
// Check the existence of file
if(file_exists($file)){
// Attempt to rename the file
if(rename($file, "newfile.txt")){
echo "File renamed successfully.";
} else{
echo "ERROR: File cannot be renamed.";
}
} else{
echo "ERROR: File does not exist.";
}
?>
使用 PHP unlink()
函式刪除檔案
你可以使用 PHP 的 unlink()
函式刪除檔案或目錄,如下所示:
<?php
$file = "note.txt";
// Check the existence of file
if(file_exists($file)){
// Attempt to delete the file
if(unlink($file)){
echo "File removed successfully.";
} else{
echo "ERROR: File cannot be removed.";
}
} else{
echo "ERROR: File does not exist.";
}
?>
在下一章中,我們將瞭解有關在 PHP 中解析目錄或資料夾的更多資訊。
PHP 檔案系統函式
下表提供了一些其他有用的 PHP 檔案系統函式的概述,這些函式可用於動態讀取和寫入檔案。
函式 | 描述 |
---|---|
fgetc() |
一次讀取一個字元。 |
fgets() |
一次讀取一行。 |
fgetcsv() |
讀取一行以逗號分隔的值。 |
filetype() |
返回檔案的型別。 |
feof() |
檢查是否已到達檔案末尾。 |
is_file() |
檢查檔案是否是常規檔案。 |
is_dir() |
檢查檔案是否是目錄。 |
is_executable() |
檢查檔案是否可執行。 |
realpath() |
返回規範化的絕對路徑名。 |
rmdir() |
刪除一個空目錄。 |