Image suivante

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Image suivante

par Albat90 » 10 mars 2009, 10:23

Salut,

J'ai juste changer quelques erreurs dans ta fonction car elle ne fonctionnait pas.
En effet, j'ai constaté que celle ci pourrait être beaucoup plus optimisée.
J'ai essayer de 'améliorer à partir de ton code, je suis sur que tu pourrais encore la raccourcir et mieux l'optimiser. :)
<?php
//fonction pour renommer les photos
function renommer_photo($dir) {
	if ($handle = opendir($dir)) {
    	while (($file = readdir($handle)) != false) {
		$chemin_fichier = $dir.'1.jpeg';

			if (!file_exists($chemin_fichier)){
			$cpt = 0;
 				if ($handle = opendir($dir)) {
					while (($file = readdir($handle)) !== false) {
						if($file=='.') continue;
						if($file=='..')continue;
					$cpt++; // on incrémente le compteur
					$extension = '.jpeg';
					rename($dir . $file,$dir. $cpt. $extension);
 					}
				}
				closedir($handle);
			}
		}
	}
} 
?>
En effet, elle contient beaucoup de condition que l'on pourrais sans doute contourner en s'y prenant autrement.


Albat90 ;)

par mars77 » 09 mars 2009, 22:22

Voilà j'y suis arrivé. Je vous remercie beaucoup pour votre aide.

Ma fonction une fois terminée.

Code : Tout sélectionner

//fonction pour renommer les photos function renommer_photo($dir) { if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false) { $chemin_fichier = $dir.'1.jpeg'; if (file_exists($chemin_fichier)) { } else { $cpt = 0; if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false) { if($file=='.'){ continue; } if($file=='..'){ continue; } $cpt++; // on incrémente le compteur $extension = '.jpeg'; ($dir . $file,$dir. $cpt. $extension); } } closedir($handle); } } } }
cela peux aider une autre personne.

par Ryle » 09 mars 2009, 18:10

Alors en fait, c'est parce que dans un dossier se trouvent deux répertoires cachés qui sont respectivement "." et ".." (le premier faisant référence au dossier courrant, le second au dossier parent)

Ces deux dossiers sont effectivement à "passer" dans ta boucle (avec un if() et l'instruction "continue"), car il ne sont pas à renommer :)

par mars77 » 09 mars 2009, 17:35

Merci pour votre aide à tous les 2.

J'ai essayé de faire ma fonction qui renomme mes photos.

Code : Tout sélectionner

<?php //fonction pour renommer les photos function renommer_photo($dir) { $cpt = 0; if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false) { $cpt++; // on incrémente le compteur $extension = '.jpeg'; echo $dir; rename($dir . $file, $dir . $cpt . $extension); } } closedir($handle); } ?>
Pour exécuter ma fonction .

Code : Tout sélectionner

<?php renommer_photo('grand/'); ?>
ça fonctionne , mais j'ai encore un petit souci. Après avoir exécuté ma fonction, ma première photo est renommée 3.jpeg au lieu de 1.jpeg et j'ai les messages d'erreur suivant:


Warning: rename(grand/.,grand/1.jpeg) [function.rename]: Permission denied in E:\wamp\www\Parapente\prive\teste\index.php on line 20

Warning: rename(grand/..,grand/2.jpeg) [function.rename]: Permission denied in E:\wamp\www\Parapente\prive\teste\index.php on line 20


j'arrive pas à savoir de quoi ça vient.

Merci pour votre aide

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Ryle » 09 mars 2009, 15:44

erf, j'avais pas vu ta réponse :)

Pis ma réponse, elle est peut être sur un plateau, mais je n'y ai déposé que les ingrédients, la recette c'est toujours à lui de se la fader ;)

par Albat90 » 09 mars 2009, 15:40

ah bah ça, je veux le mettre sur la piste et tu lui donne la réponse sur un plateau :P
Rahhh ces modérateurs, ils n'ont pas de temps à perdre :D

Albat90 ;)

par Ryle » 09 mars 2009, 15:36

Le plus simple pour incrémenter une valeur, c'est d'utiliser un compteur :
function renommer_photo($dir) { 
   $cpt = 0;
   if ($handle = opendir($dir)) { 
      while (($file = readdir($handle)) !== false) { 
         $cpt++; // on incrémente le compteur
         rename($file, ...$cpt...); 
      } 
   } 
   closedir($handle); 
} 
Maintenant, quelques subtilitées :
- conserver l'extension. Parce que tel quel, le script transforme "maphoto.jpg" en "1" ... et c'est pas ce qu'on veut. Il faut donc repérer l'extension dans le nom de fichier original (à coup de strpos(), de substr() ou d'autre fonction de manipulation de chaine) et l'ajouter
- les zéros qui précèdent. Si tu veux ajouter des "0" devant le nom de ton fichier, tu peux utiliser la fonction str_pad() qui fait ça très bien :)
- les chemins. Parce php est très bête. T'as beau lui demander d'ouvrir un répertoire et d'en lire le contenu, dans l'instruction suivante, il n'est pas foutu de se souvenir de ce qu'il vient de faire et il faut donc lui préciser où se trouve le fichier que tu veux renommer, et vers où le renommer en lui ré-indiquant le nom du dossier :)
function renommer_photo($dir) { 
   $cpt = 0;
   if ($handle = opendir($dir)) { 
      while (($file = readdir($handle)) !== false) { 
         $cpt++; // on incrémente le compteur
         $extension = .....;
         rename($dir . $file, $dir . str_pad($cpt, ...) . $extension); 
      } 
   } 
   closedir($handle); 
} 

