Getting Started with PHP Filesystem
PHP:8.0
跟所有的程式語言相同,PHP 也提供了許多操作檔案的 functions。
Opening a File with fopen()
操作檔案的第一步驟,就是開啟檔案了,可以使用 fopen() 來開啟檔案。另外在開啟檔案的同時,也可以使用 file_exists() 判斷檔案是否存在。
fopen()
的使用需要傳入 檔案名稱
跟 模式
即可使用。
fopen(filename, mode)
fopen
的模式種類
Modes | Name | Description |
---|---|---|
r | Read | 開啟檔案,以供讀取,從檔案開頭開始 |
r+ | Read | 開啟檔案,以供讀取及寫入,從檔案開頭開始 |
w | Write | 開啟檔案,並寫入(覆寫) |
w+ | Write | 開啟檔案,以供讀取及寫入(覆寫) |
a | Append | 開啟檔案,以供新增內容,接續在目前已有的內容之後開始寫入,假如檔案不存在,會建立一個新檔。 |
a+ | Append | 開啟檔案,以供新增及讀取內容,接續在目前已有的內容之後開始寫入,假如檔案不存在,會建立一個新檔。 |
x | Cautious write | 開啟檔案並寫入,假如檔案已存在,不會開啟開檔,fopen()會回傳false。 |
範例
$file = 'data.txt';
// Check the existence of file
if (file_exists($file)) {
// Attempt to open the file
$fileHandle = fopen($file, 'r');
} else{
echo 'File does not exist.' . PHP_EOL;
}
Closing a File with fclose()
在完成檔案操作後,需要配合 fclose() 來關閉檔案,釋放相關的資源。
範例
$file = 'data.txt';
// Check the existence of file
if (file_exists($file)) {
// Attempt to open the file
$fileHandle = fopen($file, 'r');
/* Some code to be executed */
// Use fclose to release resource
fclose($fileHandle);
} else{
echo 'File does not exist.' . PHP_EOL;
}
Reading a File with fread()
在開啟檔案之後,可以透過 fread() 來讀取檔案的內容。
fread()
的使用需要傳入 File Handle
和 讀取長度(bytes)
。
fread(file handle, length in bytes)
因為 fread()
需要定義讀取長度的關係,可以配合 filesize() 操作,就可以讀取完整檔案。
範例
$file = 'data.txt';
// Check the existence of file
if (file_exists($file)) {
// Attempt to open the file
$fileHandle = fopen($file, 'r');
// Reading file
$content = fread($fileHandle, filesize($file));
// Use fclose to release resource
fclose($fileHandle);
echo $content;
} else{
echo 'File does not exist.' . PHP_EOL;
}
Notice: 相同的功能,也有 file_get_contents() 和 readfile() 可以參考使用。
Reading a File by Line with fgets()
上面提到的 fread()
是整個檔案讀取,如果遇到需要逐行處理的狀況,就可以使用 fgets() 搭配 feof() 來逐行讀取來處理。
範例
$file = 'data.txt';
// Check the existence of file
if (file_exists($file)) {
// Attempt to open the file
$fileHandle = fopen($file, 'r');
// Reading file by line
if ($fileHandle) {
// Use feof() to check end-of-file poiner
while (!feof($fileHandle)) {
// Reading file by line
echo fgets($fileHandle);
}
}
// Use fclose to release resource
fclose($fileHandle);
} else{
echo 'File does not exist.' . PHP_EOL;
}
Writing a File with fwrite()
除了讀取,寫入也是檔案操作很重要的一環,fwrite() 就是用來寫入檔案的 function。
fwrite()
的使用需要傳入 File Handle
跟要寫入的 內容
。
fwrite(file handle, string)
範例
$file = 'note.txt';
$data = 'Hello 你好嗎';
// Writing file
$fileHandle = fopen($file, 'w');
fwrite($fileHandle, $data);
fclose($fileHandle);
echo 'Data written to the file successfully.' . PHP_EOL;
Notice: 相同的功能,也有 file_put_contents() 可以參考使用。
Renaming a File with rename()
透過 rename() 可以修改檔案名稱。
範例
$file = 'note.txt';
if (file_exists($file)) {
if (rename($file, 'new.txt')) {
echo 'File renamed successfully.' . PHP_EOL;
} else {
echo 'File cannot be renamed.' . PHP_EOL;
}
}
Removing a File with unlink()
透過 unlink() 可以刪除檔案。
範例
$file = 'note.txt';
if (file_exists($file)) {
if (unlink($file)) {
echo 'File removed successfully.' . PHP_EOL;
} else {
echo 'File cannot be removed.' . PHP_EOL;
}
}
Other Filesystem functions
Function | Description |
---|---|
filetype() | 取得檔案類型 |
is_file() | 判斷是否為檔案 |
is_dir() | 判斷是否為目錄 |
is_executable() | 判斷是否可以執行 |
realpath() | 取得檔案完整路徑 |
rmdir() | 刪除目錄 |