更改文件内容并保存

这两天公司负责的一个网站被不知名的人将网站程序中的所有 *.php 文件都加上了一段如下代码:

<?php $zend_framework="\x63...\57\x2f"); ?>

好吧,经过推敲鉴定这是网站被黑了的节奏,不幸的是程序并没有备份文件。那么有4种方法:

    1、一个一个文件的改(虽然保险,但是这要改到猴年马月啊)
    2、写一个方法,将文件中的这段代码去掉
    3、重新写一份代码(这是作死的节奏啊,重写啊,不可能的吧)
    4、华丽的将此网站抛弃(那更是不可能滴,它可是充实我们荷包的重要使者 )

这真是有爆粗口的冲动啊,但我们是文明人不是,不说脏话。无奈之下只能忍怒低头写代码;
分析一下:首先要将网站根目录下所有的php文件都要找出来,然后将文件中的那段不知名的代码给咔嚓掉,最后保存文件。为了一个不落的更改所有有误的文件,我们可以采用递归函数来达到目的。

在网站的根目录下建一个find.php的文件来写这个方法,我们知道PHP中有个scandir() 函数;这个函数返回一个数组,包含指定路径中的文件和目录。有不了解的可以看看:PHP scandir() 函数 我们先试着输出所有的目录和文件:

function changeScandir($dir)
{
	foreach(scandir($dir) as $single)
	{
		$sub_dir=$dir.DIRECTORY_SEPARATOR.$single;
		if($single=='.'||$single=='..')
			continue;
		elseif (is_dir($sub_dir))
		{
			echo 'Directory '.$sub_dir.'<br/>';
			changeScandir($sub_dir);
		}else{
			echo 'File '.$single.'<br/>';
		}
	}
}
changeScandir('.');

在此之前,我没有构造$sub_dir这个变量而是直接将$single传入递归,结果可想而知是不能正常运行的,还搞到Apache崩溃了。一开始我也很纳闷,还上网找了资料可是无果,后来跟我的同事一起讨论了一下,发现了是路径有问题。所以哇,遇到问题自己不能解决的时候一定要找找资料,再不行那就求助吧,多个人的力量总是比一个人的力量要大的;这可不是什么丢脸的事哦。

测试之后是可以正确输出所有目录和文件的,那接下来就好办了。我们只要判断文件是不是php文件,然后看有没有匹配到那可恨的代码,匹配成功就将这段代码替换为空,然后保存:

<?php

function changeScandir($dir)
{
	foreach(scandir($dir) as $single)
	{
		$sub_dir=$dir.DIRECTORY_SEPARATOR.$single;
		if($single=='.'||$single=='..')
			continue;
		elseif (is_dir($sub_dir))
		{
			changeScandir($sub_dir);
		}elseif (is_file ($sub_dir)){
			//获取文件后缀
			$extend = pathinfo($sub_dir); 
			$filetype = strtolower($extend["extension"]);
			if ($filetype == "php") {
				$f = fopen ($sub_dir, "r");
				$cn = file_get_contents($sub_dir);
				//匹配
				preg_match('/<\?php(.*)x2f"\); \?>/', $cn, $arr);
				if(count($arr)>0)
				{
					//替换内容,更改文件内容
					$result = preg_replace ('/<\?php(.*)x2f"\); \?>/', '', $cn);
					file_put_contents($sub_dir, $result);
					//记录更改了的文件
					$str = $sub_dir."----Change Success!\n";
					file_put_contents('test1.txt', $str,FILE_APPEND);
				}
				fclose($f);
			}
		}
	}
}
changeScandir('.');

至此,已经完成了我们所要达到的目的了;值得注意的地方就是要保证路径不出错,那其它的就没什么难度太大的问题存在了。好吧,最后让我小小的鄙视一下那些随意篡改别人程序的Hacker,请做文明Hacker哇!

你可能感兴趣的:(PHP,文件查找)