コードをコピー コードは次のとおりです:
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" ),
* ......
* )
* )
* ********
* ********
* **** seen_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(
* 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 .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->エラー関連 = "";
$this->last_exist_dir = "";
$this を返します。
}
function error_occur($error_id=0xffff,$error_personality="") { // ----0xffff---- 特定のキーワード、特定のフィールド値
if (is_int( $ error_id)) $this->error_id = $error_id; // エラー関連
$this->エラー関連 = $エラー関連;
false を返します。 // デフォルト設定 FALSE デフォルト設定
}
function list_dir($dir_path=".") {
if (!is_dir($dir_path)) return $this-& gt; 、$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 デフォルト
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 "ファイル":
$temp["type"] = 1;
$result["カウント"]["ファイル"] ;
$result["count"]["size"] = $temp["size"];
休憩;
case "dir":
$temp["type"] = 0;
$result["count"]["dirs"];
休憩;
デフォルト: //!!!! Win32 が必要な場合は、別のタイプのキーボードを作成することもできます
$temp["type"] = -1;
}
$result["リスト"][] = $temp;
}
closedir($dir_handle);
unset($dir_out, $file_out, $temp);
clearstatcache(); // キーワードを返します
return $this->result = $result;
}
function seen_file($pattern=".*",$dir_path=".",$seek_type=1,$sub_dir=0,$interal=false,$limit=100) {
/*可能なすべてのパラメータ値を標準化する */
$pattern = "/".$pattern."/";
$seek_type = $seek_type>0 ? : ($seek_type$sub_dir = abs(intval($sub_dir));
$internal = (bool)$interal
$limit = abs( $limit));
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->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==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] ["名前"]、"場所" => $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));パス = substr($path, -1)=="/" ? $path : $path."/";
$sub_list = array(array($path)); ;$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"]
for ($m=0,$n=count($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);
return true; を削除する権限がありません。elseif (@unlink($path)) return true;
else return $this->error_occur(0x0004, $path); // ----0x0004---- ファイルには削除する権限がありません。 >}
functiongenerate_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(".").$path; !! ! Win32 プラットフォームでの絶対パス変換
else {
if (substr($path,-1)=="/") $path = substr($path,-1);最後 可能な / シンボル
$path = preg_replace("//{2,}/", "/", $path); // 類似した接続されたシンボルを 1 つに単純化します
$path =explode( "/", $path); // パスを分割
$cur_path =explode("/", str_replace("", "/", realpath("."))); 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=$this->generate_realpath( $path )) false を返します;
$path =explode("/", $path);
for ($i=0,$j =count) ($path),$k=array(),$l="";$iarray_push($k, $path[$i]); implode("/", $k);
if (!file_exists($l)) {
if ($this->last_exist_dir=="") $this->last_exist_dir = $l ; 🎜>if (!@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);
return true;
unset($i); if (md5_file($src)!=md5_file($dst)) false を返します。
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)) return 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
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]["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)) 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、$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])) 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)) return 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
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]["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)) 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);
}
}
}
?>