当前位置:编程学习 > php >>

文件系统基本操作类

答案:PHP代码:--------------------------------------------------------------------------------

<?php
error_reporting(2047);

/*
* Class 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, $interal, $limit);
* 根据正则表达式条件,在相应目录及给定层次的子目录中搜索匹配的文件、目录。
* $pattern 符合 PERL 兼容标准的正则表达式,无须添加 //,系统自行添加
* $seek_type 有 -1 0 1 三种可能值,0 仅文件夹,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 以省去 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
*
* [版权]
* 风雨明清(SNakeVil@51js, SNakeVil@BU)独立设计完成,保留一切权力。
* 随意使用,但请勿必保留下面的文本,谢谢!
*
* ===========Z=================
* Class.IO.v1.0.0.0.build040325
* for.PHP.v4.20+
* by SNakeVil
* (snakevil@51js, snakevil@BU)
* --------+------
* QQ:118824
* MSN:snakevil_@hotmail.com
* HP:<a href=> * ===========Z=================
*
*/

class IO {
var $error_id;
var $result;
var $error_related;
var $last_exist_dir;

function IO() {
$this->result = array();
$this->error_id = 0x0000;
$this->error_related = "";
$this->last_exist_dir = "";
return $this;
}

function error_occur($error_id=0xffff,$error_related="") { // ----0xffff---- 发生错误,但错误原因未知
if (is_int($error_id)) $this->error_id = $error_id; // 获取错误号
$this->error_related = $error_related;
return 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=="..") continue; // 忽略系统特定的两个文件夹
$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" => fileatime($file_handle),
"last_modify" => filemtime($file_handle),
"last_change" => filectime($file_handle)
);
switch ($temp["type"]) {
case "file":
$temp["type"] = 1;
$result["count"]["files"]++;
$result["count"]["size"] += $temp["size"];
break;
case "dir":
$temp["type"] = 0;
$result["count"]["dirs"]++;
break;
default: // !!!! 鉴于 Win32 平台,对既非文件也非目录的内容忽略
$temp["type"] = -1;
}
$result["list"][] = $temp;
}
closedir($dir_handle);
unset($dir_handle, $file_handle, $temp);
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);
$seek_type = $seek_type>0 ? 1 : ($seek_type<0 ? -1 : 0);
$sub_dir = abs(intval($sub_dir));
$interal = (bool)$interal;
$limit = abs(intval($limit));
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; // 如果某一层子目录没有设

上一个:PHP生成便于打印的网页
下一个:如何使用PHP操作文件(文件读取篇)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,