지정된 문자를 삭제하기 위해 파일을 통한 PHP 탐색을 구현하는 방법: 먼저 PHP 샘플 파일을 만든 다음 "function del($getstr){...}" 메서드를 사용하여 지정된 모든 파일에서 지정된 문자열을 삭제합니다. 예배 규칙서.
이 글의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터
php는 디렉터리 순회 및 특정 파일에서 특정 콘텐츠 삭제를 구현합니다.
이 글에서는 주로 디렉터리 순회를 구현하는 PHP를 소개합니다. 파일에 지정된 내용을 지정하면 됩니다. 이 글에서 구현한 도구를 사용하면 서버에 있는 한 문장의 트로이 목마를 삭제할 수 있습니다. 필요한 친구들은 참고하면 됩니다
지금 저는 조용한 기숙사에 앉아 있습니다. 그리고 겨울방학이 저를 떠난 것 같아요... 오늘 올린 내용은 겨울방학 동안 했던 마지막 공부이고, 그때부터 원피스를 시청하고 있습니다.
저는 C 언어로 디렉터리 탐색 + 파일 복사 프로그램을 작성했는데, 너무 길고 복잡했어요. 이제는 PHP를 사용하여 디렉터리를 탐색할 수 있고, 코드도 훨씬 짧아졌습니다. 이 프로그램의 목적은 디렉터리를 탐색하여 지정된 파일 이름을 가진 모든 파일을 찾아 지정된 문자열을 삭제하는 것입니다.
코드는 다음과 같습니다.
<?php //功能:删除指定目录(包括子目录)下所有指定文件中指定字符串 $tmpfiledir = $_SERVER["DOCUMENT_ROOT"].'tmp.txt'; function del($getstr) { $isbak = true; //是否备份原文件,true为备份,false不备份 global $tmpfiledir; $fr = fopen($tmpfiledir,"r") or die('未能打开临时文件'); while($row = fgets($fr)) { if(empty($row)) break; $row = trim($row); $opp = fopen($row,"r") or die("未能打开$row"); $str = fread($opp,filesize($row)) or die("不能读$row"); $str = str_replace($getstr,"",$str); fclose($opp); if($isbak){ copy($row,$row.'.bak') or die("备份文件失败"); } $ref = fopen($row,"w") or die("重新打开文件失败"); fwrite($ref,$str) or die("重新写入文件失败"); } } function traverse($path) { global $name,$tmpfiledir; $current_dir = opendir($path); //opendir()返回一个目录句柄,失败返回false if($current_dir == false) return false; while(($file = readdir($current_dir)) !== false) { //readdir()返回打开目录句柄中的一个条目 $sub_dir = $path . DIRECTORY_SEPARATOR . $file; //构建子目录路径 if($file == '.' || $file == '..') { continue; } else if(is_dir($sub_dir)) { //如果是目录,进行递归 traverse($sub_dir); } else { //如果是文件,再做比较 $fileinfo = pathinfo($sub_dir); if($fileinfo['basename'] == $name) { $fopen = fopen($tmpfiledir,"a"); fwrite($fopen,$sub_dir."\r\n"); fclose($fopen); } } } return true; } if(isset($_POST["name"]) && isset($_POST["dir"]) && isset($_POST["str"])) { $name = $_POST["name"]; traverse($_POST["dir"]) or die("未能创建临时文件,请检查网站根目录是否可写"); del($_POST["str"]); echo "成功"; unlink($tmpfiledir); } else { echo "<p>输入相关信息</p>"; } ?> <form name="input" action="" method="post"> 输入目标文件夹:<input type="text" name="dir"/> 输入目标文件名:<input type="text" name="name"/> 输入需要删除的字符串:<input type="text" name="str" /> <input type="submit" value="提交" /> </form>
두 개의 함수를 작성한 것을 볼 수 있습니다. traverse 함수는 임시 파일에 있는 지정된 파일 경로를 쓰고, del 함수는 이 파일에서 지정된 문자열을 삭제합니다. 사실 임시 파일을 전혀 생성하지 않고 순회 중에 삭제해도 무방하다고 생각합니다.
사실 처음에는 C언어로 순회를 작성했는데, C언어는 파일 조작이 쉽지 않아서 삭제된 부분을 PHP로 작성해서 처음에는 del 함수만 썼고 나중에는 그냥 사용했습니다. 파일을 탐색하는 PHP입니다(C보다 훨씬 간단해 보입니다). 그래서 다른 함수 탐색을 작성했습니다. 순회 부분만 보시면 됩니다. 이전에 C로 작성한 순회 코드(소스 코드를 보냈습니다)와 비교해 보면 어떤 차이가 있는지 알 수 있습니다.
단, 이번 버전은 와일드카드를 지원하지 않으므로 파일명을 반드시 지정해주셔야 합니다. 그 기능(내가 이 글을 쓴 이유이기도 함)은 서버에 걸려 있는 한 문장의 트로이 목마를 일괄적으로 삭제할 수 있다는 것입니다.
【추천 학습: "PHP 비디오 튜토리얼"】
위 내용은 PHP에서 파일을 탐색하고 지정된 문자를 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!