ホームページ > バックエンド開発 > PHPチュートリアル > 嘉庚学院ファイルシステム教育基本ファイルシステム操作クラス

嘉庚学院ファイルシステム教育基本ファイルシステム操作クラス

WBOY
リリース: 2016-07-29 08:35:12
オリジナル
3899 人が閲覧しました

コードをコピーします コードは次のとおりです:


error_reporting(2047);
/*
* Class IO (SNakeVil Completed 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 には 3 つの可能な値があります -1 0 1、0 はフォルダーのみ、1 はファイルのみ, -1 には両方が含まれます
* $sub_dir 数値、検索されるサブディレクトリの深さ、指定されたディレクトリはカウントされません、5 を超えないようにすることをお勧めします
* $internal ブール値、true の場合、検索結果の詳細情報それ以外の場合は、ファイル名、タイプ、ディレクトリのみが返されます
* $limit システム リソースの過剰な浪費を避けるための数値、検索結果の制限
* エラーがある場合は FALSE を返し、それ以外の場合は
* 配列を返します(
* 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 アルゴリズムを使用して、2 つのファイルが同じかどうかを比較します。
* $src 文字列、ソース ファイル パス
* $dst 文字列、ターゲット ファイル パス
* $internal ブール値、1M を超えるファイルの場合、MD5 検証手順を保存し、サーバーの負担を軽減するために 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 を返します
*
* [著作権]
* Fengyu Mingqing (SNakeVil@51js、SNakeVil@BU) が独自に設計し完成させたもの、すべての権利予約済み。
* ご自由にお使いください。ただし、以下のテキストは保存しないでください。よろしくお願いします。 
*
* ===========Z=================
* Class.IO.v1.0.0.0.build040325
* 用。 PHP.v4.20+
* by SNakeVil
* (snakevil@51js, snakevil@BU)
* --------+------
* QQ:118824
* MSN:snakevil_@hotmail .com
* HP:http://www.snakevil.com/ 
* ===========Z=================
*
*/
class IO {
var $error_id; 
var $result; 
var $error_関連; 
var $last_exist_dir; 
function IO() {
$this->result = array(); 
$this->error_id = 0x0000; 
$this->エラー関連 = ""; 
$this->last_exist_dir = ""; 
$this を返す; 
}
function error_occur($error_id=0xffff,$error_popular="") { // ----0xffff---- 発行错误,但错误原因不明
if (is_int($error_id)) $this-> error_id = $error_id; // 获取错误号
$this->error_popular = $error_popular; 
false を返します。 // 错误発行時返し FALSE 方便进一步处処理
}
function list_dir($dir_path=".") {
if (!is_dir($dir_path)) return $this->error_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 =="..") 続行します。 // 忽略系特定の 2 つの文件夹
$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) ,
"size" =>filesize($file_handle),
"last_access" => filemtime($file_handle),
"last_change" =>ファイルハンドル)
); 
switch ($temp["type"]) {
case "file":
$temp["type"] = 1; 
$result["カウント"]["ファイル"]++; 
$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_handle, $file_handle, $temp); 
clearstatcache(); // 清除文件系统缓存
return $this->result = $result; 
}
function look_file($pattern=".*",$dir_path=".",$seek_type=1,$sub_dir=0,$internal=false,$limit=100) {
/* 考えられるすべてのパラメータ値を標準化します* /
$pattern = "/".$pattern."/";
$seek_type = intval($seek_type)
$seek_type>0 1 : ($seek_type $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 は指定されたディレクトリですつまり、1 つのディレクトリのみを処理します */
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$l = $this->gt ;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; // 必要な数に達した場合は、 return
if ( $l[$m]["タイプ"]= =0) $sub_dir_list[$i+1][] = $l[$m]["検索"].$l[$m]["名前"]; // 次のレベルのサブディレクトリ情報を収集します
$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[] = $internal ? $l[$m] : array("name" => $l[$m]["name"], " locate" => $l[$m]["locate "], "type" => $l[$m]["type"]);
}
}
}
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$l = $this->list_dir($sub_list[$i][$j]);
if (! $l) return $this->error_occur("", $sub_list[$i][$j ]);
$l = $l["list"]; ($l);$m$o = $l[$ m]["場所を特定"].$l[$m]["名前"];
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]);$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);
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; 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); // /// 接続された同様のシンボルを 1 つに簡略化します
$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($cur_path);
return $path;
}
関数 make_dir($path="") {
if (!$path=$this->generate_realpath($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); file_exists($l)) {
if ($this->last_exist_dir=="") $this->last_exist_dir = $l;
if (!@mkdir($l)) return $this->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); = filesize($dst)) {
unset($i);
return false;
if ($i>1024*1024*1024&&!$interal) { // 1MB を超えるファイルの場合、正確なチェックが行われない場合必須、スキップ
unset($i);
return true;
if (md5_file($src)!=md5_file($dst)) return true; 
function 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("", "/", 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; 
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(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)) return 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, $サブリスト); 
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])) return 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 を返します。 
}
}
function move($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; 
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(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)) return 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]);$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_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])) return 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); 
if (@unlink($src_path)) true を返します。 
else return $this->error_occur(0x0004, $src_path); 
}
}
}
?>

以上は、嘉庚学院教育文書システムのファイル システムの基本的な操作タイプを紹介しており、嘉庚学院教育文書システムに関する内容が含まれており、PHP 教育に関心のある友人の助けになることを望みます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート