PHP Rename un dossier

Résolu/Fermé
ClR - Modifié par ClR le 22/11/2010 à 16:21
 ClR - 4 déc. 2012 à 11:04
Bonjour,

Encore et toujours besoin de votre aide...

J'essaie, après avoir créé un dossier dans un répertoire, de le renommer.
Pas de problème pour créer ce dossier. Impossible en revanche de le renommer...

Voici mon bout de code à problèmes.


$id=$_POST['id'];
$new_doss=$_POST['new_doss'];
$new_rep="dossier1/dossier2/$new_doss";

$sql_doss='SELECT * from table WHERE id="'.$id.'"';
$req_doss = mysql_query($sql_doss) or die('Erreur SQL !<br />'.$sql_doss.'<br/>'.mysql_error());
while ($data_doss = mysql_fetch_array($req_doss))
{
$old_doss=$data_doss['doss'];
$old_rep="dossier1/dossier2/$old_doss";
}
if (!is_dir("$new_rep")) rename($old_rep, $new_rep);


Si quelqu'un avait une idée... Merci !

Je précise en passant qu'il n'y a ni problème de base de données, ni pb de formulaire, je récupère bien ce que je souhaite. C'est ma requête qui ne marche pas.
Et j'ai une erreur du type : "Warning: rename(dossier1/dossier2/old_name,dossier1/dossier2/new_name) [function.rename]: No such file or directory in..."
A voir également:

10 réponses

coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
22 nov. 2010 à 18:18
si tu changes ton rename pour :
rename("UploadedFiles/Cuisine et saveurs", "UploadedFiles/Cuisine sans saveur");
ou :
rename("./UploadedFiles/Cuisine et saveurs", "./UploadedFiles/Cuisine sans saveur");

à moins qu'il y ait un dossier admin dans le dossier admin ?
2
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
22 nov. 2010 à 16:18
Donc tu es sûr que le chemin vers les dossiers $old_rep et $new_rep existe ?
Parce que dans ton warning, il semble que old_name soit situé dans dossier1/dossier2/, alors que new_name est situé dans admin/dossier2/. Peut-être que le dossier admin n'existe pas ? Je ne sais pas si c'était voulu de nous afficher ça...

Fais un if() supplémentaire pour t'assurer que le dossier de destination (dans lequel tu veux mettre ton $new_name) existe.

Veux-tu utiliser le rename() pour renommer, ou pour déplacer ?

Et es-tu certain(e) d'avoir les permissions pour renommer le dossier ? Si tu es sur un hébergeur distant, il peut être nécessair de faire au moins un chmod() au préalable.

Reviens-nous là-dessus...
0
Bonjour et merci de ta réponse rapide.

Effectivement, petite erreur avec le "admin" corrigée. J'ai renommé ces dossiers pour plus de clarté dans ce bout de code, et un dossier est passé à l'as...

Mon dossier de destination existe bien.

Je veux renommer un dossier existant, pas le déplacer.

le chmod est à 0777.

voilou pour les précisions... et merci de l'intérêt
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
22 nov. 2010 à 17:05
Ce que je vois de ton code me semble correct. D'après moi il existe deux possibilités :
1. Erreur de syntaxe que je ne peux pas voir vu que tu nous donnes des noms modifiés (honnêtement je doute que ce soit ça) ;
2. Plus probable : problèmes de permissions avec ton hébergeur. Le chmod() ne change pas toujours efficacement les permissions, sinon ce serait trop facile d'enfreindre la sécurité d'un site. Tu pourrais aller dans le file manager de ton site et voir les permissions qui y sont, et tester si chmod() change vraiment quelque chose.

Laisse-nous savoir comment ça va tout ça ! ;)
0

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

Posez votre question
là je travaille en local avec Wamp... et je ne vois pas où trouver le file manager... je suis une bille excusez moi...
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
22 nov. 2010 à 17:44
Ok si tu travailles en local il n'y a pas de file manager, j'avais seulement assumé que tu bossais sur un hébergeur...

Si j'en crois ton erreur, ça ne peut être qu'une erreur de chemin.
Est-ce qu'il y a des caractères accentués dans tes noms de dossier ?
Es-tu sûr(e) de ne pas avoir de double-slash ("//") dans tes chemins ? Des fois avec les répétitions...
Utilises-tu des chemins relatifs ou absolus ?

En fait, est-ce que ça te dérangerait de me copier le message d'erreur exact ? Peut-être que ça me donnerait un insight que je n'aurais pas autrement... Parce que sinon, j'avoue humblement que je commence à manquer d'idées... :S

Mais pour le moment, NEVER GIVE UP, NEVER SURRENDER ! ;)
0
merci de tes réponses tout dabord.

Ensuite voilà l'erreur:

