> 백엔드 개발 > PHP 튜토리얼 > Jiageng 대학 파일 시스템 교육 파일 시스템 기본 운영 수업

Jiageng 대학 파일 시스템 교육 파일 시스템 기본 운영 수업

WBOY
풀어 주다: 2016-07-29 08:35:12
원래의
3899명이 탐색했습니다.

코드 복사 코드는 다음과 같습니다.


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;$iif (!isset($sub_list[$i])) break; 파일 삭제를 용이하게 하기 위해 디렉터리의 모든 하위 디렉터리 목록을 가져옵니다.
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;$iif (!isset($sub_list[$i])) break; 
($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;$iif (!isset($sub_list[$i])) break; 
($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教정말 많은 것들이 있습니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