« 68. PHP 的影像繪圖函數群整理 | (回到Blog入口) | 70. 什麼是 CGI? »

69. PHP 的檔案處理函數群整理

jollen 發表於 October 27, 2006 7:38 PM

basename() 函數

string basename(string path);

傳入一個包含路徑的檔案名稱,去掉路徑,傳回檔名的部份。UNIX 系統下的路徑使用 "/",在 Windows 環境下,使用 "/" 或 "\" 皆可。

範例:

$path = "/home/httpd/html/index.php"; $filename = basename($path);

相關函數:dirname()

chgrp() 函數

int chgrp(string filename, mixed group);

改變檔案的 group 屬性。改變檔案的 group 時,須注意使用者的權限問題。

成功傳回 true,否則傳回 false。在 Windows 環境下使用這個函數時,不會改變任何東西,並且傳回 true。

相關函數:chown(), chmod()

chmod() 函數

int chmod(string filename, int mode);

改變一個檔案的型態。filename 為傳入的檔案名稱與路徑,mode 是要改變的型態,chmod() 函數和 chmod 指令類似。

要注意的是,chmod() 函數並不會自動將 mode 當做八進位數字,所以 mode 最好加上 0 (zero) 才不會發生錯誤。

成功執行傳回 true,否則傳回 false。使用 chmod() 函數要特別注意檔案的權限,否則會無法成功更改檔案的型態,此時 chmod() 傳回 false。

範例:

chmod( "~/test.txt", 644 ); // 錯誤的寫法 (十進位) chmod( "~/test.txt", 0755 ); // 正確的寫法 (八進位)

相關函數:chown(), chgrp()

chown() 函數

int chown(string filename, mixed user);

改變檔案擁有人 (owner)。使用這個函數要注意,只有 superuser 才能改變檔案的擁有人。在 Windows 環境下,執行 chown() 函數不會變更任何東西,並且傳回 true。

成功傳回 true,否則傳回 false。

相關函數:chown(), chmod()

clearstatcache() 函數

void clearstatcache(void);

清除 stat cache。

PHP 會將利用 stat() 與 lstat() 取得的最後一筆資訊存放在記憶體裡,以提供下次讀取的速度。利用 clearstatcache() 函數可清除這些快取資料,如此一來可強迫 PHP 重新取得相關資訊。

相關函數:stat(), lstat(), file_exists(), is_writeable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype(), fileperms()

copy() 函數

int copy(string source, string dest);

拷貝檔案。將 source 指定的檔案拷貝到 dest。成功傳回 true,否則傳回 false。

範例:

if (!copy("guestbook.html", "guestbook.html.bak")) { print("Backup guestbook.html failed...<br>\n"); }

相關函數:rename()

dirname() 函數

string dirname(string path);

return directory name component of path
傳回檔案的路徑部份。傳入包含完整路徑的檔案名稱,dirname() 傳回目錄的路徑部份。
在 Windows 底下,目錄可以使用 (/) 或 (\) 斜線,在其他系統底下則只能用 (/)。

範例:

$path = "/etc/passwd"; $file = dirname($path); echo $file; //輸出 "/etc"

相關函數:basename()

disk_free_space() 函數

float disk_free_space(string directory);

取得 directory 目錄下的可用空間。

傳入一個目錄給 disk_free_space(),傳回該目錄下的可用空間,單位為 bytes。因為不同的 partition 可 mount 在不同的目錄下,假如我們要查詢該 partition 的可用空間時,只要傳入該目錄即可 (非設備檔名稱)。

範例:

<p>Free space: <?=disk_free_space("/home2")?> bytes</p>

輸出結果範例:

Free space: 625876992 bytes

PHP 4.1.0 以上版本才支援 disk_free_space() 函數。

diskfreespace() 函數

PHP 4.1.0 後請改用 disk_free_space() 函數。

disk_total_space() 函數

float disk_total_space(string directory);

取得 directory 目錄下的總空間。

傳入一個目錄給 disk_total_space(),傳回該目錄下的總空間,單位為 bytes。因為不同的 partition 可 mount 在不同的目錄下,假如我們要查詢該 partition 的可用空間時,只要傳入該目錄即可 (非設備檔名稱)。

範例:

<p>Total space: <?=disk_total_space("/home2")?> bytes</p>

輸出結果範例:

Total space: 2409914368 bytes

PHP 4.1.0 以上版本才支援 disk_total_space() 函數。

fclose() 函數

int fclose(int fp);

關閉檔案。成功的話傳回 true,失敗的話傳回 false。

fp 為檔案指標,必須是之前利用 fopen() 或 fsockopen() 開啟的檔案。

feof() 函數

int feof(int fp);

如果檔案指標已經指到 EOF (end of file),則傳回 true;如果有錯誤發生也會傳回 true。

fgetc() 函數

string fgetc(int fp);

由檔案讀取一個字元。傳回的是字串型態,不過包含讀取的一個字元。如果遇到檔案結尾,則傳回 false。

相關函數:fread(), fopen(), popen(), fsockopen(), fgets()

fgets() 函數

string fgets(int fp, int length);

由檔案讀取一行資料。length 是最長長度,fgets() 最長只讀取到 length-1 bytes 的長度,或是每列的結束。每行以換行符號或是 EOF 做為結尾。

成功的話傳回讀到的字串,否則傳回 false。

相關函數:fread(), fopen(), popen(), fgetc(), fsockopen()

fgetss() 函數

string fgetss(int fp, int length);

由檔案讀取一行的資料,並且去除 HTML 語法標籤與 PHP 標籤。

相關函數:fgets(), fopen(), fsockopen(), and popen().

file() 函數

array file(string filename);

將檔案的內容全部讀進陣列裡。陣列裡的每個元素即檔案的每一行,換行符號也會被保留。

相關函數:readfile(), fopen(), and popen().

file_exists() 函數

int file_exists(string filename);

判斷檔案是否存在,如果存在則傳回 true,否則傳回 false。

相關函數:clearstatcache().

fileatime() 函數

int fileatime(string filename);

讀取檔案最後被存取 (access) 的時間。如果有錯誤發生則傳回 false。

filectime() 函數

int filectime(string filename);

取得檔案的 inode 修改時間。

filegroup() 函數

int filegroup(string filename);

取得檔案所屬的 group,傳回的是 group ID。失敗的話則傳回 false。

fileinode() 函數

int fileinode(string filename);

取得檔案的 inode,傳回 inode number。失敗的話則傳回 false。

filemtime() 函數

int filemtime(string filename);

取得檔案最後被修改的時間,失敗的話則傳回 false。

fileowner() 函數

int fileowner(string filename);

取得檔案的 owner ID。失敗的話則傳回 false。

fileperms() 函數

int fileperms(string filename);

取得檔案的讀寫 (permission) 狀態。失敗的話則傳回 false。

filesize() 函數

int filesize(string filename);

取得檔案的大小,失敗則傳回 false。

filetype() 函數

string filetype(string filename);

傳回檔案的屬性,包括:fifo, char, dir, block, link, file, 與 unknown。執行失敗傳回 false。

flock() 函數

bool flock(int fp, int operation);

鎖住檔案,可用來確保多人同時存取時資料的正確性。fp 必須是一個已開啟的檔案指標,operation 是一個正整數值,包括:

□ 1 - shared lock
□ 2 - exclusive lock
□ 3 - releasing a lock
□ 4 - non-blocking shared lock
□ 5 - non-blocking exclusive lock

1 與 2 來用鎖住檔案,3 則是解除鎖定。如果是檔案讀取方,則以 shared lock 方式鎖定;如果是檔案寫入方,則以 exclusive lock 方式鎖定。

4、5 和 1、2 一樣,只不過是以 non-blocking 的方式鎖定。

fflush() 函數

int fflush(int fp);

fflush() 用來強制將緩衝區 (buffer) 裡的資料寫到 fp 所指的檔案裡,確保該寫入的資料都被寫入了。執行成功的話傳回 TRUE,否則傳回 FALSE。

相關函數:fopen(), popen(), fsockopen()

fopen() 函數

int fopen(string filename, string mode);

開啟本地端檔案或是 URL。如果要開啟 URL,必須指定完整的 URL 路徑與名稱,例如:

$fp_url = fopen("http://o3.net/robots.txt", "r");

fopen() 也支援 ftp 通訊協定,要開啟 ftp 檔案時也是要指定完整的路徑與名稱:

$fp_ftp = fopen("ftp://o3.net/pub/OS/Linux/kernel-2.2.12.tar.bz2", "w");

以 ftp 方式不能開啟 "rw" 模式的檔案。不管是開啟 URL 或 ftp,都必須確定是否有權限。

開啟本地端檔案則直接指定路徑與名稱即可:

$fp = fopen("/jollen/test.txt", "r"); $fp = fopen("~/test.txt", "r");

mode 則是檔案的開啟模式,與 C 語言一樣:

1. 'r' - 開啟唯讀檔
2. 'r+' - 開啟 read/write 檔案
3. 'w' - 開啟唯寫檔。如果檔案不存在,則建立一個新檔案;如果檔案已存在,則會被覆蓋。
4. 'w+' - 開啟 read/write 檔案。如果檔案不存在,則建立一個新檔案;如果檔案已存在,則會被覆蓋。
5. 'a' - 開啟指向檔案結尾的唯讀檔,如果檔案不存在,則建立一個新檔案。
6. 'a+' - 開啟指向檔案結尾的 read/write 檔案,可用來附加資料在檔案後。如果檔案不存在,則建立一個新檔案。

上面所有的模式都可加上 'b',表示要讀寫一個 binary (二進位) 檔案。不加上 'b' 表示讀寫一個文字檔。

在 Windows 底下必須改用正斜線,同時記得要加上 escape character:

$fp = fopen("c:\\data\\info.txt", "r");

相關函數:fclose(), fsockopen(), and popen().

fpassthru() 函數

int fpassthru(int fp);

將 fp 指標所指之後所有的資料輸出到標準輸出 (standard output)。失敗的話傳回 false。

fp 是已開啟的檔案指標,當 fpassthru() 輸出完所有的資料後會自動將檔案關閉。

相關函數:readfile(), fopen(), popen(), fsockopen()

fputs() 函數

int fputs(int fp, string str, int [length]);

寫入字串到檔案。length 指定要寫入的長度,如果忽略的話表示要寫入整個字串。

fread() 函數

string fread(int fp, int length);

fread() 可用來讀取二進位或文字檔案,length 指定要讀取的長度。

範例:

<?php
$filename = "./example.php";
$fd = fopen( $filename, "r");
$contents = fread( $fd, filesize($filename));
fclose($fd);
?>

相關函數:fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), file(), fpassthru()

fscanf() 函數

mixed fscanf ( int handle, string format [, string var1]);

fscanf() 函數用來以格式化的方式讀取檔案內容。

範例:

