8795 sujets

Développement web côté serveur, CMS

Modérateur
Bonjour,

Je souhaiterais modifier le nom de fichiers (ce sont des émoticônes) contenus dans un dossier (le dossier s'appelle 'smilies'). Le fichier contenant le fragment de code suivant se trouve dans le même dossier que le dossier 'smilies'.
$smilies = glob('smilies/*.png');
	        foreach ($smilies as $smiley) {
	                $smiley_name = str_replace ('smilies/', '', $smiley);
	                rename ('smilies/'.$smiley_name, 'smilies/'.$smiley_name.'-old');
	        }

Je fais ça en local. Le renommage n'est pas effectué.
Je ne sais pas trop comment trouver l'erreur, le code me paraît être bon. Ce n'est pas la première fois que je récupère des fichiers dans un dossier, par contre c'est la première fois que j'utilise la fonction "rename". Je compte d'ailleurs également utiliser la fonction "copy"...

Merci d'avance. Smiley smile

PS : j'avais essayé en utilisant des chemins absolus, ça n'a pas fonctionné non plus...
Modifié par jojaba (28 Dec 2010 - 17:29)
je dirais problème de dossier (droit, ou chemin) car ta fonction rename est correct , tu dis que tu es "dans le même dossier que le dossier 'smilies'".
donc peut être :
rename ($smiley_name, $smiley_name.'-old');
ou
rename ('/'.$smiley_name, '/'.$smiley_name.'-old');

tu peux aussi tester un print_r($smilies); pour voir si tu as bien ce que tu attends mais a priori oui.
Modifié par Su4p (28 Dec 2010 - 15:22)
Modérateur
J'opterais plutôt pour chemin. Depuis hier j'ai pu réfléchir à la chose et me suis rendu compte qu'en fait le fichier dans lequel j'ai placé ce script était inséré (fonction include()) dans un autre fichier qui se trouve au même endroit (donc ça devrait fonctionner dans ce cas) mais qui lui est ajouté dans une page qui se trouve à un tout autre endroit. Ceci dit, j'avais essayé avec des chemins absolus, mais (encore) je ne suis pas sûr que glob() fonctionne avec des chemins absolus... En tout cas, j'ai essayé de faire afficher le tableau et rien ne s'affiche (donc tableau vide, donc pas de fichiers trouvés). J epousse mes investigations et vous tiens au courant...
Merci pour cette confirmation (j'espère qu'ne local, il n'y aura pas de problème de droits, parce que je n'ai aucune idée de comment régler ce genre de problème en local).
Modérateur
Me revoici avec de bonnes nouvelles !
L'objectif final étant de copier les émoticônes vers un autre dossier, voici ce que j'ai mis en place, les explications suivront...
if (!file_exists('../../'.$images_folder.'smilies')) {// Première utilisation, le dossier "smilies" n'existe pas dans le dossier des images
        mkdir('../../'.$images_folder.'smilies');
        $smilies = glob('../../addons/editor.ezhtml/smilies/*.png');
	        foreach ($smilies as $smiley) {
	                $smiley_name = str_replace('../../addons/editor.ezhtml/smilies/', '', $smiley);
	                copy($smiley, '../../'.$images_folder.'smilies/'.$smiley_name);
	        }
} else if (filemtime('../../'.$images_folder.'smilies') < filemtime('../../addons/editor.ezhtml/smilies')) { // Mise à jour des émoticônes lors du'ne nouvelle version d'ezhtml
        $smilies = glob('../../addons/editor.ezhtml/smilies/*.png');
	        foreach ($smilies as $smiley) {
	                $smiley_name = str_replace('../../addons/editor.ezhtml/smilies/', '', $smiley);
	                copy($smiley, '../../'.$images_folder.'smilies/'.$smiley_name);
	        }
}

Explications
Dans un premier temps, je vérifie si le dossier "smilies" existe dans le dossier de destination.
S'il n'existe pas, je le créé et je copie les images vers ce nouveau dossier (j'ai pu constater qu'il n'était pas possible de copier vers un dossier qui n'existait pas...).
Si le dossier "smilies" existe, je vérifie s'il est plus vieux que le dossier source. Si c'est le cas, j'envoie les émoticônes du dossier cible vers le doccier cible (j'espère qu'elles seront écrasées, j'ai pas pu tester...)
Smiley smile