par Albat90 » 09 mars 2009, 15:33

Salut,

Je vais essayer de te mettre sur la piste ;)

Lis ce code et essaye de le comprendre :
<?php
$i = 0;
for($i == 1; $i < 11; $i++){
echo $i.'<br />';
echo str_pad($i, 3, "0", STR_PAD_LEFT).'<br />';
$img = str_pad($i, 3, "0", STR_PAD_LEFT).'.jpg';
echo $img.'<br />';
}
?>
Résultat :

0
000
000.jpg
1
001
001.jpg
2
002
002.jpg
3
003
003.jpg
4
004
004.jpg
5
005
005.jpg
6
006
006.jpg
7
007
007.jpg
8
008
008.jpg
9
009
009.jpg
10
010
010.jpg

Tu vois la procédure à suivre? ;)

Albat90 ;)

par mars77 » 09 mars 2009, 14:48

J'essaie depuis un bon petit moment de renommer mes photos avec une fonction.

Code : Tout sélectionner

function renommer_photo($dir) { if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false) { rename($file, ???????????); } } closedir($handle); }
je ne sais pas comment m'y prendre pour que le format après avoir renommer soit en 001.jpg et faire la boucle à chaque il rajoute 1 au nom du fichier.

Merci a celui qui pourra m'expliquer

par Ryle » 09 mars 2009, 11:36

D'après ce que tu nous montre, tu as une fonction qui te permet de parcourir toutes les images de ton dossier pour en générer des miniatures.... tu peux facilement faire de même en utilisant la fonction rename() que t'a indiqué SpintroniK pour renommer ces différents fichiers comme bon te semble :)

Renommer des photos

par mars77 » 09 mars 2009, 09:19

Hello à tous,

Je vais essayer d'être un peu plus claire.

Dans un dossier, j'ai des photos qui ont un nom de fichier DSC000034,DSC000035,DSC000036.

Ce que j'aimerai faire, c'est une fonction pour renommer les photos 001,002,003 ect.

Je ne maitrise pas trop ce genre de fonction.

Merci pour votre aide

par SpintroniK » 09 mars 2009, 00:19

Je ne comprends pas très bien ce que tu veux faire...
Mais pour renommer un fichier, il y a la fonction rename : http://fr3.php.net/manual/en/function.rename.php

par mars77 » 08 mars 2009, 22:14

Merci pour l'info.

Maintenant je voudrai renommer mes photos 1,2,3,4,5 et ainsi de suite dans le dossier.

Voilà je code que j'utilise pour parcourir mon dossier.

Code : Tout sélectionner

// Parcours le répertoire courant et tout ses sous-répertoires récursivement. function liste_repertoire($dir) { if ($handle = opendir($dir)) { while (($file = readdir($handle)) !== false) { $chemin_fichier = $dir.'/'.$file; if (is_dir($chemin_fichier)) { if (!in_array($file, $GLOBALS['tabl_exclus'])) { liste_repertoire($dir.'/'.$file); } } else { if (est_image($chemin_fichier)) { $chemin_miniature = $dir.'/miniature/'.$file; if (!file_exists($chemin_miniature)) { genere_miniature($dir, $chemin_fichier, $chemin_miniature); } ajoute_lien($chemin_fichier, $chemin_miniature, $file); } } } closedir($handle); } }
Mon problème c'est que je ne sais pas comment faire pour renommer mes photos dans cette fonction.

Merci pour votre aide

par Ryle » 08 mars 2009, 21:54

Oui, c'est possible :)

Qu'importe que tes éléments proviennent d'une base de données, d'un fichier ou d'un dossier... Une fois que ceux-ci ont été lus avec php, tu en fais ce que tu veux ;)

Image suivante

par mars77 » 08 mars 2009, 21:51

Bonjour à tous,

J'ai créé une petite galerie photo pour mon site. quand je clique sur une miniature la photo s'affiche en grand.

J'aimerai maintenant mettre un lien ou un bouton pour afficher l'image suivante ou précédente.Mes photos sont dans un dossier et elles ne sont pas enregistrée dans une table.

Est ce que c'est possible de créer des boutons suivant ou précédent en recherchant dans un dossier ?????

Merci pour votre aide.