Maison > Article > développement back-end > Comment parcourir les fichiers en php et supprimer les caractères spécifiés
La méthode d'implémentation de php traversant les fichiers pour supprimer les caractères spécifiés : créez d'abord un exemple de fichier PHP ; puis supprimez la chaîne spécifiée dans tous les fichiers spécifiés dans le répertoire spécifié via la "fonction del($getstr){.. .}" Méthode C'est tout.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
php implémente la traversée de répertoires et suppression des fichiers spécifiés Le contenu spécifié dans
Cet article présente principalement l'implémentation de PHP pour parcourir le répertoire et supprimer le contenu spécifié dans le fichier spécifié. L'outil implémenté dans cet article peut être utilisé pour supprimer. chevaux de Troie d'une phrase sur le serveur. Les amis qui en ont besoin peuvent s'y référer
Maintenant, je suis assis dans un dortoir calme, et les vacances d'hiver semblent m'avoir quitté. Ce que j'ai posté aujourd'hui est la dernière étude que j'ai faite pendant les vacances d'hiver, et la fois suivante, j'ai regardé One Piece maintenant.
J'avais l'habitude d'écrire un programme en langage C qui parcourait des répertoires + copie des fichiers. C'était très long et compliqué. Maintenant, je peux utiliser PHP pour parcourir des répertoires, et le code est beaucoup plus court. Le but de ce programme est de parcourir le répertoire, de rechercher tous les fichiers portant le nom de fichier spécifié et de supprimer la chaîne spécifiée.
Le code est le suivant :
<?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>
Vous pouvez voir que j'ai écrit deux fonctions. La fonction traverse écrira le chemin de fichier spécifié trouvé dans un fichier temporaire. fichier. Ici, la fonction del supprime les chaînes spécifiées dans ces fichiers. En fait, je pense aussi que c'est inutile, supprimez-le simplement directement pendant le parcours, et il n'est pas du tout nécessaire de générer des fichiers temporaires.
En fait, j'ai écrit le parcours en langage C au début. Parce que le langage C n'est pas facile à exploiter les fichiers, j'ai utilisé PHP pour écrire la partie supprimée, donc j'ai seulement écrit une fonction del au début. puis j'ai simplement changé le parcours. Le fichier a également été écrit en PHP (cela semble beaucoup plus simple que C), j'ai donc écrit une autre fonction traverse. Vous pouvez simplement regarder la partie traversée. Vous pouvez également la comparer avec le code de traversée que j'ai écrit en C auparavant (j'ai envoyé le code source) pour voir quelle est la différence.
Cependant, cette version ne prend pas en charge les caractères génériques, le nom du fichier doit donc être spécifié. Sa fonction (c'est aussi la raison pour laquelle j'ai écrit ceci) est qu'il peut supprimer par lots les chevaux de Troie d'une seule phrase que nous avons bloqués sur le serveur.
[Apprentissage recommandé : "Tutoriel vidéo PHP"]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!