程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php基礎入門篇-文件和目錄操作

php基礎入門篇-文件和目錄操作

編輯:關於PHP編程

一篇關於php 入門的朋友參考的關於文件和目錄的各種操作函數與實例應用,有需要的朋友可以簡單的參考一下。

本章可以算是上一章的延續,介紹了除文件實際內容之外的附加信息,包括文件的大小、目錄、訪問權限等。文件系統中的某些函數只在服務器為特定的系統中時才有效,例如更改符號鏈接的函數symlink(),設定文件訪問權限的函數chmod(),設定目錄訪問權限的函數umask()等等這些只在Linux系統中有效,在Windows系統中無效。PHP5以後提供的DirectoryIterator類也封裝了很多實用的目錄方面的操作

 代碼如下 復制代碼

//------------- 采用DirectoryIterator類迭代目錄中的文件 -------------
foreach(new directoryIterator('/usr/local/images') as $file){
 print $file->getPathname()."n";
}

//------------- PHP5之前版本的實現方式 -------------
$d = opendir('/usr/local/images') or die($php_errormsg);
while(false !==($f = readdir($d))){
 print $f."n";
}

closedir($d);文件信息函數
函數名 函數提供什麼文件信息?
file_exists() 該文件是否存在
fileatime() 最後訪問時間
filectime() 文件inode的最後修改時間
filegroup() 取得文件組(返回整數)
fileinode() 取得文件的信息節點數(返回整數)
filemtime() 取得文件數據塊最後被寫入的時間(返回Unix時間戳)
fileowner() 取得文件的所有者(返回用戶ID)
fileperms() 取得文件的權限
filesize() 取得文件大小的字節數
filetype() 取得文件類型,可能返回 fifo,char,dir,block,link,file 和 unknown
is_dir() 判斷給定文件名是否是一個目錄
is_executable() 判斷給定文件名是否可執行(自PHP5.0.0起可用於Windows)
is_file() 判斷給定文件名是否為一個正常的文件
is_link() 判斷給定文件名是否為一個符號連接
is_readable() 判斷給定文件名是否可讀
is_writable() 判斷給定文件名是否可寫

目錄相關函數
函數名 函數提供什麼文件信息?
mkdir() 創建一個新目錄,第二個參數可用來設置訪問權限
rmdir() 刪除目錄
rename() 重命名一個文件或目錄

目錄類相關方法
DirectoryIterator類封裝了很多與目錄相關的方法

方法名 函數提供什麼目錄信息?
isDir() 判斷給定的DirectoryIterator item對象是否是一個目錄
isDot() 判斷當前的DirectoryIterator item對象是否是‘.’或‘..’
isFile() 判斷當前的DirectoryIterator item對象是否是一個有效的文件
isLink() 判斷當前的DirectoryIterator item對象是否是一個連接
isReadable() 判斷當前的DirectoryIterator item對象是否可讀
isWritable() 判斷當前的DirectoryIterator item對象是否可寫
isExecutable() 判斷當前的DirectoryIterator item對象是否可執行
getATime() 獲取當前Iterator item最後訪問時間
getCTime() 獲取當前Iterator item最後修改時間
getMTime() 獲取當前Iterator item文件數據塊最後被寫入的時間
getFilename() 獲取當前Iterator item文件名(帶擴展名)
getPathname() 獲取當前Iterator item路徑名
getPath() 獲取當前Iterator item路徑名和文件名
getGroup() 獲取當前Iterator item組ID
getOwner() 獲取當前Iterator item擁有者ID
getPerms() 獲取當前Iterator item權限
getSize() 獲取當前Iterator item文件大小
getType() 獲取當前Iterator item類型,可能是file,link or dir
getInode() 獲取當前Iterator item的inode節點號

文件時間戳解惑
touch()函數修改文件的更新時間

fileatime()函數返回文件因為讀或寫被打開的最後時間

filemtime()函數返回文件內容被修改的最後時間

filectime()函數返回文件內容或元數據被修改的最後時間

獲取文件信息
通過stat()可以獲取一個包含文件相關信息的數組,與此函數類似的是fstat()函數,這個函數以一個文件句柄作為參數(由fopen()或popen()返回),lstat()用來獲取符號或文件連接的信息。

數字索引 字符串索引 說明
0 dev 設備號
1 ino 信息節點號
2 mode 保護模式
3 nlink 被連接數目
4 uid 所有者用戶ID
5 gid 所在組ID
6 rdev 設備類型,如果是inode設備的話
7 size 文件大小的字節數
8 atime 上次訪問的時間(Unix時間戳)
9 mtime 上次修改的時間(Unix時間戳)
10 ctime 上次改變的時間(Unix時間戳)
11 blksize 文件系統IO的塊大小
12 blocks 所占據塊的數目

修改文件權限
chmod()函數修改文件的權限

chown()函數修改文件的所有者

chgrp()函數修改文件所屬組

注意:上述3個函數在Windows系統中無效
獲取文件名各部分信息
basename()函數可以取得文件名,dirname()函數可以取得路徑名,pathinfo()取得目錄名、完整文件名、擴展名、文件名(即不帶擴展名)的關聯數組,鍵名分別是[dirname]、[basename]、[extension]、[filename]

常通過dirname(__FILE__)的組合來獲取當前目錄路徑(物理路徑,常用在引用其他PHP文件上)

刪除文件
用unlink()函數可以刪除一個文件,如果刪除失敗將產生一個E_WARNING錯誤

提示:PHP5.0.0後此函數也可以用來刪除遠程文件,如FTP等
復制或移動文件
使用copy(old_dir,new_dir)函數可以復制文件,使用rename(old_dir,new_dir)移動文件,這裡的new_dir是可以可以重命名文件名的。

模式匹配文件名列表(模糊查詢)
如果希望像命令行那樣查詢出某個目錄中的所有jpg文件(*.jpg),可以使用DirectoryIterator類的FileterIterator子類accept()方法或者glob()函數獲取匹配的文件名。

//FileterIterator的實現代碼

 代碼如下 復制代碼

class ImageFilter extends FilterIterator {
    public function accept() {
        return preg_match('@.(gif|jpe?g|png)$@i',$this->current());
    }
}
foreach (new ImageFilter(new DirectoryIterator('/usr/local/images')) as $img) {
    print "

n";
}

//-------------- glob函數的實現代碼 ------------

 代碼如下 復制代碼 foreach (glob('/usr/local/docs/*.txt') as $file) {
   $contents = file_get_contents($file);
   print "$file contains $contentsn";

}遞歸目錄中的文件
如果想獲得一個目錄及其子目錄的文件大小,可以使用RecursiveDirectoryIterator(提供子目錄獲取的功能)和RecursiveIteratorIterator(平整化)

 代碼如下 復制代碼

$dir = new RecursiveDirectoryIterator('/usr/local');
$totalSize = 0;
foreach (new RecursiveIteratorIterator($dir) as $file) {
    $totalSize += $file->getSize();
}
print "The total size is $totalSize.n";

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved