目錄操作
創建目錄
Mkdir(目錄地址,權限,是否遞歸創建=false);
刪除目錄
Rmdir(目錄地址)
僅僅可以刪除空目錄。(不支持遞歸刪除)
移動(改名)
Rename(舊地址,新地址)
該函數也支持操作文件。
獲取目錄內容(文件)
打開目錄 目錄句柄 = opendir(目錄地址)
目錄句柄:php程序與目錄間的一個聯系。
依次讀取目錄內文件 文件名 = readdir(目錄句柄);
依次讀取一個文件(子目錄),同時向下移動句柄指針。如果讀取不到返回false!
目錄內存在兩個邏輯子目錄 ., .. 分別表示當前目錄和上級目錄!
通過配合 循環結構 完成目錄內所有文件的讀取:
處理 0 文件名:
關閉目錄 closedir()
遞歸獲取目錄內容
打開某個目錄
依次讀取目錄內文件
如果某個文件為目錄
遞歸對該目錄采用打開,讀取,判斷這個遞歸草
遞歸點: 如果子文件為目錄,則遞歸
出口: 如果目錄中不存在子目錄,則不需要繼續遞歸!
樹狀展示
使用特定數量的縮進達到樹狀目的!
核心問題,計算需要縮進的數量!
縮進級別,與遞歸調用深度保持一致。每當執行一級遞歸操作,所找到的文件的縮進級別+1;
語法實現:
增加一個參數,表示當前函數調用的深度級別,每當遞歸+1;
嵌套
使用多維數組的嵌套,表示層級關系!
例如:
實現:
遞歸刪除
Unlink(文件地址)刪除文件。
目錄文件名編碼問題:
展示時,將操作系統編碼轉換為響應數據編碼。
Windows gbk,項目utf-8
代碼的地址中存在中文:需要轉換為系統編碼,才能被文件系統識別:
由於php基於Linux系統,所以php的文件操作包括文件目錄以及文件兩部分的操作,只能操作服務器的文件
文件操作
1.只能操作服務器的文件
2.文件包含目錄和文件
判斷文件類型
var_dump(filetype("../0529")); //返回文件的類型:目錄dir 文件file,
var_dump(is_dir("../11.php")); //判斷路徑是不是目錄,返回布爾類型
var_dump(is_file("../11.php")); //判斷路徑是不是文件,返回布爾類型
文件屬性
echo date("Y-m-d H:i:s",fileatime("../11.php")); //上次訪問時間 返回一個時間戳,使用data格式化
echo date("Y-m-d H:i:s",filectime("../11.php")); //創建時間
echo date("Y-m-d H:i:s",filemtime("../11.php")); //修改時間
echo filesize("../11.php"); //文件大小,字節為單位
var_dump(file_exists("../12.php")); //判斷文件是否存在
文件路徑
當前路徑:./ 上級目錄:../ 下級目錄:目錄/ 根路徑:/
如果是php里面的根(/)路徑代表:磁盤的根
如果是在網頁里面的根(/)路徑代表:服務器的根(www目錄)
echo $_SERVER['DOCUMENT_ROOT']; //取服務器的根路徑
echo basename("../11.php"); //從路徑中獲取帶后綴的文件名
echo basename("../11.php",".php"); //從路徑中獲取不帶后綴的文件名
echo dirname("../0529/aa.php"); //取徑中除去文件名的目錄
var_dump(pathinfo("../0529/aa.php")); //返回目錄信息,格式為數組
echo realpath("../0529/aa.php"); //將相對路徑轉化為絕對路
操作目錄
var_dump(glob("../tp/*.php")); //獲取目錄下所有的文件* 某個后綴的*.php
通過遍歷 glob 輸出子文件
$attr = glob("../tp/*");
for($i=0;$i<count($attr);$i++){
echo $attr[$i]."<br>";
}
使用目錄資源
$dir = opendir("");打開資源目錄
closedir($dir) ;關閉資源目錄
readdir($dir);讀取目錄下的文件,執行一次讀一個
rewinddir($dir); 指針返回最初
通過目錄資源遍歷
echo readdir($dir); //讀取目錄下的文件,執行一次讀一個
$dir = opendir("../tp"); //打開目錄資源
while($wj = readdir($dir)){
echo $wj."<br>";
}
closedir($dir); //關閉目錄資源
rewinddir($dir);//將指針重置
注意:
使用readdir()讀取的第一個和第二個內容
第一個是. 代表當前目錄
第二個是.. 代表上級目錄
在使用目錄資源遍歷文件夾的時候要注意將前兩個排除
目錄操作
1.創建目錄(文件夾)
mkdir("./test");
2.刪除目錄(文件夾)只能刪除空的文件夾
rmdir("./test");
3.移動目錄(文件夾)
rename("./test","../test11");
文件操作
touch("./test.txt");//創建文件
copy("./test.txt","../test.txt"); //復制文件
unlink("./test.docx"); //刪除文件
(file_exists(
echo file_get_contents("./test.txt"); //獲取文件內容:txt 頁面
echo file_get_contents("http://www.baidu.com"); //遠程獲取內容
file_put_contents("./test.txt","hello"); //向文件寫入內容
readfile("./test.txt"); //獲取文件內容並且直接輸出
var_dump(file("./test.txt")); //讀取文件內容,返回數組,數組的每個元素對應的是一行
對文件內容進行操作
1.打開文件資源
$fp = fopen("./test.txt","a");
操作文件
echo fgetc($fp); //每次讀一個字符
while(!feof($fp)) //判斷文件是否讀到末尾
{
echo fgetc($fp);
}
echo fgets($fp); //每次讀一行
echo fgets($fp);
echo fread($fp,10); //讀取特定長度
$str = "ni hao dhakhdak \r\n akdhka";
$str = iconv("utf-8","gb2312",$str);
fwrite($fp,$str);
2.關閉文件資源
fclose($fp);
文件操作
寫入字節數 = File_put_contents(文件地址, 內容)
寫,文件不存在,自動創建。
默認為替換寫:
支持使用追加寫:
第三個參數使用FILE_APPEND常量表示:
File_get_contents(文件地址)
讀
當操作的文件過大時?
不能一次性操作全部文件內容。上面的函數不適用!
使用下面的函數完成處理:
Fopen();打開文件句柄(PHP與文件間數據流通道)
參數1:文件地址
參數2:打開方式(模式),打開文件后希望完成那種操作,可以在模式位置進行限制。
PHP提供了如下一些的打開模式:
R(read)讀模式
W(write)替換寫模式,將文件內容清零,自動創建不存在的文件。
A(append)追加寫模式
X 替換寫,不會自動創建不存在的文件。(只能打開已經存在的文件)
+擴展,擴展了操作。
R+ 讀寫模式,將文件指針放在文件開頭。
W+ 讀替換寫模式,將文件內容清零,將文件指針放在文件開頭,自動創建不存在的文件。
A+ 讀追加寫模式,寫操作永遠在文件末尾,讀操作受限於文件指針。
X+ 讀替換寫模式,將文件內容清零,將文件指針放在文件開頭,不會自動創建不存在的文件。(只能打開已經存在的文件)
在都可以執行讀寫時,差異在於,打開文件時,初始化的工作不同,針對初始化的文件指針位置,文件內容。
Fread(文件句柄, 長度);讀取,讀取指定長度的字符串內容(單位字節)
Tip:長度是有個最大值。為8192個字節。
Fgets(文件句柄,長度);讀取,讀取指定長度的字符串
長度,指的是會讀取長度-1個字節。
除了長度外,行末也是該函數的終止讀操作條件。取決於先滿足那個條件。
因此也稱讀行函數。最常用。fgetS($handle, 1024)
fgetC(文件句柄);讀取,一次讀取一個字節的數據
讀取指針位置字符,操作時會移動指針。
fwrite(文件句柄,寫入內容);寫,在指定位置寫入內容,通常由文件指針來指示,如果是a模式,不論指針在哪里,只能在末尾寫。
如果w:
fclose();
關閉句柄
Ftell()
獲取指針位置
Fseek()
設置指針位置
R+:
讀寫都受指針影響。寫替換掉原有字節寫。
W+:
清空內容
A+/a:
指針位置具有不確定因素。
A+,讀受指針影響,寫就是追加。
Filemtime(文件地址)
文件的最后修改時間。
Filesize(文件地址)
統計目錄大小。