当前位置:首页> PHP教程> php基础
关键字
文章内容
小巧的php文档生成类
 
 
修改时间:[2011/12/02 10:41]    阅读次数:[798]    发表者:[起缘]
 
在项目开发中发现对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 = '//(*)[rn].**//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);

?>


phpfans.net收集整理