第 6 章 目錄與檔案

2021-09-12 03:18:01 字數 4491 閱讀 7099

學習要點:

1.目錄操作

2.磁碟、目錄和檔案計算

3.檔案處理

將相關的資料組織為檔案和目錄等實體,這一直是計算環境的核心概念。出於這個原因 ,程式設計師需要有一種方法來獲得關於檔案和目錄的重要細節,如位置、大小、最後修改時間、最後訪問時間和其他確定資訊。

一.目錄操作

解析目錄路徑:basename()函式返回路徑的檔名部分。

echo 'path:' .basename($path);

?>

獲取路徑的目錄:dirname()函式返回路徑目錄部分。

echo 'path:' .dirname($path);

?>

關於路徑的資訊: pathinf o()函式建立乙個關聯陣列,其中包括:目錄名、基本名和副檔名。

$array_path = pathinfo($path);

print_r($array_path);

?>

$path = '../index.php' ;

echo realpath($path);

?>

二.磁碟、目錄和檔案計算

確定檔案的大小:filesize() 函式返回指定檔案位元組大小。

echo round(filesize( $file)/ 1024 , 2).'kb' ;

?>

計算磁碟的可用空間:disk_free_space()函式返回指定的目錄所在磁碟分割槽的可用空間。

$drive = 'c:' ;

echo round(disk_free_space($drive)/1024/1024,2). 'mb' ;

?>

計算磁碟的總容量:disk_total_space()函式返回指定的目錄所在磁碟分割槽的總容量。

$drive = 'c:' ;

echo round(disk_total_space($drive)/1024 / 1024 , 2).'mb' ;

?>

echo date("y-m-d,h:i:s" ,fileatime( $file));

?>

echo date("y-m-d,h:i:s" , filectime ( $file));

?>

echo date("y-m-d,h:i:s" , filemtime ($file));

?>

三.檔案處理

資源(resource)這個詞常常與可以發起輸入或輸出流的實體聯絡起來。標準輸入或輸出、檔案和網路套接字都是資源的例子。因此你會經常看到本節所介紹的很多函式都是在資源處理的上下文中討論的,而不是檔案處理,這本身是因為所有這些函式都能夠與前面所述的資源結合使用。但是,由於這些函式與檔案結合使用是應用中最常見的。

將資料寫入乙個檔案,有 3 個步驟:

1. 開啟這個檔案。如果檔案不存在,需要先建立它。

2. 將資料寫入這個檔案。

3. 關閉這個檔案

同樣,從乙個檔案中讀出資料,也有 3 個步驟:

1. 開啟這個檔案。如果這個檔案不能開啟,就應該意識到這一點並且正確地退出。

2. 從檔案中讀出資料。

3. 關閉這個檔案。

開啟檔案

要在 php 中開啟乙個檔案,可以使用 fopen() 函式。當開啟乙個檔案的時候,還需要指定如何使用它。也就是,檔案模式。

選擇檔案模式:當開啟乙個檔案的時候,有 3 中選擇:

1. 開啟檔案為了唯讀、只寫或者讀和寫。

2. 如果要寫乙個檔案,你可能希望覆蓋所有已有的檔案內容,或者僅僅將新資料追加到檔案末尾。如果該檔案已經存在,也可以終止程式的執行而不是覆蓋該檔案。

3. 如果希望在乙個區分了二進位制方式和純文字方式的系統上寫乙個檔案,還必須制定採用的方式。

函式 fopen() 支援以上 3 中方式的組合。

