首頁  >  文章  >  後端開發  >  檔案系統基本操作類別_PHP教程

檔案系統基本操作類別_PHP教程

WBOY
WBOY原創
2016-07-21 16:00:41885瀏覽

複製程式碼 程式碼如下:

error_reporting(2047); 

/* 
* Class IO (SNakeVil  03.25.040.( ). 🎜>* [說明] 
* 本類別用於檔案系統的處理。 

* [功能] 
* **** list_dir($dir_path); 
* 讀取指定目錄內容,並傳回內容陣列。
* $dir_path 字串,指定目錄路徑 
* 若有錯誤回傳 FALSE,否則回傳 
* array( 
* "count"=>array("files","dirs",">* "count"=>array("files","dirs"," size"), 
* "list"=>array( 
* array("name","locate","type","size","last_access","last_change","last_modify"),
* ...... 
* ) 
* ) 
* ******** 
* ******** 
* ** ** seek_file($pattern, $dir_path, $seek_type, $sub_dir, $interal, $limit); 
* 依據正規表示式條件,並在對應及特定層級的子目錄中搜尋符合的檔案、目錄。
* $pattern 符合 PERL 相容標準的正規表示式,無須添加 //,系統自行添加 
* $seek_type 有 -1 0 1 三種可能值,且僅有文件夾,1 僅文件夾,1 僅文件夾兩者都包括 
* $sub_dir 數字值,搜尋的子目錄深度,指定目錄不算,建議不要超過 5 
* $interal 布爾值,為真則返回搜尋結果的詳細信息,否則只返回檔案名稱、類型及所在目錄 
* $limit 數字值,搜尋結果限制,避免過度浪費系統資源 
* 若有錯誤回傳 FALSE,否則回傳 
* array( 
* array( 
* "name","locate","type" 
* [,"size","last_access","last_change","last_modify"] 
* ), 
* .... .. 
* ) 
* ******** 
* ******** 
* **** delete($path); 
* 刪除指定對象,檔案或資料夾-包括內含子目錄和檔案的非空資料夾。
* $path 字串,指定要刪除的內容路徑,檔案或目錄皆可 
* 如有錯誤中斷,傳回 FALSE,否則回傳 TRUE 
* ******* * 
* ******** 
* **** make_dir($path); 
* 建立任何資料夾,相對或絕對路徑皆可,深層建立亦可。
* $path 字串,要建立的最終目錄路徑 
* 如錯誤回傳 FALSE,否則回傳 TRUE 
* ******** 
* ****** ** 
* **** verify_file($src, $dst, $interal); 
* 使用 MD5 演算法比較兩個檔案是否相同。
* $src 字串,來源檔案路徑 
* $dst 字串,目標檔案路徑 
* $interal 布林值,對於大於 1M 檔案,可以設定為 FALSE伺服器負擔 
* 若有錯誤回傳 FALSE,否則回傳 TRUE 
* ******** 
* ******** 
* **** copy($ src_path, $dst_path); 
* 對任意資料夾、檔案進行複製,相對或絕對路徑皆可,檔案複製完成後會進行效驗,檢查是否出錯資料錯誤。
* $src_path 字串,指定要複製的來源內容路徑,檔案或目錄皆可 
* $dst_path 字串,指定要複製的目標內容路徑,檔案或目錄皆可,性質由 $src_path 決定,可為 $src_path 下層目錄 
* 若有錯誤返回 FALSE,否則返回 TRUE 
* ******** 
* ******** 
* ** 
* ******** 
* ** ** move($src_path, $dst_path); 
* 對任意資料夾、檔案進行移動,相對或絕對路徑皆可,檔案移動完成後會進行效驗,檢查是否出錯資料錯誤。
* $src_path 字串,指定要移動的來源內容路徑,檔案或目錄皆可 
* $dst_path 字串,指定要移動的目標內容路徑,檔案或目錄皆可,性質由 $src_path 決定,可為 $src_path 下層目錄 
* 若有錯誤回傳 FALSE,否則回傳 TRUE 

* [版權] 
* 風雨明清(MSNM)), GSNake ,保留一切權力。 
* 隨意使用,但請勿必保留下面的文本,謝謝!
*
* ============Z==================
* Class.IO.v1 .build040325
* for.PHP.v4.20
* 由SNakeVil
* (snakevil@51js, Snakevil@BU)
* -------- ------
* QQ:118824
* MSN:snakevil_@hotmail.com
* HP:http://www . snakeville.com/ 
* ===========Z==================
*
* /

類IO {
var $error_id; 
var $結果; 
var $error_lated; 
var $last_exist_dir; 
$this->result = array(); 
$this->error_id = 0x0000; 
$this->error_lated = ""; 
$this->last_exist_dir = "";回傳$ 這個; 
}

function error_occur($error_id=0xffff,$error_lated="") { // ----0xffff---- 特定關鍵字,特定欄位值
if (is_int( $ error_id)) $this->error_id = $error_id; // 錯誤相關
$this->錯誤相關= $錯誤相關; 
回傳錯誤; //預設值FALSE 預設值
}

function list_dir($dir_path=".") {
if (!is_dir($dir_path)) return $this-> , $dir_path); // ----0x0001-- -- 移除鍵盤
if (!$dir_handle=@opendir($dir_path)) return $this->error_occur(0x0002, $dir_path); // ----0x0002---- 預設值
$result = array(
"count" => array("files" => 0, "dirs" => 0, "size " =>0),
"list"=>array()
); 
while (false!==($file_handle=readdir($dir_handle))) { // 預設!== 預設設定0 return FALSE default
if ($file_handle==" ." || $file_handle= ="..") 繼續; // 重設預設值
$temp = str_replace("", "/", realpath($dir_path)); 
$temp = substr($temp, -1)=="/" ? $temp : $temp."/"; 
$temp = array($temp, $file_handle); 
$file_handle = $temp[0].$temp[1 ]; // 設定預設值
$temp = array(
"name" => $temp[1],
"locate" => $temp[0],
"type" = >@filetype($file_handle),
"last_access" => $file_handle),
"last_change" =>filectime($file_handle)
); 
switch($temp["type"] ) {
case "file":
$temp["type"] = 1; 
$結果["計數"]["檔案"] ; 
$result["count"][ "size"] = $temp["size"]; 
休息; 
case "dir":
$temp["type"] = 0; 
$結果["計數"][ "目錄"]; 
休息; 
預設值://! ! !如果你想要Win32,你也可以建立一個不同類型的鍵盤
$temp["type"] = -1; 
}
$result["list"][] = $temp; 
}
closedir($dir_handle); 
unset($dir_out, $file_out, $temp); 
clearstatcache(); // 回傳關鍵字
$turn $this->resultre = $ result; 
}

function seek_file($pattern=".*",$dir_path=".",$seek_type=1,$sub_dir=0,$interal=false,$limit=100) { 
/**規範一切可能的參數值 */ 
$pattern = "/".$pattern."/"; 
$seek_type = intval($seek_type); 
$seek_type = intval($seek_type); 
$seek_type = ($seek_type$sub_dir = abs(intval($sub_dir)); 
$interal = (bool)$interal; 
$interal = (bool)$interal; 
$inter p limit)); 
if ($limit==0) $limit = 100; 
$sub_dir_list = array(array($dir_path)); // 將查詢目錄視為子目錄層級的第一層來對待
$result = array(); 
/* i 目前處理的子目錄層次,0 為指定目錄層,即只處理一目錄 */ 
for ($i=0;$iif (!isset($sub_dir_list[$i])) return $this->result = $result; // 如果某一層子目錄沒有設定,請說明實際目錄系統中無目錄,返回 
/* k 每一子目錄層級中子目錄統計,j 當前處理序號 */ 
for ($j=0,$k=count($sub_dir_list[$i]);$ j$l = $this->list_dir($sub_dir_list[$i][$j]); 
if (!$ l) return $this->result = $result; // 出現錯誤,則立即停止返回現有結果 
$l = $l["list"]; 
/* n 每子目錄中文件、目錄、其他項目統計,m 為目前處理序號 */ 
for ($m=0,$n=count($l);$mif (count( $result)>=$limit) return $this->result = $result; // 如果要求數目已達到,則回傳 
if ($l[$m]["type"]==0) $sub_dir_list[ $i 1][] = $l[$m]["locate"].$l[$m]["name"]; // 蒐集下一層子目錄資訊 
$o = $l[$ m]["type"]; 
if ($o!=$seek_type&&($seek_type==1||$seek_type==0)) continue; // 忽略不符合要求的項目 
elseif ($ o==-1&&$seek_type==-1) continue; 
if (!preg_match($pattern, $l[$m]["name"])) continue; // 忽略不符合正規表示式的項目
$result[] = $interal ? $l[$m] : array("name" => $l[$m]["name"], "locate" => $l[$m][" locate"], "type" => $l[$m]["type"]); 



unset($i, $j,$k, $ , $m, $n, $o, $sub_dir_list); 
return $this->result = $result; 


function 


function 


function 
} if (!file_exists($path)) return $this->error_occur(0x0003, $path); // ----0x0003---- 指定物件不存在 
if (is_dir($path)))))) 🎜>$path = str_replace("", "/", realpath($path)); 
$path = substr($path, -1)=="/" ? $path :$path."/ -1)=="/" ? $path :$path."/ ; 
$sub_list = array(array($path)); 
for ($i=0;$iif (!isset($sub_list[$i])) break; // 探索最盡頭,取得該目錄下所有子目錄列表,並在刪除後刪除該目錄下刪除目錄 
for ($j=0,$k=count($sub_list[$i]);$j$l = $this->list_dir($sub_list[$i][ $j]); 
if (!$l) return $this->error_occur("", $sub_list[$i][$j]); 
$l = $l["list"];
for ($m=0,$n=count($l);$m$o = $l[$m]["locate"].$l[ $m]["name"]; 
if ($l[$m]["type"]==0) $sub_list[$i 1][] = $o; 
elseif (!@unlink ($o)) return $this->error_occur(0x0004, $o); // 刪除目錄下的每一個檔案 

}  }  forfor($i=count($ sub_list)-1;$i>=0;$i--) // 逆回刪除目錄  for ($j=0,$k=count($sub_list[$i]);$jif (!@rmdir($sub_list[$i][$j])) return $this->error_occur(0x0005, $sub_list[$i] [$j]); // ----0x0005---- 目錄無權刪除  unset($i, $j, $k, $l, $m, $n, $o, $sub_list) ;  return true;  }elseif (@unlink($path)) return true; 
else return $this->error_occur(0x0004, $path); // ----0x0004---- 檔案>
function generate_realpath($path="") { 
if ($path==""||!is_string($path)) return $this->error_occur(0x0007,$5); ---0x0007---- 路徑參數錯誤 
$path = preg_replace("/(?|]/", "", str_replace("", "/ ", $path)); // 規範路徑中多重可能性的符號 
if (substr($path,1,1)==":") return $path; // !!!! Win32 平台的絕對路徑 
elseif (substr($path,0,1)=="/") return substr(realpath("."), 0, 2).$path; // !!!! Win32 平台下的絕對路徑轉換 
else { 
if (substr($path,-1)=="/") $path = substr($path,0,-1); // 清除結尾可能的 / 符號 
$path = preg_replace("//{2,}/", "/", $path); // 將 /// 諸如類似的相連符號簡化為一個 
$path =expexplode("/ , $path); // 分割路徑 
$cur_path = explode("/", str_replace("", "/", realpath("."))); 
for ($i=0,$ j=count($path);$iif ($path[$i]=="..") array_pop($cur_path); 
elseif ($path[ $i]=="."||$path[$i]==str_repeat(".", strlen($path[$i]))) continue; // 忽略無用的相對路徑位址 . 和 ... . 等 
else array_push($cur_path, $path[$i]); 

$path = implode("/", $cur_path); >return $path; 



function make_dir($path="") { 
if (!$path ; 
$path = explode("/", $path); 
$i = array($path[0]); 
for ($i=0,$j=count($path) ,$k=array(),$l="";$iarray_push($k, $path[$i]); 
$l = implode("/ ", $k); 
if (!file_exists($l)) { 
if ($this->last_exist_dir=="") $this->last_exist_dir = $l; mkdir($l)) return $this->error_occur(0x0008, $l); // ----0x0008---- 無法建立目錄 


return
function verify_file($src="",$dst="",$interal=true) { 
if (!file_exists($src)||!is_file($src)) return $ this->error_occur(0x000A, $src); // ----0x000A---- 指定物件非檔案 
if (!file_exists($dst)||!is_file($dst)) return $this-return $this- >error_occur(0x000A, $dst); 
$i = filesize($src); 
if ($i!=filesize($dst)) { 
unset($i! false; 

if ($i>1024*1024*1024&&!$interal) { // 對於大於 1MB    🎜>return true; 

unset($i); 
if (md5_file($src)!=md5_file($dst)) return false; 


函數copy($src_path="",$dst_path="") { 
if (!file_exists($src_path)) return $this->error_occur(0x0003, $src_path); 
if (!$dst_path=$this->generate_realpath($dst_path)) 返回false; 
if (is_dir($src_path)) { 
$this->last_exist_dir = "";目錄 
if (!$this->make_dir($dst_path)) return false; // 建立目錄失敗 
$src_path = str_replace("", "/", real8($src_path); $src_path = substr($src_path, -1)=="/" ? $src_path : $src_path."/"; 
$sub_list = array(array($ 0;$iif (!isset($sub_list[$i])) break; 
for ($j=0,$k=count($sub_list [$i]);$j$l = $this->list_dir($sub_list[$我][$j]); 
if (!$l) return $this->error_occurr(0x0003, $sub_list[$i][$j]); 
$l = $l["列表"]; 
for ($m=0,$n=count($ l);$m$o = $l[$m]["locate"].$l[ $m]["姓名"]; 
if($o ==$this->last_exist_dir)繼續; // 如果為上級目錄下游目錄複製,防止死循環
$p = str_replace(substr($src_path, 0, -1), $dst_path, $o); 
if ($l[$m]["type"]==0) { 
$sub_list[$i 1][] = $o; 
if (!$this->make_dir($p )) 回傳false; // 每個子目錄包裝建立
} else { // 每個檔案複製
if ($this->verify_file($o, $p)) continue; / / 如果目標與來源兩個,不再複製
if (!copy($o,$p)||!$this->verify_file($o,$p)) return $this->error_occurr (0x0009, $o); // ----0x0009---- 檔案移動失敗 




unset($i, $j,$$k, , $m, $n、$o、$p、$sub_list); 
回傳true; 
} else { 
if (!is_read($src_path)) return$this->error $src_path); // ----0x0006---- 來源檔案無權讀取 
if ($this->verify_file($src_path,$dst_path)) return true; 
$i = strrpos( $dst_path,"/"); 
$dst_path = array(substr($dst_path, 0, $i), substr($dst_path, $i 1)); 
未設定($i); >if (!$this->make_dir($dst_path[0])) 回傳false; 
$dst_path = implode("/", $dst_path); 
if (!copy($srcpath_),$st_path) ||!$this->verify_file($src_path,$dst_path)) return $this->error_occur(0x0009, $src_path); 
傳回true; 
}
move($src_path="",$dst_path="") { 
if (!file_exists($src_path)) return $this->error_occurr( 0x0003, $src_path); 
if ; this->generate_realpath($dst_path)) 回傳false; 
if (is_dir($src_path)) { 
$this->last_exist_dir = ""; )) 回傳false; 
$src_path = str_replace("", "/", realpath($src_path)); 
$src_path = p($src_path $src_path."/"; 
$sub_list = array(array($src_path)); 
for ($i=0;$iif ( !isset($sub_list[$i])) break; 
for ($j=0,$k=count($sub_list[$i]);$j$ l = $this->list_dir($sub_list[$我][$j]); 
if (!$l) return $this->error_occurr(0x0003, $sub_list[$i][$j]);
$l = $l["列表"]; 
for ($m=0,$n=count($l);$m$o = $ l[$m]["locate"].$l[ $m]["姓名"]; 
if($o==$this->last_exist_dir)繼續; 
$p = str_replace(substr( $src_path, 0, -1), $dst_path, $o); 
if ($l[$m]["type"]==0) { 
$sub_list[$i 1][] = $o; 
if (!$this->make_dir($p)) 回傳false; 
}else { 
if ($this->verify_file($o, $p)) 繼續; 
if (!copy($o,$p)||!$this->verify_file($o,$p )) return $this->error_occur(0x0009, $o); 
if (!@unlink($o)) return $this->error_occ}(0x0004, $o); $this->error_occ}(0x00004, 🎜>} 

for($i=count($sub_list)-1;$i>=0;$i--) 
for ($j =0,$k=count($ sub_list[$i]);$jif (strpos($this->last_exist_dir,$sub_list[$i][$j]) !==false) 續; // 對行動目標目錄的上層目錄,不予考慮刪除 
elseif (!@rmdir($sub_list[$i][$j])) return $this->error_occur(0x0005, $sub_list[$i] ][$ j]); 
unset($i, $j, $k, $l, $m, $n, $o, $p, $sub_list); 
回傳true; 
} else { 
if (!is_read($src_path)) return $this->error_occur(0x0006, $src_path); 
if ($this->verify_file($src_path,$dst_path🎜>if ($this->verify_file($src_path,$dst_path)) 返回; = strrpos($dst_path,"/"); 
$dst_path = array(substr($dst_path, 0, $i), substr($dst_path, $i 1)); 
未設定($i) ; 
if (!$this->make_dir($dst_path[0])) 回傳false; 
$dst_path = implode("/", .$dst_path); $dst_path)||!$this->verify_file($src_path,$dst_path)) return $this->error_occur(0x0009, $src_path); 
if (@unlink($src_path)) 回傳true;否則回傳$this->error_occur(0x0004, $src_path); 



?>





http://www.bkjia.com/PHPjc/317078.html
www.bkjia.com

true

TechArticle複製程式碼如下: ?php error_reporting(2047); /* *ClassIO(SNakeVil 完成03.25.04)(v .0.0.0) * *[說明] *本類用於檔案系統的處理。 * *[功能] *****list_dir(...
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn