Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Hurtowy rename plików
Forum PHP.pl > Forum > Przedszkole
Five
Po 1,5 h googlowania i przeszukiwania forum zdecydowałem się założyć nowy temat.

  1. <?php
  2. function rename_images($w_dir) {
  3. $new = 1;
  4. $dir = opendir($w_dir);
  5. while ($file_name = readdir($dir)) {
  6.  if (($file_name != '.') && ($file_name != '..')) {
  7. while (file_exists($w_dir.$new.'.jpg')) {
  8.  $new++;
  9. }
  10. rename($w_dir.$file_name,$w_dir.$new.'.jpg');
  11.  }
  12. }
  13. closedir($dir);
  14. }
  15. ?>


Skrypt bierze wszystkie pliki z katalogu i zmienia im nazwy na kolejne liczby całkowite, począwszy od 1.

I wszystko byłoby OK, gdyby nie jedna rzecz (przykład): jeśli mam już pliki 1.jpg 2.jpg 3.jpg 4.jpg i wykonam tą funkcję, to nazwy plików zmieniają się na 5.jpg 6.jpg 7.jpg 8.jpg.

Przy zróżnicowanych nazwach liczbowych plików powstają luki, które chciałbym, aby funkcja - oczywiście w ramach jednego wykonania - zapełniła.
Niestety nie udało mi się - jak dotąd - znaleźć rozwiązania.

Byłbym ogromnie wdzięczny za pomoc - może jakiś pomysł co zmienić w tej funkcji?

...
Hmm tak tylko edytuję, żeby przypomnieć zapytanie winksmiley.jpg
myth
Stworzyłem coś takiego. snitch.gif
  1. <?php
  2.  
  3. /** 
  4. * @param $w_dir - folder z plikami
  5. * @param $type - rozszerzenie pliku np. '.jpg'
  6. */
  7. function rename_images($w_dir, $type) 
  8. {
  9. /** tablica z plikami z katalogu */
  10. $files = array();
  11.  
  12. /** tablica z nazwami nowych plików */
  13. $new_files = array();
  14.  
  15. $new = 1;
  16.  
  17. $dir = opendir($w_dir);
  18.  
  19. while ($file_name = readdir($dir)) 
  20. {
  21. if (($file_name != '.') && ($file_name != '..'))
  22. $files[] = str_replace($type,'',$file_name);
  23. }
  24.  
  25. /** ilość elementów tablicy z plikami z katalogu */
  26. $count_files = count($files);
  27.  
  28. for($i = 1; $i <= $count_files; $i++)
  29. $new_files[] = $i;
  30.  
  31. foreach($files as $file_name)
  32. {
  33. /** wyszukuje kolejną wolną nazwę */
  34. while(in_array($new, $files))
  35. $new++;
  36.  
  37. if(!in_array($file_name, $new_files))
  38. {
  39. echo 'Zamieniam <b>'.$file_name.$type.'</b> na <b>'. $new.$type.'</b><br />';
  40. rename($w_dir.$file_name.$type,$w_dir.$new.$type);
  41. $new++;
  42. }
  43. }
  44.  
  45. closedir($dir);
  46.  
  47. }
  48.  
  49. rename_images('img/', '.jpg');
  50. ?>
Five
Wielkie dzięki, dokładnie o to mi chodziło biggrin.gif

Człowieku, jesteś moim Bogiem biggrin.gif

Coś tam próbowałem pierwotnie wykombinować z tablicami, ale nijak nie mogłem wymyśleć jak to zrobić...

I jeszcze raz - WIELKIE dzięki biggrin.gif
lopik
Ooo Super!! smile.gif

Mi też się przyda winksmiley.jpg

PS. Do "Gotowych...." to dać smile.gif

THX
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.