$fp=fopen(檔案路徑 , 檔案模式 , [ 是否在 incloude_path 中搜尋乙個檔案],[ 允許檔名以協議名稱開始(如 http://)] )

如果 fopen() 函式呼叫失敗,函式將返回 false 。可以用一種對於使用者友好的方式來處理這個錯誤,可以通過抑制 php 的錯誤資訊並且根據自己的方式給出錯誤資訊。

@$fp=fopen("file.txt",'ab' ); //ab 追加並且二進位制方式
寫檔案在 php 中寫檔案相對比較簡單。可以使用 fwrite() 或者 fputs() 函式。我們可以使用如下方式呼叫 fwrite();

fwrite($fp, $outputstring, [int length]); //第三個可選引數為最大字元數
這個函式告訴 php 將儲存在$outputstring 中的字串寫入到$fp 指向的檔案中。

fwrite()函式的乙個新的替換函式是 file_put_contects().

可以通過 php 的內建 strlen() 函式獲得字串的長度:

fwrite($fp, $outputstring, strlen($outputstring));
當然還有一種不需要資源控制代碼的寫入方法:file_put_contents ()。

關閉檔案

當檔案使用完畢後,應該將其關閉。應該呼叫 fclose() 函式:

fclose( $fp);
讀出檔案

$fp = fopen("file.txt" , "r");
fgetc() :讀出乙個字元,並將指標移到下乙個字元。

fgets():讀出一行字元,可以指定一行顯示的長度。

fgetss () :從檔案指標中讀取一行並過濾掉 html 標記。

fread():讀取定量的字元。

fpassthru (): 輸出檔案指標處的所有剩餘資料。

file():將整個檔案讀入陣列中,以行分組。

readfile():讀入乙個檔案並寫入到輸出緩衝。

file_get_contents ():將整個檔案讀入乙個字串。

while (!feof( $fp))
判斷讀完檔案函式:feof() ,返回 true ,!feof() 返回 false;

檢視檔案是否存在:file_exists();

if (file_exists("file.txt")) 

else

檢視乙個檔案的大小:filesize();

刪除乙個檔案:unlink();

在檔案中定位:rewind() 、fseek()和 ftell();

rewind() 函式可以將檔案指標復位到檔案的開始。

ftell()函式可以以位元組為單位報告檔案指標當前在檔案中的位置。

fseek()函式可以將檔案指標 fp 從 whence 位置移動 offset 位元組。

檔案鎖定

假設兩個客戶試圖同時訂購同一件商品。那麼他們同時開啟了這個檔案,同時的更新,就會出現少乙個客戶訂購的資料。

為了避免這樣的問題,可以使用檔案鎖定的方法。

flock()函式。

flock 的操作值

$fp = fopen("file.txt" , "ab");

flock( $fp,lock_ex); //鎖定

fwrite($fp, $outsum);

flock( $fp, lock_un); //釋放

fclose( $fp);

目錄控制代碼操作

opendir():開啟路徑指定的目錄流。

closedir():關閉目錄流。

readdir():返回目錄中的各個元素。

while (!! $file = readdir( $dir))

closedir( $dir);

scandir():將目錄讀入陣列。

rmdir() :刪除指定的目錄。

rename() :重新命名檔案。

rename('demo1.php' ,'demo01.php' );

第6章 檔案許可權與目錄要點記錄

檔案的型別與許可權。了解使用者,使用者組,其他人的概念。了解 rwxrwx 這個檔案型別與許可權10個字元的含義。rwx 可讀可寫可執行。又分為所有者,使用者組與其他人。rwx許可權對於檔案的含義 r 意味著檔案內容可以被讀取。w意味著檔案可以編輯,修改,新增內容 但不含刪除該檔案 x意味著檔案可執...

第6章 linux的檔案許可權與目錄配置

使用者,自己的抽屜 使用者組,自己的家 其他人 others 外人 root,天神 etc passwd 所有的系統上的賬號與一般身份使用者,root的相關資訊 etc shadow 個人密碼 etc group 所有的組名12 3456 7許可權鏈結所有者 所屬組檔案容量 修改日期 檔名 第一列代...

第一章 目錄

第一條 mybatis and or聯查 第十章 springboot logback 第二條 logback下console列印mybatis的sql語句 第十章 springboot logback 第三條 mybatis使用註解實現in查詢 mysql 第二章 mybatis使用註解實現in查...