複製程式碼 程式碼如下:
error_reporting(2047);
/*
* Class IO (SNakeVil 完成* 03.25.04) Class IO (SNakeVil 完成* [說明]
* 本類用於檔案系統的處理。
*
* [功能]
* **** 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
*
* [版權]
* 風雨明清(MSNoc ,保留一切權力。
* 隨意使用,但請勿必保留下面的文本,謝謝!
*
* ===========Z==================
* Class.IO.v1.0.0. 0 .build040325
* for.PHP.v4.20+
* 作者:SNakeVil
* (snakevil@51js, snakevil@BU)
* (snakevil@51js, snakevil@BU)
* snake-- -- --
* QQ:118824
* MSN:snakevil_@hotmail.com
* HP: http://www.snakevil.com/
* ===========Z==================
*
*/
類別IO {
var $error_id;
var $結果;
var $error_lated;
var $last_exist_dir; 🎜>$this->結果= array();
$this->error_id = 0x0000;
$this->error_lated = "";
$this->last_exist_dir = "";回傳$this;
}
function error_occur($error_id=0xffff,$error_lated="") { // ----0xffff---- 發生錯誤,但錯誤原因未知
(is_int ($error_id) ) $this->error_id = $error_id; // 取得錯誤號碼
$this->error_lated = $error_lated;
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
返回false; // 錯誤發生時返回FALSE 方便進一步處理
}
function list_dir($dir_path=".") {
if (!is_dir($dir_path)) return $this->errx00(0x0001, $dir_path_path); - 指定目錄不存在
if (!$dir_handle=@opendir($dir_path)) return $this->error_occur(0x0002, $dir_path); // ----0x0002---- 取
$result = array(
"count" => array("files" => 0, "dirs" =>; 0,「大小」=> 0),
「清單」=>陣列()
);
while (false!==($file_handle=readdir($dir_handle))) { // 使用 !== 阻止處理名稱為 0 ($file_handle=="." ||$file_handle=="..") 繼續; // 忽略系統特定的兩個資料夾
$temp = str_replace("", "/", realpath($dir_path ));
$temp = substr($temp, -1)=="/" ? $temp : $temp."/";
$temp = array($temp, $file_handle);
$temp = array($temp, $file_handle);
$file_handle = $temp[0].$temp[1]; // 取得絕對位址
$temp = array(
"name" => $temp[1],
"locate" = > $temp[0],
"type" = > @filetype($file_handle),
「大小」 => 檔案大小($file_handle),
「last_access」 檔案大小($file_handle),
「last_access」 檔案大小($file_handle),
「last_access」 檔案大小($file_handle),
「last_access」 .> ,
「last_modify」 => filemtime( $file_handle),
"last_change" => filectime($file_handle)
);
switch ($"type" case "file":
$temp["type"] = 1;
$結果["計數"]["檔案"]++;
$result["count"]["size" ] += $temp["size"];
休息;
case「dir」:
$temp[「type」]=0;
$結果["count"]["dirs "]++;
休息;
預設值: // !!!! Win32 平台,忽略既非檔案也非目錄的內容
$temp["type"] = -1;
} $result["list"][] = $temp; } closedir($dir_handle); unset($dir_handle, $file. clearstatcache(); // 清除檔案系統快取return $this->result = $result; }
function seek_file($pattern=".*",$dir_path=".",$seek_type=1,$sub_dir=0,$interal=false,$limit=100) {
/* 規範一切可能的參數值 */
$pattern = "/".$pattern."/";
$seek_type = intval($seek_type);
$ $sub_dir = abs(intval($sub_dir));
$interal = (bool)$interal;
$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,1$l, m, $n, $o, $sub_dir_list);
return $this->result = $result;
}
function delete($path="") { $path)) return $this->error_occur(0x0003, $path); // ----0x0003---- 指定物件不存在
if (is_dir($path)) {path
🎜> str_replace("", "/", realpath($path));
$path = substr($path, -1)=="/" ? $path: $path."/";
$ sub_list = array(array($path));
for ($i=0;$i
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"];
forforfor( $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); // 刪除目錄下的每個檔案
}
}
}
for($i=count($sub_list)
}
for($i=count($sub_list)- ;$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, $path); // ---- 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 = explode("/", $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);
unset($curcur); path;
}
}
function make_dir($path="") {
if (!$path=$this->generate_realpath = 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; return $this->error_occur(0x0008, $l); // ----0x0008---- 無法建立目錄
}
}
return true; if (!file_exists($src)||!is_file($src)) return $this->error_occur(0x000A, $src ); // ----0x000A---- 指定物件非檔案
if (!file_exists($dst)||!is_file($dst)) return $this->error_occur(0x000A, $dst);
$i = filesize($src);
if ($i!=filesize($dst)) {
unset($i);
return fal;se if ($i>1024*1024*1024&&!$interal) { // 大於 1MB 的文件,如果不要求精確檢查,跳過
unset($i);
return true;
unset($i);
if (md5_file($src)!=md5_file($dst)) return false;
return true;
}
函數 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 = exist"; //記錄編碼實際存在的目錄
if (!$this->make_dir($dst_path)) return false; // 建立目錄失敗
$src_path = str_replace("", "/", realpath($src_path));
$src_path = substr($src_path, -1)=="/" ? $src_path : $src_path."/";
$sub_list = array(array($src_path));
for ($i=0;$i
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]["定位"].$l[ $m]["姓名"];
if($o==$this->last_exist_dir)繼續; //如果為上層目錄下游目錄複製,防止死循環
$p = str_replace(substr($src_path, 0, -1), $ dst_路徑,$o);
if ($l[$m]["type"]==0) {
$sub_list[$i+1][] = $o;
if (!$this->make_dir($p)) Return false; //對每個子目錄都包裝建立
} else { // 複製每個檔案
if ($this - >verify_file($o, $p)) 繼續; // 如果目標與來源兩個,不再複製
if (!copy($o,$p)||!$this->verify_file($o,$p)) return $this->error_occurr (0x0009 ,$o); // ----0x0009---- 檔案移動失敗
}
}
}
}
unset($i, $j, $ l、$m、$n、$o、$p、$sub_list);
回傳 true;
} else {
if (!is_read($src_path)) return $this->error_occur(0x0006, $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($src_path,$dst_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))this error_occurr(0x0003, $來源路徑);
if (!$dst_path=$this->generate_realpath($dst_path)) 返回false;
if (is_dir($src_path))-{ last_exist_dir = "";
if (!$this->make_dir($dst_path)) 回傳false;
$src_path = str_replace("", "/", real($src_path = str_replace("", "/", real($src_)); src_path = substr($src_path, -1)=="/"? $src_path: $src_path."/";
$sub_list = array(array($src_path));
for ($i=0 ;$i
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]["找到"].$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);
if ,$dst_path)||!$this->verify_file($src_path,$dst_path)) return $this->error_occur(0x0009, $src_path);
if (@unlink($src_path)) 返回; >否則回傳$this->error_occur(0x0004, $src_path);
}
}
}
?>
以上就介紹了嘉庚學院教學文件系統文件系統的基本操作類,包括嘉庚學院教學文件系統方面的內容,希望對PHP教程有興趣的朋友有所幫助。