<?php $fp = fopen ("users.txt","r"); while ($userinfo = fscanf ($fp, "%s\t%s\t%s\n")) { list ($name, $phone, $countrycode) = $userinfo; // … 其它 PHP 程式碼 } fclose($fp); ?>

users.txt 檔案內容如下:

peter 09283762 tw john 08293852 jp paul 08273382 hk

fseek() 函數

int fseek(int fp, int offset);

移動讀寫指標。將 fp 指標由檔案開頭移動 offset bytes。

成功的話傳回 true,否則傳回 false。如果 offset 的值超過檔案結尾,不視為錯誤。fseek() 也不能用來移動開啟的 URL 檔案 (http:// 或 ftp:// 型式的檔案)。

相關函數:ftell(), rewind()

ftell() 函數

int ftell(int fp);

傳回目前 fp 指標在檔案裡的位置。失敗的話傳回 false。

相關函數:fopen(), popen(), fseek(),rewind()

fwrite() 函數

int fwrite(int fp, string string, int [length]);

fread() 可用來讀取二進位或文字檔案,length 指定要寫入的長度,沒有指定表示要寫入整個字串。

相關函數:fread(), fopen(), fsockopen(), popen(), fputs()

ftruncate() 函數

int ftruncate(int fp, int size);

ftruncate() 函數用來改變檔案的大小。成功的話傳回 TRUE,失敗的話則傳回 FALSE。

範例:

$fp = fopen("users.txt", "w"); ftruncate($fp, 0);

is_dir() 函數

bool is_dir(string filename);

如果 filename 是一個目錄,則傳回 true。

相關函數:is_file(), is_link().

is_executable() 函數

bool is_executable(string filename);

如果 filename 為可執行的檔案,則傳回 true。

相關函數:is_file(), is_link()

is_file() 函數

bool is_file(string filename);

如果 filename 是一個檔案,則傳回 true。

相關函數:is_dir() and is_link().

is_link() 函數

bool is_link(string filename);

如果 filename 是一個 symblic link,則傳回 true。

相關函數:is_dir() and is_file()

is_readable() 函數

bool is_readable(string filename);

如果有讀取 filename 的權限,則傳回 true。

相關函數:is_writeable()

is_writeable() 函數

bool is_readable(string filename);

如果有寫入 filename 的權限,則傳回 true。

相關函數:is_readable()

link() 函數

int link(string target, string link);

建立一個 hard link。

相關函數:symlink(), readlink(), linkinfo()

linkinfo() 函數

int linkinfo(string path);

取得 link 的資訊。其實這個函數只是用來檢查 link 是否存在,如果不存在或執行過程有錯誤,則傳回 false。

相關函數:symlink(), link(), readlink()

mkdir() 函數

int mkdir(string pathname, int mode);

建立一個目錄。mod 是目錄的屬性,與 chmod 指令的格式相同。例如:

mkdir("/path/to/my/dir", 0700);

mode 以八進位來設定最方便而且最簡單。在 PHP 裡以 0 開頭的數皆視為八進位。

相關函數:rmdir()

move_uploaded_file() 函數

bool move_uploaded_file(string filename, string destination);

move_uploaded_file() 函數將上傳的檔案 filename 搬移至 destination。注意這裡的 filename 指的是由 HTTP POST 所上傳的檔案其變數本身,而不是檔案名稱。

例如,經由 HTTP POST 所上傳的 $userfile,雖然檔名應該是 $userfile_name,但是呼叫 move_uploaded_file() 函數時,應該要寫成 $userfile 才對。

PHP 4.0.3 以上的版本才支援 move_uploaded_file() 函數。

pclose() 函數

int pclose(int fp);

關閉一個已開啟的 pipe。

相關函數:popen()

popen() 函數

int popen(string command, string mode);

開啟 pipe。利用 popen() 開啟的 pipe 必須使用 pclose() 關閉。開啟失敗的話則傳回 false。

相關函數:pclose().

pathinfo() 函數

array pathinfo(string path);

pathinfo() 以 associative array 方式傳回 path 的相關資訊,包含:dirname、basename 與 extension。

範例:

<?php
$path = pathinfo("/var/www/htdocs/index.html");
echo $path["dirname"] . "\n"; echo $path["basename"] . "\n"; echo $path["extension"] . "\n";
?>

輸出結果為:

/var/www/htdocs index.html html

相關函數:realpath()

readfile() 函數

int readfile(string filename);

將檔案的所有內容輸出到標準輸出,當我們要輸出整個檔案時,readfile() 函數特別好用。傳回實際讀取並輸出的 byte 數,失敗的話則傳回 false。

同樣地,filename 也可以是 URL 或 ftp 的檔案。

相關函數:fpassthru(), file(), fopen(), include(), require(), virtual()

readlink() 函數

string readlink(string path);

讀取 symbolic link 所指的完整路徑名稱。如果失敗的話則傳回 false。

相關函數:symlink(), readlink() and linkinfo().

rename() 函數

int rename(string oldname, string newname);

更改檔案名稱。如果失敗的話則傳回 false。

rewind() 函數

int rewind(int fp);

將檔案指標移到檔案開頭。如果失敗的話則傳回 false。

相關函數:fseek(), ftell()

rmdir() 函數

int rmdir(string dirname);

刪除目錄。要刪除的目錄必須是一個空目錄,而且必須有刪除該目錄的權限。如果失敗則傳回 false。

相關函數:mkdir()

realpath() 函數

string realpath(string path);

realpath() 函數用來傳回 path 的絕對路徑。

範例:

<?php
$real_path = realpath ("../../conf/httpd.conf"); echo $real_path;
?>

輸出結果為:

/usr/local/conf/httpd.conf

stat() 函數

array stat(string filename);

取得檔案的相關資訊。傳回的 array 包含底下這些元素:

1. device
2. inode
3. number of links
4. user id of owner
5. group id owner
6. device type if inode device *
7. size in bytes
8. time of last access
9. time of last modification
10. time of last change
11. blocksize for filesystem I/O *
12. number of blocks allocated

標星號 (*) 表示該元素只有在支援 st_blksize 的作業系統上才能取得,否則該元素的值為 -1 (例如在 Win32 環境下就無法取得)。

lstat() 函數

array lstat(string filename);

取得檔案或 symbolic link 的資訊。要注意,如果是 symbolic link,則傳回的是該 link 的資訊,而不是 link 所指的檔案。

lstat 傳回一個包含下列元素的陣列:

1. device
2. inode
3. number of links
4. user id of owner
5. group id owner
6. device type if inode device *
7. size in bytes
8. time of last access
9. time of last modification
10. time of last change
11. blocksize for filesystem I/O *
12. number of blocks allocated

標星號 (*) 表示該元素只有在支援 st_blksize 的作業系統上才能取得,否則該元素的值為 -1 (例如在 Win32 環境下就無法取得)。

symlink() 函數

int symlink(string target, string link);

建立一個 symbolic link。

相關函數:link(), linkinfo()

tempnam() 函數

string tempnam(string dir, string prefix);

在指定的目錄下建立一個檔名唯一的暫時性檔案,prefix 指定檔名的開頭。例如:

$tmpfname = tempnam( "/tmp", "S09" );

如果指定的目錄不存在,則在 "/tmp" 目錄下建立檔案。

touch() 函數

int touch(string filename, int time);

touch 一個檔案,與 UNIX 下的 touch 命令功能相同。也就是將檔案的日期修改成指定的時間,如果沒有指定 time 參數的話則以目前的時間為主。

如果要 touch 的檔案不存在,則建立一個檔案大小為 0 的檔案。如果 touch 失敗則傳回 false。

umask() 函數

int umask(int mask);

改變 PHP 目前的 umask,與 shell 裡的 umask 功能一樣。如果沒有傳入 mask 參數的話,則傳回目前的 umask 值。

unlink() 函數

int unlink(string filename);

刪除檔案。失敗的話傳回 false。

相關函數:rmdir()

chdir() 函數

int chdir(string directory);

切換目錄,功能與 UNIX 下的 cd 指令一樣。失敗的話傳回 false。

dir() 函數

new dir(string directory);

建立一個讀取目路相關資訊的物件。傳回的物件包含兩個 properties 與 3 個 method:

Properties -

1. handle directory file,如同使用 opendir() 傳回的 directory handle
2. path 該目錄的路徑

Method -

1. read 讀取每個檔案,並移到 directory handle 指向下一個檔案
2. rewind 功能和底下介紹的 rewind() 相同
3. close 關閉 directory handle

使用範例:

<?php
$d = dir("C:/WINNT/Fonts"); echo "Handle: ".$d->handle."<br>\n"; echo "Path: ".$d->path."<br>\n"; while($entry=$d->read()) { echo $entry."<br>\n"; } $d->close();
?>

closedir() 函數

void closedir(int dir_handle);

關閉由 opendir() 開啟的 directory handle。

opendir() 函數

int opendir(string path);

開啟一個 directory handle。傳入一個目錄的路徑,directory handle 指的是指向該目錄底下所有檔案的指標。

readdir() 函數

string readdir(int dir_handle);

由 directory handle 裡讀取檔案名稱,並且將 directory handle 指向下一個檔案。

使用範例:

<?php
$handle=opendir('.'); echo "Files:\n"; while ($file = readdir($handle)) { echo "$file\n"; } closedir($handle);
?>

rewinddir() 函數

void rewinddir(int dir_handle);

重新初始化 directorty handle,將 directory handle 指向開頭。

--jollen

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org