一、文件處理
1. 打開文件:resouce fopen()
2. 關閉文件:bool fclose()
3. 讀寫文件:
- 讀取整個文件:int readfile()、array file() 和 string file_get_contents( )
- 讀取一行數據:string fgets( ),如果有一個參數表示當前指針後面所有內容,如果有兩個參數,第二個參數表示需要獲取字節長度 和 string fgetss( )會過濾掉html和php標記。
- 讀取一個字符:string fgetc( )
- 讀取指定長度的字串:string frend( )
4. 寫文件
- fwrite( ) 函數也稱爲fputs( ),它們用法相同。int fwrite( )
- file_put_contents( ) 函數 int file_put_contents( )
5. 複製文件:bool copy( )
6. 重命名:bool rename( )
7. 刪除文件:bool unlink( )
8. 文件最後一次被訪問的時間:int fileatime( ),時間戳的方式返回。
9. 文件最後一次被修改的事件:int filemtime( ),時間戳的方式返回。
10. 取得文件大小(bytes):int filesize( )
11. 包含文件name的路徑信息:array pathinfo(string name{,int options] );
12. 返回文件filename絕對路徑:string realpath( )
13. 返回一個數組,包括文件的相關信息,如文件大小、最後修改時間等:array stat( )
在讀寫文件時,除了file()、readfile()等少數幾個函數外,其他操作必須要先使用fopen()函數打開文件,最後用fclose()函數關閉文件。文件信息函數(如filesize、filemtime等)則都不需要打開文件,只要文件存在即可。
二、目錄處理(目錄是一種特殊的文件)
1. 打開目錄:resource opendir( )
2. 關閉目錄:void closedir( )
is_dir( )函數判斷當前路徑是否爲一個合法的目錄。如果合法返回true,否則返回false。
3. 瀏覽目錄:array scandir( );
4. 新建目錄:bool mkdir( )
5. 刪除目錄:bool rmidr( )
6. 取得當前工作目錄:string getcwd(void)
7. 改變當前目錄:bool chdir( );
8. 返回目錄中的可用空間(bytes),被檢查的目錄必須通過服務器的文件系統訪問:float disk_free_space()
9. 返回目錄的總空間大小:float disk_total_space()
10. 返回目錄下一個文件的文件名(使用此函數時,目錄必須是使用opendir()函數打開的):string readdir( )
11. 將指定的目錄重新指定到目錄的開頭:void rewinddir( )
三、文件處理的高級應用
1. 遠程文件的訪問
PHP支持URL格式的文件調用,只要在php.ini中allow_url_fopen選項設爲ON。
如:fopen('http://127.0.0.1/tm/sl/index.php', 'rb');
2. 文件指針
PHP可以實現文件指針的定位及查詢,從而實現所需信息的快速查詢。文件指針函數有rewind( )、fseek() 、feon() 和ftell()。
- rewind()函數:該函數將文件handle的指針設爲文件流的開頭
語法:bool rewind( );如果將文件以追加("a")模式打開,寫入文件的任何數據總是會被附加在文件已有內容的末尾,不論文件指針的位置在何處。
- fseek() 函數:該函數實現文件指針的定位
語法:int fseek();
- feof() 函數:該函數判斷文件指針是否在文件尾
語法:bool feof( );
- ftell() 函數:該函數返回當前指針位置
語法:int ftell( );
$filename = "test.txt";
if(is_file($filename)){ // 判斷文件是否存在
echo "文字總字節數:".filesize($filename)."<br>";
$fopen = fopen($filename, 'rb');
echo "初始指針位置:".ftell($fopen)."<br>";
fseek($fopen, 22); //移動指針
echo "使用fseek函數後指針位置:".ftell($fopen)."<br>";
echo "輸出當前指針後面的內容".fgets($fopen)."<br>";
if(feof($fopen)){ //判斷指針是否指向文件末尾
echo "當前指針指向文件末尾:".ftell($fopen)."<br>"; //如果指針在末尾則輸出指針位置
rewind($fopen);
echo "使用rewind函數後指針的位置:".ftell($fopen)."<br>";
echo "輸出前22個字節的內容:".fgets($fopen, 22);
fclose($fopen);
}else {
echo "文件不存在";
}
}
3. 鎖定文件
在向一個文本文件寫入內容時,需要先鎖定該文件,以防止其他用戶同時修改此文件內容,使用flock() 函數
語法:boll flock(resource handle, int operation)
參數值 | 說明 |
LOCK_SH | 取得共享鎖定(讀取文件) |
LOCK_EX | 取得獨佔鎖定(寫入文件) |
LOCK_UN | 釋放鎖定 |
LOCK_NB | 防止flock() 在鎖定時堵塞 |
四、上傳文件
1. 配置php.ini文件
- file_uploads:值爲on,說明服務器支持文件上傳,off則不支持。
- upload_tep_dir:上傳文件臨時目錄。如果想要指定爲,可在這裏設置,否則使用系統默認目錄即可。
- upload_max_filesize:服務器允許上傳的文件的最大值,以MB爲單位。系統默認爲2MB。
- max_execution_time:PHP中一個指令所能執行的最長時間,單位爲秒。
- memory_limit:PHP中一個指令所分配的內存空間,單位是MB。
2. 預定義變量$_FILES
元素名 | 說明 |
$_FILES[filename][name] | 存儲了上傳文件的文件名 |
$_FILES[filename][size] | 存儲了文件大小,單位爲字節 |
$_FILES[filename][tmp_name] | 文件上傳時,首先在臨時目錄中被保存成一個臨時文件。該變量爲臨時文件名 |
$_FILES[filename][type] | 上傳文件的類型 |
$_FILES[filename][error] | 存儲了上傳文件的結果。如果值爲0,說明上傳成功。 |
3. 文件上傳函數:將上傳文件存儲到指定的位置。成功返回true,否則返回false。
語法:bool move_uploaded_file(string filename, string destination)
參數:filename是上傳文件的臨時文件名,即$_FILES[tmp_name];
destination是上傳後保存的新的路徑和名稱