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;
- }
复制代码 |