2 Star 31 Fork 20

myDcool/PHP-Markdown-Doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
compile.php 3.36 KB
一键复制 编辑 原始数据 按行查看 历史
<?php
error_reporting(E_ALL);
date_default_timezone_set("Asia/Shanghai");
define('ROOT', str_replace('\\', '/', __DIR__).'/');
define('TOOL', ROOT.'tool/');
include(TOOL.'Dir.php');
include(TOOL.'Menu.php');
$srcDir = ROOT.'src/'; //源目录 str_replace('\\', '/', $v);
$disDir = ROOT.'dist/'; //编译后文件存放目录
$ext = 'md';
$extension = '.md';
//==============按顺读取src目录中的文件结构
$objDir = Dir::ini($srcDir)
->extension($ext) //找出md结尾的文件
->replace($srcDir, ''); //去掉目录前缀
$fileList = $objDir->fileList;
//==============获取每个文件名的hash值
$objDir->replace($extension, '') //去掉文件后缀
->sortFiles() //文件排序
->createUniqueCode(); //给每个文件生成一个字符串hash
file_put_contents($disDir.'static/file_chain.js', 'var fileChainList='.json_encode($objDir->fileChainList)); //用于高亮显示
//生成菜单
$title = '电子书';
$menu = Menu::getMenu($objDir->uniqueList);
$menu = str_replace(PHP_EOL.PHP_EOL, PHP_EOL, $menu);
$indexTpl = file_get_contents($disDir.'index.tpl');
$indexHtml = str_replace(['{menu}', '{version}', '{title}'], [$menu, date('YmdHis'), $title], $indexTpl);
file_put_contents($disDir.'index.html', $indexHtml);
//==============获取上次编译后每个文件的md5值
$fileSignPath = ROOT.'file_sign.php'; //存放了上次编译后每个文件内容的MD5值, 变量名:$fileSignList
if (file_exists($fileSignPath)) {
include $fileSignPath;
}
$fileSignList = !empty($fileSignList) ? $fileSignList : [];
//==============获取本次编译需要删除的文件
foreach ($fileSignList as $fileName => $hash) {
$tmp = str_replace($extension, '', $fileName);
if (empty($objDir->fileHashList[$tmp])) {
unset($fileSignList[$fileName]);
}
}
//===============开始编译md文件
foreach ($fileList as $srcFileName) {
//读取源文件, 并计算内容的md5值, 用于比对内容是否变化
$text = file_get_contents($srcDir.$srcFileName);
$sign = md5($text); //也可以用 md5_file(文件名)
// 如果上次没有编译这个文件, 或者内容已改变, 就重新编译
if ((empty($fileSignList[$srcFileName]) || $fileSignList[$srcFileName] != $sign)) {
$now = date('Y-m-d H:i:s');
$text .= PHP_EOL.PHP_EOL."###### 本页面最近修改时间: {$now}";
$pathName = str_replace([$srcDir, $extension], ['', ''], $srcFileName);
$hashCode = $objDir->fileHashList[$pathName];
$disFileName = $disDir.'docs/'. $hashCode. $extension;
file_put_contents($disFileName, $text);
echo '编译文件: '.$srcFileName .PHP_EOL;
$fileSignList[$srcFileName] = $sign; //更新文件md5
}
}
//==================记录本次编译后,所有文件内容的hash值
file_put_contents($fileSignPath, '<?php '.PHP_EOL. '$fileSignList = '. var_export($fileSignList, true).';');
//==================删除多余的文件
$targetFileHashs = [];
$files = $objDir->getDirFiles($disDir.'docs/');
foreach ($files as $fileName) {
$hashCode = str_replace($extension, '', $fileName);
if (!in_array($hashCode, $objDir->fileHashList) && $hashCode != 'index') {
$file = $disDir.'docs/'.$hashCode.$extension;
unlink($file);
echo '删除文件:'.$file.PHP_EOL;
}
}
echo '结束.';
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/myDcool/PHP-Markdown.git
git@gitee.com:myDcool/PHP-Markdown.git
myDcool
PHP-Markdown
PHP-Markdown-Doc
master

搜索帮助