Bonjour à toutes et à tous
Je sais ce sujet à surement déja été abordé mais il me semble raisonnablement avoir tout essayé depuis deux jours je suis hébergé chez ovh.
voici le code
$dossier_traite = "../doc/".$data4['tatoo'];
$repertoire = opendir($dossier_traite); // On définit le répertoire dans lequel on souhaite travailler.
while (false !== ($fichier = readdir($repertoire))) // On lit chaque fichier du répertoire dans la boucle.
{
$chemin = $dossier_traite."/".$fichier; // On définit le chemin du fichier à effacer.
// Si le fichier n'est pas un répertoire…
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier))
{
unlink($chemin); // On efface.
}
}
closedir($repertoire);
Hé bien cela ne suprime pas ce qu'il y a dans
$data4['tatoo']
c'est dingue ...
description de l'aborescence :
../doc/$data4['tatoo']/dossier1
../doc/$data4['tatoo']/ dossier2
../doc/$data4['tatoo']/dossier3/image.png
../doc/$data4['tatoo']/dossier3/image2.png
../doc/$data4['tatoo']/dossier4
et il faudrais tout supprimer pour ne garde que ../doc
Tu dois partir sur quelques chose de recursif (j'ai adapté ton code pour que cela marche et que je puisse faire les tests en local, tu n'as plus grand chose à modifier) :
<?php
function recursive_unlink($dossier_traite)
{
foreach(glob($dossier_traite . '/*') as $file)
{
is_dir($file) ? recursive_unlink($file) : unlink($file);
}
rmdir($dossier_traite);
}
$data4['tatoo'] = 'sous-doc';
$dossier_traite = "doc/".$data4['tatoo'];
recursive_unlink($dossier_traite);
Fais juste attention au contenu de $data4['tatoo']
, s'il vient de l'utilisateur ! Si jamais il peut utiliser des caractères comme ..
, tu risques d'avoir des surprises ;-)
Salut,
C'est parce que tu ne précise nul par le fichier à effacer dans ta boucle.
Tu fais seulement un unlink($chemin);
, or il te faut préciser le fichier à supprimer:
$filepath = $chemin . $fichier;
chmod($filepath, 0755);
unlink($filepath);
voici ce que j'ai mantenant :
$dossier_traite = "../doc/".$data4['tatoo'];
chmod($dossier_traite, 0755);
$repertoire = opendir($dossier_traite); // On définit le répertoire dans lequel on souhaite travailler.
while (false !== ($fichier = readdir($repertoire))) // On lit chaque fichier du répertoire dans la boucle.
{
$chemin = $dossier_traite."/".$fichier; // On définit le chemin du fichier à effacer.
// Si le fichier n'est pas un répertoire…
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier))
{
unlink($chemin); // On efface.
}
}
closedir($repertoire);
unlink($dossier_traite);
le dossier et ce qu'il contient sont toujours là ?!
je viens de constater que les sous dossier et les fichier restent à 705 peut être qu'il faudrais essayer de tout mettre en 777
Et comme ça ?
$dossier_traite = "../doc/".$data4['tatoo'];
chmod($dossier_traite, 0755);
$repertoire = opendir($dossier_traite); // On définit le répertoire dans lequel on souhaite travailler.
while (false !== ($fichier = readdir($repertoire))) { // On lit chaque fichier du répertoire dans la boucle.
// Si le fichier n'est pas un répertoire…
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier)) {
$chemin = $dossier_traite."/".$fichier; // On définit le chemin du fichier à effacer.
chmod($chemin, 0755);
unlink($chemin); // On efface.
}
}
closedir($repertoire);
unlink($dossier_traite);
l'arborescence est toujours là
je remarque ceci :
../doc/$data4['tatoo']/dossier1 -> est en 755
../doc/$data4['tatoo']/ dossier2 -> est en 755
../doc/$data4['tatoo']/dossier3/image.png -> est en 604
../doc/$data4['tatoo']/dossier3/image2.png -> est en 604
../doc/$data4['tatoo']/dossier4 -> est en 755
je regarde pour pouvoir tout mettre en 777 on sais jamais
Ah mais y'a des dossiers dans le dossier principal ? Il te faut récupérer la liste des dossiers et fichiers en amont, pour ensuite faire des opérations dessus alors.
oui il y a des dossiers et dans certains de ces dossiers il y a des fichiers
Je viens de changer les permissions à la main pour aller plus vite et l'arborescence est encore là
Donc il doit y avoir un soucis quelque part dans ta boucle. Es-tu sur que le chemin vers tes fichiers est bon ?
sûr et certain car j'ai testé en mettant un echo coucou et il c'est affiché.
Je pense à un truc tu sais il faudrais peux être mette le path complet mince je me souviens qu'il existe un truc sur ça je regarde
$path = $_SERVER['DOCUMENT_ROOT'] . '/folder/file.jpg';
je teste ça aussi sais t'on jamais
j'ai testé avec ça mais il y a une sorte de chargement très long bizarre donc ç ane doit pas être la solution
$dossier_traite = $_SERVER['DOCUMENT_ROOT'] . "../doc/".$data4['tatoo'];
chmod($dossier_traite, 0777);
$repertoire = opendir($dossier_traite); // On définit le répertoire dans lequel on souhaite travailler.
while (false !== ($fichier = readdir($repertoire))) { // On lit chaque fichier du répertoire dans la boucle.
// Si le fichier n'est pas un répertoire…
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier)) {
$chemin = $dossier_traite."/".$fichier; // On définit le chemin du fichier à effacer.
chmod($chemin, 0777);
unlink($chemin); // On efface.
}
}
closedir($repertoire);
unlink($dossier_traite);
L'arborescence est toujours là c'est une histoire de fou ce truc. Oui $data4['tatoo'] est simplement le nom d'un dossier nommé par le serveur, j'aurais pu le nommer dossier1 par exemple. De ce coté là pas de soucis je pense.
@utilisateur: Je pense qu'il y a un soucis au niveau du chemin. Est-ce que le log d'erreurs PHP t'apprend qqch ?
Commence par faire un unlink sur un fichier en particulier pour éliminer les pb de droits.
l'utilisateur de php c'est www-data donc Other (a moins que tes fichiers aient comme propriétaire www-data)
il faut le droit en écriture pour 'Other' (c-a-d le 3em chiffre) en gros le 3em chiffre doit se terminer par 7 ou 6
bon j'ai épuré le code de la page en question pour ne garder que l'essentiel + j'ai créé une arborescence :
../test/doc1
../test/doc2
../test/doc3
../test/doc4
../test/test.txt
et puis j'ai lancé ce code
<?php
$chemin = "../doc/test/";
$fichier = "test.txt";
$dossier_traite = $chemin.$fichier;
chmod($dossier_traite, 0777);
/*
$repertoire = opendir($dossier_traite); // On définit le répertoire dans lequel on souhaite travailler.
while (false !== ($fichier = readdir($repertoire))) { // On lit chaque fichier du répertoire dans la boucle.
// Si le fichier n'est pas un répertoire…
if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier)) {
$chemin = $dossier_traite."/".$fichier; // On définit le chemin du fichier à effacer.
chmod($chemin, 0777);
unlink($chemin); // On efface.
}
}
closedir($repertoire);
unlink($dossier_traite);
*/
unlink($dossier_traite);
?>
<html>
<head>
<title></title>
</head>
<body >
test test
</body>
</html>
après le refraichissement de cette page le fichier test.txt à été supprimé
../test/doc1
../test/doc2
../test/doc3
../test/doc4
Sauf que l'arborescence dans le répertoire "test" est comprosé de dossiers et de fichiers donc qu'est ce que je dois mettre dans cette ligne
$dossier_traite = $chemin.$fichier;
puisque je veux supprimer des dossiers et des fichiers, j'indique juste le chemin ?