Page 1 sur 2

Suppression dossier php

Posté : 01 nov. 2011, 08:57
par Solar13
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

Re: Suppression dossier php

Posté : 01 nov. 2011, 09:06
par xTG
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.

Re: Suppression dossier php

Posté : 01 nov. 2011, 09:16
par Solar13
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 ?

Re: Suppression dossier php

Posté : 01 nov. 2011, 09:45
par xTG
/images/test/ indique un dossier images à la racine du serveur. ;)
Enlèves le slash s'il est dans le répertoire courant.

Re: Suppression dossier php

Posté : 01 nov. 2011, 09:54
par Solar13
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 ?

Re: Suppression dossier php

Posté : 01 nov. 2011, 10:03
par Ryle
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 ;))

Re: Suppression dossier php

Posté : 01 nov. 2011, 10:14
par Solar13
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.

Re: Suppression dossier php

Posté : 01 nov. 2011, 11:18
par moogli
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';
}
  ?>
@+

Re: Suppression dossier php

Posté : 01 nov. 2011, 12:40
par Solar13
Heu... C'est dans le php.ini c'est ça ?

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

Re: Suppression dossier php

Posté : 01 nov. 2011, 12:41
par moogli

Re: Suppression dossier php

Posté : 01 nov. 2011, 12:43
par Solar13
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 )

Re: Suppression dossier php

Posté : 01 nov. 2011, 12:54
par moogli
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 !

@+

Re: Suppression dossier php

Posté : 01 nov. 2011, 18:59
par Solar13
Re-bonjour,

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

Re: Suppression dossier php

Posté : 01 nov. 2011, 19:18
par moogli
reste a deboguer pour savoir ce que tu envoie à ta fonction, qui "fonctionne" :mrgreen:

Re: Suppression dossier php

Posté : 01 nov. 2011, 19:27
par Solar13
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 :(