>  기사  >  백엔드 개발  >  PHP는 디렉토리를 탐색하고 지정된 file_php 팁에서 지정된 내용을 삭제하는 기능을 구현합니다.

PHP는 디렉토리를 탐색하고 지정된 file_php 팁에서 지정된 내용을 삭제하는 기능을 구현합니다.

WBOY
WBOY원래의
2016-05-16 20:25:39939검색

지금은 조용한 기숙사에 앉아 있는데, 겨울방학이 저를 떠난 것 같네요... 오늘 올린 내용은 겨울방학 마지막 스터디이고, 그때부터 원피스를 시청하고 있습니다.

디렉터리 탐색과 파일 복사를 위한 C 언어 프로그램을 작성한 적이 있는데, 이 프로그램은 매우 길고 복잡했습니다. 이제 PHP를 사용하여 디렉토리를 탐색할 수 있으며 코드도 훨씬 짧아졌습니다. 이 프로그램의 목적은 디렉터리를 탐색하여 지정된 파일 이름을 가진 모든 파일을 찾아 지정된 문자열을 삭제하는 것입니다.

코드 복사 코드는 다음과 같습니다.

//기능: 지정된 디렉터리(하위 디렉터리 포함)의 모든 지정된 파일에서 지정된 문자열

을 삭제합니다.

$tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt';
함수 del($getstr)
{
$isbak = true; //원본 파일을 백업할지 여부, true는 백업, false는 백업하지 않음
전역 $tmpfiledir;
$fr = fopen($tmpfiledir,"r") 또는 die('임시 파일을 열지 못했습니다');
while($row = fgets($fr))
{
If(비어 있음($row)) break;
$row = 트림($row);
$opp = fopen($row,"r") 또는 die("$row를 열지 못했습니다.");
$str = fread($opp,filesize($row)) 또는 die("$row를 읽을 수 없습니다");
$str = str_replace($getstr,"",$str);
fclose($opp);
if($isbak){
​ copy($row,$row.'.bak') 또는 die("백업 파일 실패");
}
$ref = fopen($row,"w") 또는 die("파일을 다시 열지 못했습니다.");
fwrite($ref,$str) 또는 die("파일을 다시 쓰지 못했습니다.");
}
}

함수 트래버스($path) {
전역 $name,$tmpfiledir;
$current_dir = opendir($path); //opendir()은 디렉터리 핸들을 반환하고 실패 시 false
를 반환합니다. if($current_dir == false)
false를 반환합니다.
while(($file = readdir($current_dir)) !== false) { //readdir()은 열린 디렉터리 핸들의 항목을 반환합니다
$sub_dir = $path . DIRECTORY_SEPARATOR . $file; //하위 디렉터리 경로 생성
If($file == '.' || $file == '..') {
계속하세요;
} else if(is_dir($sub_dir)) { //디렉토리인 경우 재귀 수행
트래버스($sub_dir);
} else { //파일이면 다시 비교
$fileinfo = 경로정보($sub_dir);
If($fileinfo['basename'] == $name)
{
        $fopen = fopen($tmpfiledir,"a");
          fwrite($fopen,$sub_dir."rn");
F닫기($fopen)
}
}
}
true를 반환합니다.
}

if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"]))
{
$name = $_POST["이름"];
Traverse($_POST["dir"]) 또는 die("임시 파일을 생성하지 못했습니다. 웹사이트 루트 디렉터리에 쓰기 가능한지 확인하세요.");
del($_POST["str"]);
> ​ 연결 해제($tmpfiledir);
}
그렇지 않으면
{
echo "

관련 정보를 입력하세요

";
}
?>

대상 폴더를 입력하세요:
대상 파일 이름을 입력하세요:
삭제할 문자열을 입력하세요:


두 가지 함수를 작성한 것을 볼 수 있습니다. traverse 함수는 임시 파일에 있는 지정된 파일 경로를 쓰고 del 함수는 이 파일에서 지정된 문자열을 삭제합니다. 사실 임시 파일을 전혀 생성하지 않고 순회 중에 삭제해도 무방하다고 생각합니다.

사실 처음에는 순회를 C 언어로 작성했습니다. C 언어는 파일 조작이 쉽지 않기 때문에 삭제된 부분을 PHP를 사용하여 처음에는 del 함수만 작성했고 나중에는 간단하게 작성했습니다. 파일을 탐색하는 데 사용했습니다. PHP로 작성했기 때문에(C보다 훨씬 간단해 보임) 다른 함수 탐색을 작성했습니다. 순회 부분만 보시면 됩니다. 이전에 C로 작성한 순회 코드(소스 코드를 보냈습니다)와 비교해 보면 어떤 차이가 있는지 알 수 있습니다.

단, 이번 버전은 와일드카드를 지원하지 않으므로 파일명을 지정해 주셔야 합니다. 그 기능(내가 이 글을 쓴 이유이기도 함)은 서버에 걸려 있는 한 문장의 트로이 목마를 일괄적으로 삭제할 수 있다는 것입니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.