文件操做是每一個語言必須有的,不單單侷限於PHP,這裏咱們就僅用PHP進行講解php
php的文件高級操做和文件上傳實例我放在文章的最後部分。--之後我還會給你們寫一個PHP相似於網盤操做的例子html
注意:閱讀此文章,必須的備一個 《PHP中文手冊》或者其它能夠查詢PHP函數的手冊 由於文章有大量的示例,可是爲了節約篇幅和時間,因此請你們自行查閱PHP手冊,以明白函數的具體做用數組
一、php打開文件和關閉文件ide
用到的函數 fopen() 、fclose() 注:打開的文件必定要關閉! 具體函數參數請查閱php手冊函數
實例:post
<?php $fopen = fopen("fun.txt","rb"); /* ...文件的其餘操做 */ fclose($fopen); ?>
fopen()函數在php5中也支持url格式:學習
<?php $fopen = fopen("http://www.baidu.com","rb"); while(!feof($fopen)) { echo fgets($fopen); } fclose($fopen); ?>
二、PHP的文件讀寫測試
讀操做-ui
用到的函數 readfile()、file()、file_get_contents()、fgets()、fgetss()、fgetc()編碼
示例中的文件位置請根據本身的文件進行更改,不要糾結文件位置和文件名什麼的。重點在學習
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>文件測試</title> </head> <body> <!--不須要打開文件讀取--> <table width="500" border="1" cellpadding="0" cellspacing="0"> <tr> <td width="253" height="100" align="right" valign="middle" scope="col">使用 readfile()函數讀取文件內容: </td> <td width="241" height="100" align="center" valign="middle" scope="col"> <!-- 使用readfile()函數讀取ee.txt文件內容 --> <?php readfile("ee.txt"); ?> </td> </tr> <tr> <td height="100" align="right" valign="middle">使用 file()函數讀取文件內容: </td> <td height="100" align="center" valign="middle"> <!-- 使用file()函數讀取ee.txt文件內容 --> <?php $f_arr = file("ee.txt"); foreach($f_arr as $cont) { echo $cont."<br />"; } ?> </td> </tr> <tr> <td width="250" height="25" align="right" valign="middle" scope="col">使用 file_get_contents()函數讀取文件內容: </td> <td height="25" align="center" valign="middle" scope="col"> <!-- 使用file_get_contents()函數讀取ee.txt文件內容 --> <?php $f_chr = file_get_contents("ee.txt"); echo $f_chr; ?> </td> </tr> </table> <!--須要打開文件流讀取--> <table border="1" cellpadding="0" cellspacing="0"> <tr> <td align="right" valign="middle" scope="col">使用fgets()函數:</td> <td align="center" valign="middle" scope="col"> <!--使用fgets()函數讀取--> <?php $fopen = fopen("fun.txt","rb"); //打開文件 while(!feof($fopen)) //feof()函數測試指針是否到了文件結束的位置 { echo fgets($fopen); //輸出當前行 } fclose($fopen); //關閉文件 ?> </td> </tr> <tr> <td align="right" valign="middle" >使用fgetss()函數:</td> <td align="center" valign="middle"> <!--使用fgetss()函數讀取--> <?php $fopen = fopen("fun.txt","rb"); while(!feof($fopen)) //feof()函數測試指針是否到了文件結束的位置 { echo fgetss($fopen); //輸出當前行 } fclose($fopen); ?> </td> </tr> <tr> <td align="right" valign="middle" >使用fgetc()函數:</td> <td align="center" valign="middle"> <!--使用fgetss()函數讀取--> <?php $fopen = fopen("ee.txt","rb"); //建立文件資源。打開文件流 while(false !== ($chr = fgetc($fopen))) //使用fgetc()函數取得一個字符串,判斷是否爲false { echo $chr; //若是不是,輸出該字符 } fclose($fopen); //關閉文件資源 ?> </td> </tr> </table> </body> </html>
寫操做-
用到的函數 fwrite()、 file_put_contents()
<?php /* $filename = "ee.txt"; //要讀取的文件 $fp = fopen($filename,"rb"); //打開文件 echo fread($fp,6); //使用 fread() 函數讀取文件內容的前32個字節 echo "<p>"; echo fread($fp,filesize($filename)); //輸出其他的文件內容 */ $filepath = "05.txt"; $str = "此情可待成追憶 只是當時已惘然<br />"; echo "用 fwrite() 函數寫入文件: "; $fopen = fopen($filepath,"wb") or die("文件不存在"); fwrite($fopen,$str); fclose($fopen); readfile($filepath); echo "<p>用 file_put_contents() 函數寫入文件: "; file_put_contents($filepath,$str); readfile($filepath); ?>
三、php文件自己的操做
本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改
<?php date_default_timezone_set('Asia/Shanghai'); //PHP5以上版本支持 --時區的設置,一下子會有涉及到時間 //php文件操做 --本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改 /*用rename()函數文件重命名*/ rename("123.txt","321.txt"); /*用copy()函數 複製文件*/ copy("ee.txt","upfile/ee.txt"); /*用unlink()函數 刪除文件*/ unlink("321.txt"); /*用fileatime()函數 返回文件最後一次訪問的時間 --默認是以unix時間戳來訪問的*/ echo "Last access time: ".date("Y-m-d H:i:s",fileatime("ee.txt")); /*用filemtime()函數 返回文件最後一次被修改的時間 --默認是以unix時間戳來訪問的*/ echo "Last modified time: ".date("Y-m-d H:i:s",filemtime("ee.txt")); /*用filesize() 函數取得文件大小 以字節數顯示*/ echo filesize("ee.txt"); /*用pathinfo() 函數獲取文件信息 包括路徑、類型、名字等*/ print_r(pathinfo("ee.txt")); /*用realpath() 函數返回文件的絕對路徑*/ echo realpath("ee.txt"); /*用stat() 函數返回文件的相關信息。如大小、最後修改時間等等*/ print_r(stat("ee.txt")); ?>
===================================================================
1、php目錄操做
和文件操做相似,也要打開關閉目錄 用opendir()、和closedir()函數進行打開和關閉目錄
<?php $path = "D:/user/test"; //路徑應爲 "/" 而不是 "\" if(is_dir($path)) //檢測是不是一個目錄 { if($dire = opendir($path)) //判斷打開目錄是否成功 { echo $dire; //輸出目錄指針 } } else { echo '路勁錯誤'; exit(); } closedir($dire); //關閉目錄 ?>
2、php目錄的遊覽
核心函數 scandir()
<?php $path = "D:/user"; //要遊覽的目錄 if(is_dir($path)) { $dir = scandir($path); //使用scandir() 函數取得全部文件及目錄 foreach($dir as $value) //使用foreach循環遍歷 { echo iconv("gbk","utf-8",$value); //轉換編碼。 echo "<br />"; } } else { echo "目錄路徑錯誤!"; } ?>
3、php目錄的其餘操做,獲取磁盤目錄大小,新建刪除目錄等等
本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改
<?php /*本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改*/ /*用mkdir() 函數新建一個指定目錄*/ mkdir("tt"); /*用rmdir()函數 刪除一個指定的目錄,前提是目錄必須是空的*/ rmdir("tt"); /*用getcwd()函數 獲取當前工做的目錄*/ echo getcwd(); /*用chdir() 函數更改當前目錄爲工做目錄*/ echo getcwd(); echo "<br />"; chdir("../"); //更改成返回上一級 echo getcwd(); //從新獲取當前目錄 /*用disk_free_space()函數 返回目錄中的可用空間*/ echo disk_free_space("D:/")/pow(1024,3); //這裏換算成了G、默認是以字節顯示的 /*用disk_total_space()函數 返回目錄中的可用空間*/ echo disk_total_space("D:/")/pow(1024,3); //這裏換算成了G、默認是以字節顯示的 /*關於PHP5之前的老遊覽目錄的方法 我就不列舉了,這裏僅僅給出函數名: readdir()、rewinddir()*/ ?>
====================================================================
文件的高級運用
文件指針:
<?php $filename = "ee.txt"; //指定文件路徑及文件名 if(is_file($filename)) //判斷文件是否存在 { echo "文件總字節數: ".filesize($filename)."<br />"; //輸出總字節數 $fopen = fopen($filename,"rb"); //打開文件 , 以只讀的二進制文件格式的去 echo "初始指針位置是: ".ftell($fopen)."<br />"; //輸出指針位置 fseek($fopen,3); //移動指針 echo "使用 fseek() 函數後指針位置: ".ftell($fopen)."<br />"; //輸出移動後的指針位置 echo "輸出當前指針後面的內容: ".fgets($fopen)."<br />"; //輸出從當前指針到行尾的內容 if(feof($fopen)) //判斷指針是否指向文件末尾 { echo "當前指針指向文件末尾: ".ftell($fopen)."<br />"; //若是指向了文件尾,則輸出指針位置 } //使用rewind() 函數返回文檔流的開頭 --一旦流讀到末尾再度就讀不到數據了, //因此這裏要從新指向一個文件的指針 rewind($fopen); //查看使用 rewind() 函數後指針的位置 echo "使用 rewind() 函數後指針的位置: ".ftell($fopen)."<br />"; echo "輸出前 6 個字節的內容: ".fgets($fopen,6); //輸出前6個字節的內容 fclose($fopen); //關閉文件 } else { echo "文件不存在!"; } ?>
文件鎖定:
<?php $filename = '05.txt'; //聲明要打開文件名稱 $fopen = fopen($filename,'w'); //以w 只寫的形式打開文件 flock($fopen,LOCK_EX); //鎖定文件 (獨佔共享) fwrite($fopen,"hightman1"); //向文件中寫入數據 flock($fopen,LOCK_UN); //解除鎖定 fclose($fopen); //關閉文件指針 readfile($filename); //輸出文件內容 ?>
====================================================================
文件的上傳
獲取上傳文件的信息:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <table width="500" border="0" cellpadding="0" cellspacing="0"> <!-- 上傳文件的form表單,必須有 enctype 屬性 --> <form enctype="multipart/form-data" action="" method="post"> <tr> <td width="150" height="30" align="right" valign="middle">請選擇上傳文件: </td> <!-- 上傳文件域,type類型爲file --> <td width="250"><input type="file" style="border:1px solid #000" name="upfile" /></td> <!-- 提交按鈕 --> <td width="100"><input type="submit" name="submit" value="上傳" /></td> </tr> </form> </table> <?php if(!empty($_FILES)) //檢查變量是否爲空 { foreach($_FILES['upfile'] as $name=>$value) //使用foreach循環輸出上傳文件信息的名稱和值 { echo $name.'='.$value."<br />"; } } ?> </body> </html>
真正的文件上傳(從臨時到指定位置):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <form action="" method="post" enctype="multipart/form-data" name="form"> <input name="up_file" type="file" /> <input type="submit" name="submit" value="上傳" /> </form> <?php if(!empty($_FILES['up_file']['name'])) //判斷是否有上傳文件 { $fileinfo = $_FILES['up_file']; //將文件信息賦給fileinfo if($fileinfo['size'] < 901 && $fileinfo['size'] > 0) //判斷文件大小 { //上傳文件 move_uploaded_file($fileinfo['tmp_name'],"upfile/".$fileinfo['name']); echo "文件上傳成功!"; } else { echo "文件太大或者未知"; } } ?> </body> </html>
多文件上傳:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>無標題文檔</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <table id="up_table" border="1" bgcolor="#f0f0f0"> <tbody id="auto"> <tr id="show"> <td>上傳文件</td> <td><input type="file" name="u_file[]" /></td> </tr> <tr> <td>上傳文件</td> <td><input type="file" name="u_file[]" /></td> </tr> <tr> <td colspan="4"><input type="submit" value="上傳" /></td> </tr> </tbody> </table> </form> <?php if(!empty($_FILES['u_file']['name'])) //判斷$FILES變量是否爲空 { $file_name = $_FILES['u_file']['name']; //將上傳的臨時文件名存放在數組裏 $file_tmp_name = $_FILES['u_file']['tmp_name']; //將上傳的臨時文件路徑存放數組 for($i = 0; $i<count($file_name); $i++) //循環上傳文件 { if($file_name[$i] != '') //判斷上傳文件名是否爲空 { move_uploaded_file($file_tmp_name[$i],"upfile/".$i.$file_name[$i]); echo "文件".$file_name[$i]."上傳成功, --改名爲".$i.$file_name[$i]."<br />"; } } } ?> </body> </html>