1.檔案目錄操作
最頂層止錄是磁碟根目錄,用'/'或'//'
目前的目錄 ./
../表示apache的目錄即htdocs目錄
1.建立與刪除目錄 mkdir
複製代碼 代碼如下:
if(mkdir("./path",0700)) //在目前的目錄中建立path目錄
echo "建立成功";
?>
2.擷取和更改目前的目錄
使用getcwd()函數可以取得當前的工作目錄,該函數沒有參數。成功則返回當前的工作目錄,失敗則返回FALSE
3.開啟和關閉目錄控制代碼
opendir($dir)
closed($dir_handle)
4.讀取目錄內容
readdir(),該參數是一個已經開啟的目錄控制代碼,與while迴圈可以實現對目錄的遍曆
5.擷取指定路徑中的目錄與檔案 。
array scandir(string $directory [, int $sorting_order [, resource $context ]])
說明:$directory為指定路徑。參數$sorting_order預設是按字母升序排列,如果設為1表示按字母的降序排列。
$context是選擇性參數,是一個資源變數,可以用stream_context_create()函數產生,這個變數儲存著與具體的操作對象有關的一些資料。
函數運行成功則返回一個包含指定路徑下的所有目錄和檔案名稱的數組,失敗則返回FALSE
2.操作檔案的一般方法
3.檔案的開啟與關閉
1.開啟檔案
resource fopen(string $filename , string $mode [, bool $use_include_path [, resource $context ]])
●$filename參數。fopen()函數將$filename參數指定的名字資源綁定到一個流上
●$mode參數。$mode參數指定了fopen()函數訪問檔案的模式,取值見表4.5。
$mode
說 明
'r'
唯讀方式開啟檔案,從檔案頭開始讀
'r+'
讀寫方式開啟檔案,從檔案頭開始讀寫
'w'
寫入方式開啟檔案,將檔案指標指向檔案頭。如果檔案已經存在則刪除已有內容,如果檔案不存在則嘗試建立它
'w+'
讀寫方式開啟檔案,將檔案指標指向檔案頭。如果檔案已經存在則刪除已有內容,如果檔案不存在則嘗試建立它
'a'
寫入方式開啟檔案,將檔案指標指向檔案末尾,如果檔案已有內容將從檔案末尾開始寫。如果檔案不存在則嘗試建立它
'a+'
讀寫方式開啟檔案,將檔案指標指向檔案末尾。如果檔案已有內容將從檔案末尾開始讀寫。如果檔案不存在則嘗試建立它
'x'
建立並以寫入方式開啟檔案,將檔案指標指向檔案頭。如果檔案已存在,則fopen()調用失敗並返回FALSE,並產生一條E_WARNING層級的錯誤資訊。如果檔案不存在則嘗試建立它。此選項被PH及以後的版本所支援,僅能用於本地檔案
'x+'
建立並以讀寫方式開啟檔案,將檔案指標指向檔案頭。如果檔案已存在,則fopen()調用失敗並返回FALSE,並產生一條E_WARNING層級的錯誤資訊。如果檔案不存在則嘗試建立它。此選項被PH及以後的版本所支援,僅能用於本地檔案
'b'
二進位模式,用於串連在其他模式後面。如果檔案系統能夠區分二進位檔案和文字檔(Windows區分,而UNIX不區分),則需要使用到這個選項,推薦一直使用這個選項以便獲得最大程度的可移植性
●$use_include_path參數。如果需要在include_path(PHP的include路徑,在PHP的設定檔設定)中搜尋檔案,
可以將選擇性參數 $use_include_path的值設為1或TRUE,預設為FALSE。
●$context參數。可選的$context參數只有檔案被遠程開啟時(如通過HTTP開啟)才使用,它是一個資源變數,
其中儲存著與fopen()函數具體的操作對象有關的一些資料。如果fopen()開啟的是一個HTTP地址,
那麼這個變數記錄著HTTP請求的請求類型、HTTP版本及其他頭資訊;如果開啟的是FTP地址,
記錄的可能是FTP的被動/主動模式
2.關閉檔案
bool fclose(resource $handle)
4.檔案的寫入
檔案寫入前需開啟檔案,不存在先建立它,一般用fopen()函數建立
●fwrite().檔案開啟後,向檔案寫入內容
int fwrite(resource $handle , string $string [, int $length ])
說明:參數$handle是寫入的檔案控制代碼,
$string是將要寫入檔案中的字串資料,
$length是選擇性參數,如果指定了$length,則當寫入了$string中的前$length個位元組的資料後停止寫入。
●file_put_contents()函數。PHP 5還引入了file_put_contents()函數。這個函數的功能與依次調用fopen()、fwrite()及fclose()函數的功能一樣。文法格式如下:
int file_put_contents(string $filename , string $data [, int $flags [, resource $context ]])
說明:$filename是要寫入資料的檔案名稱。
$data是要寫入的字串,$data也可以是數組,但不能為多維陣列。
在使用FTP或HTTP向遠程檔案寫入資料時,可以使用選擇性參數$flags和$context,這裡不具體介紹。
寫入成功後函數返回寫入的位元組數,否則返回FALSE。
●fputcsv()函數。CSV是一種比較常用的檔案格式,一般以.csv作為副檔名。CSV格式把檔案的一行看做是一條記錄,記錄裡的欄位使用逗號分隔。
在PHP中使用 fputcsv()函數可以把指定的數組格式化為符合CSV檔案格式的內容,並寫入檔案指標指向的當前行。文法格式如下:
int fputcsv(resource $handle [, array $fields [, string $delimiter [, string $enclosure ]]])
說明:參數$handle是要寫入的檔案控制代碼。
參數$fields是要格式化的數組。
可選的$delimiter參數用於設定欄位分界符(只允許一個字元),預設為逗號。
可選的$enclosure參數設定欄位環繞符(只允許一個字元),預設為雙引號
5 檔案的讀取
1.讀取任意長度
fread()函數可以用於讀取檔案的內容,文法格式如下:
string fread(int $handle, int $length)
說明:參數$handle是已經開啟的檔案指標,
$length是指定讀取的最大位元組數,$length的最大取值為8192。
如果讀完$length個位元組數之前遇到檔案結尾標誌(EOF),則返回所讀取的字元,並停止讀取操作。
如果讀取成功則返回所讀取的字串,如果出錯返回FALSE。
注意:在讀取檔案後顯示檔案內容時,文本中可能含有無法直接顯示的字元,如HTML標記。
這時需要使用htmlspecialchars()函數將HTML標記轉化為實體才能顯示檔案中的字元。
2.讀取整個檔案
●file()函數。file()函數用於將整個檔案讀取到一個數組中,文法格式如下:
array file(string $filename [, int $use_include_path [, resource $context ]])
說明:本函數的作用是將檔案作為一個數組返回,數組中的每個單元都是檔案中相應的一行,包括分行符號在內,
如果失敗則返回FALSE。參數$filename是讀取的檔案名稱,參數$use_inclue_path和$context的意義與之前介紹的相同
●readfile()函數。readfile()函數用於輸出一個檔案的內容到瀏覽器中,文法格式如下:
int readfile(string $filename [, bool $use_include_path [, resource $context ]])
●fpassthru()函數。fpassthru()函數可以將給定的檔案指標從當前的位置讀取到EOF,並把結果寫到輸出緩衝區。
要使用這個函數,必須先使用fopen()函數開啟檔案,然後將檔案指標作為參數傳遞給fpassthru()函數,
fpassthru()函數把檔案指標所指向的檔案內容發送到標準輸出。如果操作成功返回讀取到的位元組數,否則返回FALSE。
●file_get_contents()函數。file_get_contents()函數可以將整個或部分檔案內容讀取到一個字串中,
功能與依次調用fopen()、fread()及fclose()函數的功能一樣。文法格式如下:
string file_get_contents(string $filename [, int $offset [, int $maxlen ]])
說明:$filename是要讀取的檔案名稱,選擇性參數$offset可以指定從檔案頭開始的位移量,
函數可以返回從$offset所指定的位置開始長度為$maxlen的內容。如果失敗,函數將返回FALSE
3. 讀取一行資料
●fgets()函數。fgets()函數可以從檔案中讀出一行文本,文法格式如下:
string fgets(int $handle [, int $length ])
說明:$handle是已經開啟的檔案控制代碼,選擇性參數$length指定了返回的最大位元組數,考慮到行結束符,
最多可以返回length-1個位元組的字串。如果沒有指定$length,預設為1024個位元組
●fgetss()函數與fgets()基本相同,不過fgetss()函數會嘗試從讀取的文本中去掉任何html和php標記。
●fgetcsv()函數。fgetcsv()函數可以讀取指定檔案的當前行,使用CSV格式解析出欄位,並返回一個包含這些欄位的數組。
文法格式如下:
array fgetcsv(int $handle [, int $length [, string $delimiter [, string $enclosure ]]])
4. 讀取一個字元
fgetc()函數。fgetc()函數可以從檔案指標處讀取一個字元,文法格式為:
string fgetc(resource $handle)
該函數返回$handle指標指向的檔案中的一個字元,遇到EOF則返回FALSE
5. 使用指定格式讀取檔案
fscanf()函數。fscanf()函數可以讀取檔案中的資料,並根據指定的格式進行格式化,並返回一個數組。文法格式如下:
mixed fscanf(resource $handle , string $format [, mixed &$... ])
格式字串中的任何空白會與輸入資料流中的任何空白匹配。
這意味著甚至格式字串中的定位字元“\t”也會與輸入資料流中的一個空白字元匹配。
6.檔案的上傳與下載
1.檔案上傳
檔案上傳可以通過提交html表單來實現。檔案上傳結束後,預設儲存在臨時目錄中,這時必須從臨時目錄中刪除或移動到其他地方
使用PHP的move_uploaded_file()將其移到其它位置上
move_uploaded_file()函數文法格式如下:
bool move_uploaded_file(string $filename , string $destination)
注意:在將檔案移動之前需要檢查檔案是否是通過HTTP POST上傳的,這可以用來確保惡意的使用者無法欺騙指令碼去訪問本不能訪問的檔案,
這時需要使用is_uploaded_file()函數。該函數的參數為檔案的臨時檔案名稱,若檔案是通過HTTP POST上傳的,則函數返回TRUE。
例4.5 將由HTML表單上傳的GIF圖片檔案移動到html目錄中
複製代碼 代碼如下:
if(isset($_POST['up']))
{
if($_FILES['myFile']['type']=="image/gif") //判斷檔案格式是否為GIF
{
if($_FILES['myFile']['error']>0) //判斷上傳是否出錯
echo "錯誤:".$_FILES['myFile']['error']; //輸出錯誤資訊
else
{
$tmp_filename=$_FILES['myFile']['tmp_name']; //臨時檔案名稱
$filename=$_FILES['myFile']['name']; //上傳的檔案名稱
$dir="html/";
if(is_uploaded_file($tmp_filename)) //判斷是否通過HTTP POST上傳
{
if(move_uploaded_file($tmp_filename,$dir.$filename)) //上傳並移動檔案
{
echo "檔案上傳成功!";
//輸出檔案大小
echo "檔案大小為:". ($_FILES['myFile']['size']/1024)."kb";
}
else
echo "上傳檔案失敗!";
}
}
}
else
{
echo "檔案格式非GIF圖片!";
}
}
?>
2.檔案下載
header()函數的作用是向瀏覽器發送正確的HTTP前序,前序指定了網頁內容的類型、頁面的屬性等資訊。
header()函數的功能很多,這裡只列出以下幾點:
●頁面跳轉。如果header()函數的參數為“Location: xxx”,頁面就會自動跳轉到“xxx”指向的URL地址。例如:
header("Location: http://www.baidu.com"); //跳轉到百度頁面
header("Location: first.php"); //跳轉到工作目錄的first.php頁面
●指定網頁內容。例如,同樣的一個XML格式的檔案,如果header()函數的參數指定為“Content-type: application/xml”,
瀏覽器會將其按照XML檔案格式來解析。但如果是“Content-type: text/xml”,瀏覽器就會將其看做文本解析。
header()函數結合readfile()函數可以下載將要瀏覽的檔案
7.其他熱門檔案函數
1.計算檔案大小
filesize()函數用於計算檔案的大小,以位元組為單位
filesize()函數結合fread()函數可以實現一次讀取整個檔案
2.判斷檔案是否存在
file_exits()
is_dir()函數用於判斷給定檔案名稱是否是目錄
is_file()函數用於判斷給定檔案名稱是否是檔案。
is_readable()函數用於判斷給定檔案是否可讀。
is_writeable()用於判斷給定的檔案是否可寫
3.刪除檔案
unlink()
4.複製檔案
bool copy(string $source,string $dest),如果目示檔案已存在,則將被覆蓋
5.移動、重新命名檔案
除了move_uploaded_file()函數,還有一個rename()函數也可以移動檔案。
文法格式如下:
bool rename ( string $oldname , string $newname [, resource $context ] )
說明:rename()函數主要用於對一個檔案進行重新命名,$oldname是檔案的舊名,$newname為新的檔案名稱。
當然,如果$oldname與$newname的路徑不相同,就實現了移動該檔案的功能
6.檔案指標操作
PHP中有很多操作檔案指標的函數,如rewind()、ftell()、fseek()函數等。之前用過的feof()函數用於測試檔案指標是否處於檔案尾部,
也屬於檔案指標操作函數。
rewind()函數。用於重設檔案的指標位置,使指標返回到檔案頭。它的參數只有一個,就是已經開啟的指定檔案的檔案控制代碼。
ftell()函數。可以以位元組為單位,報告檔案中指標的位置,也就是檔案流中的位移量。它的參數也是已經開啟的檔案控制代碼。
fseek()函數。可以用於移動檔案指標,文法格式如下:
int fseek ( resource $handle , int $offset [, int $whence ] )
例4.8 投票統計
複製代碼 代碼如下:
$votefile="EX4_6_vote.txt"; //用於計數的文字檔$votefile
if(!file_exists($votefile)) //判斷檔案是否存在
{
$handle=fopen($votefile,"w+"); //不存在則建立該檔案
fwrite($handle,"0|0|0"); //將檔案內容初始化
fclose($handle);
}
if(isset($_POST['sub']))
{
if(isset($_POST['vote'])) //判斷使用者是否投票
{
$vote=$_POST['vote']; //接收投票值
$handle=fopen($votefile,"r+");
$votestr=fread($handle,filesize($votefile)); //讀取檔案內容到字串$votestr
fclose($handle);
$votearray=explode("|", $votestr); //將$votestr根據“|”分割
echo "
投票完畢!
";
if($vote=='PHP')
$votearray[0]++; //如果選擇PHP,則數組第1個值加1
echo "目前PHP的票數為:".$votearray[0]."
";
if($vote=='ASP')
$votearray[1]++; //如果選擇ASP,則數組第2個值加1
echo "目前ASP的票數為:".$votearray[1]."
";
if($vote=='JSP')
$votearray[2]++; //如果選擇JSP,則數組第3個值加1
echo "目前JSP的票數為:".$votearray[2]."
";
//計算總票數
$sum=$votearray[0]+$votearray[1]+$votearray[2];
echo "總票數為:".$sum."
";
$votestr2=implode("|",$votearray); //將投票後的新數組用“|”串連成字串$votestr2
$handle=fopen($votefile,"w+");
fwrite($handle,$votestr2); //將新字串寫入檔案$votefile
fclose($handle);
}
else
{
echo "";
}
}
?>
http://www.bkjia.com/PHPjc/323885.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/323885.htmlTechArticle1.檔案目錄操作 最頂層止錄是磁碟根目錄,用'/'或'//' 目前的目錄 ./ ../表示apache的目錄即htdocs目錄 1.建立與刪除目錄 mkdir 複製代碼 代碼如下...