Bonjour à tous,
Débuttant en php, c'est ma 1ère question sur le forum... J'espère ne pas faire d'impairs...
J'ai déjà effectué des recherches dans les tutos et le forum mais rien trouvé qui réponde entièrement à mon problème...
Voici ce que je cherche à faire :
Sur mon serveur (Linux chez OVH), il y a 1 dossier principal (uploads/) dans lequel des utilisateurs créent leur propre dossier et y déposent leur photos en FTP. Souvent les noms des fichiers ne sont pas très parlants, mais ce sont tous des .JPG...
J'ai donc démarré un bout de code PHP pour afficher la liste des dossiers présents dans le dossier principal (ça c'est bon). J'ai mis un lien sur chaque dossier pour qu'on clique dessus pour aller voir les fichiers contenus (ça c'est bon aussi !
).
Jusque là, tout va bien, j'arrive bien jusqu'à la page du listing des fichiers images présents et affichant pour chacun le nom, la taille, la vignette, une case à cocher + en bas de page un champ texte et un bouton valider --> c'est ici que je veux mettre le nouveau nom des fichiers.
Et c'est là que je commence à bloquer...
Je voudrais pouvoir sélectionner avec les checkbox les fichiers que je souhaite renommer, indiquer dans le champs le nouveau nom à utiliser, et renommer ces fichiers en cliquant sur le bouton valider avec le nouveau nom + de l'incrémentiel.
Exemple : j'ai 10 fichiers. J'en sélectionne 5. Je définie le nouveau nom : "NEWNAME". Je valide, et je me retrouve avec NEWNAME001.JPG, NEWNAME002.JPG, ... NEWNAME005.JPG !
Les problèmes :
- le formulaire poste bien les infos, mais il doit y avoir un souci dans la boucle car je ne reçois que le nom du 1er fichier au lieu d'un array avec les noms des fichiers sélectionnés
- il doit y avoir aussi un problème de droit sur les fichiers : j'ai tenté un chmod sur les fichiers avant mais ça marche pô...
Ci-dessous le code utilisé pour l'affichage des fichiers et la navigation dans les dossiers (page "test_dir.php") :
***********************************
Code PHP :
<?php
if (isset($_GET['dos'])) {
if($_GET['dos'] !== '' OR $_GET['dos'] !== 'uploads') {
$rep = "uploads/".$_GET['dos']."/";
} else {
$rep = "uploads/";
}
} else {
$rep = "uploads/";
}
$dir = opendir($rep);
function dd($date) {
return date("d/m/Y H:i:s",$date);
}
if ($rep !== "uploads/") {
echo "<form id='form1' name='form1' method='post' action='renomme.php'><input type='hidden' name='url' value='".$rep."' />";
}
while ($f = readdir($dir)) {
if(is_dir($rep.$f)) {
if ($f == '.') {
echo "<br>";
}
if ($f == '..' && $rep !== "uploads/") {
echo "<a href='test_dir.php'>Retour</a>";
echo "<br><br>";
} else {
echo "<br>";
}
if ($f !== '.' && $f !== '..') {
echo "<img src='dossier.png' width='21' height='17' /> <a href='test_dir.php?dos=".$f."'>".$f."</a><br>";
echo "Création : ".dd(filectime($rep.$f));
echo "<br>";
}
} else {
if(is_file($rep.$f)) {
echo "Nom : ".$f." - <a href='zoomPhot.php?id=".$rep.$f."' target='_blank''><img src='".$rep.$f."' style='max-height:50px; max-width:50px;' /></a>";
echo "<br>";
echo "Taille : ".filesize($rep.$f)." octets";
echo "<br>";
echo "<input type='checkbox' name='renom' value='".$f."' />";
echo "<br><br>";
}
}
}
if ($rep !== "uploads/") {
echo "<input type='text' name='newName' /><br><input type='submit' name='validName' value='Renommer' /></form>";
}
closedir($dir);
?>
***********************************
Et là, le code de ma page renomme.php qui est censée récupérer les infos du formulaire précédent et renommer les fichiers (code récupéré sur codes-sources
http://www.phpcs.com/codes/RENOMMAGE-MASSIF-FICHIERS_12999.aspx qui renomme tous les fichiers d'un dossier) :
***********************************
Code PHP :
<?php
$dir = $_POST['url'];
$ext = "JPG";
$basename = $_POST['newName'];
$dates = array();
$dir_handle = opendir($dir);
while($entry = readdir($dir_handle)){
$path = $dir.'/'.$entry;
if(is_file($path) && strtolower(substr($entry, strrpos($entry, '.') + 1) == strtolower($ext)))
$dates[$path] = filemtime($path);
}
closedir($dir_handle);
asort($dates);
chmod ($path, 0777);
$i = 0;
while(list($path, $date) = each($dates)){
$i++;
$new_name = $basename.substr(str_repeat('0', strlen(count($dates))).$i, -strlen(count($dates))).'.'.$ext;
if(@rename($path, $new_name)){
echo 'Renommage de <b>', basename($path), '</b> en <b>', $new_name, '</b> effectué avec succès !<br />';
} else {
echo 'Renommage de <b>', basename($path), '</b> en <b>', $new_name, '</b> impossible.<br />';
}
}
?>
***********************************
Je pense que j'ai tout mis...
Si quelqu'un a un peu de temps pour regarder ces bouts de code et m'orienter sur comment je peux les corriger et adapter à mes besoins, ce serait super TOP !!!
Merci par avance à celui ou celle qui voudra bien m'aider,
Bien à tous
Pierre