您好,登錄后才能下訂單哦!
一.目錄操作
解析目錄路徑:basename()函數返回路徑的文件名部分。
<?
$path = 'C:\AppServ\www\Basic6\Demo1.php';
echo 'path:'.basename($path);
?>
獲取路徑的目錄:dirname()函數返回路徑目錄部分。
<?
$path = 'C:\AppServ\www\Basic6\Demo1.php';
echo 'path:'.dirname($path);
?>
關于路徑的信息:pathinfo()函數創建一個關聯數組,其中包括:目錄名、基本名和擴展名。
<?
$path = 'C:\AppServ\www\Basic6\Demo1.php';
$array_path = pathinfo($path);
print_r($array_path);
?>
確定絕對路徑:realpath()函數將path中的所有符號鏈接和相對路徑引用轉換為相應的硬鏈接和絕對路徑。
<?
$path = '../index.php';
echo realpath($path);
?>
二.磁盤、目錄和文件計算
確定文件的大小:filesize()函數返回指定文件字節大小。
<?
$file = 'C:\AppServ\www\Basic6\Demo1.php';
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';
?>
確定文件的最后訪問時間:fileatime()函數返回文件的最后訪問時間,采用的Unix時間戳格式。
<?
$file = 'C:\AppServ\www\Basic6\Demo1.php';
echo date("Y-m-d,h:i:s",fileatime($file));
?>
確定文件的最后改變時間:filectime()函數返回文件的最后改變時間,采用Unix時間戳格式。
<?
$file = 'C:\AppServ\www\Basic6\Demo1.php';
echo date("Y-m-d,h:i:s",filectime($file));
?>
確定文件的最后修改時間:filemtime()函數返回文件的最后修改時間,采用Unix時間戳格式。
<?
$file = 'C:\AppServ\www\Basic5\Demo1.php';
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()函數的文件模式總結
模式 | 模式名稱 | 意義 |
r | 只讀 | 文件指針置于文件開頭 |
r+ | 讀寫 | 文件指針置于文件開頭 |
w | 只寫 | 在寫入前,刪除文件內容,將指針返回到文件開頭。如果文件不存在,則嘗試創建。 |
w+ | 讀寫 | 在讀取或寫入之前,刪除文件內容,將指針返回到文件開頭。如果文件不存在,則嘗試創建。 |
a | 只寫 | 文件指針置于文件末尾。如果文件不存在,則嘗試創建。此模式成為追加(append)。 |
a+ | 讀寫 | 文件指針置于文件末尾。如果文件不存在,則嘗試創建。此過程稱為追加到文件。 |
b | 二進制 | 二進制模式----用于與其他模式進行連接。如果文件系統能夠區分二進制文件和文本文件,你可能會使用它。Windows系統可以區分;而UNIX則不區分。推薦一直使用這個選項,以便獲得最大程度的可移植性。二進制模式是默認的模式。 |
t | 文本 | 用于與其他模式的結合。這個模式只是Windows系統下一個選項。它不是推薦選項,除非你曾經在代碼中使用b選項。 |
如果fopen()函數調用失敗,函數將返回false。可以用一種對于用戶友好的方式來處理這個錯誤,可以通過抑制PHP的錯誤信息并且根據自己的方式給出錯誤信息。
@$fp=fopen("file.txt",'ab'); //ab追加并且二進制方式
寫文件
在PHP中寫文件相對比較簡單。可以使用fwrite() 或者 fputs() 函數。我們可以使用如下方式調用fwrite();
fwrite($fp, $outputstring, [intlength]); //第三個可選參數為最大字符數
這個函數告訴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():讀取定量的字符,fread($handle,$length)讀取$length長度的字符串。
fpassthru():輸出文件指針處的所有剩余數據。
file():將整個文件讀入數組中,以行分組。
readfile():讀入一個文件并寫入到輸出緩沖,本身可以輸出到瀏覽器,返回值為數據總長度。
file_get_contents():將整個文件讀入一個字符串。
while (!feof($fp)) {
echo fgetc($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的操作值
操作值 | 意義 |
LOCK_SH(以前為1) | 讀寫鎖定。這意味著文件可以共享,其他人可以讀該文件 |
LOCK_EX(以前為2) | 寫操作鎖定。這是互斥的。該文件不能被共享 |
LOCK_UN(以前為3) | 釋放已有的鎖定 |
LOCK_NB(以前為4) | 防止在請求加鎖時發生阻塞 |
$fp = fopen("file.txt","ab");
flock($fp,LOCK_EX); //鎖定
fwrite($fp, $outsum);
flock($fp, LOCK_UN); //釋放
fclose($fp);
目錄句柄操作
opendir():打開路徑指定的目錄流。
closedir():關閉目錄流。
readdir():返回目錄中的各個元素。
$dir = opendir('C:\AppServ\www\Basic5');
while (!!$file = readdir($dir)) {
echo $file.'<br />';
}
closedir($dir);
scandir():將目錄讀入數組。
print_r(scandir('C:\AppServ\www\Basic5'));
rmdir():刪除指定的目錄。
rmdir('C:\AppServ\www\Basic5\123');
rename():重命名文件。
rename('Demo1.php','Demo01.php');
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。