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 相关文章推荐
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
Wordpress php 分页代码
Oct 21 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
Aug 17 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 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判断正常访问和外部访问的示例
2014/02/10 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
JQuery对checkbox操作 (循环获取)
2011/05/20 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
jquery实现先淡出再折叠收起的动画效果
2015/08/07 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
jQuery插件Echarts实现的渐变色柱状图
2017/03/23 jQuery
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
原生JS实现天气预报
2020/06/16 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Python实现繁体中文与简体中文相互转换的方法示例
2018/12/18 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
关于礼仪的演讲稿
2014/01/04 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
5s标语大全
2014/06/23 职场文书
六查六看剖析材料
2014/10/06 职场文书
合同和协议有什么区别?
2014/10/08 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
2016公司年会通知范文
2015/04/25 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书