php文件目录操作相关
1.打開文件函數
fopen():用于打開一個文件,打開時需要指定打開模式
打開模式
如果文件不存在,不會自動創建
r:只讀模式打開,并且將文件指針指向文件內容開頭
r+:讀寫打開,并且將文件指針指向文件內容開頭;
?
如果文件不存在,則會自動創建
w:只寫模式打開,并且將文件大小設置為0(清空文件內容)
w+:讀寫模式。
?
如果文件不存在,則會自動創建
a:追加的寫入方式,并且將文件的指針指向文件的末尾
a+:追加的讀寫模式
?
x:以寫入方式進行打開,并且將文件指針指向文件開頭。如果文件存在,則會報一個warning的錯誤,并且fopen返回一個false.如果文件不存在,則會創建
X+:讀寫模式
b:打開一個二進制文件
t:Windows 下提供了一個文本轉換標記("t")可以透明地將 \n 轉換為 \r\n
注釋:不同的操作系統家族具有不同的行結束習慣。當寫入一個文本文件并想插入一個新行時,需要使用符合操作系統的行結束符號。基于 Unix 的系統使用 \n 作為行結束字符,基于 Windows 的系統使用 \r\n 作為行結束字符,基于 Macintosh 的系統使用 \r 作為行結束字符。 如果寫入文件時使用了錯誤的行結束符號,則其它應用程序打開這些文件時可能會表現得很怪異。
Windows 下提供了一個文本轉換標記("t")可以透明地將 \n 轉換為 \r\n。與此對應還可以使用 "b" 來強制使用二進制模式,這樣就不會轉換數據。要使用這些標記,要么用 "b" 或者用 "t" 作為 mode 參數的最后一個字符。
默認的轉換模式依賴于 SAPI 和所使用的 PHP 版本,因此為了便于移植鼓勵總是指定恰當的標記。如果是操作純文本文件并在腳本中使用了 \n 作為行結束符,但還要期望這些文件可以被其它應用程序例如 Notepad 讀取,則在 mode 中使用 "t"。在所有其它情況下使用 "b"。
在操作二進制文件時如果沒有指定 "b" 標記,可能會碰到一些奇怪的問題,包括壞掉的圖片文件以及關于 \r\n 字符的奇怪問題。
注釋:為移植性考慮,強烈建議在用 fopen() 打開文件時總是使用 "b" 標記。
注釋:再一次,為移植性考慮,強烈建議你重寫那些依賴于 "t" 模式的代碼使其使用正確的行結束符并改成 "b" 模式。
?
?
2.寫入文件函數
fwrite():用于寫入文件。
fwrite() 的第一個參數包含要寫入的文件的文件名,第二個參數是被寫的字符串。
$file = fwrite($handle,'11');??//11
fputs():是?fwrite()?函數的別名
?
3.讀取文件函數
fread():讀取打開的文件。
fread() 的第一個參數包含待讀取文件的文件名,第二個參數規定待讀取的最大字節數。
如下 PHP 代碼把 "webdictionary.txt" 文件讀至結尾:
fread($myfile,filesize("webdictionary.txt"));
?
fgets():用于從文件讀取單行。
fgetc:獲取一個字符(在調用 fgetc() 函數之后,文件指針會移動到下一個字符。)
關閉文件函數:
fclose():關閉打開的文件
feof() :檢查是否已到達 "end-of-file" (EOF)。
注釋:用完文件后把它們全部關閉是一個良好的編程習慣。您并不想打開的文件占用您的服務器資源。
fclose($handle) 需要待關閉文件的名稱(或者存有文件名的變量):
5.不需要文件打開的函數
file_get_contents($filename):把整個文件讀入一個字符串中
file_put_contents($filename,$data):把一個字符串寫入文件中,并且清空原來的文件。如果文件不存在,則創建一個新文件。
?
6.其他讀取函數
file($filepath):整個文件讀入一個數組中。
readfile():讀入一個文件并寫入到輸出緩沖
?
7.訪問遠程文件
開啟allow_url_fopen,http協議連接只能使用只讀,ftp協議可以使用只讀或者只寫
?
8.名稱相關
basename(path,suffix):返回路徑中的文件名部分。
dirname(path):返回路徑中的目錄部分
pathinfo(path):以數組的形式返回文件路徑的信息
pathinfo() 返回一個關聯數組包含有?path?的信息。
包括以下的數組元素:[dirname][basename][extension]
?
9.目錄讀取
opendir($path):打開目錄句柄。
readdir():返回目錄中下一個文件的文件名。
closedir($dir_handle):關閉目錄句柄
rewinddir($dir_handle):重置由 opendir() 創建的目錄句柄。
10.目錄的操作
rmdir($path):嘗試刪除?dir?所指定的目錄。 該目錄必須是空的,而且要有相應的權限。
mkdir($path):嘗試新建一個由?path?指定的目錄。默認的?mode?是 0777,意味著最大可能的訪問權。
文件大小:filesize()
磁盤空間大小:
disk_free_space():返回目錄的可用空間。
disk_total_space():返回一個目錄的磁盤總容量。
文件拷貝:copy($yuanwenjian,$mubiaowenjian):返回一個目錄的磁盤總容量。
刪除文件:unlink($filename)
文件類型:filetype($filename)
重命名文件或者目錄:rename($oldname,$newname) ?//不僅可以重命名,還可以移動位置。和mv一樣
11.文件屬性:
file_exists(path):檢查文件或目錄是否存在。
is_dir():判斷指定的文件名是否是一個目錄。
is_readable():判斷文件是否可讀。
is_writable():判斷文件是否可寫
is_executable():判斷文件是否可執行
clearstatcache():清除文件狀態緩存。
12文件鎖:
flock():鎖定或釋放文件
13.?文件指針:
ftell():返回文件指針的讀/寫位置
fseek():在打開的文件中定位。
rewind():倒回文件指針的位置。
$file = fopen("test.txt","r");
// 輸出當前位置
echo ftell($file);
//改變文件指針的位置
fseek($file,"15");
//把文件指針設定為 0
rewind($file);
fclose($file);
?
例1:在文件的開頭加入hello world;
$filename = './test.txt';
$handle = fopen($filename,'r');
$content = fread($handle,filesize($filename));
$handle = fopen($filename,'w');
$data = 'hello world'.$content;
$result = fwrite($handle,$data);
fclose($handle);
if($result)
{
????echo "成功";
}
例2:遍歷指定文件夾下面的所有文件?
function lsdir($dirname)
{
$files = array();
????if(is_dir($dirname))
????{
????????if($handle = opendir($dirname)) {
????????????while (($filename = readdir($handle)) !== false) { ?//!==是因為有目錄名為0
????????????????if($filename!='.' && $filename!='..')
????????????????{
????????????????????//echo $filename.PHP_EOL; ?輸出所有文件名和文件夾
????????????????????if(is_dir($dirname.'/'.$filename))
????????????????????{
????????????????????????//lsdir($dirname.'/'.$filename);
????????????????????????$files[$filename] = ?lsdir($dirname.'/'.$filename);
????????????????????}else{
????????????????????????$files[] = $dirname."/".$filename;
????????????????????}
????????????????}
????????????}
????????}
????????closedir($handle);
????}
return $files;
}
$dirname = './test_dir';
var_dump( lsdir($dirname));
總結
以上是生活随笔為你收集整理的php文件目录操作相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i节点详解以及软连接和硬链接的区别
- 下一篇: cgi,fastcgi,php-cgi,