Warning: rename(admin/UploadedFiles/Cuisine et saveurs,admin/UploadedFiles/Cuisine sans saveur) [function.rename]: No such file or directory in C:\wamp\www\cuisine\admin\utilisateurs.php on line 346

et j'aimerais être aussi optimiste que toi mais j'avoue, en toute bienséance, que ça commence à me courrir sur le haricot cette histoire... et mon dossier qui me regarde avec son vieux nom...
0
Allez j'en rajoute un peu... :)

j'ai essayé la suppression de dossier lorsque ceux ci ne sont pas vides grace à un petit bout de code trouvé sur la grande toile.

$id=$_POST['id'];
$doss=$_POST['doss'];
	
//supression du dossier
$chemin="admin/UploadedFiles/$doss"; // <- Nom_du_dossier_a_supprimer 
							
$dir = opendir($chemin); 
while($file = readdir($dir)) 
{ 
unlink($chemin . "/" . $file); 
} 
closedir($dir); 
rmdir($chemin);


Bon, ça ne marche pas non plus. j'ai essayé de remplacer aussi le $file par mon $doss mais rien n'y fait...

je mets ici les erreurs retournées pour ce second problème, au cas où celà aiderait à solutionner le 1er...

Warning: opendir(admin/UploadedFiles/Confidentiel) [function.opendir]: failed to open dir: No error in C:\wamp\www\cuisine\admin\utilisateurs.php on line 361

Warning: readdir(): supplied argument is not a valid Directory resource in C:\wamp\www\cuisine\admin\utilisateurs.php on line 362

Warning: closedir(): supplied argument is not a valid Directory resource in C:\wamp\www\cuisine\admin\utilisateurs.php on line 366

Warning: rmdir(admin/UploadedFiles/Confidentiel) [function.rmdir]: No such file or directory in C:\wamp\www\cuisine\admin\utilisateurs.php on line 367
0
Cooooooooooooooooooooooooooooool

Bingo bravo oui c'est ça ! Génial... Top.
1ère solution op. D'ailleurs la seconde marche tout aussi bien.
Impec, me voilà refaite et ravie.
Bon je vais chercher un peu de ce côté là pour la suppression...

Merci coeus pour tes conseils, ton aide et le temps passé.
Excellente soirée et merci encore pour l'épine... mon pti dossier fais moins le malin maintenant... qu'il se méfie, je pourrait bien le supprimer un de ces 4 matins...
0
YvonSita Messages postés 3 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 3 décembre 2012
3 déc. 2012 à 12:54
Bjr CIR, tu as posé un problème que j'aie actuellement; tu as mis le bout de code qui ne marchait pas et tu as eu les réponses. Mais je crois que ce serait plus intéressant aussi si tu mettais la réponse afin que d'autres voient aussi la solution que tu as reçue sur ce forum.
0
"1ère solution op. D'ailleurs la seconde marche tout aussi bien. "...
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
22 nov. 2010 à 18:32
Hahaha excellent ! Content d'avoir pu t'aider ! :)
N'oublie pas de mettre le sujet à Résolu, si ce n'est pas déjà fait ;)
Bonne soirée à toi aussi !
0
J'aimerais beaucoup, mais en bon boulet, je n'y parviens pas...
0
coeus Messages postés 3019 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
22 nov. 2010 à 18:45
Juste en-dessous du titre "PHP Rename un dossier", tu as un lien "Marquer comme résolu" ;)
0
Putain jsui trop miro.
Mes excuses et encore merci
0
YvonSita Messages postés 3 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 3 décembre 2012
Modifié par YvonSita le 3/12/2012 à 13:48
Bonjour, j'ai un véritable problème pour renommer un dossier physiquement. Logiquement, çà marche, avec UPDATE, mais pas physiquement. Mon problème se situe dans la partie où j'ai mis mon code en gras, question de mieux situer ma difficulté. Pouvez-vous m'aider?

Voici mon code : j'ai une table appelée "dossier" dans laquelle il y a tous les champs que vous voyez là ci-dessous.


<?php

