Page 1 sur 1

Supprimer une liste de fichiers

Posté : 14 mars 2010, 10:49
par darjaa
Bonjour,

actuellement je supprime des fichiers un par un sur le serveur avec ceci :

formulaireeffacement.php

Code : Tout sélectionner

<html> <form method="post" action="effacement.php"> <input type="text" name="avirer" value="" autocomplete="off" /><br /> <input type="submit" value="Supprimer"> </form> </html>
et effacement.php

Code : Tout sélectionner

<?php $recup_avirer = $_POST['avirer']; unlink($recup_avirer.'.kml') ; header('Location: formulaireeffacement.php'); ?>
Je ne suis pas spécialiste de php, j'ai bricolé ça en farfouillant sur le net, mais j'aimerais être aidé pour améliorer. En tout cas ça marche bien. La situation c'est plusieurs centaines de fichiers kml dans un répertoire et de temps en temps je dois en effacer quelques-uns, tout en sachant qu'ils portent tous des noms aléatoires, du genre "4f4g45h". Donc c'est plus facile d'utiliser le formulaire que j'ai fabriqué, que de chercher les fichiers dans la longue liste sur le programme ftp.

1) serait-il possible de faire la même chose avec un seul fichier php, en regroupant les deux codes formulaire et effacement ?
2) serait-il possible de faire ceci non plus à partir d'un seul nom de fichier donné dans le formulaire "text", mais à partir d'une liste de noms dans un textarea ? Par exemple, j'entre (en fait je copie-colle à partir d'Excel) ceci :

wu6h1JH7
l7wn4p2b
LXN5zYyP
iGmTKXJu
9AAYQE6G
B_MJ6EUu
jgkGbxf3
bEgMRtpY
oMCbwUFT
lud0jak8
GzyFEx6m
pG87rE4o

et ça supprime les fichiers

wu6h1JH7.kml
l7wn4p2b.kml
LXN5zYyP.kml
etc. ...

Merci pour votre aide. Incidemment comment sécuriser un tel fichier de suppression ? Actuellement je l'efface entre deux opérations (peu fréquentes heureusement).

Re: Supprimer une liste de fichiers

Posté : 14 mars 2010, 14:50
par Jerems60
Salut,
c'est en effet possible de fusionner les deux scripts sur la même page, mais il n'y pas forcemment d'intérêt à cela. Généralement, il vaut mieux faire appel à des scripts qui se trouve dans des pages séparées. Cela facilite la relecture du code.
Mais si tu tiens vraiment à mettre les 2 sur la même page, tu vas devoir faire appel à la même page dans ton attribut action de la balise form.
Ensuite tu vas créer une condition pour savoir si tu dois afficher le formulaire de saisie ou bien la liste des fichiers supprimés si le formulaire a été saisi. Pour ça, tu dois te servir des fonctions isset() et empty() de php.
Pour mettre plusieurs fichiers à supprimer en temps, il existe la fonction explode() de php qui permet de créer un tableau à partir d'une chaîne. Ici on va dire qu'à chaque saut de ligne correspond un fichier à supprimer. Je te laisse un bout de code, car un exemple vaut mieux qu'un long discours.
<?php
	//zone à afficher si le formulaire a été saisi
	if(isset($_POST['avirer']) && !empty($_POST['avirer'])) { //isset s'assure que le champ a été soumis, et !empty que le champ n'est pas vide
	?>
	
	<h1>le résultat</h1>
	
	<?php	
		//On récupère la liste des fichiers à effacer
		$liste_avirer=explode("\n",$_POST['avirer']); //on créé un tableau contenant la liste des fichiers à effacer (le délimieur est le retour à la ligne ("\n") à remplacer par exemple par "," si on souhaite séparer les fichiers à supprimer par des virgules
		
		//on boucle les éléments du tableau
		foreach ($liste_avirer as $item) {
			$item=trim($item); // on vire les éventuels espaces avant ou à la fin du nom du fichier
			
			$nom_dossier=''; //mettre ici le chemin du dossier exemple 'mon_dossier/', on ne met rien si le script se trouve dans le même répertoire que ce script comme ici
			$nom_extension='.kml'; // nom de l'extension des fichiers à supprimer
			$nom_fichier_avirer=$nom_dossier.$item.$nom_extension;
			
			//on regarde si le fichier à supprimer existe bel et bien
			if(file_exists($nom_fichier_avirer)) {
				$resultat=unlink($nom_fichier_avirer);// si c'est le cas on supprime
				echo ($resultat)?'<b>'.$nom_fichier_avirer.'</b> a bien été supprimé <br />':'<b>'.$nom_fichier_avirer.'</b> n\'a pas pu être supprimé. Une erreur s\'est produite. <br />';
			} else {
				echo '<b>'.$nom_fichier_avirer.'</b> n\'a pas pu être supprimé. Le fichier n\'existe pas. <br />';;
			}
		}
		
	} else { // si le formulaire n'a pas été saisi, on l'affiche
	?>
	
	<h1>le formulaire</h1>
	
	<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
	<textarea name="avirer" value="" rows="10"></textarea>
	
	<input type="submit" value="Supprimer">
	</form>
	<?php
	}
	?>
