Rename() qui me retourne "Is a Directory"

Rename() qui me retourne "Is a Directory" - PHP - Programmation

Marsh Posté le 04-09-2006 à 14:04:02    

Bonjour,
Je suis entrain d'écrire une petit script qui déplace des fichiers/répertoires, et je tombe sur une erreur assez particulière..
 
voila la portion de code responsable :  

Code :
  1. echo 'is readable '.is_readable($this->path).'<br/>';
  2. echo 'is writable '.is_writable($this->path).'<br/><br/>';
  3. echo 'is writable'.is_writable($this->inc->getPath().'uploads/').'<br/>';
  4. if (rename($this->path,$this->inc->getPath().'uploads/'.urlencode($this->nom)))
  5. //continue le traitement


 
Tous les is_readable() / is_writable() retournent true, et je me mange l'erreur suivante :  
rename(/tmp/test,/home/esox/projet/../uploads/directory) [function.rename]: Is a directory
 
Hors dans la doc il est dit que rename peut aussi bouger des repertoires .. Je comprend vraiment pas ...  
Merci de me flageller comme il se doit pour ce problème, qui doit être basé sur une faute débile comme tout.
 
Au revoir


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-09-2006 à 14:04:02   

Reply

Marsh Posté le 04-09-2006 à 14:11:52    

t'aurais pas fait un opendir sans closedir sur celui-ci des fois?

Reply

Marsh Posté le 04-09-2006 à 15:51:23    

Non, c'est la seule action que j'effectue sur un fichier/repertoire


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-09-2006 à 17:12:36    

c'est normal le .. dans /home/esox/projet/../uploads/directory ?

Reply

Marsh Posté le 04-09-2006 à 19:05:02    

Tout à fait


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-09-2006 à 00:58:41    

non mais là tu renomme pas, tu le déplaces...
 
essaie un exec(mv) si tu travailles en local


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 05-09-2006 à 08:31:55    

Exec ne sera pas activé étant donné que c'est sur un serveur mutualisé.
Mais je suis au courant que je le deplace, c'est bien mon intention d'ailleurs, et si je regarde la doc tout semble dire que c'est bien autorisé..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-09-2006 à 12:12:24    

c'est pas un problème de  
 
rename("/path/from/", "/path/to" )  
au lieu de  
rename("/path/from", "/path/to" )  


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 05-09-2006 à 12:13:42    

question con :
 
pourquoi tu utilises  
 /home/esox/projet/../uploads/directory
 
puisque tu donne le chemin absolu...
 
equivalent à : /home/esox/uploads/directory


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 06-09-2006 à 18:57:19    

C'est une raison "interne", j'ai une classe qui me fournis le path des differents fichiers, du coups je me retrouve parfois des .. dans le path ... Mais je doute que ça puisse etre grave non ?  
Pour l'histoire du path finissant ou non par / , j'ai tenté toutes les possibilitées mais rien n'a changé

Reply

Marsh Posté le 06-09-2006 à 18:57:19   

Reply

Marsh Posté le 06-09-2006 à 19:29:10    

je sais pas alors... je teste ça en local, ça fonctionne...
<?php
 
echo rename("b", "dest/c" ) ;
 
?>
avec les suffisament de droits bien sûr
 


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 07-09-2006 à 13:29:58    

Salut,
Avec le test que tu mets là, chez moi aussi ça marche.
J'ai pris mon rename et mis (avec les liens ecrits en dur) dans un script à part.  
Le problème est qu'au lieu de boujer le repertoire , il créé un fichier vide au point de destinaison, sans toucher à l'autre repertoire.
J'ai essayé de faire un unlink sur un des fichiers contenu dans le repertoire de depart et ça marche .. donc ça devrait pas etre un probleme de permissions (surtout que j'ai fait un chmod 0777 -R sur le repertoire d'arrivée et de depart)

Reply

Marsh Posté le 07-09-2006 à 14:42:56    

tu le dis toi-même : au lieu de "bouger" le répertoire. Je doute que rename soit la bonne commande...  
 
ou alors c'est uniquement pour les repertoires vides ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 07-09-2006 à 14:47:13    

En effet si le répertoire n'est pas vide, ça peut poser des problèmes je pense.
Essaie peut être de passer par un copy puis un unlink.

Reply

Marsh Posté le 07-09-2006 à 15:38:12    

Ok donc du coups faut que je me tape un script qui fasse du cory/unlink recursif? .... Bordel mais c'est de mieu en mieu ce langage...  
Je vais faire encore quelques tests et si ca marche pas je ferai comme ça (je crois avoir vu un script qui fait ça dans les comments de la doc ... A voir )

Reply

Marsh Posté le 07-09-2006 à 16:31:41    

ouais [:jagstang]
 
apparement t'as une fct toute faite ici (3ème)
 
http://ch2.php.net/manual/en/function.copy.php


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed