코드 복사 코드는 다음과 같습니다.
error_reporting(2047)
/*
* 클래스 IO(SNakeVil 완료 03.25.04) (v1.0.0.0)
*
* [설명]
* 파일 시스템을 처리하는 클래스입니다.
*
* [함수]
* **** list_dir($dir_path)
* 지정된 디렉터리의 내용을 읽고 내용 배열을 반환합니다.
* $dir_path 문자열, 디렉터리 경로 지정
* 오류가 있으면 FALSE를 반환하고, 그렇지 않으면 반환
* array(
* "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, $internal, $limit)
* 정규식을 기반으로 해당 디렉터리 및 해당 수준의 하위 디렉터리에서 일치하는 파일을 검색합니다. 조건, 목차.
* $pattern은 PERL 호환성 표준을 준수하는 정규식이므로 // 추가할 필요가 없으며 시스템이 자동으로 추가합니다.
* $seek_type에는 세 가지 가능한 값이 있습니다. -1 0 1, 0 폴더만 , 1 파일만, -1 둘 다
* $sub_dir 숫자 값, 검색된 하위 디렉터리의 깊이를 포함하며, 지정된 디렉터리는 계산되지 않으며 true인 경우 5
* $internal Boolean 값을 초과하지 않는 것이 좋습니다. , 검색 결과의 세부 정보를 반환하고, 그렇지 않으면 파일 이름, 유형 및 디렉터리만 반환
* $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, $internal)
* MD5 알고리즘을 사용하여 두 파일이 동일한지 비교합니다.
* $src 문자열, 소스 파일 경로
* $dst 문자열, 대상 파일 경로
* $internal Boolean 값, 1M보다 큰 파일의 경우 FALSE로 설정하여 MD5 확인 단계를 저장하고 서버 부담 감소
* 오류가 있으면 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를 반환합니다.
*
* [저작권]
* Fengyu Mingqing이 독립적으로 설계함(SNakeVil@51js, SNakeVil @BU) , 모든 권리 보유.
* 자유롭게 사용하시되, 아래 내용은 지키지 말아주세요. 감사합니다!
*
* =============Z==================
* Class.IO.v1 .build040325
* for.PHP.v4.20
* by SNakeVil
* (snakevil@51js, snakevil@BU)
* -------- ------
* QQ:118824
* MSN:snakevil_@hotmail.com
* HP:http: //www .snakeville.com/
* ============Z=================
*
*/
클래스 IO {
var $error_id;
var $result;
var $error_관련;
var $last_exist_dir;
함수 IO() {
$this->result = array();
$this->error_id = 0x0000;
$this->error_관련 = "";
$this->last_exist_dir = "";
$ this를 반환합니다.
}
function error_occur($error_id=0xffff,$error_관련="") { // ----0xffff---- 기본값을 반환합니다.
if (is_int($ error_id ) ) $this->error_id = $error_id; // 오류 관련
$this->error_관련 = $error_관련;
거짓을 반환합니다. // 기본 설정 FALSE 기본 설정
}
function list_dir($dir_path=".") {
if (!is_dir($dir_path)) return $this->erro r_occur(0x0001, $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 FALSE 기본값 반환
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"]["files"] ;
$result["count"]["size"] = $temp["size"];
휴식;
case "dir":
$temp["type"] = 0;
$result["count"]["dirs"];
휴식;
기본값: // !!!! Win32를 원한다면 다른 유형의 키보드를 만들 수도 있습니다.
$temp["type"] = -1;
}
$result["list"][] = $temp;
}
closedir($dir_handle);
unset($dir_out, $file_out, $temp);
clearstatcache(); // 키워드 반환
return $this->result = $result;
}
functioneek_file($pattern=".*",$dir_path=".",$seek_type=1,$sub_dir=0,$internal=false,$limit=100) {
/* 모든 가능성 표준화 매개변수 값 */
$pattern = "/".$pattern."/";
$seek_type = intval($seek_type);
$seek_type = $seek_type>0 ? 0 ? -1 : 0);
$sub_dir = abs(intval($sub_dir));
$internal = (bool)$internal;
if ($limit==0) $limit = 100;
$sub_dir_list = array(array($dir_path)) // 쿼리 디렉터리를 하위 디렉터리 계층의 첫 번째 수준으로 처리합니다.
$result = array();
/* i 현재 처리되는 하위 디렉터리 수준, 0은 지정된 디렉터리 수준입니다. 즉, 하나의 디렉터리만 처리됩니다. */
for ($i=0;$i<=$sub_dir ; $i ) {
if (!isset($sub_dir_list[$i])) return $this->result = $result; // 특정 레벨의 하위 디렉터리가 설정되지 않은 경우 실제 디렉토리 시스템에 디렉토리가 없으면 반환
/* 각 하위 디렉토리 수준의 k 하위 디렉토리 통계, j 현재 처리 시퀀스 번호 */
for ($j=0,$k=count($sub_dir_list[$i] );$j< $k;$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);$m<$n;$m ) {
if (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)) // 무시 요구 사항을 충족하지 않는 항목
elseif ($o==-1&&$seek_type==-1) 계속
if (!preg_match($pattern, $l[$m]["name"]); ) continue; // 항목과 일치하지 않는 정규식을 무시합니다
$result[] = $internal ? $l[$m] : array("name" => $l[$m]["name" ], "찾기" => $l[$ m]["위치"], "유형" => $l[$m]["유형"]); }
unset($i, $j, $k, $l, $m, $n, $o, $sub_dir_list)
return $this->result = $result; 🎜>function delete($path="") {
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 ."/"
$sub_list = array(array($path))
for ($i=0;$i
for ($j=0,$k=count($sub_list[$i]);$j<$k;$j) ) {
$l = $this->list_dir($sub_list [$i][$j])
if (!$l) return $this->error_occur("", $sub_list[ $i][$j]);
$l = $l ["목록"]
for ($m=0,$n=count($l);$m<$n;$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)-1;$i>=0;$i--) // 디렉토리 역삭제
for ( $j=0,$k=count($sub_list[$i] );$j<$k;$j ) // 지정된 디렉터리까지 각 하위 디렉터리를 삭제합니다.
if (!@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 =explore(" / ", $path); // 경로 분할
$cur_path =explore("/", str_replace("", "/", realpath(".")));
for ($i=0 , $j=count($path);$i<$j;$i ) {
if ($path[$i]=="..") array_pop($cur_path)
elseif ($ 경로 [$i]=="."||$path[$i]==str_repeat(".", strlen($path[$i]))) continue; // 쓸모없는 상대 경로 주소를 무시합니다. . 등
else array_push($cur_path, $path[$i]);
}
$path = implode("/", $cur_path)
unset($cur_path); 🎜>return $path;
}
}
function make_dir($path="") {
if (!$path=$this->generate_realpath($path)) return false ;
$path = 폭발("/", $path);
$i = array($path[0])
for ($i=0,$j=count($path) , $k=array(),$l="";$i<$j;$i ) {
array_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 true;
}
function verify_file($src="",$dst="",$internal=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 false;
}
if ($i>1024*1024*1024&&!$internal) { // 1MB보다 큰 파일의 경우 정확한 검사가 필요하지 않으면 건너뜁니다.
unset( $i) ;
true를 반환합니다.
}
unset($i);
if (md5_file($src)!=md5_file($dst)) return false;
}
함수 복사($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("", "/", realpath($src_path));
$src_path = substr($src_path, -1)=="/" ? $src_path : $src_path."/";
$sub_list = array(array($src_path));
for ($i=0;$i
($j=0,$k=count($sub_list[$i]);$j<$k;$j ) {
$l = $this->list_dir($sub_list[$ i][$j]);
(!$l)이 $this->error_occur(0x0003, $sub_list[$i][$j])를 반환하는 경우;
$l = $l["list"];
($m=0,$n=count($l);$m<$n;$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_occur (0x0009, $o); // ----0x0009---- 文件移动失败
}
}
}
}
unset($i, $j, $k, $l, $m, $n, $o, $p, $sub_list);
true를 반환합니다.
} else {
if (!is_readable($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를 반환합니다.
}
}
함수 이동($src_path="",$dst_path="") {
if (!file_exists($src_path)) return $this->error_occur(0x0003, $ src_경로);
if (!$dst_path=$this->generate_realpath($dst_path)) false를 반환합니다.
if (is_dir($src_path)) {
$this->last_exist_dir = "";
if (!$this->make_dir($dst_path)) 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
($j=0,$k=count($sub_list[$i]);$j<$k;$j ) {
$l = $this->list_dir($sub_list[$ i][$j]);
(!$l)이 $this->error_occur(0x0003, $sub_list[$i][$j])를 반환하는 경우;
$l = $l["list"];
($m=0,$n=count($l);$m<$n;$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_occur(0x0004, $o);
}
}
}
}
for($i=count($sub_list)-1;$i>=0;$i--)
for($j =0,$k=count($sub_list[$i]);$j<$k;$j )
if (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_readable($src_path)) return $this->error_occur(0x0006, $src_path);
if ($this->verify_file($src_path,$dst_path)) 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);
(@unlink($src_path))가 true를 반환하는 경우;
그렇지 않으면 $this->error_occur(0x0004, $src_path)를 반환합니다.
}
}
}
?>
以上就介绍了嘉庚science院教school文件系统 文件系统基本操work类,包括了嘉庚school院教school文件系统방면적内容,希望对PHP教정말 많은 것들이 있습니다.