本帖最后由 vivinice 于 2013-11-26 10:12 编辑
discuz补丁包出的很快,过段时间在后台就可以看到系统提醒你升级到最新版,如果只是功能的改变不升级也罢,如果涉及到安全或者系统效率或稳定的补丁包,那是一定要升级,不过苦恼在于discuz系统的一些文件被自己改动过,如果要升级就得一个一个的找,先看看自己修改过没有,如果没有再直接覆盖文件,如果有修改,再看看自己修改的和discuz发布的冲突不。这个过程前边几步是可以通过程序完成的,自己写了个小脚本,贴出来共享下,最后会把源文件附上。
其实很简单,只需要几十行代码就可以搞定,前提是你修改过的文件一定用自己的注释,比如本人通常修改过会标注web的域名,比如:
// edit by vivinice.com
通过这个就可以很容易知道这个文件是否被修改过。
如果你改过的文件没有统一的标注,请忽略本帖子,猛击右上角X关闭本窗口。
如果你根本不懂代码,也请执行以上操作,因为此操作很危险。
文件组织:
修改update.php,将vivinice.com替换为你自己修改文件的标注。
把这个update.php放到discuz源码目录下,比如source/update.php
那么你的升级文件也就是官方的补丁应该就在source/upload/这个目录下,然后运行update.php就可以了,如果出现提示冲突的,就得人为的进行解决,不过最近几次的升级都很简单,没有出现冲突。
以下是源码:
<?php
define('UPDATE_DIR', 'upload');
define('DS', DIRECTORY_SEPARATOR);
define('ROOT_PATH', dirname(__FILE__));
define('UPDATE_PATH', ROOT_PATH.DS.UPDATE_DIR);
foreach (get_files(UPDATE_PATH) as $src_file) {
$dst_file = str_replace(DS.UPDATE_DIR.DS, DS, $src_file);
if (preg_match('/\.(php|htm|js)$/i', $dst_file)) {
$content = file_get_contents($dst_file);
if (stripos($content, "vivinice.com")!==false) {
echo "<p style=\"color:red;\">$dst_file MODIFIED, PLEASE UPDATE BY YOUSELF.</p>";
continue;
}
}
if (copy($src_file, $dst_file)) {
echo "<p>COPY $src_file TO $dst_file SUCCESS.</p>";
unlink($src_file);
} else {
exit ("<p>COPY $src_file TO $dst_file FAILURE.</p>");
}
}
function get_files($dir) {
$files = array();
foreach (glob($dir.DS.'*') as $filename) {
if (is_dir($filename)) {
$files = array_merge($files, get_files($filename));
} else {
$files[] = $filename;
}
}
return $files;
}
文件下载地址(见二楼)
http://www.vivinice.com/vp-16253-1.html
|