php 批量替换程序的具体实现代码


Posted in PHP onOctober 04, 2013

代码如下:

<?php
/***************************************************************************
batch-replace, v1.1
***************************************************************************
file: batch-replace_utf8.php
functionality: 本程序可以扫描指定目录的所有文件,进行内容替换。可用于被批量挂马的删除以及批量更新页面某些内容。
本程序适用于对UTF-8的页面进行修改。
 
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
set_time_limit(3600);

if($_POST['Submit']=='开始执行操作'){
$dir = $_POST['searchpath'];
$shortname = $_POST['shortname'];
$isall = $_POST['isall'];
$isreg = $_POST['isreg'];
if (!get_magic_quotes_gpc()) {
$sstr = $_POST['sstr'];
$rpstr = $_POST['rpstr'];
} else {
$sstr = stripslashes($_POST['sstr']);
$rpstr = stripslashes($_POST['rpstr']);
} 

//分析shortname
$arrext = explode ("|",$shortname);

if (!is_dir($dir)) return;
if ($sstr == '') return;
//把末尾的/去掉
if(substr($dir,-1)=='/') $dir = substr($dir,0,strrpos($dir,"/"));
//罗列所有目录
if ($isall == 1){
hx_dirtree($dir);
}else{
hx_dealdir($dir);
}
exit();
}

function hx_dirtree($path="."){
global $sstr,$rpstr,$isreg,$arrext;

$d = dir($path);
while(false !== ($v = $d->read())) {
if($v == "." || $v == "..") continue;
$file = $d->path."/".$v;
if(is_dir($file)) {
echo "<p>$v</p>"; hx_dirtree($file);
}else{
$ext=substr(strrchr($v,"."), 1);
if( in_array($ext , $arrext) ){
echo "<li>$file ";
$body = file_get_contents($file);
if($isreg == 1){
$body2 = preg_replace($sstr, $rpstr, $body);
}else{
$body2 = str_replace($sstr, $rpstr, $body);
}
if($body != $body2 && $body2 != ''){
tofile($file,$body2);
echo ' OK';
}else{
echo ' NO';
}
echo '</li>';
}
}
}
$d->close();
}
function hx_dealdir($dir){
global $sstr,$rpstr,$isreg,$arrext;
if ($dh = opendir($dir)) {
while (false !== ($file = readdir($dh))) {
if(filetype($dir.'/'.$file)=='file'){
$ext=substr(strrchr($file,"."), 1);
if( in_array($ext , $arrext) ){
echo "<li>$file ";
$body = file_get_contents($dir.'/'.$file); 
if($isreg == 1){
$body2 = preg_replace($sstr, $rpstr, $body);
}else{
$body2 = str_replace($sstr, $rpstr, $body);
}
if($body != $body2 && $body2 != ''){ 
tofile($dir.'/'.$file,$body2);
echo ' OK';
}else{
echo ' NO';
}
echo '</li>';
}
}
}
closedir($dh);
}
}
//把生成文件的过程写出函数
function tofile($file_name,$file_content){
if (is_file ($file_name)){
@unlink ($file_name);
}
$handle = fopen ($file_name,"w");
if (!is_writable ($file_name)){
return false;
}
if (!fwrite ($handle,$file_content)){
return false;
}
fclose ($handle); //关闭指针
return $file_name;
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>批量替换程序|木马批量删除_www.itlearner.com</title>
<style type="text/css">
body{background:#FFFFFF;color:#000;font-size:12px;}
#top{text-align:center;}
h1,p,form{margin:0;padding:0;}
h1{font-size;14px;}
</style>
</head>
<body>
<div id="top">
<h1>批量替换程序(UTF-8版)</h1>
<div>本程序可以扫描指定目录的所有文件,进行<strong>内容替换</strong>。可用于被批量挂马的删除以及批量更新页面某些内容。<br/>
在文件数量非常多的情况下,本操作比较占用服务器资源,请确脚本超时限制时间允许更改,否则可能无法完成操作。</div>
</div>

<form action="<?=$_SERVER['SCRIPT_NAME']?>" name="form1" target="stafrm" method="post">
<table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#666666">
<tr>
<td width="10%" bgcolor="#FFFFFF"><strong> 起始根路径:</strong></td>
<td width="90%" bgcolor="#FFFFFF"><input name="searchpath" type="text" id="searchpath" value="./test" size="20" />
点表示当前目录,末尾不要加/ <input type="checkbox" name="isall" value="1" />包含此目录下所有目录</td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><strong> 文件扩展名:</strong></td>
<td bgcolor="#FFFFFF"><input name="shortname" type="text" id="shortname" size="20" value="php|htm" />
多个请用|隔开</td>
</tr>
<tr id="rpct">
<td height="64" colspan="2" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr bgcolor="#EDFCE2">
<td colspan="4"><strong>内容替换选项:</strong> <input type="checkbox" name="isreg" value="1" />使用正则表达式</td>
</tr>
<tr>
<td colspan="4">替换内容类默认使用字符串替换,也可以使用正则表达式(需勾选)。"替换为"不填写的话,就表示删除"替换内容"。</td>
</tr>
<tr>
<td width="10%"> 替换内容:</td>
<td width="36%"><textarea name="sstr" id="sstr" style="width:90%;height:45px"></textarea></td>
<td width="10%">替 换 为:</td>
<td><textarea name="rpstr" id="rpstr" style="width:90%;height:45px"></textarea></td>
</tr>
</table></td>
</tr>
<tr>
<td colspan="2" height="20" align="center" bgcolor="#E2F5BC"><input type="submit" name="Submit" value="开始执行操作" class="inputbut" /></td>
</tr>
</table>
</form>
<table width="95%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#666666">
<tr bgcolor="#FFFFFF">
<td id="mtd">
<div id='mdv' style='width:100%;height:100;'>
<iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe>
</div>
<script type="text/javascript">
document.all.mdv.style.pixelHeight = screen.height - 450;
</script> </td>
</tr>
</table>
</body>
</html>
PHP 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
PHP中调用ASP.NET的WebService的代码
Apr 22 PHP
优化PHP代码技巧的小结
Jun 02 PHP
php批量上传的实现代码
Jun 09 PHP
php抓取页面的几种方法详解
Jun 17 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
Jun 24 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
php提取微信账单的有效信息
Oct 01 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
php5.5中类级别的常量使用介绍
Oct 02 #PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 #PHP
PHP文件上传主要代码讲解
Sep 30 #PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 #PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 #PHP
PHP设置一边执行一边输出结果的代码
Sep 30 #PHP
PHP file_get_contents设置超时处理方法
Sep 30 #PHP
You might like
用PHP实现小写金额转换大写金额的代码(精确到分)
2012/01/10 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
简单谈谈favicon
2015/06/10 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
搭建Bootstrap离线文档的方法
2016/12/02 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
[00:34]TI7不朽珍藏III——纯金地穴编织者饰品展示
2017/07/15 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
python实现K最近邻算法
2018/01/29 Python
NumPy 数组使用大全
2019/04/25 Python
python脚本后台执行方式
2019/12/21 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
临床医学系毕业生推荐信
2013/11/09 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
《搭石》教学反思
2014/04/07 职场文书
九一八事变纪念日演讲稿
2014/09/14 职场文书
春季运动会开幕词
2015/01/28 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android
教你部署vue项目到docker
2022/04/05 Vue.js