進階 WWW 程式設計 -- PHP Regular Expression 靜宜大學資訊管理學系 蔡奇偉副教授 2004 2018/11/22 進階 WWW 程式設計 File System 靜宜大學資訊管理學系 蔡奇偉副教授 2004 靜宜大學資管系 蔡奇偉編撰 版權所有 2003
內容大綱 簡介 判別函式 檔案名稱 拷貝檔案 檔案改名 刪除檔案 開啟檔案 關閉檔案 讀取檔案 寫入檔案 檔案讀寫頭 檔案狀態資訊 目錄的處理
判別函式 bool file_exists ( string filename ) bool is_file ( string filename ) 判斷 filename 是否為一個檔案。 bool is_dir ( string dirname ) 判斷 dirname 是否為一個目錄(directory)。 bool is_link ( string filename ) 判斷 filename 是否為一個符號連結(symbolic link)。
bool is_uploaded_file ( string filename ) 判斷 filename 是否為一個經由 HTTP POST 上傳的檔案。 bool is_executable ( string filename ) 判斷檔案 filename 是否為一個可執行檔。 bool is_readable ( string filename ) 判斷檔案 filename 是否為一個可讀檔。 bool is_writable ( string filename ) 判斷檔案 filename 是否為一個可寫檔。 bool feof ( resource handle ) 判斷讀取檔案時是否達到檔案的尾端(EOF: End Of File)。
檔案名稱 string basename ( string path [, string suffix] ) 取出檔案路徑 path 中的檔名。若提供第二個參數 suffix,則扣除檔名中的副檔名。 範例 <?php $path = "/home/httpd/html/index.php"; $file = basename ($path); // $file is set to "index.php" $file = basename ($path,".php"); // $file is set to "index" ?>
string dirname ( string path) 範例 <?php $path = "/home/httpd/html/index.php"; $dir = dirname ($path); // $dir is set to "/home/httpd/html" ?>
array pathinfo ( string path ) 傳回一個對照陣列,其中包含檔案路徑 path 中的 dirname、basename、和 extension 三個組成部分。 範例 <?php $path_parts = pathinfo("/www/htdocs/index.html"); echo $path_parts["dirname"] . "\n"; echo $path_parts["basename"] . "\n"; echo $path_parts["extension"] . "\n"; ?> 輸出結果為: /www/htdocs index.html html
string realpath ( string path ) 範例 假定網頁的真實路徑是 “/www/htdocs/home.html”,則底下 $real_path 的值是 “/www/index.php”。 <?php $real_path = realpath ("../../index.php"); ?>
拷貝檔案 bool copy ( string source, string dest ) 把來源檔 source 拷貝至目的檔 dest。若拷貝成功,則傳回 TRUE,否則傳回 FALSE。 範例 <?php if (!copy($file, $file.'.bak')) { print ("failed to copy $file...<br>\n"); } ?>
檔案改名 bool rename ( string oldname, string newname ) 把舊檔名 oldname 改成新檔名 newname。若改名成功,則傳回 TRUE,否則傳回 FALSE。 範例 <?php rename("old.txt", "new.txt"); ?>
刪除檔案 bool unlink ( string filename ) 刪除檔案 filename。若刪除成功,則傳回 TRUE,否則傳回 FALSE。 範例
開啟檔案 resource fopen ( string filename, string mode [, int use_include_path [, resource zcontext]] ) fopen() 函式用來開啟一個本機檔案或一個 URL 所指的檔案。若開啟成功,則傳回代表該檔案的資源碼,否則傳回 FALSE 與錯誤訊息(若要取消錯誤訊息的產生,可用 @fopen())。 filename:檔案的路徑或 URL。 mode:檔案的讀寫模式(見下一頁)。 use_include_path:設為 1 或 TRUE 表示也到 PHP 設定檔中參數 include_path 所指定的目錄中找尋開啟的檔案。 zcontext:指定資料流的操作參數
檔案讀寫模式 r 開啟檔案來讀取資料。檔案讀取頭置於檔案的開頭。 r+ 開啟檔案來讀取和寫入資料。檔案讀取頭置於檔案的開頭。 w 開啟檔案來寫入資料。檔案讀取頭置於檔案的開頭並把檔案大小設成 0。若檔案不存在,會建立一個新檔案。 w+ 開啟檔案來寫入和讀取資料。檔案讀取頭置於檔案的開頭並把檔案大小設成 0。若檔案不存在,會建立一個新檔案。 a 開啟檔案來寫入資料。檔案讀取頭置於檔案的結尾。若檔案不存在,會建立一個新檔案。 a+ 開啟檔案來讀取和寫入資料。檔案讀取頭置於檔案的結尾。若檔案不存在,會建立一個新檔案。 x 建立然後開啟檔案來寫入資料。若檔案已經存在,fopen() 會失敗而傳回 FALSE 並產生錯誤訊息。 x+ 建立然後開啟檔案來讀取和寫入資料。若檔案已經存在,fopen() 會失敗而傳回 FALSE 並產生錯誤訊息。
不同電腦系統的文字檔用不同的分行符號,譬如: Unix \n Windows \r\n Macintosh \r PHP 採用 Unix 格式來讀寫文字檔。不過,針對上述的差異,PHP 提供下列檔案讀寫模式: t 在 Windows 系統中,讀取檔案時會把 \r\n 自動轉換成 \n;寫入檔案時會把 \n 自動轉換成 \r\n。 b 不做上述的自動轉換。若檔案是二元檔(如圖片檔),你應該指定這個模式。自 PHP 4.3.2 之後,此模式已經成為開啟檔案的預設模式。
範例 <?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:password@example.com/somefile.txt", "w"); ?> 在 Windows 系統中,路徑名稱中的反斜線應該用逸出碼格式來取代(即 \ 換成 \\),譬如: $handle = fopen ("c:\\data\\info.txt", "r");
關閉檔案 bool fclose ( resource handle ) 關閉資源碼 handle 所代表的檔案。若關閉成功,則傳回 TRUE,否則傳回 FALSE。 範例 <?php $handle = fopen('somefile.txt', 'r'); fclose($handle); ?>
讀取檔案 fgetc 讀取一個字元 fgets 讀取一行文字 fgetss 讀取一行文字,同時刪掉其中的 HTML 標籤。 fgetcsv 讀取一行 CSV 格式的文字, 然後存入指定的陣列中。 fread 從檔案讀取一段資料 fscanf 依照指定的格式讀取檔案 file 把整個檔案內容讀入一個陣列中 readfile 把指定的檔案拷貝至 PHP 的輸出緩衝區 fpassthru 把檔案的剩餘內容拷貝至 PHP 的輸出緩衝區
寫入檔案 fwrite fputs
檔案讀寫頭 ftell 取得檔案讀寫頭的位置 fseek 移動檔案讀寫頭至指定的位置 rewind 移動檔案讀寫頭至檔案開頭的位置
檔案狀態資訊 stat 取得檔案狀態資訊 fstat 取得已開啟檔案的狀態資訊 fileatime 取得檔案上次存取的時間 filectime 取得檔案上次變動的時間 filemtime 取得檔案上次修改的時間 fileowner 取得檔案擁有者的 ID filegroup 取得檔案擁有者所屬群組的 ID filesize 取得檔案的大小(以 byte 為單位) filetype 取得檔案的類別 fileperms 取得檔案讀寫權限的值
目錄的處理 mkdir 建立一個新目錄 rmdir 刪除一個空目錄 chdir 改變目前的工作目錄 getcwd 取得目前的工作目錄 opendir 開啟指定的目錄 closedir 關閉指定的目錄 readdir 取得目錄中的下一個檔案名稱 scandir 把目錄中的檔案名稱依序存入指定的陣列中 rewinddir 重設目錄的讀寫頭 glob 把符合檔名規則的檔案名稱存入指定的陣列中。