0

PHP 删除数据库敏感词

已有 193 阅读此文人 - - PHP,程序人生 -

最近接到上面的通知,说60年国庆马上到了。对于网站的一些带敏感关键字的的帖子都得删除了。要不还得把网站给封了。一下接到200多个关键字,要从数据库一条条的删除了。一看有点疯了。100多万的帖子,这要一个个的删除,得到什么时候。刚开始用Navicat软件连接了数据库,还没执行完一下数据库就掉线了。又得重来,而且找个帖子,半天也没有反应。实在是郁闷。(即使数据库链接一直正常,要是这要的找,别说耽误一天的功夫了,就这眼睛估计也得瞎了。)
无奈,写了个小程序,执行了下 。还真是快。说不定下次有又什么节日到了,又得来一次呢。具体代码直接看下边。
读取删除记录

include('../include/common.inc.php'); //引用站点配置文件
$file = file('filter2.txt');	//读取敏感关键字
$n = 5; //初始化值
$m = 10;//每次执行的个数
@set_time_limit(0);
$get = $_GET['n'];
$countFile = count($file);	//统计关键字个数
if (!empty($get)) {
	$n = $get;
}
$start = $n==5?0:($n-$m);
foreach ($file as $key => $value) {	
	if ( $key >= $start && $key < $n) {
		$value = trim($value);
		$sql = "SELECT contentid,title,url FROM ".DB_PRE."content WHERE title like '%$value%'";
		$query = $db->query($sql);
		while ($result = $db->fetch_array($query)) {
			$data = $result['contentid']. "   " . $result['title'] . "  " . $result['url']."\r\n";
			$filename = 'filter.txt';
			if (is_writable($filename)) {
			    if (!$handle = fopen($filename, 'a')) {
			         echo "不能打开文件 $filename
"; exit; } if (fwrite($handle, $data) === FALSE) { echo "不能写入到文件 $filename
"; exit; } echo "成功地将 $data 写入到文件$filename
"; fclose($handle); } else { echo "文件 $filename 不可写
"; exit; } } } } if ($n > $countFile) { showmessage('所有文件写入完成!','http://www.phpcms.com'); } else { $nextNum = $n + $m; $url = "./keywords/filter.php?n=$nextNum"; showmessage('写入完成,跳转到下个执行!',$url); }

当然要在keywords文件夹下建立filter.txt文件,用来存储读取的contentid,title,url 。执行完程序直接就可以再filter.txt文件里看到读取的数据了。(考虑数据库的量比较大,所以每次要程序执行自定义的条数。执行完直接跳转到下一页。)

删除数据库记录
当然还是一样,读取filter.txt的contentid用foreach循环delete就可以删除了。

删除服务器上静态页
这里我用了一个shell脚本来处理的。
建立rm.sh文件,执行程序就可以把静态页给删除了。

#!/bin/sh
for i in `cat /usr/local/sbin/rm.txt`
do
rm -rf $i
done

(幸好没有在数据库里一条条来找,要不还真是疯了。打开文件一看3000条记录。汗,还真多!)

期待你一针见血的评论,Come on!

不用想啦,马上 "登录"  发表自已的想法.