檔案處理

概述及用途
    PHP也可進行一般檔案的處理,例如文字檔的開啟、讀取、寫人、關閉等等,甚至還可以進行檔案的複製、搬移、刪除,以及目錄的處理功能,唯在處理這些檔案之前,如果要透過Web的方式來處理,得先注意檔案在系統中的權限問題,像是Linux系統,一般檔案的權限可分為擁有者、群組、其他等三種不同的使用者權限,同時又區分「讀、寫、執行」三種屬性權限,所以,在使用時得先留意在那個系統(Linux或Windows)執行,以及上述權限問題等,才能順利操作PHP管理檔案。

 以下就以一個文字檔為例,進行所謂的:

  • 開啟檔案 ─ fopen( )函數
  • 顯示檔案 ─ fpassthru ( )函數
  • 檔案內容讀取 ─ fread( ) 、fgets( )函數
  • 寫入檔案 ─ fwrite( ) 、fputs( ) 函數
  • 關閉檔案 ─ fclose ( ) 函數
  • 複製檔案 ─ copy ( ) 函數
  • 刪除檔案 ─ unlink( ) 函數
     

 在操作這些檔案處理函數時,php.ini中的設定會影響這些函式的動作:

參數名稱
預設值
說明
參數可變更性
allow_url_fopen
1
是否允許利用網頁方式開啟檔案
php.ini
user_agent
設定PHP傳送時使用者代理
php.ini
default_socket_timeout
60秒
在使用連線功能時的逾時時間設定(即自動斷線時間)
php.ini
auto_detect_line_endings
Off
自動檢查「行」的結束(換行)
php.ini

使用方式

fopen 開啟檔案
語法
fopen ( string 檔案名稱, string 開啟模式 [, int use_include_path [, resource zcontext]])
說明
  1. filename可以是檔案名稱或絕對路徑的檔案
  2. 開啟模式如下表說明:
     

    開啟
    模式

    說明
    'r'
    開啟成唯讀檔
    'r+'
    開啟成可讀寫的檔案
    'w'
    開啟只有寫入的檔案,並將檔案長度設為零;如果檔案不存在,則建立。
    'w+'
    開啟可讀寫,如果檔案存在,則會清除所有內容,長度為零; 如果檔案不存在,則建立。
    'a'
    開啟只有寫入的檔案,資料由檔案尾部加入;如果檔案不存在,則建立。
    'a+'
    開啟可讀寫的檔案,資料由檔案尾部加入;如果檔案不存在,則建立。
    'x'
    建立並開啟只有寫入的檔案,資料由檔案開頭寫入;如果檔案存在,fopen( )函數將回應「false」,並發生錯誤;如果檔案不存在,則建立。這個參數自PHP 4.3.2 以後版本開始支援。.
    'x+'
    建立並開啟可讀寫的檔案,資料由檔案開頭寫入;如果檔案存在,fopen( )函數將回應「false」,並發生錯誤;如果檔案不存在,則建立。這個參數自PHP 4.3.2 以後版本開始支援。.
  3. include_path 是指定檔案可搜尋的路徑位置。
  4. 如果操作成功的話,會回傳一個「handle」值,失敗則傳回「 false 」
傳回值
resource
fpassthru 顯示檔案
語法
fpassthru ( resource handle)
 
說明
當fopen( )函數開啟檔案成功的話,使用fpassthru( )函數,會檔案內容全部輸出到網頁上。
傳回值
int
fread fgets讀取檔案
語法
fread ( resource handle, int length)
說明
  1. 由開啟的檔案中讀取一定長度的字串。
  2. 可配合 while 將整個檔案讀取出來。
傳回值
string
fwrite、fput 寫入檔案
語法
fwrite ( resource handle, string string [, int length])
說明
將指定的字串寫入檔案中,如果有長度設定,則表示要寫入字串的字元數。
傳回值
int
fclose 關閉檔案
語法
fclose ( resource handle)
說明
關閉開啟的檔案;
傳回值
bool
copy 複製檔案
語法
copy ( string source, string dest)
 
說明
複製檔案,成功回傳TRUE失敗回傳FALSE;須注意檔案或目錄的權限
傳回值
bool
unlink 刪除檔案
語法
unlink ( string filename)
說明
刪除檔案,成功回傳TRUE失敗回傳FALSE;須注意檔案或目錄的權限
傳回值
bool

範例

簡易文字計數器 顯示結果
<?php
if (file_exists("count.txt"))
{
$ff=fopen("count.txt","r");
$c=fgets($ff);
$c++;
fclose($ff);
}
else
{
$c=1;
}

$ff=fopen("count.txt","w");
fputs($ff,$c);
fclose($ff);
?>
<html>
<head>
<title>網頁計數器</title>
</head>
<body>
你是第<?php echo $c; ?>個訪客
</body>
</html>