在项目开发中发现对php的文档缺少管理,别人写了一个,功能不多
<?php
/**
* 类名: doc
* 描述: 文档生成类
* 其他: 可以对目录进行过滤,设置好源目录后,请用绝对路径指定生成目录,模式可调,模式
* 1为常规类型,即以 斜线**开头,以*斜线 结束
* 2为扩展类型,凡是 斜线*开头以*斜线 结束的部分都将成为文档的一部分
*/
class doc
{
var $docdirname;
var $docdir;
/**
* 函数名称: doc()
* 函数功能: 构造
* 输入参数: none
* 函数返回值: 返回值说明
* 其它说明: 2004-10-13
*/
function doc()
{
$this->docdirname = "doc/";
}
/**
* 函数名称: createdoc($root,$newdir,$mode="1",$filter=null)
* 函数功能: 创建文档
* 输入参数: $root ————– 源目录
$newdir ———– 目标目录
$mode ————- 模式,1为普通,2为扩展
$filter ———— 过滤目录
* 函数返回值: 返回值说明
* 其它说明: 2004-10-13
*/
function createdoc($root,$newdir,$mode="1",$filter=null)
{
$getarr = $this->loopdir($root,$filter);
$i = 0;
$this->createframe($newdir);
foreach($getarr as $key=>$val)
{
if($this->getphpfiles($val))
{
$content = $this->getcontent($val);
$content = $this->getdoc($content,$mode);
$filepath = $this->setfilepath($val,$root,$newdir);
$filedir = $this->getfiledir($filepath);
$this->mkdirs($filedir);
$this->setdoc($filepath,$content);
$data[$i][url] = "$filepath";
$data[$i][name] = "$val";
$i++;
}
}
if(!empty($data))
{
$this->createmenu($newdir,$data);
$this->redirect($this->docdir);
}
}
/**
* 函数名称: redirect($path)
* 函数功能: 转向
* 输入参数: $path —————- 转向路径
* 函数返回值: 返回值说明
* 其它说明: 2004-10-13
*/
function redirect($path)
{
echo "<a href=".$path." target=_blank>生成文档成功,点击此处查看</a>";
}
/**
* 函数名称: loopdir($root,$filter=null)
* 函数功能: 遍历目录
* 输入参数: $root ——————- 源目录
$filter —————– 过滤
* 函数返回值: array
* 其它说明: 2004-10-13
*/
function loopdir($root,$filter=null)
{
static $getarr=array();
$d = dir($root);
while (false !== ($entry = $d->read()))
{
if ($entry == "." || $entry == "..")
{
continue;
}
if($this->filter($entry,$filter))
{
if(is_dir($root.$entry))
{
$this->loopdir($d->path.$entry."/");
}
else
{
$getarr[] = $d->path.$entry;
}
}
}
$d->close();
return $getarr;
}
/**
* 函数名称: getphpfiles($path)
* 函数功能: 提取php文档
* 输入参数: $path —————- 文档路径
* 函数返回值: bool
* 其它说明: 2004-10-13
*/
function getphpfiles($path)
{
$type = preg_replace(/.*\.(.*[^\.].*)/i,\\1,$path);
$type = strtolower($type);
if($type=="php")
{
return true;
}
else
{
return false;
}
}
/**
* 函数名称: getcontent($path)
* 函数功能: 读取文件内容
* 输入参数: $path ——————- 文件路径
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function getcontent($path)
{
$fp = file($path);
$content = implode(,$fp);
return $content;
}
/**
* 函数名称: getdoc($content,$mode="1")
* 函数功能: 取出php文件中的注释
* 输入参数: $content ———— 文档内容
$mode ————— 模式,1为普通,2为扩展
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function getdoc($content,$mode="1")
{
switch($mode)
{
case 1:
$pattern = /\/(\*)[\r\n].*\*\//isu;
break;
case 2:
$pattern = /\/\*.*\*\//isu;
break;
}
preg_match_all($pattern,$content,$carr);
$getarr = array();
foreach($carr[0] as $key=>$val)
{
$getarr[] = trim($val);
}
$str = implode("<br><br>",$getarr);
$str = preg_replace(/[\r]/i,<br>,$str);
$style = $this->getstyle();
$str = $this->gettable($str);
$str = $style.$str;
return $str;
}
/**
* 函数名称: etfilepath($filepath,$oldroot,$newroot)
* 函数功能: 设置生成文件的路径
* 输入参数: $filepath ————– 源文件路径
$oldroot ————– 源目录路径
$newroot ————– 目标目录路径
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function setfilepath($filepath,$oldroot,$newroot)
{
$oldroot = str_replace(/,"\\/",$oldroot);
$pattern = "/".$oldroot."(.*)/iu";
$filepath = preg_replace($pattern,\\1,$filepath);
$newpath = $newroot.$this->docdirname.$filepath;//echo "$newpath<br>";
$newpath = preg_replace(/(.*\.)(.*[^\.].*)/i,\\1htm,$newpath);
return $newpath;
}
/**
* 函数名称: getfiledir($path)
* 函数功能: 取得文档目录
* 输入参数: $path ————- 文档路径
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function getfiledir($path)
{
$getpath = preg_replace(/(.*)(\/.*[^\.].*)/i,\\1,$path);
return $getpath;
}
/**
* 函数名称: setdoc
* 函数功能: 将注释写入指定目录并生成页面
* 输入参数: $filepath ————— 目录路径
$content —————- 写入的内容
* 函数返回值: 返回值说明
* 其它说明: 说明
*/
function setdoc($filepath,$content)
{
$fp = fopen($filepath,"w+");
flock($fp,lock_ex);
fwrite($fp,$content);
flock($fp, lock_un);
}
/**
* 函数名称: mkdirs($path)
* 函数功能: 创建目录
* 输入参数: $path ——————- 路径
* 函数返回值: none
* 其它说明: 2004-10-13
*/
function mkdirs($path)
{
$adir = explode(/,$path);
$dirlist = ;
$rootdir = $adir[0];
array_shift ($adir);
foreach($adir as $key=>$val)
{
if($val!=.&&$val!=..)
{
$dirlist .= "/".$val;
$dirpath = $rootdir.$dirlist;
if(!file_exists($dirpath)&&!is_file($dirpath))
{
mkdir($dirpath);
chmod($dirpath,0777);
}
}
}
}
/**
* 函数名称: filter($item,$arr=null)
* 函数功能: 过滤
* 输入参数: $item ————– 内容
$arr ————— 过滤项
* 函数返回值: bool
* 其它说明: 2004-10-13
*/
function filter($item,$arr=null)
{
$item = strtolower($item);
$filter = explode(,,$arr);
if($arr==null||!in_array($item,$filter))
{
return true;
}
else
{
return false;
}
}
/**
* 函数名称: createframe($root)
* 函数功能: 生成框架页
* 输入参数: $root ————— 首页的存放目录
* 函数返回值: str
* 其它说明: 2004-10-13
*/
function createframe($root)
{
$str =
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<frameset cols="150,*" frameborder="yes" border="10" framespacing="5" bordercolor="#003366">
<frame src="menu.htm" name="leftframe" framespacing="5" frameborder="auto" border="5" bordercolor="#f5f5f5" topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" >
<frame src="#" name="mainframe">
</frameset>
<noframes><body>
</body></noframes>
</html>;
$this->docdir = $root."index.htm";
$this->setdoc($this->docdir,$str);
}
/**
* 函数名称: createmenu($root,$data)
* 函数功能: 生成菜单
* 输入参数: $root ——————- 页面存入目录
$data ——————- 内容
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function createmenu($root,$data)
{
$path = $root."menu.htm";
$str = $this->getstyle();
$str.= "<table>";
foreach($data as $key=>$val)
{
$str.= "<tr><td><a href=".$val[url]." target=mainframe>".$val[name]."</a></td></tr>";
}
$str.= "</table>";
$this->setdoc($path,$str);
}
/**
* 函数名称: getstyle()
* 函数功能: 样式
* 输入参数: none
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function getstyle()
{
$str =
<style>
table {
font-family: "courier new","宋体";
border-collapse: collapse;
word-break:break-all;
}
td {
font-family: "courier new","宋体";
font-size: 12px;
line-height: 22px;
}
</style>;
return $str;
}
/**
* 函数名称: gettable($content)
* 函数功能: 把内容放入table中
* 输入参数: $content ———— 内容
* 函数返回值: string
* 其它说明: 2004-10-13
*/
function gettable($content)
{
$str = "<table width=\"100%\" border=\"1\" bordercolor=\"#dbdbdb\" cellpadding=\"5\" cellspacing=\"0\">
<tr>
<td bgcolor=\"#f5f5f5\">".$content."</td>
</tr>
</table>";
return $str;
}
}
// 使用
$d = new doc;
$filter = "adodb,smarty,cvs,templates,templates_c";
$d->createdoc("e:/www/kpub20/class/","e:/www/test/aaa/",1,$filter);
?>
