Suppression dossier php

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 08:57

Bonjour à vous,

J'essaye désespérément de supprimer un dossier au moyen d'un script que j'ai trouvé sur le net.

Mon soucis c'est que rien ne se passe et je ne comprend pas pourquoi :(
Il ne me semble pas faire d'erreur sur mon $dossier.

if(isset($_GET['id'])){ 
 
$id = $_GET['id'];

$sql = "SELECT dossier
        FROM test
		WHERE ID_table = '$id'";
 
//exécution de la requête:
$requete = mysql_query($sql) or die( mysql_error());

$result = mysql_fetch_array ($requete);

$resultat = $result['dossier'];

$dossier = "$resultat/images";

function clearDir($dossier) {
	$ouverture=@opendir($dossier);
	if (!$ouverture) return;
	while($fichier=readdir($ouverture)) {
		if ($fichier == '.' || $fichier == '..') continue;
			if (is_dir($dossier."/".$fichier)) {
				$r=clearDir($dossier."/".$fichier);
				if (!$r) return false;
			}
			else {
				$r=@unlink($dossier."/".$fichier);
				if (!$r) return false;
			}
	}
closedir($ouverture);
$r=@rmdir($dossier);
if (!$r) return false;
	return true;
}
Je déclenche le script en cliquant sur un bouton qui renvoie l'ID ( première partie )

Le champ ['dossier'] que j'essaye de faire passer dans $dossier est censé contenir dans ma table le début de l'url, et donc suivi, par le dossier à supprimer.

Au final, je veux supprimer /images lol

ViPHP
xTG
ViPHP | 7331 Messages

01 nov. 2011, 09:06

Enlèves les @ et tu verras s'il y a des erreurs.
Ce n'est pas une bonne solution de cacher les erreurs, il vaut mieux les traiter.

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 09:16

Merci à vous,

Pas de message d'erreur.

J'ai fait un echo de mon dossier, il me renvoie bien le chemin:

/images/test/

Test étant le nom du dossier que j'essaye de supprimer ?

Un problème de "/" ou dans le script lui même ?

ViPHP
xTG
ViPHP | 7331 Messages

01 nov. 2011, 09:45

/images/test/ indique un dossier images à la racine du serveur. ;)
Enlèves le slash s'il est dans le répertoire courant.

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 09:54

Merci pour votre réponse,

Non c'est la même chose, mais variable pointe pourtant bien au bon endroit.

J'ai oublié de précisé quelque chose d'important, à l’intérieur de ce dossier, il y a deux autres sous-dossiers avec du contenu.
Peut être que ce script ne peut pas tout virer ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

01 nov. 2011, 10:03

La fonction que tu utilises est récursive, elle va parcourir le dossier que tu lui donnes en paramètre, supprimer tous les fichiers qu'il contient et recommencer pour le même process pour chaque dossier qu'elle va trouver (ouvrir le dossier, supprimer les fichiers et traiter les dossiers, ...)

Il faut donc t'assurer que le chemin vers le dossier à supprimer est bien correct : soit un chemin relatif depuis le script qui l'appel, soit un chemin absolu depuis la racine du disque... (et effectivement, virer les "@" pour pouvoir travailler avec toutes les infos dont tu as besoin ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 10:14

J'ai fait en relatif et absolu.

Le script se trouve au niveau inférieur de image.

Ma variable me renvoie bien:

../images/dossier

Mais rien ne se passe à l’intérieur du dossier, pas de message, rien.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2011, 11:18

vérifie ton niveau d'erreur (il devrait être a E_ALL|E_STRICT pour php5) s'il est inférieur il est possible de ne pas voir les messages d'erreurs.

perso je viens de tester ton code et il fonctionne
<?php
// en commentaire parce que j'ai pas ta table, pas d'id dans l'url etc etc :)
// ceci n'étant pas utile pour le fonctionnement globale de la suppression !
//if(isset($_GET['id'])){ 
  /*
$id = $_GET['id'];

$sql = "SELECT dossier
         FROM test
                 WHERE ID_table = '$id'";
  
//exécution de la requête:
$requete = mysql_query($sql) or die( mysql_error());

$result = mysql_fetch_array ($requete);

$resultat = $result['dossier'];

$dossier = "$resultat/images";
*/

function clearDir($dossier) {
	$ouverture=opendir($dossier);
	if (!$ouverture) return;
	while($fichier=readdir($ouverture)) {
		if ($fichier == '.' || $fichier == '..') continue;
			if (is_dir($dossier."/".$fichier)) {
				$r=clearDir($dossier."/".$fichier);
				if (!$r) return false;
			}
			else {
					$r = unlink($dossier."/".$fichier);
					if ($r === false) return false;
			 }
	}
	closedir($ouverture);
	$r = rmdir($dossier);
	if ($r === false ) return false;
			 return true;
}
// dompdf étant un répertoire à la racine du script !
if (clearDir('dompdf')) {
	echo 'c bon';
}
else {
	echo 'pas bon';
}
  ?>
@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 12:40

Heu... C'est dans le php.ini c'est ça ?

C'est quelle ligne que je dois vérifier ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2011, 12:41

Il en faut peu pour être heureux ......

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 12:43

Oui j'en viens en fait, mais c'est quelle ligne qui me concerne, que je dois vérifier ?

Et je dois la changer par quoi ?

( Désolé je ne suis pas très à l'aise avec le php.ini, je ne veux pas faire de bêtises )

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2011, 12:54

tu a lu http://www.php.net/manual/fr/configurat ... .modes.php ?

tu n'a pas compris comment utiliser la fonction http://www.php.net/manual/fr/function.e ... orting.php ?

tout est dans la 1ère page fournie !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 18:59

Re-bonjour,

Je viens de vérifier et je suis bien à error_reporting = E_ALL sur mon php.ini.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

01 nov. 2011, 19:18

reste a deboguer pour savoir ce que tu envoie à ta fonction, qui "fonctionne" :mrgreen:
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 42 Messages

01 nov. 2011, 19:27

Cela est possible de ne pas marcher sur une variable ?

Il faut peut être absolument un chemin absolu ?

Je capte pas, y'a rien de spécial sur ce script, je ne comprend pas pourquoi ça fonctionne pas :(