Supprimer un fichier d'une arborescence

Résolu/Fermé
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 21 juil. 2019 à 07:07
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 - 24 juil. 2019 à 13:48
Bonjour, J'ai actuellement une fonction qui me retourne une arborescence de dossiers et me liste mes fichiers, ce qui fonctionne très bien. Je souhaiterai pouvoir supprimer de façon sélective des fichiers si besoin. J'ai créé un lien avec une image pour sélectionner chaque image. Malheureusement je ne sais pas mettre en place la fonction "unlink" pour la suppression, en ayant regardé beaucoup de tutos à ce sujet. Pouvez-vous m'aider s'ils vous plait. Je vous remercie.
function explore_dir_scan_html($dir, $dirpub, $niv = 0, $id = 0) {
	$html = null;
	$html_dirs = null;
	$html_fils = null;
	if($niv == 0) { $html .= '	<ul>'."\n"; }
	if ($handle = opendir($dir)) {
		$dirFiles = array();
		while (false !== ($entry = readdir($handle))) {
			$dirFiles[] = $entry;
			$id++;
		}
		sort($dirFiles, SORT_NATURAL | SORT_FLAG_CASE);
		foreach($dirFiles as $entry) {
			if(is_dir($dir.'/'.$entry)) { // dossier
				if($entry != '..' && $entry != '.') {
					$html_dirs .= str_repeat("\t",$niv + 1).'<li class="dir" id="div_'.$id.'">'.$entry."\n";
					$html_dirs .= str_repeat("\t",$niv + 2).'<ul class="sub_dir" id="sub_'.$id.'">'."\n";
					$html_dirs .= explore_dir_scan_html($dir.'/'.$entry, $dirpub.'/'.$entry, $niv+1, $id);
				}				
			} else { // fichier
				$html_fils .= str_repeat("\t",$niv + 2).'<li class="fil" id="fil_'.$id.'"><a href="'.$entry.'"><img src="img/supp.png " alt="supp"/></a><a href="'.$dirpub.'/'.$entry.'" target="_blank">'.$entry.'</a></li>'."\n";
			}
			if(is_dir($dir.'/'.$entry)) { 
				if($entry != '..' && $entry != '.') {
					$html_dirs .= str_repeat("\t",$niv + 2).'</ul>'."\n";
					$html_dirs .= str_repeat("\t",$niv + 1).'</li>'."\n";
				}
			}
		}
		closedir($handle);
		$html .= $html_dirs; // dossiers
		$html .= $html_fils; // fichiers
	}    
	if($niv == 0) { $html .= '	</ul>'."\n"; }
	return $html;
};
echo '<nav id="explorateur-dossier">';
echo explore_dir_scan_html('/home/site/www/upload/albulle/data/photos/','http://www.monsite.fr/upload/albulle/data/photos/');
echo '</nav>';
A voir également:

10 réponses

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
21 juil. 2019 à 09:28
bonjour, quel est l'obstacle à la mise en place la fonction "unlink" pour la suppression?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
21 juil. 2019 à 18:03
Bonjour, En fait je ne sais pas ou la positionner pour avoir une condition par exemple.
Etes vous sur de vouloir supprimer le fichier azerty.jpg ? oui - non
Merci pour votre aide.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
Modifié le 21 juil. 2019 à 18:41
as-tu décidé comment le site allait interagir avec l'utilisateur pour cette suppression de fichier?
une méthode simple (à programmer) serait d'envoyer à l'utilisateur une page avec des liens de suppression pour chacun des fichiers.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
21 juil. 2019 à 19:40
j'ai oublié de préciser que seul l'administrateur allait pouvoir supprimer une photo au même titre qu'il insert les photos pour la galerie avec un formulaire qui lui est dédié.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
21 juil. 2019 à 20:21
tu n'as pas répondu à ma question en #3.
une question supplémentaire: comment détermines-tu qu'il s'agit de l'administrateur?
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
21 juil. 2019 à 20:40
Pour l'administrateur du site il existe un sous domaine avec un fichier htaccess et passwd ou il gére la totalité du site, membres galerie etc...
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
21 juil. 2019 à 20:52
tu n'as pas répondu à ma question en #3.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
21 juil. 2019 à 21:06
c'est cette question "as-tu décidé comment le site allait interagir avec l'utilisateur pour cette suppression de fichier?"
je ne saisi pas trop ce que tu me demande car je ne vois pas la relation entre le site avec l'utilisateur et la suppression d'une photo.
Lorsque l'admin supprime une photo elle sera tout simplement supprimer de la galerie du site.
Je ne sais pas si cela réponds à ta question sinon peux tu me l'a reformuler, merci.
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
21 juil. 2019 à 21:38
Bonjour,
L'utilisateur... c'est celui qui UTILISE ... peut importe qu'il ait un rôle d'administrateur ou non.
Par exemple.. toi tu es un UTILISATEUR du forum commentcamarche.net ..... moi aussi (bien que modérateur..)
Bref...
Pour reformuler la question d' Yg_be ...
Comment, la personne qui va devoir supprimer les photos, va t-elle procéder ?
Car, comme il te l'a proposé, le plus simple serait de mettre un bouton ( un lien....) à chaque Image pour que lorsqu'il cliquera dessus ( il = l'utilisateur = une personne qui va utiliser la page = l'administrateur ) puisse demander la suppression du fichier.
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
22 juil. 2019 à 11:19
Bonjour
Merci pour vos explications très explicite. Par contre j'ai créé un lien pour la suppression sélective de photos avec le chemin absolu mais cela me retourne une erreur. Pourtant le chemin est correct. Pouvez-vous me dire ce que vous en pensez, merci.
Warning: unlink(/home/site/www/upload/albulle/data/photos/585532_0.jpg): No such file or directory in...

$supp = ('/home/site/www/upload/albulle/data/photos');
$html_fils .= str_repeat("\t",$niv + 2).'<li class="sup" id="fil_'.$id.'"><a href="'.unlink($supp.'/'.$entry).'"><img src="img/supp.png " alt="supp"/></a><a href="'.$dirpub.'/'.$entry.'" target="_blank">'.$entry.'</a></li>'."\n";
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
22 juil. 2019 à 11:33
si je comprends bien, tu as donc choisi d'offrir à l'utilisateur un lien qui lui permettra, en cliquant ce lien, de déclencher la suppression du fichier.
pour réaliser cela, je suggère de faire ainsi:
- créer une nouvelle page php, disons supprimerfichier.php, dans laquelle et vas verifier que l'utilisateur est bien l'administrateur, qui va récupérer le nom du fichier, et qui va supprimer le fichier.
- dans ta page qui envoie la liste des fichiers, envoyer aussi des liens vers la nouvelle page, incluant le nom relatif du fichier à supprimer, par exemple:
supprimerfichier.php/?fic=585532_0.jpg
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
22 juil. 2019 à 12:26
Bonjour, en fait je m'explique mal dans ma tête c'est clair mais mes explications ne le sont pas. Il n'y a pas besoin de vérifier si l'utilisateur est l'administrateur.
J'ai créé un sous domaine exemple.
www.gestion.monsite.fr
Une personne se connecte par le biais des fichiers htaccess et passwd. et là il y a le formulaire pour insérer les photos et beaucoup d'autre chose concernant la gestion du site.
Je souhaite simplement créé un lien supprimer à ma liste de photo et en cliquant dessus cela me supprime la photo.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
Modifié le 22 juil. 2019 à 12:44
le lien "supprimer" ne peut pas supprimer la photo de la manière dont tu l'imagines. le lien doit faire appel à une page php qui va supprimer la photo. le lien sera donc, par exemple:
supprimerfichier.php/?fic=585532_0.jpg


supprimerfichier.php est une nouvelle page, à créer, bien protégée dans le sous domaine réservé aux administrateurs, et, dans cette page, le code PHP va récupérer le nom du fichier, et va supprimer le fichier.
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
22 juil. 2019 à 12:31
Bonjour,

Le message d'erreur

Warning: unlink(/home/site/www/upload/albulle/data/photos/585532_0.jpg): No such file or directory in...

Indique qu'il ne trouve pas le fichier à l'emplacement indiqué.
Soit il n'a pas le bon nom, soit le chemin n'est pas le bon...

Pour que l'on puisse t'aider il faudrait que l'on puisse voir le code PHP qui fait le unlink...
Il faudrait également que tu nous confirmes le chemin EXACT de tes fichiers (celui de l'exemple )...
Attention à bien respecter les Majuscules/Miunuscules...

0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
23 juil. 2019 à 16:08
Bonjour,
Là je suis vraiment perdu.
Je vais essayer de vous détaillé très précisément. J'ai une page avec mon formulaire d'insertion de photo qui marche bien. Sur la même page une fonction qui me permet d'avoir l'arborescence de ma galerie qui fonctionne également bien.
Dans cette fonction il y a un lien qui me permet d'ouvrir chaque photo sur ce lien j'ai rajouté une image qui me renvoie sur une autre page "supp_photo.php" afin de supprimer chaque photo de façon sélective et c'est là que je suis perdu à propos su script de suppression. Je vous remercie.
Insertion galerie
$action 	= 'new';
$a 			= !empty($_GET['a']) ? $_GET['a'] : NULL;
$submit 	= !empty($_POST['submit']) ? $_POST['submit'] : NULL;
$haction 	= !empty($_POST['haction']) ? $_POST['haction'] : NULL;

$idfoto 	= !empty($_REQUEST['idfoto']) ? $_REQUEST['idfoto'] : NULL;
$datefoto 	= !empty($_POST['datefoto']) ? dw2m($_POST['datefoto']) : '';
$lieufoto 	= !empty($_POST['lieufoto']) ? strtoupper($_POST['lieufoto']) : '';
$files 		= !empty($_FILES['namefoto']) ? $_FILES['namefoto'] : '';
$fileName 	= !empty($files['name']) ? $files['name'] : '';
$fileTemp 	= !empty($files['tmp_name']) ? $files['tmp_name'] : '';

switch($a) {
	case 'new': $action = 'new';  break;
	case 'ls' : $action = 'list'; break;
	default   : $action = 'new';  break; 
}

if($submit) {

	switch($haction) {
		case 'new':

			$dossier = '/home/site/www/upload/albulle/data/photos/'.date("Y", strtotime($datefoto)).'/'.dFR($datefoto).'/'.$lieufoto.'/';

			for ($i = 0; $i < count($fileName); $i++) {
				// Si un fichier a été sélectionné
				if ($fileName[$i] != NULL) {
					//Récupération de l'extension du fichier
					$extension_upload = strtolower(  substr(  strrchr($fileName[$i], '.')  ,1));
					//Liste des extensions autorisées
					$extension_valide = array('jpg', 'gif', 'png', 'jepg');
					if (in_array($extension_upload,$extension_valide)) {
						$fichier_Upload = $fileTemp[$i];
						$random = rand(537317, 985120);
						$fichier_New = "$dossier/" . $random . "_$i" . "." . $extension_upload;
						//On autorise uniquement les fichiers image de type gif, jpeg et png
						$type_autorises = array('image/jpg', 'image/gif', 'image/png', 'image/jpeg');
						//On récupérer le type MIME du fichier en utilisant la fonction image_type_to_mime_type()
						$fichier_type = image_type_to_mime_type(exif_imagetype($fichier_Upload));
						//On vérifie que le type MIME appartient aux fichiers autorisés
						if(in_array($fichier_type, $type_autorises)) {
							if(!is_dir('/home/site/www/upload/albulle/data/photos/'.date("Y", strtotime($datefoto)).'/'.dFR($datefoto).'/'.$lieufoto.'/')) {
								mkdir('/home/site/www/upload/albulle/data/photos/'.date("Y", strtotime($datefoto)).'/'.dFR($datefoto).'/'.$lieufoto.'/', 0755, true);
							}
							if (move_uploaded_file($fichier_Upload, $fichier_New)) {
								resize_img($fichier_New,$max_size = 1280,$qualite = 100,$type = 'auto');
								$typenr = "enregistré";
								$success = "<span class='success'>Saisie photos du - ".dFR("$datefoto")." - a été $typenr.</span>";	
							}
						} else {
							$erreur = "<span class='erreur'>Seul les fichiers images sont autorisés !</span>";
						}
					} else {
						$erreur = "<span class='erreur'>L'extension du fichier n'est pas autorisée !</span>";
					}
				} else {
					$erreur = "<span class='erreur'>Veuillez sélectionner un fichier !</span>";
				}
			}
		break;
	}
}

switch($action) {
	case 'new':   
		$title      = "Saisie Photos";
		$btsub      = "Enregistrer";
		$datefoto  	= "";
		$lieufoto  	= "";
		$files  	= "";
		break;
	
	case 'list': 
		$title  	= "Supprimer des Photos";
		break;
}
?>

fonction arborescence galerie
<script>
// OUVRIR / FERMER les DOSSIERS : AVEC jQuery
$(document).ready(function() {
	$('#explorateur-dossier').on('click', '.dir', function(event) {
		$(this).find('ul').first().slideToggle();
		event.stopPropagation(); // important
	});
});
</script>

<style>
#explorateur-dossier ul { margin:0; padding:0; list-style:none outside none; }
#explorateur-dossier .dir { position:relative; padding-left:20px; cursor:pointer; border:solid 1px #c0bbba; }
#explorateur-dossier .dir:hover { background-color:#FFFF80; }
#explorateur-dossier .sub_dir { position:relative; padding-left:20px; cursor:pointer; display:none; border:solid 0px #FF0000;; }
#explorateur-dossier .fil { position:relative; padding-left:20px; }
#explorateur-dossier .dir:before { position:absolute; content:''; display:block; width:16px; height:16px; top:2px; left:0; background:url(img/folder.png) no-repeat; }
</style>

<?php
function explore_dir_scan_html($dir, $dirpub, $niv = 0, $id = 0) {
	$html = null;
	$html_dirs = null;
	$html_fils = null;
	if($niv == 0) { $html .= '	<ul>'."\n"; }
	if ($handle = opendir($dir)) {
		$dirFiles = array();
		while (false !== ($entry = readdir($handle))) {
			$dirFiles[] = $entry;
			$id++;
		}
		sort($dirFiles, SORT_NATURAL | SORT_FLAG_CASE);
		foreach($dirFiles as $entry) {
			if(is_dir($dir.'/'.$entry)) { // dossier
				if($entry != '..' && $entry != '.') {
					$html_dirs .= str_repeat("\t",$niv + 1).'<li class="dir" id="div_'.$id.'">'.$entry."\n";
					$html_dirs .= str_repeat("\t",$niv + 2).'<ul class="sub_dir" id="sub_'.$id.'">'."\n";
					$html_dirs .= explore_dir_scan_html($dir.'/'.$entry, $dirpub.'/'.$entry, $niv+1, $id);
				}				
			} else { // fichier
				$html_fils .= str_repeat("\t",$niv + 2).'<li class="fil" id="fil_'.$id.'"><a href="supp_photo.php?'.$entry.'"><img src="img/supp.png " alt="supp"/></a><a href="'.$dirpub.'/'.$entry.'" target="_blank">'.$entry.'</a></li>'."\n";
			}
			if(is_dir($dir.'/'.$entry)) { 
				if($entry != '..' && $entry != '.') {
					$html_dirs .= str_repeat("\t",$niv + 2).'</ul>'."\n";
					$html_dirs .= str_repeat("\t",$niv + 1).'</li>'."\n";
				}
			}
		}
		closedir($handle);
		$html .= $html_dirs; // dossiers
		$html .= $html_fils; // fichiers
	}    
	if($niv == 0) { $html .= '	</ul>'."\n"; }
	return $html;
};
?>

appel à la fonction et mon formulaire d'insertion
if($action == 'list') {
	echo '<h1>'.$title.'</h1>';

	echo '<nav id="explorateur-dossier">';
	echo explore_dir_scan_html('/home/site/www/upload/albulle/data/photos/','http://www.monsite.fr/upload/albulle/data/photos/');
	echo '</nav>';

	echo dmaj("sais_photo.php");
	echo '</div></body></html>';
	exit;
}

	echo '<form method="post" name="foto" id="foto" action="'.$_SERVER["PHP_SELF"].'" onsubmit="return verif()" enctype="multipart/form-data">';
	echo '<h1>'.$title.'</h1>';
	
	echo '<table>';
	echo '<tr>';
	echo '<td class="libel">Date</td>';
	echo '<td class="data"><input type="text" name="datefoto" id="Saisfoto" size="25" value="'.$datefoto.'" class="oblig" /> jj /mm /aaaa</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Ajouter Photos</td>';
	echo '<td class="data"><input type="file" name="namefoto[]" size="25" value="'.$fileName.'" accept="image/png, image/jpeg, image/gif" multiple="" class="oblig" /> ( max. 20 )</td>';
	echo '</tr><tr>';
	echo '<td class="libel">Lieu</td>';
	echo '<td class="data"><input type="text" name="lieufoto" size="25" value="'.$lieufoto.'" class="oblig" /></td>';
	echo '</tr>';
	echo '<td>';
		echo '<input type="hidden" name="haction" value="'.$action.'" />';
		echo '<input type="hidden" name="idfoto" value="'.$idfoto.'" />';
	echo '</td>';
	echo '<td class="data"><input type="submit" name="submit" value="'.$btsub.'" /></td>';
	echo '</tr>';
	echo '</table>';

	echo '</form>';
	echo '<p>NB: La saisie dans les zones à fond jaune pâle est obligatoire.</p>';
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
23 juil. 2019 à 16:43
Nous montrer tout ton code n'a pas spécialement d'intéret...

Il nous faut :
- Le code du fichier supp_photo.php
- Un exemple de lien ( tu peux nous montrer le code d'un lien issue du code source GENERE de la page lorsque tu l'affiches ( pour avoir le code source en question, tu fais un CTRL + u une fois la page affichée dans ton navigateur ))
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
23 juil. 2019 à 16:43
quel est le contenu de la page supp_photo.php?
si tu es absolument certain que seul un administrateur de confiance peut appeler cette page, le lien pourrait être:
supp_photo.php?fichier='.$dir.'/'.$entry
suggestion pour supp_photo.php:
$fichier = !empty($_GET['fichier']) ? $_GET['fichier'] : NULL;
if ($fichier) {
   if (unlink($fichier)) {
       echo "fichier supprimé: " . $fichier;
   }
   else {
       echo "fichier non supprimé: " . $fichier;
   }
else {
   echo "pas de fichier spécifié";
}
0
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 4 649
23 juil. 2019 à 16:53
Pour l'url... si il y a des "/"' cela peut générer des soucis.
Pensez à faire des https://www.php.net/manual/fr/function.urlencode.php

En ce qui concerne la page de suppression...
Une vérification que le fichier existe avant de le supprimer est une bonne pratique (cela te permet de mettre un message indiquant qu'il n'a pas trouvé le fichier le cas échéant )
Penser également à vérifier le droit en écriture sur le dossier en question.

Toutes ces vérifications sont facilement faisables en php et la documentation se trouve simplement...
file_exists
is_writtable
...
0
LaChaux78 Messages postés 564 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 31 mars 2023 32
24 juil. 2019 à 13:48
Bonjour,
Je vous remercie très sincèrement. Tout fonctionne à merveille.
Cordialement.
0