Pour ce qui est de la sécurité, un script de ce genre qui serait en ligne sur internet et accessible à n'importe est fortement risqué (surtout si les fichiers sont nécessaires au bon fonctionnement d'une application) le mieux serait de mettre cette page dans un dossier protégé par un .htacces.

Ah j'oubliais, je ne sais pas ce qu'est cet attriubut "autocomplete" dans ta balise input mais ce n'est pas un attribut standard, donc mieux vaut le virer et utiliser du code javascript qui respecte les standards.

En espérant t'avoir aidé,

Jérémie

Re: Supprimer une liste de fichiers

Posté : 14 mars 2010, 17:55
par darjaa
Hé bien Jérémie, un IMMENSE MERCI pour ce programme qui marche à merveille et qui pourra sûrement en intéresser plus d'un. :D

Concernant le paramètre " autocomplete="off" " il empêche le réaffichage des précédentes saisies, ce qu'on appelle je crois l'autoremplissage. C'est bien de garder l'autoremplissage de son navigateur, car cela facilite bien des saisies, mais cela pose aussi des problèmes de sécurité et pour certains formulaires il vaut mieux imposer son interdiction aux navigateurs. Moi je l'utilisais dans mon script de suppression de fichier un par un pour éviter l'inconfort de ce réaffichage à chaque nouvelle saisie. Je l'utilise aussi dans mon blog au niveau des commentaires pour gêner les spammeurs (les utilisateurs ne le sont pas, car ils ne font pas dans la répétition eux !). Pour la petite histoire je me demandais comment s'y prenait ma banque pour éviter le réaffichage dans le formulaire de connexion et c'est comme ça que j'ai découvert ce paramètre dans le source. Standard ou pas, j'en sais rien, mais c'est bien utile quand il le faut et ça semble marcher pour tous les navigateurs. Peut-être un standard caché...

darjaa

Re: Supprimer une liste de fichiers

Posté : 10 nov. 2010, 22:57
par polo_03
Salut, je sais que ce tuto est ancien mais il m'intéresse a condition que l'on puisse supprimer tous types de dossier, et pas seulement des ".kml", ce qui ne me sert a rien :!:

J'ai donc essayé deux trois trucs mais comme je m'y attendait, sa a pas marché !!! :roll:
Et comme je connais très trèstrèstrès peu le php :oops: , un dee vous pourrait me transformer ce code pour qu'il puisse supprimer tout type de fichiers !!! :mrgreen:

MERCI D'AVANCE

Re: Supprimer une liste de fichiers

Posté : 10 nov. 2010, 23:09
par polo_03
Pfuu j'aurai mieux fait de chercher ... :?

Bon merci kan meme jviens de trouver le solution a mon pb