$id = $_POST['id'];
$actif = $_POST['actif'];
$sys_ins_date = $_POST['sys_ins_date'];
$sys_upd_date = $_POST['sys_upd_date'];
$sys_del_date = $_POST['sys_del_date'];
$sys_ins_user = $_POST['sys_ins_user'];
$sys_upd_user = $_POST['sys_upd_user'];
$numero = $_POST['numero'];
$libelle = $_POST['libelle'];
$new_libelle = $_POST['new_libelle'];
$id_agt = $_POST['id_agt'];
$nomfull_agt = $_POST['nomfull_agt'];
$id_entite = $_POST['id_entite'];
$code_org = $_POST['code_org'];
$code_div = $_POST['code_div'];
$service = $_POST['service'];
$niv_conf = $_POST['niv_conf'];
$priorite = $_POST['priorite'];
$id_agt_resp = $_POST['id_agt_resp'];
$nomfull_agt_resp = $_POST['nomfull_agt_resp'];
$code_org_resp = $_POST['code_org_resp'];
$code_div_resp = $_POST['code_div_resp'];
$service_resp = $_POST['service_resp'];
$id_agt_dest = $_POST['id_agt_dest'];
$nomfull_agt_dest = $_POST['nomfull_agt_dest'];
$code_org_dest = $_POST['code_org_dest'];
$code_div_dest = $_POST['code_div_dest'];
$service_dest = $_POST['service_dest'];
$type = $_POST['type'];
$categorie = $_POST['categorie'];
$genre = $_POST['genre'];
$resume = $_POST['resume'];
$traitement = $_POST['traitement'];
$recommandation = $_POST['recommandation'];
$dtdebut = $_POST['dtdebut'];
$dtstatut = $_POST['dtstatut'];
$dtmaj = $_POST['dtmaj'];

include('lisaApp/connexion.php');

$url = "archives/dossiers/";
$doc = $libelle;
$doc_modif = $url.$doc;
$doc2 = $new_libelle;
$doc_modif2 = $url.$doc2;

$sql = mysql_query('SELECT id,libelle FROM dossier WHERE id = "'.$id.'" AND libelle = "'.$libelle.'" ');
while($data = mysql_fetch_array($sql))
{
$old_libelle = $data['libelle'];
$doc_modif = $url.$doc;
}
if (!is_dir($doc_modif2)) rename($doc_modif, $doc_modif2);


$req = mysql_query('UPDATE dossier SET actif = "'.$actif.'", sys_ins_date = "'.$sys_ins_date.'", sys_upd_date = "'.$sys_upd_date.'", sys_del_date = "'.$sys_del_date.'", sys_ins_user = "'.$sys_ins_user.'", sys_upd_user = "'.$sys_upd_user.'", numero = "'.$numero.'", libelle = "'.$libelle.'", new_libelle = "'.$new_libelle.'", id_agt = "'.$id_agt.'", nomfull_agt = "'.$nomfull_agt.'", id_entite = "'.$id_entite.'", code_org = "'.$code_org.'", code_div = "'.$code_div.'", service = "'.$service.'", niv_conf = "'.$niv_conf.'", priorite = "'.$priorite.'", id_agt_resp = "'.$id_agt_resp.'", nomfull_agt_resp = "'.$nomfull_agt_resp.'", code_org_resp = "'.$code_org_resp.'", code_div_resp = "'.$code_div_resp.'", service_resp = "'.$service_resp.'", id_agt_dest = "'.$id_agt_dest.'", nomfull_agt_dest = "'.$nomfull_agt_dest.'", code_org_dest = "'.$code_org_dest.'", code_div_dest = "'.$code_div_dest.'", service_dest = "'.$service_dest.'", type = "'.$type.'", categorie = "'.$categorie.'", genre = "'.$genre.'", resume = "'.$resume.'", traitement = "'.$traitement.'", recommandation = "'.$recommandation.'", dtdebut = "'.$dtdebut.'", dtstatut = "'.$dtstatut.'", dtmaj = "'.$dtmaj.'" WHERE id = "'.$id.'" ');

if($req)
{
?>
<script language="javascript">
alert('Dossier modifié avec succès');
window.close();
if(window.opener && !window.opener.closed)
{
window.opener.location.reload();
}
</script>
<?php
}
else
{
?>
<script language="javascript">
alert('La modification a échoué');
window.close();
</script>
<?php
}
?>
0
Pour ceux que ça intéresse, comment supprimer un dossier et tous les fichiers qu'il contient:

//supression du dossier  
$doss="nom_du_dossier" 
$chemin="Repertoire1/$doss"; // <- Nom_et_chemin_depuis_cette_page_du_dossier_a_supprimer   
         
$dir = opendir($chemin);   
while($file = readdir($dir))   
{   
@unlink($chemin ."/". $file);   
}   
closedir($dir);   
rmdir($chemin);


Petite question subsidiaire dans la foulée :
j'avais une erreur du type :
"Warning: unlink(Repertoire1/Confidentiel/.) [function.unlink]: Permission denied in C:\wamp\www\cuisine\admin\utilisateurs.php on line 364

Warning: unlink(Repertoire1/Confidentiel/..) [function.unlink]: Permission denied in C:\wamp\www\cuisine\admin\utilisateurs.php on line 364"

jusqu'à ce que je mette l'@ devant le unlink... ensuite plus d'erreur et tout se fait correctement pourtant
à quoi ça sert en fait ce @? quelqu'un a une idée?
0