这是我使用的一个使用python对网站全站源码进行全站修改的指令
import os
class YzmToLysModifier:
def __init__(self, folder_path):
self.folder_path = folder_path
def batch_replace_names(self):
"""第一步:重命名文件和文件夹,将yzm替换为lys"""
print("=== 开始第一步:重命名文件和文件夹 ===")
# 遍历所有文件夹和文件(深度优先)
for root, dirs, files in os.walk(self.folder_path, topdown=False): # topdown=False 确保先处理子文件夹
# 1. 处理当前文件夹下的子文件夹名
for dir_name in dirs:
old_dir_path = os.path.join(root, dir_name)
new_dir_name = dir_name.replace("yzm", "lys")
if new_dir_name != dir_name:
new_dir_path = os.path.join(root, new_dir_name)
try:
os.rename(old_dir_path, new_dir_path) # 重命名文件夹
print(f"重命名文件夹: {old_dir_path} -> {new_dir_path}")
except Exception as e:
print(f"重命名文件夹失败 {old_dir_path}: {str(e)}")
# 2. 处理当前文件夹下的文件名
for file_name in files:
old_file_path = os.path.join(root, file_name)
new_file_name = file_name.replace("yzm", "lys")
if new_file_name != file_name:
new_file_path = os.path.join(root, new_file_name)
try:
os.rename(old_file_path, new_file_path) # 重命名文件
print(f"重命名文件: {old_file_path} -> {new_file_path}")
except Exception as e:
print(f"重命名文件失败 {old_file_path}: {str(e)}")
print("第一步完成!\n")
def replace_file_contents_step1(self):
"""第二步:替换文件内容中的文本(YzmCMS相关标识)"""
print("=== 开始第二步:替换文件内容中的文本(YzmCMS相关标识) ===")
# 定义替换规则
replacements = [
('免费又好用的CMS建站系统,就选YzmCMS', '方便于自我操作的个人网站系统,就进星怀蓝梦!'),
('yzm_', 'lys_'),
('yzm-', 'lys-'),
('yzm.', 'lys.'),
('YZM', 'LYS'),
('yzmphp', 'lysphp'),
('yzmcms_', 'lys_'),
('YZMPHP', 'LYSPHP'),
('YzmCMS', 'LysCMS'),
('YZMCMS', 'LYSCMS'),
('袁志蒙', '李依朔'),
('YuanZhiMeng', 'LiYiShuo'),
('WWW.YZMCMS.COM', 'WWW.PPPABC.COM'),
('www.yzmcms.com', 'www.pppabc.com'),
('214243830', '37810188'),
('yuanzhimeng', 'liyishuo'),
# 将编码内容改为明文显示
('base64_decode(\'WXptQ01T5YaF5a65566h55CG57O757uf\')', "'LysCMS内容管理系统'"), # 直接替换为明文
('WXptQ01T5YaF5a65566h55CG57O757uf', 'LysCMS内容管理系统'), # 直接替换为明文
('PCEtLSBQb3dlcmVkIEJ5IFl6bUNNU+WGheWuueeuoeeQhuezu+e7nyAgLS0+', '<!-- Powered By LysCMS内容管理系统 -->'), # 直接替换为明文
('UG93ZXJlZCUyMEJ5JTIwWXptQ01TJUU1JTg2JTg1JUU1JUFFJUI5JUU3JUFFJUExJUU3JTkwJTg2JUU3JUIzJUJCJUU3JUJCJTlGJTIwLSUyMGh0dHAlM0ElMkYlMkZ3d3cueXptY21zLmNvbQ==', 'Powered By LysCMS内容管理系统 - http://www.pppabc.com'), # 直接替换为明文
('value="yzmcms"', 'value="lyscms"'),
("'yzmcms'", "'lyscms'")
]
# 遍历目录中的所有文件
processed_count = 0
for root, dirs, files in os.walk(self.folder_path):
for file in files:
file_path = os.path.join(root, file)
try:
# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
original_content = content
# 执行替换
for old_text, new_text in replacements:
content = content.replace(old_text, new_text)
# 如果内容有变化,则写回文件
if content != original_content:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
processed_count += 1
print(f"已处理: {file_path}")
except Exception as e:
print(f"处理失败 {file_path}: {str(e)}")
print(f"第二步完成!共处理了 {processed_count} 个文件\n")
def replace_file_contents_step2(self):
"""第三步:修改后台管理路径相关配置"""
print("=== 开始第三步:修改后台管理路径相关配置 ===")
# 定义替换规则
replacements = [
("//加载全局函数库\nlys_base::load_sys_func('global');", "// 定义后台登录地址 xxxx.com/新的地址\ndefine('LYS_ADMIN', 'admin');\n\n//加载全局函数库\nlys_base::load_sys_func('global');"),
("U('admin/", "U(LYS_ADMIN.'/"),
("lys_base::load_controller('common', 'admin', 0);", "lys_base::load_controller('common', LYS_ADMIN, 0);"),
("<?php include $this->admin_tpl('meta','admin');?>", "<?php include $this->admin_tpl('meta',LYS_ADMIN);?>"),
("<?php lys_base::load_common('function/function.php', 'admin'); ?>", "<?php lys_base::load_common('function/function.php', LYS_ADMIN); ?>"),
("lys_base::load_common('lib/content_form'.EXT, 'admin');", "lys_base::load_common('lib/content_form'.EXT, LYS_ADMIN);"),
("lys_base::load_common('lib/update'.EXT, 'admin');", "lys_base::load_common('lib/update'.EXT, LYS_ADMIN);"),
("<?php include $this->admin_tpl('meta', 'admin');?>", "<?php include $this->admin_tpl('meta', LYS_ADMIN);?>"),
("<?php include $this->admin_tpl('footer', 'admin');?>", "<?php include $this->admin_tpl('footer', LYS_ADMIN);?>"),
("lys_base::load_common('function/function.php', 'admin');", "lys_base::load_common('function/function.php', LYS_ADMIN);"),
("<?php include $this->admin_tpl('footer','admin');?>", "<?php include $this->admin_tpl('footer',LYS_ADMIN);?>"),
("lys_base::load_common('lib/sql'.EXT, 'admin');", "lys_base::load_common('lib/sql'.EXT, LYS_ADMIN);"),
("lys_base::load_common('lib/module_api'.EXT, 'admin');", "lys_base::load_common('lib/module_api'.EXT, LYS_ADMIN);"),
("lys_base::load_common('lib/sql'.EXT, 'admin');", "lys_base::load_common('lib/sql'.EXT, LYS_ADMIN);"),
("lys_base::load_model('content_model', 'admin', 0)", "lys_base::load_model('content_model', LYS_ADMIN, 0)"),
("if(ROUTE_M =='admin' && ROUTE_C =='index' && ROUTE_A =='login') {", "if(ROUTE_M ==LYS_ADMIN && ROUTE_C =='index' && ROUTE_A =='login') {"),
("APP_PATH.'admin'.DIRECTORY_SEPARATOR.'view'.DIRECTORY_SEPARATOR.'public_home.html';", "APP_PATH.LYS_ADMIN.DIRECTORY_SEPARATOR.'view'.DIRECTORY_SEPARATOR.'public_home.html';"),
("if(ROUTE_M =='admin' && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'init'))) return true;", "if(ROUTE_M ==LYS_ADMIN && ROUTE_C =='index' && in_array(ROUTE_A, array('login', 'init'))) return true;")
]
# 遍历目录中的所有文件
processed_count = 0
for root, dirs, files in os.walk(self.folder_path):
for file in files:
file_path = os.path.join(root, file)
try:
# 读取文件内容
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
original_content = content
# 执行替换
for old_text, new_text in replacements:
content = content.replace(old_text, new_text)
# 如果内容有变化,则写回文件
if content != original_content:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
processed_count += 1
print(f"已处理: {file_path}")
except Exception as e:
print(f"处理失败 {file_path}: {str(e)}")
print(f"第三步完成!共处理了 {processed_count} 个文件\n")
def replace_index_class_file(self):
"""第四步:替换index.class.php文件的内容"""
print("=== 开始第四步:替换index.class.php文件的内容 ===")
# 目标文件路径
target_file = os.path.join(self.folder_path, "application", "admin", "controller", "index.class.php")
# 新的文件内容(直接嵌入到脚本中,避免依赖外部文件)
new_content = """<?php
defined('IN_LYSPHP') or exit();
lys_base::load_controller('common', ROUTE_M, 0);
class index extends common
{
// 初始化后台首页
public function init()
{
$total = D('guestbook')->field('id')->where(['replyid'=>'0','siteid'=>self::$siteid,'isread'=>'0'])->total();
include $this->admin_tpl('index');
}
// 登录处理
public function login()
{
if(is_post())
{
// 验证码校验
if(empty($_SESSION['code']) || strtolower($_POST['code'])!=$_SESSION['code'])
return_json(['status'=>0,'message'=>L('code_error')]);
// 用户名格式校验
$_POST['username'] = trim($_POST['username']);
if(!is_username($_POST['username'])) return_json(['status'=>0,'message'=>L('user_name_format_error')]);
// 管理员身份验证
$res = M('admin')->check_admin($_POST['username'], password($_POST['password']));
return_json($res['status'] ?
['status'=>1,'message'=>L('login_success'),'url'=>U('init')] : $res);
}
$this->_login(); // 显示登录页面
}
// 退出登录
public function public_logout()
{
unset($_SESSION['adminid'], $_SESSION['adminname'], $_SESSION['roleid'], $_SESSION['admininfo']);
showmsg(L('you_have_safe_exit'), U('login'), 1);
}
// 后台首页统计信息
public function public_home()
{
$tpl = APP_PATH.LYS_ADMIN.'/view/public_home.html';
if(!is_file($tpl)) $this->_force_logout();
// 获取各类统计数量
$count = [
D('all_content')->where(['siteid'=>self::$siteid])->total(), // 内容总数
D('module')->total(), // 模块总数
D('member')->total(), // 会员总数
D('admin')->total() // 管理员总数
];
ob_start();
include $this->admin_tpl('public_home');
echo ob_get_clean();
}
// 清除错误日志(仅限超级管理员)
public function public_clear_log()
{
if($_SESSION['roleid'] != 1) return_json(['status'=>0,'message'=>'此操作仅限于超级管理员!']);
if(is_file(LYSPHP_PATH.'cache/error_log.php') && !@unlink(LYSPHP_PATH.'cache/error_log.php'))
return_json(['status'=>0,'message'=>L('operation_failure')]);
return_json(['status'=>1,'message'=>L('operation_success')]);
}
// 锁屏功能
public function public_lock_screen()
{
$_SESSION['lys_lock_screen'] = 1;
return_json(['status'=>1,'message'=>L('operation_success')]);
}
// 解锁屏幕
public function public_unlock_screen()
{
$res = M('admin')->check_admin($_SESSION['adminname'], password($_POST['password']));
if(!$res['status']) return_json($res);
$_SESSION['lys_lock_screen'] = 0;
return_json(['status'=>1,'message'=>L('login_success')]);
}
// 强制退出(私有方法)
private function _force_logout()
{
session_destroy();
echo '<script>window.top.location="'.U('login').'"</script>';
exit;
}
// 显示登录页面(私有方法)
private function _login()
{
ob_start();
include $this->admin_tpl('login');
echo ob_get_clean();
}
}
"""
try:
# 写入新内容到文件
with open(target_file, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"已成功替换文件: {target_file}")
except Exception as e:
print(f"替换文件失败 {target_file}: {str(e)}")
def create_ht_file(self):
"""第五步:创建ht.php文件到网站根目录"""
print("=== 开始第五步:创建ht.php文件到网站根目录 ===")
# 目标文件路径
target_file = os.path.join(self.folder_path, "ht.php")
# ht.php文件内容(直接嵌入到脚本中)
ht_content = """<?php
/*
* 本文件为修改后台登录地址专用文件,将该文件夹放在网站根目录,修改applicaiton/lys文件夹,改为你想要的文件夹名,
* 第一次改后台地址时,xxx.com/ht.php运行该文件按需填写即可,
* 如果改了一次还想再改后台,则需要将操作部分'lys'修改为你上一次修改后的地址
*/
header('content-type:text/html;charset=utf-8');
set_time_limit(0);
define('APP_DEBUG', 0);
define('LYSPHP_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
require LYSPHP_PATH . 'lysphp' . DIRECTORY_SEPARATOR . 'lysphp.php';
lys_base::load_sys_class("application", "", 0);
lys_base::load_sys_class("debug", "", 0);
lys_base::load_sys_class("db_factory", "", 0);
$db = D('admin');
$style = <<<STYLE
<title>修改后台登录地址</title>
<style>
.formbox {
width: 520px;
margin: 60px auto 0;
border: 1px solid #2196F3;
padding: 10px;
}
.formbox h4 {
margin-bottom: 20px;
text-align: center;
color: #03A9F4;
border-bottom: 1px solid #dfdfdf;
padding-bottom: 5px;
padding-top: 5px;
}
.btn {
display: flex;
}
.btn button {
display: block;
text-align: center;
width: 200px;
background-color: #2196F3;
color: #fff;
border: none;
outline: 0;
padding: 10px 0;
font-size: 16px;
cursor: pointer;
margin-left: 113px;
}
.formbox .li {
display: flex;
margin-bottom: 8px;
}
.formbox .li input[type="text"] {
border: 1px solid #383838;
height: 26px;
flex-grow: 0.4;
}
.formbox .li span {
width: 113px;
}
*, *::after, *::before {
margin: 0;
padding: 0;
box-sizing: border-box;
}
input[type="text"]:focus {
outline: none;
box-shadow: 0px 0px 2px rgba(0,188,212,0.6);
}
.ok-res {
text-align: center;
padding-top: 50px;
font-size: 16px;
color: #F44336;
}
.formbox .p1 {
font-size: 14px;
margin-bottom: 10px;
color: #607D8B;
}
</style>
STYLE;
echo $style;
if (isset($_POST['dosubmit'])) {
$db = D('admin');
$backend = isset($_POST['backend']) ? $_POST['backend'] : 'lys'; // 修改后的路径
$oldbackend = isset($_POST['oldbackend']) ? $_POST['oldbackend'] : 'admin'; // 修改前的路径
if ($backend == '' || $oldbackend == '') {
exit('原路径和修改路径不能为空!');
}
$sql = "UPDATE `lys_menu` SET `m`='{$backend}' WHERE `m` ='{$oldbackend}';";
$sql = rtrim(trim($sql), ';');
$sqls = array(0 => $sql);
array_walk($sqls, function($sqls) use(&$db) {
$db->query($sqls);
});
$f_path = LYSPHP_PATH . 'lysphp' . DIRECTORY_SEPARATOR . 'lysphp.php';
$stra = "define('LYS_ADMIN', 'lys')";//操作部分
$strb = "define('LYS_ADMIN', '".$backend."')";
file_put_contents($f_path, str_replace($stra, $strb, file_get_contents($f_path)));
echo '<div class="ok-res">后台路径修改成功!新的后台登录地址为:xxx.com/'.$backend.'</div>
<div style="text-align:center;margin-top:10px;">请记得删除本文件!</div>';
}
?>
<div class="formbox">
<h4>星怀蓝梦修改后台登录地址</h4>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<p class="p1">首先将application/目录下后台模块文件夹修改</p>
<input type="hidden" value="1" name="dosubmit">
<div class="li">
<span>原后台路径</span>
<input type="text" name="oldbackend">
</div>
<div class="li">
<span>新后台路径</span>
<input type="text" name="backend">
</div>
<div class="li btn">
<button type="submit">确定</button>
</div>
</form>
</div>
"""
try:
# 检查目标文件是否已存在
if os.path.exists(target_file):
print(f"文件已存在,将覆盖: {target_file}")
# 写入文件
with open(target_file, 'w', encoding='utf-8') as f:
f.write(ht_content)
print(f"已成功创建文件: {target_file}")
print("注意:此文件用于修改后台登录地址,使用后请及时删除!")
except Exception as e:
print(f"创建文件失败 {target_file}: {str(e)}")
print("第五步完成!\n")
def run_all_modifications(self):
"""执行所有修改步骤"""
print(f"开始对目录 {self.folder_path} 进行修改...\n")
# 第一步:重命名文件和文件夹
self.batch_replace_names()
# 第二步:替换文件内容中的文本
self.replace_file_contents_step1()
# 第三步:修改后台管理路径相关配置
self.replace_file_contents_step2()
# 第四步:替换index.class.php文件的内容
self.replace_index_class_file()
# 第五步:创建ht.php文件到网站根目录
self.create_ht_file()
print("=== 所有修改已完成! ===")
print("修改总结:")
print("1. 文件和文件夹重命名:yzm → lys")
print("2. 内容替换:YzmCMS相关标识 → LysCMS")
print("3. 后台路径配置:admin → LYS_ADMIN常量")
print("4. 替换index.class.php文件内容")
print("5. 创建ht.php文件:后台登录地址修改工具")
# ====================== 主程序 ======================
if __name__ == "__main__":
# 配置参数
folder_path = r"d:\phpstudy_pro\WWW\1\yzmcms7.5" # 替换为实际文件夹路径
# 创建修改器实例并执行修改
modifier = YzmToLysModifier(folder_path)
modifier.run_all_modifications()